<?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>62180</bug_id>
          
          <creation_ts>2011-06-06 19:52:24 -0700</creation_ts>
          <short_desc>nrwt: fix http, websocket server startup, shutdown</short_desc>
          <delta_ts>2011-06-22 11:05:03 -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>DUPLICATE</resolution>
          <dup_id>62829</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62256</dependson>
          <blocked>59993</blocked>
    
    <blocked>62297</blocked>
    
    <blocked>62615</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>416244</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-06 19:52:24 -0700</bug_when>
    <thetext>nrwt: fix http, websocket server startup, shutdown</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416246</commentid>
    <comment_count>1</comment_count>
      <attachid>96185</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-06 19:54:53 -0700</bug_when>
    <thetext>Created attachment 96185
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417007</commentid>
    <comment_count>2</comment_count>
      <attachid>96352</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 18:55:45 -0700</bug_when>
    <thetext>Created attachment 96352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417027</commentid>
    <comment_count>3</comment_count>
      <attachid>96359</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-07 19:32:54 -0700</bug_when>
    <thetext>Created attachment 96359
ready for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418985</commentid>
    <comment_count>4</comment_count>
      <attachid>96359</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-10 15:32:03 -0700</bug_when>
    <thetext>Comment on attachment 96359
ready for review

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:48
&gt; +    mappings = {}

It doesn&apos;t look like this dict should be shared by all instances that don&apos;t override it (e.g., it would be easy for a subclass to accidentally insert a value into this global dict).  I would just make it a member variable to make it more obvious that sub classes should be providing their own instance of it.

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:66
&gt; +        except OSError, e:
&gt; +            _log.warning(&apos;Failed to remove old %s log files&apos; % self.name)

Should we just move this try/except into remove_log_files()?  It seems a bit weird that remove_stale_logs() needs to know what type of errors it can raise.

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:75
&gt; +        _log.debug(&quot;%s started. Testing ports&quot; % self.name)
&gt; +        server_started = self._wait_for_action(self._is_server_running_on_all_ports)

It looks like we used to retry for a few seconds for the python server in case it was slow to start.  Should we do something similar here?

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:90
&gt; +        elif self.pid_file and self._filesystem.exists(self.pid_file):
&gt; +            pid = int(self._filesystem.read_text_file(self.pid_file))

What cases would this be true?  Do we need to have a similar check in _is_server_running_on_all_ports()?

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:107
&gt; +    def prepare_config(self):
&gt; +        pass

Should these interface methods be protected?

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:144
&gt; +            s = socket.socket()

Nit: s -&gt; test_socket or something

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:147
&gt; +                s.connect((&apos;localhost&apos;, port))

This isn&apos;t quite the same check right?  The old code would make sure the server understood HTTP.  Maybe that&apos;s OK?

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:160
&gt; +            s = socket.socket()

Nit: s-&gt; test_socket or something</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419012</commentid>
    <comment_count>5</comment_count>
      <attachid>96359</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 15:55:16 -0700</bug_when>
    <thetext>Comment on attachment 96359
ready for review

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

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:48
&gt;&gt; +    mappings = {}
&gt; 
&gt; It doesn&apos;t look like this dict should be shared by all instances that don&apos;t override it (e.g., it would be easy for a subclass to accidentally insert a value into this global dict).  I would just make it a member variable to make it more obvious that sub classes should be providing their own instance of it.

OK.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:66
&gt;&gt; +            _log.warning(&apos;Failed to remove old %s log files&apos; % self.name)
&gt; 
&gt; Should we just move this try/except into remove_log_files()?  It seems a bit weird that remove_stale_logs() needs to know what type of errors it can raise.

I understand the weirdness. I didn&apos;t want to repeat the code and I wanted to ensure the catch was done consistently, so this seem the better tradeoff. I suppose I could push the try/catch into the method and attempt to make it clear that the method should trap access denied and other such errors. Do you think that would be better (after I&apos;ve explained the rationale).

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:75
&gt;&gt; +        server_started = self._wait_for_action(self._is_server_running_on_all_ports)
&gt; 
&gt; It looks like we used to retry for a few seconds for the python server in case it was slow to start.  Should we do something similar here?

That&apos;s what _wait_for_action() does. I am removing the duplicate/different implementation in the python server code so that they all use the same consistent logic.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:90
&gt;&gt; +            pid = int(self._filesystem.read_text_file(self.pid_file))
&gt; 
&gt; What cases would this be true?  Do we need to have a similar check in _is_server_running_on_all_ports()?

This will eventually be true when this is being called by new-run-webkit-httpd. pid files aren&apos;t really useful as of this patch and just make things confusing, but I didn&apos;t want to totally delete the code just to put it back in later.

I&apos;m not sure why you think we would need a similar check in _is_server_running, because that is purely doing a port check, it doesn&apos;t know *what* is running on those ports?

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:107
&gt;&gt; +        pass
&gt; 
&gt; Should these interface methods be protected?

Sure.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:144
&gt;&gt; +            s = socket.socket()
&gt; 
&gt; Nit: s -&gt; test_socket or something

OK.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:147
&gt;&gt; +                s.connect((&apos;localhost&apos;, port))
&gt; 
&gt; This isn&apos;t quite the same check right?  The old code would make sure the server understood HTTP.  Maybe that&apos;s OK?

That is correct. However, we need to switch from urllib to sockets *because* urllib doesn&apos;t actually shut down the socket connection properly after connecting, and that causes us to get failures down the road when we try to restart the server. I figured doing a socket-level connect would be good enough, and (unlike urlopen), is protocol independent so I wouldn&apos;t have to recode things three or four different ways.

&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:160
&gt;&gt; +            s = socket.socket()
&gt; 
&gt; Nit: s-&gt; test_socket or something

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419026</commentid>
    <comment_count>6</comment_count>
      <attachid>96359</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-10 16:05:37 -0700</bug_when>
    <thetext>Comment on attachment 96359
ready for review

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

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:66
&gt;&gt;&gt; +            _log.warning(&apos;Failed to remove old %s log files&apos; % self.name)
&gt;&gt; 
&gt;&gt; Should we just move this try/except into remove_log_files()?  It seems a bit weird that remove_stale_logs() needs to know what type of errors it can raise.
&gt; 
&gt; I understand the weirdness. I didn&apos;t want to repeat the code and I wanted to ensure the catch was done consistently, so this seem the better tradeoff. I suppose I could push the try/catch into the method and attempt to make it clear that the method should trap access denied and other such errors. Do you think that would be better (after I&apos;ve explained the rationale).

Yeah, I was thinking we would push it into the method.  Seems fine to document that the method catches OSErrors.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:75
&gt;&gt;&gt; +        server_started = self._wait_for_action(self._is_server_running_on_all_ports)
&gt;&gt; 
&gt;&gt; It looks like we used to retry for a few seconds for the python server in case it was slow to start.  Should we do something similar here?
&gt; 
&gt; That&apos;s what _wait_for_action() does. I am removing the duplicate/different implementation in the python server code so that they all use the same consistent logic.

Ah, I see it now.  Sorry, wasn&apos;t in the diff.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:90

&gt;&gt; 
&gt;&gt; What cases would this be true?  Do we need to have a similar check in _is_server_running_on_all_ports()?
&gt; 
&gt; This will eventually be true when this is being called by new-run-webkit-httpd. pid files aren&apos;t really useful as of this patch and just make things confusing, but I didn&apos;t want to totally delete the code just to put it back in later.
&gt; 
&gt; I&apos;m not sure why you think we would need a similar check in _is_server_running, because that is purely doing a port check, it doesn&apos;t know *what* is running on those ports?

At the beginning of _is_server_running(), it calls:
  self._executive.check_running_pid(self._process.pid):

I was wondering if you needed to check self.pid_file as well as self._process.pid.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:147
&gt;&gt;&gt; +                s.connect((&apos;localhost&apos;, port))
&gt;&gt; 
&gt;&gt; This isn&apos;t quite the same check right?  The old code would make sure the server understood HTTP.  Maybe that&apos;s OK?
&gt; 
&gt; That is correct. However, we need to switch from urllib to sockets *because* urllib doesn&apos;t actually shut down the socket connection properly after connecting, and that causes us to get failures down the road when we try to restart the server. I figured doing a socket-level connect would be good enough, and (unlike urlopen), is protocol independent so I wouldn&apos;t have to recode things three or four different ways.

This is probably fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419116</commentid>
    <comment_count>7</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 19:01:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 96359 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96359&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server_base.py:66
&gt; &gt;&gt;&gt; +            _log.warning(&apos;Failed to remove old %s log files&apos; % self.name)
&gt; &gt;&gt; 
&gt; &gt;&gt; Should we just move this try/except into remove_log_files()?  It seems a bit weird that remove_stale_logs() needs to know what type of errors it can raise.
&gt; &gt; 
&gt; &gt; I understand the weirdness. I didn&apos;t want to repeat the code and I wanted to ensure the catch was done consistently, so this seem the better tradeoff. I suppose I could push the try/catch into the method and attempt to make it clear that the method should trap access denied and other such errors. Do you think that would be better (after I&apos;ve explained the rationale).
&gt; 
&gt; Yeah, I was thinking we would push it into the method.  Seems fine to document that the method catches OSErrors.
&gt; 

Okay.


&gt; &gt;&gt; What cases would this be true?  Do we need to have a similar check in _is_server_running_on_all_ports()?
&gt; &gt; 
&gt; &gt; This will eventually be true when this is being called by new-run-webkit-httpd. pid files aren&apos;t really useful as of this patch and just make things confusing, but I didn&apos;t want to totally delete the code just to put it back in later.
&gt; &gt; 
&gt; &gt; I&apos;m not sure why you think we would need a similar check in _is_server_running, because that is purely doing a port check, it doesn&apos;t know *what* is running on those ports?
&gt; 
&gt; At the beginning of _is_server_running(), it calls:
&gt;   self._executive.check_running_pid(self._process.pid):
&gt; 
&gt; I was wondering if you needed to check self.pid_file as well as self._process.pid.
&gt; 

Ah, no. _is_server_running() is only called during start(), after we spawn the process, and it&apos;s purpose is to ensure that the process did start up correctly. At that point the only pid you care about is the one in the process object. The latest pid hasn&apos;t even been written into a pidfile. The only reason we call check_running_pid is because the process may have exited between the spawn and this line. 

We could probably actually change this to self._process.poll(), so I&apos;ll do that because it&apos;s faster and clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419142</commentid>
    <comment_count>8</comment_count>
      <attachid>96841</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 20:40:02 -0700</bug_when>
    <thetext>Created attachment 96841
update w/ more review feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419144</commentid>
    <comment_count>9</comment_count>
      <attachid>96843</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 20:51:03 -0700</bug_when>
    <thetext>Created attachment 96843
rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419145</commentid>
    <comment_count>10</comment_count>
      <attachid>96844</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-10 20:52:17 -0700</bug_when>
    <thetext>Created attachment 96844
rebasing again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419614</commentid>
    <comment_count>11</comment_count>
      <attachid>96844</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-13 10:02:07 -0700</bug_when>
    <thetext>Comment on attachment 96844
rebasing again

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

&gt; Tools/Scripts/webkitpy/layout_tests/port/http_server.py:192
&gt; +        try:
&gt; +            self._remove_log_files(self._output_dir, &quot;access.log-&quot;)
&gt; +        except OSError, e:
&gt; +            _log.warning(&apos;Failed to remove old %s log files&apos; % self._name)
&gt; +        try:
&gt; +            self._remove_log_files(self._output_dir, &quot;error.log-&quot;)
&gt; +        except OSError, e:
&gt; +            _log.warning(&apos;Failed to remove old %s log files&apos; % self._name)

Nit: A for loop would be a bit more succinct, but this is OK too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419791</commentid>
    <comment_count>12</comment_count>
      <attachid>96995</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-13 13:12:01 -0700</bug_when>
    <thetext>Created attachment 96995
rebase, update w/ last bits of feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425384</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2011-06-22 11:05:03 -0700</bug_when>
    <thetext>finally fixed in bug 62829.

*** This bug has been marked as a duplicate of bug 62829 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96185</attachid>
            <date>2011-06-06 19:54:53 -0700</date>
            <delta_ts>2011-06-07 18:55:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62180-20110606195452.patch</filename>
            <type>text/plain</type>
            <size>22061</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgxODYKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZmE5MmJkYWEyMGMwZTk4NTc1NmRmNTE2MjRjNWZjY2Yx
ZDRhMjE0Li4xODczNWI2NWFmZDhlMzI2NDdlODYwYWI3ZTZkMGIyODkyNWFkMGVkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0yLDYgKzIsMTgg
QEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBucnd0
OiBmaXggaHR0cCwgd2Vic29ja2V0IHNlcnZlciBzdGFydHVwLCBzaHV0ZG93bgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxODAKKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2
ZXIucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9iYXNlLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvd2Vic29ja2V0X3NlcnZlci5weToKKworMjAxMS0wNi0wNiAgRGlyayBQcmFua2UgIDxk
cHJhbmtlQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKwogICAgICAgICB3ZWJraXRweTogYWRkIGEgcG9wZW4oKSBjYWxsIHRvIGV4ZWN1dGl2ZQog
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxNzkKIApk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFj
aGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRleCAwNWEyMzM4MjQ1MGRlY2Q4MGM0MDM0NTk2
NDdiNThmMTIxNTQ3MGIxLi43OTk1MGNlNmY5NmQ3ZTdjMzcwODJmYzZlMGY0OGJlNTU4N2E3OTI1
IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Fw
YWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtMzcsNyArMzcsNiBAQCBpbXBvcnQg
bG9nZ2luZwogaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IHN1
YnByb2Nlc3MKIGltcG9ydCBzeXMKIAogaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKQEAgLTQ2LDYg
KzQ1LDcgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMu
cG9ydC5hcGFjaGVfaHR0cF9zZXJ2ZXIiKQogCiAKIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRw
ZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKKyAgICBuYW1lID0gJ2FwYWNoZScK
IAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2Rpcik6CiAgICAgICAg
ICIiIkFyZ3M6CkBAIC01NCw3ICs1NCw2IEBAIGNsYXNzIExheW91dFRlc3RBcGFjaGVIdHRwZCho
dHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgIiIiCiAgICAgICAgIGh0
dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCiAg
ICAgICAgIHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCi0gICAgICAgIHNlbGYuX2h0dHBk
X3Byb2MgPSBOb25lCiAgICAgICAgIHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1
dF9kaXIpCiAKICAgICAgICAgc2VsZi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKQEAgLTcw
LDcgKzY5LDcgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2Uu
SHR0cFNlcnZlckJhc2UpOgogICAgICAgICAjIFRoZSBQSUQgcmV0dXJuZWQgd2hlbiBBcGFjaGUg
aXMgc3RhcnRlZCBnb2VzIGF3YXkgKGR1ZSB0byBkcm9wcGluZwogICAgICAgICAjIHByaXZpbGVn
ZXM/KS4gVGhlIHByb3BlciBjb250cm9sbGluZyBQSUQgaXMgd3JpdHRlbiB0byBhIGZpbGUgaW4g
dGhlCiAgICAgICAgICMgYXBhY2hlIHJ1bnRpbWUgZGlyZWN0b3J5LgotICAgICAgICBzZWxmLl9w
aWRfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLl9ydW50aW1lX3BhdGgsICdodHRwZC5waWQnKQor
ICAgICAgICBzZWxmLnBpZF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX3J1bnRpbWVfcGF0aCwg
J2h0dHBkLnBpZCcpCiAKICAgICAgICAgdGVzdF9kaXIgPSBzZWxmLl9wb3J0X29iai5sYXlvdXRf
dGVzdHNfZGlyKCkKICAgICAgICAganNfdGVzdF9yZXNvdXJjZXNfZGlyID0gc2VsZi5fY3lnd2lu
X3NhZmVfam9pbih0ZXN0X2RpciwgImZhc3QiLCAianMiLApAQCAtMTg4LDQ2ICsxODcsMTkgQEAg
Y2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJh
c2UpOgogICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wgYW5kICdTU0xFbmdpbmUgT24nIG9y
ICcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9WaXJ0dWFsSG9zdD4nLCAnJykpCiAK
LSAgICBkZWYgX3N0YXJ0X2h0dHBkX3Byb2Nlc3Moc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0
aGUgaHR0cGQgcHJvY2VzcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIi
IgorICAgIGRlZiBzcGF3bl9wcm9jZXNzKHNlbGYpOgogICAgICAgICAjIFVzZSBzaGVsbD1UcnVl
IGJlY2F1c2Ugd2Ugam9pbiB0aGUgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgZm9yCiAgICAgICAg
ICMgdGhlIHNha2Ugb2YgV2luZG93L0N5Z3dpbiBhbmQgaXQgbmVlZHMgcXVvdGluZyB0aGF0IGJy
ZWFrcwogICAgICAgICAjIHNoZWxsPUZhbHNlLgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQg
bm90IG5lZWQgdG8gYmUgam9pbmluZyBzaGVsbCBhcmd1bWVudHMgaW50byBzdHJpbmdzLgogICAg
ICAgICAjIHNoZWxsPVRydWUgaXMgYSB0cmFpbCBvZiB0ZWFycy4KICAgICAgICAgIyBOb3RlOiBO
b3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCi0gICAgICAg
IF9sb2cuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyLCBjbWQ9IiVzIicgJSBzdHIoc2VsZi5f
c3RhcnRfY21kKSkKLSAgICAgICAgc2VsZi5faHR0cGRfcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4o
c2VsZi5fc3RhcnRfY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgc2hlbGw9VHJ1ZSkKLSAg
ICAgICAgZXJyID0gc2VsZi5faHR0cGRfcHJvYy5zdGRlcnIucmVhZCgpCisgICAgICAgIF9sb2cu
ZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciwgY21kPSIlcyInICUgKHNlbGYubmFtZSwgc3RyKHNl
bGYuX3N0YXJ0X2NtZCkpKQorICAgICAgICBwcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVu
KHNlbGYuX3N0YXJ0X2NtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBF
KQorICAgICAgICBlcnIgPSBwcm9jZXNzLnN0ZGVyci5yZWFkKCkKICAgICAgICAgaWYgbGVuKGVy
cik6CiAgICAgICAgICAgICBfbG9nLmRlYnVnKGVycikKLSAgICAgICAgICAgIHJldHVybiBGYWxz
ZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICAi
IiJTdGFydHMgdGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgIyBTdG9wIGFueSBj
dXJyZW50bHkgcnVubmluZyBzZXJ2ZXJzLgotICAgICAgICBzZWxmLnN0b3AoKQotCi0gICAgICAg
IF9sb2cuZGVidWcoIlN0YXJ0aW5nIGFwYWNoZSBodHRwIHNlcnZlciIpCi0gICAgICAgIHNlcnZl
cl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2Vz
cykKLSAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJB
cGFjaGUgc3RhcnRlZC4gVGVzdGluZyBwb3J0cyIpCi0gICAgICAgICAgICBzZXJ2ZXJfc3RhcnRl
ZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKAotICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVy
X3J1bm5pbmdfb25fYWxsX3BvcnRzKQotCi0gICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAg
ICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLSAgICAg
ICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVkIHRvIHN0YXJ0IGh0
dHAgc2VydmVyJykKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICAiIiJTdG9wcyB0aGUg
YXBhY2hlIGh0dHAgc2VydmVyLiIiIgotICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3du
IGFueSBydW5uaW5nIGh0dHAgc2VydmVycyIpCi0gICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAg
ICAgICAgaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgotICAgICAgICAgICAgaHR0
cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCi0gICAgICAgICMg
RklYTUU6IFdlIHNob3VsZG4ndCBiZSBjYWxsaW5nIGEgcHJvdGVjdGVkIG1ldGhvZCBvZiBfcG9y
dF9vYmohCi0gICAgICAgIHNlbGYuX3BvcnRfb2JqLl9zaHV0X2Rvd25faHR0cF9zZXJ2ZXIoaHR0
cGRfcGlkKQorICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhwcm9jZXNz
LnBpZCkKKyAgICAgICAgICAgIHByb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICByYWlzZSBTZXJ2
ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzOiAlcycgJSAoc2VsZi5uYW1lLCBlcnIpKQorICAg
ICAgICByZXR1cm4gcHJvY2VzcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKaW5kZXggZTUyNWVlMGU0OTEyZmUwOTUz
OGY3Y2RmZGYzYTFiNjM0ODEyNDMyZC4uZjI2OGY3NjRjZTEyY2ZlOGNiYWRhMDI3OTdjZDhkYWIw
ZmFkOTYwMiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CkBAIC0zMywyMiArMzMsMTggQEAgZnJvbSBfX2Z1dHVy
ZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAogCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgbG9nZ2lu
ZwotaW1wb3J0IG9wdHBhcnNlCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWltcG9ydCBzdWJw
cm9jZXNzCiBpbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCi1pbXBvcnQg
dXJsbGliCiAKLWltcG9ydCBmYWN0b3J5CiBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQogCiBfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lmh0dHBfc2Vy
dmVyIikKIAogCiBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNl
KToKKyAgICBuYW1lID0gJ0xpZ2h0dHBkJwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqLCBvdXRwdXRfZGlyLCBiYWNrZ3JvdW5kPUZhbHNlLCBwb3J0PU5vbmUsCiAgICAgICAgICAg
ICAgICAgIHJvb3Q9Tm9uZSwgcnVuX2JhY2tncm91bmQ9Tm9uZSwgbGF5b3V0X3Rlc3RzX2Rpcj1O
b25lKToKQEAgLTU4LDcgKzU0LDYgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5I
dHRwU2VydmVyQmFzZSk6CiAgICAgICAgICMgV2Via2l0IHRlc3RzCiAgICAgICAgIGh0dHBfc2Vy
dmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCiAgICAgICAg
IHNlbGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBO
b25lCiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX3Jvb3QgPSByb290
CiAgICAgICAgIHNlbGYuX3J1bl9iYWNrZ3JvdW5kID0gcnVuX2JhY2tncm91bmQKQEAgLTk5LDEz
ICs5NCw2IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2Up
OgogICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzogc2VsZi5fd2Via2l0
X3Rlc3RzLAogICAgICAgICAgICAgICAgICAnc3NsY2VydCc6IHNlbGYuX3BlbV9maWxlfV0pCiAK
LSAgICBkZWYgaXNfcnVubmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3Mg
IT0gTm9uZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmlzX3J1bm5p
bmcoKToKLSAgICAgICAgICAgIHJhaXNlICdMaWdodHRwZCBhbHJlYWR5IHJ1bm5pbmcnCi0KICAg
ICAgICAgYmFzZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jh
c2UoJ1Rvb2xzJywKICAgICAgICAgICAgICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xheW91dF90
ZXN0cycsICdwb3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQogICAgICAgICBvdXRfY29uZl9maWxlID0g
b3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKQEAgLTExNSwx
MCArMTAzLDYgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFz
ZSk6CiAgICAgICAgIGxvZ19maWxlX25hbWUgPSAiZXJyb3IubG9nLSIgKyB0aW1lX3N0ciArICIu
dHh0IgogICAgICAgICBlcnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2Rpciwg
bG9nX2ZpbGVfbmFtZSkKIAotICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5
IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAgICBzZWxmLnJlbW92ZV9sb2dfZmls
ZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikKLSAgICAgICAgc2VsZi5yZW1vdmVf
bG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJlcnJvci5sb2ctIikKLQogICAgICAgICAjIFdy
aXRlIG91dCB0aGUgY29uZmlnCiAgICAgICAgIHdpdGggY29kZWNzLm9wZW4oYmFzZV9jb25mX2Zp
bGUsICJyIiwgInV0Zi04IikgYXMgZmlsZToKICAgICAgICAgICAgIGJhc2VfY29uZiA9IGZpbGUu
cmVhZCgpCkBAIC0yMDcsMzYgKzE5MSwxNCBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9i
YXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShvcy5wYXRo
LmpvaW4obW9kdWxlX3BhdGgsIGxpYl9maWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcy5wYXRoLmpvaW4odG1wX21vZHVsZV9wYXRoLCBsaWJfZmlsZSkpCiAKLSAgICAgICAgZW52
ID0gc2VsZi5fcG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKLSAgICAgICAgX2xv
Zy5kZWJ1ZygnU3RhcnRpbmcgaHR0cCBzZXJ2ZXIsIGNtZD0iJXMiJyAlIHN0cihzdGFydF9jbWQp
KQotICAgICAgICAjIEZJWE1FOiBTaG91bGQgdXNlIEV4ZWN1dGl2ZS5ydW5fY29tbWFuZAotICAg
ICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsIGVudj1lbnYs
IHN0ZGluPXN1YnByb2Nlc3MuUElQRSkKLQotICAgICAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBz
dGFydC4KKyAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gc3RhcnRfY21kCisgICAgICAgIHNlbGYu
X2VudiA9IHNlbGYuX3BvcnRfb2JqLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcigpCiAgICAgICAg
IHNlbGYubWFwcGluZ3MgPSBtYXBwaW5ncwotICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYu
d2FpdF9mb3JfYWN0aW9uKAotICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9h
bGxfcG9ydHMpCiAKLSAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKLSAg
ICAgICAgaWYgbm90IHNlcnZlcl9zdGFydGVkIG9yIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSAh
PSBOb25lOgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgaHR0
cGQuJykKLQotICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQi
KQotCi0gICAgIyBUT0RPKGRlYW5tKTogRmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVh
bmx5LiAgT3VyIGxvZyBmaWxlcyBhcmUKLSAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVk
LCBldGMuLi4gd2h5IGRvZXNuJ3Qgb3VyIHB5dGhvbiBoYXZlIG9zLmtpbGwgPwotCi0gICAgZGVm
IHN0b3Aoc2VsZiwgZm9yY2U9RmFsc2UpOgotICAgICAgICBpZiBub3QgZm9yY2UgYW5kIG5vdCBz
ZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGh0dHBkX3Bp
ZCA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgIGh0dHBkX3Bp
ZCA9IHNlbGYuX3Byb2Nlc3MucGlkCi0gICAgICAgIHNlbGYuX3BvcnRfb2JqLl9zaHV0X2Rvd25f
aHR0cF9zZXJ2ZXIoaHR0cGRfcGlkKQorICAgIGRlZiByZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToK
KyAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJhY2Nlc3Mu
bG9nLSIpCisgICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAi
ZXJyb3IubG9nLSIpCiAKLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgICMg
d2FpdCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Ci0g
ICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAg
ICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQotICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5v
bmUKKyAgICBkZWYgc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1Zygnc3Rh
cnRpbmcgJXMsIGNtZD0iJXMiJyAlIChzZWxmLm5hbWUsIHNlbGYuX3N0YXJ0X2NtZCkpCisgICAg
ICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBlbnY9c2Vs
Zi5fZW52LCBzaGVsbD1GYWxzZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
cl9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9iYXNlLnB5CmluZGV4IDJhNDNlODE5NzhiOTJjNmNhNjgxYThhNGMyOGY5OWI4M2I4
NzZlYmIuLjc4OWU5OTJjOWNjZjA3YzgzYmFlM2NhNzgwYjQ0M2E5YWI4ODk4ODYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJf
YmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0
dHBfc2VydmVyX2Jhc2UucHkKQEAgLTI5LDIyICsyOSw5MiBAQAogCiAiIiJCYXNlIGNsYXNzIHdp
dGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSBhbmQgTGlnaHR0cGQgc2VydmVy
cy4iIiIKIAoraW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCitpbXBvcnQg
c29ja2V0CiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgotCi1mcm9tIHdlYmtpdHB5LmNvbW1v
bi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3
ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZlcl9iYXNlIikKIAogCitjbGFzcyBT
ZXJ2ZXJFcnJvcihFeGNlcHRpb24pOgorICAgIHBhc3MKKworCiBjbGFzcyBIdHRwU2VydmVyQmFz
ZShvYmplY3QpOgorICAgICIiIkEgc2tlbGV0b24gY2xhc3MgZm9yIHN0YXJ0aW5nIGFuZCBzdG9w
cGluZyBzZXJ2ZXJzIHVzZWQgYnkgdGhlIGxheW91dCB0ZXN0cy4iIiIKKworICAgIG5hbWUgPSAn
PHZpcnR1YWw+JworICAgIG1hcHBpbmdzID0ge30KKyAgICBwaWRfZmlsZSA9IE5vbmUKIAogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6CiAgICAgICAgIHNlbGYuX3BvcnRfb2JqID0g
cG9ydF9vYmoKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydF9vYmouX2V4ZWN1dGl2ZQor
ICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydF9vYmouX2ZpbGVzeXN0ZW0KKyAgICAgICAg
c2VsZi5fcHJvY2VzcyA9IE5vbmUKKworICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIi
U3RhcnRzIHRoZSBzZXJ2ZXIuIiIiCisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAg
ICAgICByYWlzZSBTZXJ2ZXJFcnJvcignJXMgYWxyZWFkeSBydW5uaW5nJyAlIHNlbGYubmFtZSkK
KworICAgICAgICAjIFNvbWV0aW1lcyBsb2dzIGFyZSBvcGVuIGluIG90aGVyIHByb2Nlc3NlcyBi
dXQgdGhleSBzaG91bGQgY2xlYXIgZXZlbnR1YWxseS4KKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgc2VsZi5yZW1vdmVfc3RhbGVfbG9ncygpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgor
ICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdGYWlsZWQgdG8gcmVtb3ZlIG9sZCAlcyBsb2cgZmls
ZXMnICUgc2VsZi5uYW1lKQorCisgICAgICAgIHNlbGYuX2NoZWNrX3RoYXRfYWxsX3BvcnRzX2Fy
ZV9hdmFpbGFibGUoKQorCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLnNwYXduX3Byb2Nl
c3MoKQorCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0ZWQuIFRlc3RpbmcgcG9ydHMiICUg
c2VsZi5uYW1lKQorICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYuX3dhaXRfZm9yX2FjdGlv
bihzZWxmLl9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisgICAgICAgIGlmIHNlcnZl
cl9zdGFydGVkOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0
ZWQiICUgc2VsZi5uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU2VydmVy
RXJyb3IoJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXInICUgc2VsZi5fbmFtZSkKKworICAgIGRl
ZiBzdG9wKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5u
aW5nICVzIHNlcnZlcnMiICUgc2VsZi5uYW1lKQorICAgICAgICBwaWQgPSBOb25lCisgICAgICAg
IGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAor
ICAgICAgICBlbGlmIHNlbGYucGlkX2ZpbGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNl
bGYucGlkX2ZpbGUpOgorICAgICAgICAgICAgcGlkID0gaW50KHNlbGYuX2ZpbGVzeXN0ZW0ucmVh
ZF90ZXh0X2ZpbGUoc2VsZi5waWRfZmlsZSkpCisKKyAgICAgICAgaWYgbm90IHBpZDoKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9leGVjdXRpdmUua2lsbF9w
cm9jZXNzKHBpZCkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgICMgd2Fp
dCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CisgICAg
ICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3CisgICAgICAgICAg
ICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUK
KyAgICAgICAgaWYgc2VsZi5waWRfZmlsZSBhbmQgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2Vs
Zi5waWRfZmlsZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxmLnBp
ZF9maWxlKQorCisgICAgICAgIHNlbGYuY2xlYW51cF9hZnRlcl9zdG9wKCkKKworICAgIGRlZiBy
ZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHNwYXduX3By
b2Nlc3Moc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRl
ZiB3YWl0X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICBkZWYgY2xlYW51cF9hZnRlcl9z
dG9wKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVtb3ZlX2xvZ19maWxlcyhzZWxm
LCBmb2xkZXIsIHN0YXJ0c193aXRoKToKKyAgICAgICAgZmlsZXMgPSBzZWxmLl9maWxlc3lzdGVt
Lmxpc3RkaXIoZm9sZGVyKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKKyAgICAgICAgICAg
IGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAgICAgICAgZnVsbF9w
YXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGZvbGRlciwgZmlsZSkKKyAgICAgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShmdWxsX3BhdGgpCisKKyAgICBkZWYgX3dhaXRfZm9y
X2FjdGlvbihzZWxmLCBhY3Rpb24pOgogICAgICAgICAiIiJSZXBlYXQgdGhlIGFjdGlvbiBmb3Ig
MjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4gUmV0dXJucwogICAgICAgICB3aGV0aGVy
IGl0IHN1Y2NlZWRlZC4iIiIKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUudGltZSgpCkBAIC01
NiwyOCArMTI2LDM3IEBAIGNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CiAKICAgICAgICAg
cmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKHNl
bGYpOgorICAgIGRlZiBfaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKHNlbGYpOgogICAg
ICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZlciBpcyBydW5uaW5nIG9uIGFsbCB0aGUg
ZGVzaXJlZCBwb3J0cy4iIiIKLSAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5tYXBwaW5nczoK
LSAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgotICAgICAgICAgICAgICAgIGh0
dHBfc3VmZml4ID0gJ3MnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGh0dHBf
c3VmZml4ID0gJycKLQotICAgICAgICAgICAgdXJsID0gJ2h0dHAlczovLzEyNy4wLjAuMTolZC8n
ICUgKGh0dHBfc3VmZml4LCBtYXBwaW5nWydwb3J0J10pCisgICAgICAgIGlmIG5vdCBzZWxmLl9l
eGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcHJvY2Vzcy5waWQpOgorICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiU2VydmVyIGlzbid0IHJ1bm5pbmcgYXQgYWxsIikKKyAgICAgICAgICAg
IHJhaXNlIFNlcnZlckVycm9yKCJTZXJ2ZXIgZXhpdGVkIikKIAorICAgICAgICBmb3IgbWFwcGlu
ZyBpbiBzZWxmLm1hcHBpbmdzOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAg
ICAgICAgICAgcG9ydCA9IG1hcHBpbmdbJ3BvcnQnXQogICAgICAgICAgICAgdHJ5OgotICAgICAg
ICAgICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsLCBwcm94aWVzPXt9KQotICAg
ICAgICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBydW5uaW5nIGF0ICVzIiAlIHVybCkKKyAg
ICAgICAgICAgICAgICBzLmNvbm5lY3QoKCdsb2NhbGhvc3QnLCBwb3J0KSkKKyAgICAgICAgICAg
ICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBvbiAlZCIgJSBwb3J0KQogICAgICAgICAg
ICAgZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVy
IE5PVCBydW5uaW5nIGF0ICVzOiAlcyIgJSAodXJsLCBlKSkKKyAgICAgICAgICAgICAgICBpZiBl
LmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKToKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2
ZXIgTk9UIHJ1bm5pbmcgb24gJWQ6ICVzIiAlIChwb3J0LCBlKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNs
b3NlKCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiByZW1vdmVfbG9nX2ZpbGVzKHNl
bGYsIGZvbGRlciwgc3RhcnRzX3dpdGgpOgotICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZm9s
ZGVyKQotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZpbGUuc3Rh
cnRzd2l0aChzdGFydHNfd2l0aCk6Ci0gICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0
aC5qb2luKGZvbGRlciwgZmlsZSkKLSAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLkZpbGVTeXN0
ZW0oKS5yZW1vdmUoZnVsbF9wYXRoKQorICAgIGRlZiBfY2hlY2tfdGhhdF9hbGxfcG9ydHNfYXJl
X2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5tYXBwaW5nczoK
KyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHBvcnQgPSBtYXBw
aW5nWydwb3J0J10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLmJpbmQoKCds
b2NhbGhvc3QnLCBwb3J0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgorICAgICAg
ICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBTFJFQURZLCBlcnJuby5FQUREUklOVVNF
KToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU2VydmVyRXJyb3IoJ1BvcnQgJWQgaXMgYWxy
ZWFkeSBpbiB1c2UuJyAlIHBvcnQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcy5j
bG9zZSgpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKaW5kZXggYTU5Y2IxZmFkYjhjODc3Njc1ZDAy
MTE0MzEzMWI2ODM2MTllMGUyZS4uNjQ4NTVkYjEyYmY4ZDEwOWY2NzQ0YzYyM2NmZDIyZGRmZWMy
ZTlmMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJzb2NrZXRfc2VydmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQpAQCAtMjksMjQgKzI5LDE0IEBACiAKICIi
IkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBQeVdlYlNvY2tldCBzZXJ2ZXIgdXNlZCBi
eSBsYXlvdXQgdGVzdHMuIiIiCiAKLQotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRl
bWVudAotCiBpbXBvcnQgY29kZWNzCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9wdHBhcnNlCiBp
bXBvcnQgb3MKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCi1pbXBvcnQgdGVtcGZpbGUK
IGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCiAKLWltcG9ydCBmYWN0b3J5CiBpbXBvcnQgaHR0
cF9zZXJ2ZXIKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmV4ZWN1dGl2ZSBpbXBvcnQg
RXhlY3V0aXZlCi0KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRf
dGVzdHMucG9ydC53ZWJzb2NrZXRfc2VydmVyIikKIApAQCAtNTcsNDIgKzQ3LDggQEAgX0RFRkFV
TFRfV1NfUE9SVCA9IDg4ODAKIF9ERUZBVUxUX1dTU19QT1JUID0gOTMyMwogCiAKLWRlZiB1cmxf
aXNfYWxpdmUodXJsKToKLSAgICAiIiJDaGVja3MgdG8gc2VlIGlmIHdlIGdldCBhbiBodHRwIHJl
c3BvbnNlIGZyb20gfHVybHwuCi0gICAgV2UgcG9sbCB0aGUgdXJsIDIwIHRpbWVzIHdpdGggYSAw
LjUgc2Vjb25kIGRlbGF5LiAgSWYgd2UgZG9uJ3QKLSAgICBnZXQgYSByZXBseSBpbiB0aGF0IHRp
bWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQKLSAgICBkaWRuJ3Qgc3RhcnQgcHJv
cGVybHkuCi0KLSAgICBBcmdzOgotICAgICAgdXJsOiBUaGUgVVJMIHRvIGNoZWNrLgotICAgIFJl
dHVybjoKLSAgICAgIFRydWUgaWYgdGhlIHVybCBpcyBhbGl2ZS4KLSAgICAiIiIKLSAgICBzbGVl
cF90aW1lID0gMC41Ci0gICAgd2FpdF90aW1lID0gMTAKLSAgICB3aGlsZSB3YWl0X3RpbWUgPiAw
OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVuKHVy
bCwgcHJveGllcz17fSkKLSAgICAgICAgICAgICMgU2VydmVyIGlzIHVwIGFuZCByZXNwb25kaW5n
LgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAg
ICAgICAgICBwYXNzCi0gICAgICAgICMgV2FpdCBmb3Igc2xlZXBfdGltZSBiZWZvcmUgdHJ5aW5n
IGFnYWluLgotICAgICAgICB3YWl0X3RpbWUgLT0gc2xlZXBfdGltZQotICAgICAgICB0aW1lLnNs
ZWVwKHNsZWVwX3RpbWUpCi0KLSAgICByZXR1cm4gRmFsc2UKLQotCi1jbGFzcyBQeVdlYlNvY2tl
dE5vdFN0YXJ0ZWQoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLQotY2xhc3MgUHlXZWJTb2NrZXRO
b3RGb3VuZChFeGNlcHRpb24pOgotICAgIHBhc3MKLQotCiBjbGFzcyBQeVdlYlNvY2tldChodHRw
X3NlcnZlci5MaWdodHRwZCk6CisgICAgbmFtZSA9ICdQeVdlYlNvY2tldCcKIAogICAgIGRlZiBf
X2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9XU19QT1JU
LAogICAgICAgICAgICAgICAgICByb290PU5vbmUsIHVzZV90bHM9RmFsc2UsCkBAIC0xMTMsMTEg
KzY5LDExIEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAg
ICAgaWYgc2VsZi5fcG9ydDoKICAgICAgICAgICAgIHNlbGYuX3BvcnQgPSBpbnQoc2VsZi5fcG9y
dCkKICAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKLSAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9u
YW1lID0gJ1B5V2ViU29ja2V0KFNlY3VyZSknCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBz
ZWxmLl9zZXJ2ZXJfbmFtZSA9ICdQeVdlYlNvY2tldCcKLSAgICAgICAgc2VsZi5fcGlkZmlsZSA9
IHBpZGZpbGUKKyAgICAgICAgICAgIHNlbGYubmFtZSA9ICdQeVdlYlNvY2tldChTZWN1cmUpJwor
ICAgICAgICBzZWxmLnBpZF9maWxlID0gcGlkZmlsZQorICAgICAgICBzZWxmLl93c2luID0gTm9u
ZQogICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VsZi5tYXBwaW5ncyA9IFt7
J3BvcnQnOiBzZWxmLl9wb3J0fV0KIAogICAgICAgICAjIFdlYmtpdCB0ZXN0cwogICAgICAgICBp
ZiBzZWxmLl9yb290OgpAQCAtMTMzLDIzICs4OSwxNCBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRw
X3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAg
c2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9IE5vbmUKIAotICAgIGRlZiBzdGFydChzZWxmKToKLSAg
ICAgICAgaWYgbm90IHNlbGYuX3dlYl9zb2NrZXRfdGVzdHM6Ci0gICAgICAgICAgICBfbG9nLmlu
Zm8oJ05vIG5lZWQgdG8gc3RhcnQgJXMgc2VydmVyLicgJSBzZWxmLl9zZXJ2ZXJfbmFtZSkKLSAg
ICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAg
ICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgnJXMgaXMgYWxyZWFkeSBydW5uaW5nLicg
JQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9u
YW1lKQotCiAgICAgICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgnJWQlYiVZLSVIJU0lUycp
CiAgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBsb2dfcHJlZml4ID0gX1dT
U19MT0dfUFJFRklYCisgICAgICAgICAgICBzZWxmLl9sb2dfcHJlZml4ID0gX1dTU19MT0dfUFJF
RklYCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2dfcHJlZml4ID0gX1dTX0xPR19QUkVG
SVgKLSAgICAgICAgbG9nX2ZpbGVfbmFtZSA9IGxvZ19wcmVmaXggKyB0aW1lX3N0cgorICAgICAg
ICAgICAgc2VsZi5fbG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCisgICAgICAgIGxvZ19maWxl
X25hbWUgPSBzZWxmLl9sb2dfcHJlZml4ICsgdGltZV9zdHIKIAotICAgICAgICAjIFJlbW92ZSBv
bGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAg
ICBzZWxmLnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgbG9nX3ByZWZpeCkKKyAg
ICAgICAgc2VsZi5fd3NpbiA9IG9wZW4ob3MuZGV2bnVsbCwgJ3InKQogCiAgICAgICAgIGVycm9y
X2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1l
cnIudHh0IikKIApAQCAtMTg3LDcwICsxMzQsMjEgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9z
ZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgc3RhcnRfY21kLmV4dGVuZChbJy10JywgJy1r
Jywgc2VsZi5fcHJpdmF0ZV9rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMn
LCBzZWxmLl9jZXJ0aWZpY2F0ZV0pCiAKLSAgICAgICAgZW52ID0gc2VsZi5fcG9ydF9vYmouc2V0
dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKLSAgICAgICAgZW52WydQWVRIT05QQVRIJ10gPSAocHl3
ZWJzb2NrZXRfYmFzZSArIG9zLnBhdGgucGF0aHNlcCArCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudi5nZXQoJ1BZVEhPTlBBVEgnLCAnJykpCi0KLSAgICAgICAgX2xvZy5kZWJ1Zygn
U3RhcnRpbmcgJXMgc2VydmVyIG9uICVkLicgJSAoCi0gICAgICAgICAgICAgICAgICAgc2VsZi5f
c2VydmVyX25hbWUsIHNlbGYuX3BvcnQpKQotICAgICAgICBfbG9nLmRlYnVnKCdjbWRsaW5lOiAl
cycgJSAnICcuam9pbihzdGFydF9jbWQpKQotICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgZGly
ZWN0IHRoaXMgY2FsbCB0aHJvdWdoIEV4ZWN1dGl2ZSBmb3IgdGVzdGluZy4KLSAgICAgICAgIyBO
b3RlOiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCi0g
ICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN0YXJ0X2NtZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49b3Blbihvcy5kZXZudWxs
LCAncicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9
c2VsZi5fd3NvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW52PWVudikKLQotICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAg
ICAgdXJsID0gJ2h0dHBzJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdXJsID0gJ2h0dHAn
Ci0gICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKLSAg
ICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwpOgotICAgICAgICAgICAgaWYgc2VsZi5fcHJv
Y2Vzcy5yZXR1cm5jb2RlID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIHVzZSBhIG5vbi1zdGF0aWMgRXhlY3V0aXZlIGZvciBlYXNpZXIKLSAgICAgICAgICAgICAg
ICAjIHRlc3RpbmcuCi0gICAgICAgICAgICAgICAgRXhlY3V0aXZlKCkua2lsbF9wcm9jZXNzKHNl
bGYuX3Byb2Nlc3MucGlkKQotICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihvdXRwdXRfbG9n
LCAiciIsICJ1dGYtOCIpIGFzIGZwOgotICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGZwOgot
ICAgICAgICAgICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCi0gICAgICAgICAgICByYWlzZSBQ
eVdlYlNvY2tldE5vdFN0YXJ0ZWQoCi0gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBzdGFydCAl
cyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUKLSAgICAgICAgICAgICAgICAgICAgKHNlbGYuX3NlcnZl
cl9uYW1lLCBzZWxmLl9wb3J0KSkKLQotICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQg
YWxyZWFkeQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgIT0gTm9uZToKLSAg
ICAgICAgICAgIHJhaXNlIFB5V2ViU29ja2V0Tm90U3RhcnRlZCgKLSAgICAgICAgICAgICAgICAn
RmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fc2VydmVyX25hbWUpCi0gICAgICAg
IGlmIHNlbGYuX3BpZGZpbGU6Ci0gICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3Bp
ZGZpbGUsICJ3IiwgImFzY2lpIikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICBmaWxlLndyaXRl
KCIlZCIgJSBzZWxmLl9wcm9jZXNzLnBpZCkKLQotICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZh
bHNlKToKLSAgICAgICAgaWYgbm90IGZvcmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6Ci0g
ICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBwaWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3M6Ci0gICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBl
bGlmIHNlbGYuX3BpZGZpbGU6Ci0gICAgICAgICAgICB3aXRoIGNvZGVjcy5vcGVuKHNlbGYuX3Bp
ZGZpbGUsICJyIiwgImFzY2lpIikgYXMgZmlsZToKLSAgICAgICAgICAgICAgICBwaWQgPSBpbnQo
ZmlsZS5yZWFkKCkuc3RyaXAoKSkKKyAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gc3RhcnRfY21k
CisgICAgICAgIHNlbGYuX2VudiA9IHNlbGYuX3BvcnRfb2JqLnNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcigpCisgICAgICAgIHNlbGYuX2VudlsnUFlUSE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jh
c2UgKyBvcy5wYXRoLnBhdGhzZXAgKyBzZWxmLl9lbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQog
Ci0gICAgICAgIGlmIG5vdCBwaWQ6Ci0gICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdEZv
dW5kKAotICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gZmluZCAlcyBzZXJ2ZXIgcGlkLicgJSBz
ZWxmLl9zZXJ2ZXJfbmFtZSkKKyAgICBkZWYgcmVtb3ZlX3N0YWxlX2xvZ3Moc2VsZik6CisgICAg
ICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBzZWxmLl9sb2dfcHJl
Zml4KQogCi0gICAgICAgIF9sb2cuZGVidWcoJ1NodXR0aW5nIGRvd24gJXMgc2VydmVyICVkLicg
JSAoc2VsZi5fc2VydmVyX25hbWUsIHBpZCkpCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1
c2UgYSBub24tc3RhdGljIEV4ZWN1dGl2ZSBmb3IgZWFzaWVyIHRlc3RpbmcuCi0gICAgICAgIEV4
ZWN1dGl2ZSgpLmtpbGxfcHJvY2VzcyhwaWQpCisgICAgZGVmIHNwYXduX3Byb2Nlc3Moc2VsZik6
CisgICAgICAgIF9sb2cuZGVidWcoJ3N0YXJ0aW5nICVzLCBjbWQ9IiVzIicgJSAoc2VsZi5uYW1l
LCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnBvcGVu
KHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwgc2hlbGw9RmFsc2UsIHN0ZGluPXNlbGYu
X3dzaW4sIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5TVERPVVQp
CiAKLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgICMgd2FpdCgpIGlzIG5v
dCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Ci0gICAgICAgICAgICAj
IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgICAgICBzZWxmLl9w
cm9jZXNzLndhaXQoKQotICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAgICBkZWYg
Y2xlYW51cF9hZnRlcl9zdG9wKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl93c2luOgorICAgICAg
ICAgICAgc2VsZi5fd3Npbi5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93c2luID0gTm9uZQog
CiAgICAgICAgIGlmIHNlbGYuX3dzb3V0OgogICAgICAgICAgICAgc2VsZi5fd3NvdXQuY2xvc2Uo
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96352</attachid>
            <date>2011-06-07 18:55:45 -0700</date>
            <delta_ts>2011-06-07 19:32:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62180-20110607185544.patch</filename>
            <type>text/plain</type>
            <size>20205</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA1ODFlNGI0NzQ5MzA2ZjZlZGE1NjJjMGFjZDJmYjdiOTIy
YWQ3MDM5Li4xM2IwOTZlZmIzYzJkNTMwOTFkZTQ1Yjk5YWY2ODRmMzQ5Yzk1N2E4IDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDYtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogZml4IGh0
dHAsIHdlYnNvY2tldCBzZXJ2ZXIgc3RhcnR1cCwgc2h1dGRvd24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTgwCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgcmVmYWN0b3JzIGFsbCBvZiB0aGUgc2VydmVyLXJlbGF0ZWQgY29kZSB0bworICAgICAgICBo
YXZlIGNvbnNpc3RlbnQgc2VtYW50aWNzLiBJdCBwdXNoZXMgdGhlIHN0YXJ0KCkvc3RvcCgpCisg
ICAgICAgIGxvZ2ljIGludG8gdGhlIGJhc2UgY2xhc3MgYW5kIGFkZHMgZm91ciBtdWNoIHNtYWxs
ZXIgcm91dGluZXMKKyAgICAgICAgZm9yIHNwZWNpYWxpemF0aW9uOgorICAgICAgICBwcmVwYXJl
X2NvbmZpZygpIC0gZm9yIG9wdGlvbmFsbHkgd3JpdGluZyBjb25maWcgZmlsZXMgZXRjLgorICAg
ICAgICAgICAgdG8gZGlzayBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyCisgICAgICAgIHJl
bW92ZV9zdGFsZV9sb2dfZmlsZXMoKQorICAgICAgICBzcGF3bl9wcm9jZXNzKCkgLSB0aGUgYWN0
dWFsIGxhdW5jaCBvZiB0aGUgc3VicHJvY2VzcworICAgICAgICBjbGVhbnVwX2FmdGVyX3N0b3Ao
KSAtIGFuZCBjdXN0b20gY2xlYW51cCBjb2RlCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFu
Z2UgdGhlIHRocmVlIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2VyZQorICAgICAgICBmYWlybHkg
aW5jb25zaXN0ZW50LCBsZWFkaW5nIHRvIGxvdHMgb2Ygd2VpcmRuZXNzIG9uIHRoZSBib3RzCisg
ICAgICAgIHdpdGggc2VydmVycyBiZWluZyBsZWZ0IGFyb3VuZCwgZXRjLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorCiAyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9h
cGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRleCBlMDg2ZGUwYzFhMDVhOGE1NzVmM2M4
MGE5NGNhZTZmNGRmMDA2NmVmLi4yNWU5ODFlYWJlZGNiOThmMzQxMDVlZjlmZmJlNDA4MzVjNTUz
YTVmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtMTcxLDQ2ICsxNzEsMTkgQEAg
Y2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJh
c2UpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRwZF9jb25m
aWdfY29weSkKICAgICAgICAgcmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CiAKLSAgICBkZWYgX3N0
YXJ0X2h0dHBkX3Byb2Nlc3Moc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgaHR0cGQgcHJv
Y2VzcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIiIgorICAgIGRlZiBz
cGF3bl9wcm9jZXNzKHNlbGYpOgogICAgICAgICAjIFVzZSBzaGVsbD1UcnVlIGJlY2F1c2Ugd2Ug
am9pbiB0aGUgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgZm9yCiAgICAgICAgICMgdGhlIHNha2Ug
b2YgV2luZG93L0N5Z3dpbiBhbmQgaXQgbmVlZHMgcXVvdGluZyB0aGF0IGJyZWFrcwogICAgICAg
ICAjIHNoZWxsPUZhbHNlLgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdG8g
YmUgam9pbmluZyBzaGVsbCBhcmd1bWVudHMgaW50byBzdHJpbmdzLgogICAgICAgICAjIHNoZWxs
PVRydWUgaXMgYSB0cmFpbCBvZiB0ZWFycy4KICAgICAgICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNh
ZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCi0gICAgICAgIF9sb2cuZGVidWco
J1N0YXJ0aW5nIGh0dHAgc2VydmVyLCBjbWQ9IiVzIicgJSBzdHIoc2VsZi5fc3RhcnRfY21kKSkK
LSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFy
dF9jbWQsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuUElQRSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAg
ZXJyID0gc2VsZi5fcHJvY2Vzcy5zdGRlcnIucmVhZCgpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0
YXJ0aW5nICVzIHNlcnZlciwgY21kPSIlcyInICUgKHNlbGYubmFtZSwgc3RyKHNlbGYuX3N0YXJ0
X2NtZCkpKQorICAgICAgICBwcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0
YXJ0X2NtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQorICAgICAg
ICBlcnIgPSBwcm9jZXNzLnN0ZGVyci5yZWFkKCkKICAgICAgICAgaWYgbGVuKGVycik6CiAgICAg
ICAgICAgICBfbG9nLmRlYnVnKGVycikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAg
ICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICAiIiJTdGFydHMg
dGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgIyBTdG9wIGFueSBjdXJyZW50bHkg
cnVubmluZyBzZXJ2ZXJzLgotICAgICAgICBzZWxmLnN0b3AoKQotCi0gICAgICAgIF9sb2cuZGVi
dWcoIlN0YXJ0aW5nICVzIHNlcnZlciIgJSBzZWxmLm5hbWUpCi0gICAgICAgIHNlcnZlcl9zdGFy
dGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKLSAg
ICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJBcGFjaGUg
c3RhcnRlZC4gVGVzdGluZyBwb3J0cyIpCi0gICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNl
bGYud2FpdF9mb3JfYWN0aW9uKAotICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5p
bmdfb25fYWxsX3BvcnRzKQotCi0gICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxl
ZCB0byBzdGFydCBodHRwIHNlcnZlcicpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAg
IiIiU3RvcHMgdGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgX2xvZy5kZWJ1Zygi
U2h1dHRpbmcgZG93biBhbnkgcnVubmluZyBodHRwIHNlcnZlcnMiKQotICAgICAgICBodHRwZF9w
aWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9w
aWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNlbGYu
cGlkX2ZpbGUpOgotICAgICAgICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5waWRfZmls
ZSkucmVhZGxpbmUoKSkKLSAgICAgICAgaWYgaHR0cGRfcGlkOgotICAgICAgICAgICAgc2VsZi5f
cG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MoaHR0cGRfcGlkKQorICAgICAgICAgICAg
c2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2Vzcyhwcm9jZXNzLnBpZCkKKyAgICAgICAgICAgIHBy
b2Nlc3Mud2FpdCgpCisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0
YXJ0ICVzOiAlcycgJSAoc2VsZi5uYW1lLCBlcnIpKQorICAgICAgICByZXR1cm4gcHJvY2Vzcwpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0
cF9zZXJ2ZXIucHkKaW5kZXggMzMyNTEyYTYyYTAyZjNhNWE5MWI2ZmE4Y2M2YzE5ZDE3MTRjZWJh
Yi4uOTNhNDcwYWRiOTI0Y2QwMGYyMzhhYTZkMzUzZDUzYTBmODNhMTBlMCAxMDA3NTUKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVy
LnB5CkBAIC0zMyw3ICszMyw2IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBz
eXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCiAKIGltcG9ydCBodHRwX3NlcnZlcl9iYXNl
CiAKQEAgLTUxLDcgKzUwLDYgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRw
U2VydmVyQmFzZSk6CiAgICAgICAgICMgV2Via2l0IHRlc3RzCiAgICAgICAgIGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmopCiAgICAgICAgIHNl
bGYuX291dHB1dF9kaXIgPSBvdXRwdXRfZGlyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25l
CiAgICAgICAgIHNlbGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CiAg
ICAgICAgIHNlbGYuX3J1bl9iYWNrZ3JvdW5kID0gcnVuX2JhY2tncm91bmQKQEAgLTgzLDEzICs4
MSw3IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgog
ICAgICAgICAgICAgICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzogc2VsZi5fd2Via2l0X3Rl
c3RzLAogICAgICAgICAgICAgICAgICAnc3NsY2VydCc6IHNlbGYuX3BlbV9maWxlfV0pCiAKLSAg
ICBkZWYgaXNfcnVubmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3MgIT0g
Tm9uZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmco
KToKLSAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0xpZ2h0
dHBkIGFscmVhZHkgcnVubmluZycpCi0KKyAgICBkZWYgcHJlcGFyZV9jb25maWcoc2VsZik6CiAg
ICAgICAgIGJhc2VfY29uZl9maWxlID0gc2VsZi5fcG9ydF9vYmoucGF0aF9mcm9tX3dlYmtpdF9i
YXNlKCdUb29scycsCiAgICAgICAgICAgICAnU2NyaXB0cycsICd3ZWJraXRweScsICdsYXlvdXRf
dGVzdHMnLCAncG9ydCcsICdsaWdodHRwZC5jb25mJykKICAgICAgICAgb3V0X2NvbmZfZmlsZSA9
IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCAnbGlnaHR0cGQuY29uZicpCkBAIC05OSwx
MCArOTEsNiBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNl
KToKICAgICAgICAgbG9nX2ZpbGVfbmFtZSA9ICJlcnJvci5sb2ctIiArIHRpbWVfc3RyICsgIi50
eHQiCiAgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBs
b2dfZmlsZV9uYW1lKQogCi0gICAgICAgICMgUmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdlIG9ubHkg
bmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMuCi0gICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxl
cyhzZWxmLl9vdXRwdXRfZGlyLCAiYWNjZXNzLmxvZy0iKQotICAgICAgICBzZWxmLnJlbW92ZV9s
b2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImVycm9yLmxvZy0iKQotCiAgICAgICAgICMgV3Jp
dGUgb3V0IHRoZSBjb25maWcKICAgICAgICAgYmFzZV9jb25mID0gc2VsZi5fZmlsZXN5c3RlbS5y
ZWFkX3RleHRfZmlsZShiYXNlX2NvbmZfZmlsZSkKIApAQCAtMTg4LDM1ICsxNzYsMTQgQEAgY2xh
c3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICAg
ICBzZWxmLl9maWxlc3lzdGVtLmNvcHlmaWxlKG9zLnBhdGguam9pbihtb2R1bGVfcGF0aCwgbGli
X2ZpbGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpv
aW4odG1wX21vZHVsZV9wYXRoLCBsaWJfZmlsZSkpCiAKLSAgICAgICAgZW52ID0gc2VsZi5fcG9y
dF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3Rh
cnRpbmcgJXMgc2VydmVyLCBjbWQ9IiVzIicgJSAoc2VsZi5uYW1lLCBzdHIoc3RhcnRfY21kKSkp
Ci0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc3RhcnRfY21k
LCBlbnY9ZW52LCBzdGRpbj1zZWxmLl9leGVjdXRpdmUuUElQRSkKLQotICAgICAgICAjIFdhaXQg
Zm9yIHNlcnZlciB0byBzdGFydC4KKyAgICAgICAgc2VsZi5fc3RhcnRfY21kID0gc3RhcnRfY21k
CisgICAgICAgIHNlbGYuX2VudiA9IHNlbGYuX3BvcnRfb2JqLnNldHVwX2Vudmlyb25fZm9yX3Nl
cnZlcigpCiAgICAgICAgIHNlbGYubWFwcGluZ3MgPSBtYXBwaW5ncwotICAgICAgICBzZXJ2ZXJf
c3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKAotICAgICAgICAgICAgc2VsZi5pc19zZXJ2
ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCiAKLSAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5h
dGVkIGFscmVhZHkKLSAgICAgICAgaWYgbm90IHNlcnZlcl9zdGFydGVkIG9yIHNlbGYuX3Byb2Nl
c3MucmV0dXJuY29kZSAhPSBOb25lOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFz
ZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzLicgJSBzZWxmLm5hbWUpCi0KLSAgICAg
ICAgX2xvZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLQotICAgICMgVE9E
TyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkgdG8gc2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cg
ZmlsZXMgYXJlCi0gICAgIyBwcm9iYWJseSBub3QgYmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBk
b2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5raWxsID8KLQotICAgIGRlZiBzdG9wKHNlbGYpOgot
ICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4KLQot
ICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAg
ICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBzZWxmLl9wb3J0
X29iai5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhodHRwZF9waWQpCisgICAgZGVmIHJlbW92ZV9z
dGFsZV9sb2dzKHNlbGYpOgorICAgICAgICBzZWxmLnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0
cHV0X2RpciwgImFjY2Vzcy5sb2ctIikKKyAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNl
bGYuX291dHB1dF9kaXIsICJlcnJvci5sb2ctIikKIAotICAgICAgICBpZiBzZWxmLl9wcm9jZXNz
OgotICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBP
U0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1
ZTE3MzE3MTcKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCi0gICAgICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gTm9uZQorICAgIGRlZiBzcGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAg
ICBfbG9nLmRlYnVnKCdzdGFydGluZyAlcywgY21kPSIlcyInICUgKHNlbGYubmFtZSwgc2VsZi5f
c3RhcnRfY21kKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9z
dGFydF9jbWQsIGVudj1zZWxmLl9lbnYsIHNoZWxsPUZhbHNlLCBzdGRlcnI9c2VsZi5fZXhlY3V0
aXZlLlBJUEUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkKaW5kZXggYmI2YzM5YmRjYzAyMTIyNDQw
ZDkxODQ1YjIyODRiZjViODgwOTY1Ni4uYjA5NzAzYmMzM2ZhY2I5NGIyZWIzNDZiMjMwODVjMDQ2
YzFhZGVlYSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQpAQCAtMjksMTggKzI5LDIzIEBACiAK
ICIiIkJhc2UgY2xhc3Mgd2l0aCBjb21tb24gcm91dGluZXMgYmV0d2VlbiB0aGUgQXBhY2hlIGFu
ZCBMaWdodHRwZCBzZXJ2ZXJzLiIiIgogCitpbXBvcnQgZXJybm8KIGltcG9ydCBsb2dnaW5nCi1p
bXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQKIGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCi0KLWZy
b20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQgZmlsZXN5c3RlbQogCiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0Lmh0dHBfc2VydmVyX2Jh
c2UiKQogCiAKK2NsYXNzIFNlcnZlckVycm9yKEV4Y2VwdGlvbik6CisgICAgcGFzcworCisKIGNs
YXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CisgICAgIiIiQSBza2VsZXRvbiBjbGFzcyBmb3Ig
c3RhcnRpbmcgYW5kIHN0b3BwaW5nIHNlcnZlcnMgdXNlZCBieSB0aGUgbGF5b3V0IHRlc3RzLiIi
IgorCiAgICAgbmFtZSA9ICc8dmlydHVhbD4nCisgICAgbWFwcGluZ3MgPSB7fQogICAgIHBpZF9m
aWxlID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKToKQEAgLTQ5LDcg
KzU0LDc1IEBAIGNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CiAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0gPSBwb3J0X29iai5fZmlsZXN5c3RlbQogICAgICAgICBzZWxmLl9wcm9jZXNzID0g
Tm9uZQogCi0gICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgorICAgIGRlZiBz
dGFydChzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRoZSBzZXJ2ZXIuIiIiCisgICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignJXMgYWxyZWFk
eSBydW5uaW5nJyAlIHNlbGYubmFtZSkKKworICAgICAgICAjIFNvbWV0aW1lcyBsb2dzIGFyZSBv
cGVuIGluIG90aGVyIHByb2Nlc3NlcyBidXQgdGhleSBzaG91bGQgY2xlYXIgZXZlbnR1YWxseS4K
KyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc3RhbGVfbG9ncygpCisgICAg
ICAgIGV4Y2VwdCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgX2xvZy53YXJuaW5nKCdGYWlsZWQg
dG8gcmVtb3ZlIG9sZCAlcyBsb2cgZmlsZXMnICUgc2VsZi5uYW1lKQorCisgICAgICAgIHNlbGYu
cHJlcGFyZV9jb25maWcoKQorCisgICAgICAgIHNlbGYuX2NoZWNrX3RoYXRfYWxsX3BvcnRzX2Fy
ZV9hdmFpbGFibGUoKQorCisgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLnNwYXduX3Byb2Nl
c3MoKQorCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0ZWQuIFRlc3RpbmcgcG9ydHMiICUg
c2VsZi5uYW1lKQorICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYuX3dhaXRfZm9yX2FjdGlv
bihzZWxmLl9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCisgICAgICAgIGlmIHNlcnZl
cl9zdGFydGVkOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiJXMgc3VjY2Vzc2Z1bGx5IHN0YXJ0
ZWQiICUgc2VsZi5uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU2VydmVy
RXJyb3IoJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXInICUgc2VsZi5fbmFtZSkKKworICAgICAg
ICBpZiBzZWxmLnBpZF9maWxlOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90
ZXh0X2ZpbGUoc2VsZi5waWRfZmlsZSwgc3RyKHNlbGYuX3Byb2Nlc3MucGlkKSkKKworICAgIGRl
ZiBzdG9wKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBydW5u
aW5nICVzIHNlcnZlcnMiICUgc2VsZi5uYW1lKQorICAgICAgICBwaWQgPSBOb25lCisgICAgICAg
IGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAor
ICAgICAgICBlbGlmIHNlbGYucGlkX2ZpbGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNl
bGYucGlkX2ZpbGUpOgorICAgICAgICAgICAgcGlkID0gaW50KHNlbGYuX2ZpbGVzeXN0ZW0ucmVh
ZF90ZXh0X2ZpbGUoc2VsZi5waWRfZmlsZSkpCisKKyAgICAgICAgaWYgbm90IHBpZDoKKyAgICAg
ICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9leGVjdXRpdmUua2lsbF9w
cm9jZXNzKHBpZCkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgICMgd2Fp
dCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86CisgICAg
ICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3CisgICAgICAgICAg
ICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUK
KyAgICAgICAgaWYgc2VsZi5waWRfZmlsZSBhbmQgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2Vs
Zi5waWRfZmlsZSk6CisgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShzZWxmLnBp
ZF9maWxlKQorCisgICAgICAgIHNlbGYuY2xlYW51cF9hZnRlcl9zdG9wKCkKKworICAgIGRlZiBw
cmVwYXJlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJlbW92ZV9zdGFs
ZV9sb2dzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgc3Bhd25fcHJvY2VzcyhzZWxm
KToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsZWFudXBf
YWZ0ZXJfc3RvcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHJlbW92ZV9sb2dfZmls
ZXMoc2VsZiwgZm9sZGVyLCBzdGFydHNfd2l0aCk6CisgICAgICAgIGZpbGVzID0gc2VsZi5fZmls
ZXN5c3RlbS5saXN0ZGlyKGZvbGRlcikKKyAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAg
ICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgorICAgICAgICAgICAgICAg
IGZ1bGxfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihmb2xkZXIsIGZpbGUpCisgICAgICAg
ICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoZnVsbF9wYXRoKQorCisgICAgZGVmIF93
YWl0X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9uKToKICAgICAgICAgIiIiUmVwZWF0IHRoZSBhY3Rp
b24gZm9yIDIwIHNlY29uZHMgb3IgdW50aWwgaXQgc3VjY2VlZHMuIFJldHVybnMKICAgICAgICAg
d2hldGhlciBpdCBzdWNjZWVkZWQuIiIiCiAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUo
KQpAQCAtNjEsMjggKzEzNCwzNyBAQCBjbGFzcyBIdHRwU2VydmVyQmFzZShvYmplY3QpOgogCiAg
ICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIGlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9w
b3J0cyhzZWxmKToKKyAgICBkZWYgX2lzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cyhzZWxm
KToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyBvbiBh
bGwgdGhlIGRlc2lyZWQgcG9ydHMuIiIiCi0gICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYubWFw
cGluZ3M6Ci0gICAgICAgICAgICBpZiAnc3NsY2VydCcgaW4gbWFwcGluZzoKLSAgICAgICAgICAg
ICAgICBodHRwX3N1ZmZpeCA9ICdzJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAg
ICBodHRwX3N1ZmZpeCA9ICcnCi0KLSAgICAgICAgICAgIHVybCA9ICdodHRwJXM6Ly8xMjcuMC4w
LjE6JWQvJyAlIChodHRwX3N1ZmZpeCwgbWFwcGluZ1sncG9ydCddKQorICAgICAgICBpZiBub3Qg
c2VsZi5fZXhlY3V0aXZlLmNoZWNrX3J1bm5pbmdfcGlkKHNlbGYuX3Byb2Nlc3MucGlkKToKKyAg
ICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBpc24ndCBydW5uaW5nIGF0IGFsbCIpCisgICAg
ICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcigiU2VydmVyIGV4aXRlZCIpCiAKKyAgICAgICAgZm9y
IG1hcHBpbmcgaW4gc2VsZi5tYXBwaW5nczoKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0
KCkKKyAgICAgICAgICAgIHBvcnQgPSBtYXBwaW5nWydwb3J0J10KICAgICAgICAgICAgIHRyeToK
LSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVuKHVybCwgcHJveGllcz17
fSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBhdCAlcyIgJSB1
cmwpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgnbG9jYWxob3N0JywgcG9ydCkpCisgICAg
ICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgb24gJWQiICUgcG9ydCkKICAg
ICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgICAgIF9sb2cuZGVidWco
IlNlcnZlciBOT1QgcnVubmluZyBhdCAlczogJXMiICUgKHVybCwgZSkpCisgICAgICAgICAgICAg
ICAgaWYgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNPTk5SRVNF
VCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1
ZygiU2VydmVyIE5PVCBydW5uaW5nIG9uICVkOiAlcyIgJSAocG9ydCwgZSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCi0KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAg
ICAgcy5jbG9zZSgpCiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgcmVtb3ZlX2xvZ19m
aWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKLSAgICAgICAgZmlsZXMgPSBvcy5saXN0
ZGlyKGZvbGRlcikKLSAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBpZiBm
aWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgotICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9
IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAgICAgICAgZmlsZXN5c3RlbS5G
aWxlU3lzdGVtKCkucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICBkZWYgX2NoZWNrX3RoYXRfYWxsX3Bv
cnRzX2FyZV9hdmFpbGFibGUoc2VsZik6CisgICAgICAgIGZvciBtYXBwaW5nIGluIHNlbGYubWFw
cGluZ3M6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBwb3J0
ID0gbWFwcGluZ1sncG9ydCddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5i
aW5kKCgnbG9jYWxob3N0JywgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToK
KyAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUxSRUFEWSwgZXJybm8uRUFE
RFJJTlVTRSk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdQb3J0ICVk
IGlzIGFscmVhZHkgaW4gdXNlLicgJSBwb3J0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAg
ICAgIHMuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CmluZGV4IDc4YjkzMTg4ZDNlMTAy
N2Q5NjRiMTMwMTMyNzA4NTI5ZDhjNmE0MDkuLjkyNTk4NGU5NWVjYzhmZjQ2MTNiOWNmY2IwNjc5
NDkzOWM5YjVkNWUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKQEAgLTI5LDE4ICsyOSwxNCBA
QAogCiAiIiJBIGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgUHlXZWJTb2NrZXQgc2VydmVy
IHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgogCi0KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MK
IGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCiAKIGltcG9ydCBodHRwX3Nl
cnZlcgogaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKIAotZnJvbSB3ZWJraXRweS5jb21tb24uc3lz
dGVtLmV4ZWN1dGl2ZSBpbXBvcnQgRXhlY3V0aXZlCi0KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9n
Z2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC53ZWJzb2NrZXRfc2VydmVyIikKIApAQCAt
NTEsMzMgKzQ3LDYgQEAgX0RFRkFVTFRfV1NfUE9SVCA9IDg4ODAKIF9ERUZBVUxUX1dTU19QT1JU
ID0gOTMyMwogCiAKLWRlZiB1cmxfaXNfYWxpdmUodXJsKToKLSAgICAiIiJDaGVja3MgdG8gc2Vl
IGlmIHdlIGdldCBhbiBodHRwIHJlc3BvbnNlIGZyb20gfHVybHwuCi0gICAgV2UgcG9sbCB0aGUg
dXJsIDIwIHRpbWVzIHdpdGggYSAwLjUgc2Vjb25kIGRlbGF5LiAgSWYgd2UgZG9uJ3QKLSAgICBn
ZXQgYSByZXBseSBpbiB0aGF0IHRpbWUsIHdlIGdpdmUgdXAgYW5kIGFzc3VtZSB0aGUgaHR0cGQK
LSAgICBkaWRuJ3Qgc3RhcnQgcHJvcGVybHkuCi0KLSAgICBBcmdzOgotICAgICAgdXJsOiBUaGUg
VVJMIHRvIGNoZWNrLgotICAgIFJldHVybjoKLSAgICAgIFRydWUgaWYgdGhlIHVybCBpcyBhbGl2
ZS4KLSAgICAiIiIKLSAgICBzbGVlcF90aW1lID0gMC41Ci0gICAgd2FpdF90aW1lID0gMTAKLSAg
ICB3aGlsZSB3YWl0X3RpbWUgPiAwOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXNwb25z
ZSA9IHVybGxpYi51cmxvcGVuKHVybCwgcHJveGllcz17fSkKLSAgICAgICAgICAgICMgU2VydmVy
IGlzIHVwIGFuZCByZXNwb25kaW5nLgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAg
ZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgICMgV2FpdCBmb3Igc2xl
ZXBfdGltZSBiZWZvcmUgdHJ5aW5nIGFnYWluLgotICAgICAgICB3YWl0X3RpbWUgLT0gc2xlZXBf
dGltZQotICAgICAgICB0aW1lLnNsZWVwKHNsZWVwX3RpbWUpCi0KLSAgICByZXR1cm4gRmFsc2UK
LQotCiBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgbmFtZSA9
ICdweXdlYnNvY2tldCcKIApAQCAtMTAyLDcgKzcxLDkgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0
cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgogICAgICAgICAg
ICAgc2VsZi5uYW1lID0gJ3B5d2Vic29ja2V0X3NlY3VyZScKICAgICAgICAgc2VsZi5waWRfZmls
ZSA9IHBpZGZpbGUKKyAgICAgICAgc2VsZi5fd3NpbiA9IE5vbmUKICAgICAgICAgc2VsZi5fd3Nv
dXQgPSBOb25lCisgICAgICAgIHNlbGYubWFwcGluZ3MgPSBbeydwb3J0Jzogc2VsZi5fcG9ydH1d
CiAKICAgICAgICAgIyBXZWJraXQgdGVzdHMKICAgICAgICAgaWYgc2VsZi5fcm9vdDoKQEAgLTEx
OCwyMiArODksMTUgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgog
ICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVz
dHMgPSBOb25lCiAKLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl93
ZWJfc29ja2V0X3Rlc3RzOgotICAgICAgICAgICAgX2xvZy5pbmZvKCdObyBuZWVkIHRvIHN0YXJ0
ICVzIHNlcnZlci4nICUgc2VsZi5uYW1lKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlm
IHNlbGYuaXNfcnVubmluZygpOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5T
ZXJ2ZXJFcnJvcignJXMgaXMgYWxyZWFkeSBydW5uaW5nLicgJSBzZWxmLm5hbWUpCi0KLSAgICAg
ICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCclZCViJVktJUglTSVTJykKICAgICAgICAgaWYg
c2VsZi5fdXNlX3RsczoKLSAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgK
KyAgICAgICAgICAgIHNlbGYuX2xvZ19wcmVmaXggPSBfV1NTX0xPR19QUkVGSVgKICAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIGxvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAotICAgICAgICBs
b2dfZmlsZV9uYW1lID0gbG9nX3ByZWZpeCArIHRpbWVfc3RyCisgICAgICAgICAgICBzZWxmLl9s
b2dfcHJlZml4ID0gX1dTX0xPR19QUkVGSVgKIAotICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZp
bGVzLiBXZSBvbmx5IG5lZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAgICBzZWxmLnJl
bW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgbG9nX3ByZWZpeCkKKyAgICBkZWYgcHJl
cGFyZV9jb25maWcoc2VsZik6CisgICAgICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgnJWQl
YiVZLSVIJU0lUycpCisgICAgICAgIGxvZ19maWxlX25hbWUgPSBzZWxmLl9sb2dfcHJlZml4ICsg
dGltZV9zdHIKKyAgICAgICAgc2VsZi5fd3NpbiA9IG9wZW4ob3MuZGV2bnVsbCwgJ3InKQogCiAg
ICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmls
ZV9uYW1lICsgIi1lcnIudHh0IikKIApAQCAtMTcxLDU4ICsxMzUsMjEgQEAgY2xhc3MgUHlXZWJT
b2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgc3RhcnRfY21kLmV4dGVu
ZChbJy10JywgJy1rJywgc2VsZi5fcHJpdmF0ZV9rZXksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnLWMnLCBzZWxmLl9jZXJ0aWZpY2F0ZV0pCiAKLSAgICAgICAgZW52ID0gc2VsZi5f
cG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKLSAgICAgICAgZW52WydQWVRIT05Q
QVRIJ10gPSAocHl3ZWJzb2NrZXRfYmFzZSArIG9zLnBhdGgucGF0aHNlcCArCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVudi5nZXQoJ1BZVEhPTlBBVEgnLCAnJykpCisgICAgICAgIHNl
bGYuX3N0YXJ0X2NtZCA9IHN0YXJ0X2NtZAorICAgICAgICBzZWxmLl9lbnYgPSBzZWxmLl9wb3J0
X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9lbnZbJ1BZVEhP
TlBBVEgnXSA9IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsgc2VsZi5fZW52
LmdldCgnUFlUSE9OUEFUSCcsICcnKSkKIAotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAl
cyBzZXJ2ZXIgb24gJWQsIGNtZD0iJXMiLicgJSAoc2VsZi5uYW1lLCBzZWxmLl9wb3J0LCBzdHIo
c3RhcnRfY21kKSkpCi0gICAgICAgICMgTm90ZTogTm90IHRocmVhZCBzYWZlOiBodHRwOi8vYnVn
cy5weXRob24ub3JnL2lzc3VlMjMyMAotICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fZXhl
Y3V0aXZlLnBvcGVuKHN0YXJ0X2NtZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRpbj1vcGVuKG9zLmRldm51bGwsICdyJyksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXNlbGYuX3dzb3V0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zZWxmLl9l
eGVjdXRpdmUuU1RET1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudj1lbnYpCisgICAgZGVmIHJlbW92ZV9zdGFsZV9sb2dzKHNlbGYpOgorICAgICAg
ICBzZWxmLnJlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2Rpciwgc2VsZi5fbG9nX3ByZWZp
eCkKIAotICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAgdXJsID0gJ2h0dHBz
JwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdXJsID0gJ2h0dHAnCi0gICAgICAgIHVybCA9
IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKLSAgICAgICAgaWYgbm90IHVy
bF9pc19hbGl2ZSh1cmwpOgotICAgICAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2Rl
ID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxs
X3Byb2Nlc3Moc2VsZi5fcHJvY2Vzcy5waWQpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxm
LnJlYWRfdGV4dF9maWxlKG91dHB1dF9sb2cpLnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAg
ICBfbG9nLmVycm9yKGxpbmUpCi0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNl
cnZlckVycm9yKCdGYWlsZWQgdG8gc3RhcnQgJXMgc2VydmVyIG9uIHBvcnQgJXMuJyAlIChzZWxm
Lm5hbWUsIHNlbGYuX3BvcnQpKQotCi0gICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBh
bHJlYWR5Ci0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgotICAg
ICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0
YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5uYW1lKQotICAgICAgICBpZiBzZWxmLnBpZF9maWxlOgot
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5waWRfZmls
ZSwgIiVkIiAlIHNlbGYuX3Byb2Nlc3MucGlkKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAg
ICAgIGlmIG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAg
ICAgIHBpZCA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgIHBp
ZCA9IHNlbGYuX3Byb2Nlc3MucGlkCi0gICAgICAgIGVsaWYgc2VsZi5waWRfZmlsZToKLSAgICAg
ICAgICAgIHBpZCA9IGludChzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYucGlk
X2ZpbGUpKQotCi0gICAgICAgIGlmIG5vdCBwaWQ6Ci0gICAgICAgICAgICByYWlzZSBodHRwX3Nl
cnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQgdG8gZmluZCAlcyBzZXJ2ZXIgcGlkLicgJSBz
ZWxmLm5hbWUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIg
JWQuJyAlIChzZWxmLm5hbWUsIHBpZCkpCi0gICAgICAgIHNlbGYuX3BvcnRfb2JqLl9leGVjdXRp
dmUua2lsbF9wcm9jZXNzKHBpZCkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAg
ICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1
ZSB0bzoKLSAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCi0gICAgICAgICAgICBzZWxmLl9wcm9j
ZXNzID0gTm9uZQorICAgIGRlZiBzcGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBfbG9nLmRl
YnVnKCdzdGFydGluZyAlcywgY21kPSIlcyInICUgKHNlbGYubmFtZSwgc2VsZi5fc3RhcnRfY21k
KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQs
IGVudj1zZWxmLl9lbnYsIHNoZWxsPUZhbHNlLCBzdGRpbj1zZWxmLl93c2luLCBzdGRvdXQ9c2Vs
Zi5fd3NvdXQsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuU1RET1VUKQogCisgICAgZGVmIGNsZWFu
dXBfYWZ0ZXJfc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd3NpbjoKKyAgICAgICAgICAg
IHNlbGYuX3dzaW4uY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fd3NpbiA9IE5vbmUKICAgICAg
ICAgaWYgc2VsZi5fd3NvdXQ6CiAgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCiAgICAg
ICAgICAgICBzZWxmLl93c291dCA9IE5vbmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96359</attachid>
            <date>2011-06-07 19:32:54 -0700</date>
            <delta_ts>2011-06-10 20:39:59 -0700</delta_ts>
            <desc>ready for review</desc>
            <filename>bug-62180-20110607193252.patch</filename>
            <type>text/plain</type>
            <size>20171</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NjljZDRmMTI4NWNiOWVhZjcxYjI2N2VjZjkxOWJkNjZi
MzIxZDhhLi5mNWJlODY2OGMxNDRmMTViOTQ5ODM3ZTUwNjk5YTE0ZmZmNjhiNDlkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDYtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogZml4IGh0
dHAsIHdlYnNvY2tldCBzZXJ2ZXIgc3RhcnR1cCwgc2h1dGRvd24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTgwCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgcmVmYWN0b3JzIGFsbCBvZiB0aGUgc2VydmVyLXJlbGF0ZWQgY29kZSB0bworICAgICAgICBo
YXZlIGNvbnNpc3RlbnQgc2VtYW50aWNzLiBJdCBwdXNoZXMgdGhlIHN0YXJ0KCkvc3RvcCgpCisg
ICAgICAgIGxvZ2ljIGludG8gdGhlIGJhc2UgY2xhc3MgYW5kIGFkZHMgZm91ciBtdWNoIHNtYWxs
ZXIgcm91dGluZXMKKyAgICAgICAgZm9yIHNwZWNpYWxpemF0aW9uOgorICAgICAgICBwcmVwYXJl
X2NvbmZpZygpIC0gZm9yIG9wdGlvbmFsbHkgd3JpdGluZyBjb25maWcgZmlsZXMgZXRjLgorICAg
ICAgICAgICAgdG8gZGlzayBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyCisgICAgICAgIHJl
bW92ZV9zdGFsZV9sb2dfZmlsZXMoKQorICAgICAgICBzcGF3bl9wcm9jZXNzKCkgLSB0aGUgYWN0
dWFsIGxhdW5jaCBvZiB0aGUgc3VicHJvY2VzcworICAgICAgICBjbGVhbnVwX2FmdGVyX3N0b3Ao
KSAtIGFuZCBjdXN0b20gY2xlYW51cCBjb2RlCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFu
Z2UgdGhlIHRocmVlIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2VyZQorICAgICAgICBmYWlybHkg
aW5jb25zaXN0ZW50LCBsZWFkaW5nIHRvIGxvdHMgb2Ygd2VpcmRuZXNzIG9uIHRoZSBib3RzCisg
ICAgICAgIHdpdGggc2VydmVycyBiZWluZyBsZWZ0IGFyb3VuZCwgZXRjLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorCiAyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9h
cGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRleCA1YTNhYTc3ODYzYzk5MmEzNjU1MDQ0
YmQwMmI4NTZkMDdlNTIyYjlmLi4yNWU5ODFlYWJlZGNiOThmMzQxMDVlZjlmZmJlNDA4MzVjNTUz
YTVmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtMTcxLDQ2ICsxNzEsMTkgQEAg
Y2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJh
c2UpOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRwZF9jb25m
aWdfY29weSkKICAgICAgICAgcmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CiAKLSAgICBkZWYgX3N0
YXJ0X2h0dHBkX3Byb2Nlc3Moc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgaHR0cGQgcHJv
Y2VzcyBhbmQgcmV0dXJucyB3aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIiIgorICAgIGRlZiBz
cGF3bl9wcm9jZXNzKHNlbGYpOgogICAgICAgICAjIFVzZSBzaGVsbD1UcnVlIGJlY2F1c2Ugd2Ug
am9pbiB0aGUgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgZm9yCiAgICAgICAgICMgdGhlIHNha2Ug
b2YgV2luZG93L0N5Z3dpbiBhbmQgaXQgbmVlZHMgcXVvdGluZyB0aGF0IGJyZWFrcwogICAgICAg
ICAjIHNoZWxsPUZhbHNlLgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdG8g
YmUgam9pbmluZyBzaGVsbCBhcmd1bWVudHMgaW50byBzdHJpbmdzLgogICAgICAgICAjIHNoZWxs
PVRydWUgaXMgYSB0cmFpbCBvZiB0ZWFycy4KICAgICAgICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNh
ZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCi0gICAgICAgIF9sb2cuZGVidWco
J1N0YXJ0aW5nIGh0dHAgc2VydmVyLCBjbWQ9IiVzIicgJSBzdHIoc2VsZi5fc3RhcnRfY21kKSkK
LSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFy
dF9jbWQsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuUElQRSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAg
ZXJyID0gc2VsZi5fcHJvY2Vzcy5zdGRlcnIucmVhZCgpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0
YXJ0aW5nICVzIHNlcnZlciwgY21kPSIlcyInICUgKHNlbGYubmFtZSwgc3RyKHNlbGYuX3N0YXJ0
X2NtZCkpKQorICAgICAgICBwcm9jZXNzID0gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0
YXJ0X2NtZCwgc2hlbGw9VHJ1ZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQorICAgICAg
ICBlcnIgPSBwcm9jZXNzLnN0ZGVyci5yZWFkKCkKICAgICAgICAgaWYgbGVuKGVycik6CiAgICAg
ICAgICAgICBfbG9nLmRlYnVnKGVycikKLSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAg
ICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICAiIiJTdGFydHMg
dGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgIyBTdG9wIGFueSBjdXJyZW50bHkg
cnVubmluZyBzZXJ2ZXJzLgotICAgICAgICBzZWxmLnN0b3AoKQotCi0gICAgICAgIF9sb2cuZGVi
dWcoIlN0YXJ0aW5nICVzIHNlcnZlciIgJSBzZWxmLm5hbWUpCi0gICAgICAgIHNlcnZlcl9zdGFy
dGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKLSAg
ICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJBcGFjaGUg
c3RhcnRlZC4gVGVzdGluZyBwb3J0cyIpCi0gICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNl
bGYud2FpdF9mb3JfYWN0aW9uKAotICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5p
bmdfb25fYWxsX3BvcnRzKQotCi0gICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAgICAgICAg
ICAgX2xvZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxl
ZCB0byBzdGFydCBodHRwIHNlcnZlcicpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAg
IiIiU3RvcHMgdGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgX2xvZy5kZWJ1Zygi
U2h1dHRpbmcgZG93biBhbnkgcnVubmluZyBodHRwIHNlcnZlcnMiKQotICAgICAgICBodHRwZF9w
aWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9w
aWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNlbGYu
cGlkX2ZpbGUpOgotICAgICAgICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5waWRfZmls
ZSkucmVhZGxpbmUoKSkKLSAgICAgICAgaWYgaHR0cGRfcGlkOgotICAgICAgICAgICAgc2VsZi5f
ZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhodHRwZF9waWQpCisgICAgICAgICAgICBzZWxmLl9leGVj
dXRpdmUua2lsbF9wcm9jZXNzKHByb2Nlc3MucGlkKQorICAgICAgICAgICAgcHJvY2Vzcy53YWl0
KCkKKyAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdGYWlsZWQgdG8gc3RhcnQgJXM6ICVz
JyAlIChzZWxmLm5hbWUsIGVycikpCisgICAgICAgIHJldHVybiBwcm9jZXNzCmRpZmYgLS1naXQg
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5w
eQppbmRleCA4OGVkNzYxMDU5YmZkNWYyN2M4NmM5YWIxNDBmYmQxNmM3MjJjYWIxLi45M2E0NzBh
ZGI5MjRjZDAwZjIzOGFhNmQzNTNkNTNhMGY4M2ExMGUwIDEwMDc1NQotLS0gYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKQEAgLTMz
LDcgKzMzLDYgQEAgaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0
IHRpbWUKLWltcG9ydCB1cmxsaWIKIAogaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKIApAQCAtNTEs
NyArNTAsNiBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNl
KToKICAgICAgICAgIyBXZWJraXQgdGVzdHMKICAgICAgICAgaHR0cF9zZXJ2ZXJfYmFzZS5IdHRw
U2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKICAgICAgICAgc2VsZi5fb3V0cHV0
X2RpciA9IG91dHB1dF9kaXIKLSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKICAgICAgICAg
c2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKICAgICAgICAgc2Vs
Zi5fcnVuX2JhY2tncm91bmQgPSBydW5fYmFja2dyb3VuZApAQCAtODMsMTMgKzgxLDcgQEAgY2xh
c3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICAg
ICAgICAgeydwb3J0JzogODQ0MywgJ2RvY3Jvb3QnOiBzZWxmLl93ZWJraXRfdGVzdHMsCiAgICAg
ICAgICAgICAgICAgICdzc2xjZXJ0Jzogc2VsZi5fcGVtX2ZpbGV9XSkKIAotICAgIGRlZiBpc19y
dW5uaW5nKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fcHJvY2VzcyAhPSBOb25lCi0KLSAg
ICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgotICAgICAg
ICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignTGlnaHR0cGQgYWxyZWFk
eSBydW5uaW5nJykKLQorICAgIGRlZiBwcmVwYXJlX2NvbmZpZyhzZWxmKToKICAgICAgICAgYmFz
ZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xz
JywKICAgICAgICAgICAgICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xheW91dF90ZXN0cycsICdw
b3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQogICAgICAgICBvdXRfY29uZl9maWxlID0gb3MucGF0aC5q
b2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKQEAgLTk5LDEwICs5MSw2IEBA
IGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAg
ICBsb2dfZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIKICAgICAg
ICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25h
bWUpCiAKLSAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtl
ZXAgdGhlIGxhc3Qgb25lcy4KLSAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291
dHB1dF9kaXIsICJhY2Nlc3MubG9nLSIpCi0gICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhz
ZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9nLSIpCi0KICAgICAgICAgIyBXcml0ZSBvdXQgdGhl
IGNvbmZpZwogICAgICAgICBiYXNlX2NvbmYgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9m
aWxlKGJhc2VfY29uZl9maWxlKQogCkBAIC0xODgsMzUgKzE3NiwxNCBAQCBjbGFzcyBMaWdodHRw
ZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgICAgIHNlbGYuX2Zp
bGVzeXN0ZW0uY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRoLCBsaWJfZmlsZSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih0bXBfbW9k
dWxlX3BhdGgsIGxpYl9maWxlKSkKIAotICAgICAgICBlbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1
cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBz
ZXJ2ZXIsIGNtZD0iJXMiJyAlIChzZWxmLm5hbWUsIHN0cihzdGFydF9jbWQpKSkKLSAgICAgICAg
c2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzdGFydF9jbWQsIGVudj1lbnYs
IHN0ZGluPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQotCi0gICAgICAgICMgV2FpdCBmb3Igc2VydmVy
IHRvIHN0YXJ0LgorICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBzdGFydF9jbWQKKyAgICAgICAg
c2VsZi5fZW52ID0gc2VsZi5fcG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKICAg
ICAgICAgc2VsZi5tYXBwaW5ncyA9IG1hcHBpbmdzCi0gICAgICAgIHNlcnZlcl9zdGFydGVkID0g
c2VsZi53YWl0X2Zvcl9hY3Rpb24oCi0gICAgICAgICAgICBzZWxmLmlzX3NlcnZlcl9ydW5uaW5n
X29uX2FsbF9wb3J0cykKIAotICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFk
eQotICAgICAgICBpZiBub3Qgc2VydmVyX3N0YXJ0ZWQgb3Igc2VsZi5fcHJvY2Vzcy5yZXR1cm5j
b2RlICE9IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVy
cm9yKCdGYWlsZWQgdG8gc3RhcnQgJXMuJyAlIHNlbGYubmFtZSkKLQotICAgICAgICBfbG9nLmRl
YnVnKCJTZXJ2ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQiKQotCi0gICAgIyBUT0RPKGRlYW5tKTog
RmluZCBhIG5pY2VyIHdheSB0byBzaHV0ZG93biBjbGVhbmx5LiAgT3VyIGxvZyBmaWxlcyBhcmUK
LSAgICAjIHByb2JhYmx5IG5vdCBiZWluZyBmbHVzaGVkLCBldGMuLi4gd2h5IGRvZXNuJ3Qgb3Vy
IHB5dGhvbiBoYXZlIG9zLmtpbGwgPwotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIGlm
IG5vdCBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIGh0
dHBkX3BpZCA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgIGh0
dHBkX3BpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxs
X3Byb2Nlc3MoaHR0cGRfcGlkKQorICAgIGRlZiByZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToKKyAg
ICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJhY2Nlc3MubG9n
LSIpCisgICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJy
b3IubG9nLSIpCiAKLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgICMgd2Fp
dCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Ci0gICAg
ICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgICAg
ICBzZWxmLl9wcm9jZXNzLndhaXQoKQotICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUK
KyAgICBkZWYgc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1Zygnc3RhcnRp
bmcgJXMsIGNtZD0iJXMiJyAlIChzZWxmLm5hbWUsIHNlbGYuX3N0YXJ0X2NtZCkpCisgICAgICAg
IHJldHVybiBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBlbnY9c2VsZi5f
ZW52LCBzaGVsbD1GYWxzZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9i
YXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3Nl
cnZlcl9iYXNlLnB5CmluZGV4IDcxZTdiMWUyYWJmNjAwNDJhZjM2YWQ0ZTViOWI1ZDI1N2U2NTkx
YjQuLmIwOTcwM2JjMzNmYWNiOTRiMmViMzQ2YjIzMDg1YzA0NmMxYWRlZWEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFz
ZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAiIiJCYXNlIGNsYXNzIHdpdGgg
Y29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSBhbmQgTGlnaHR0cGQgc2VydmVycy4i
IiIKIAoraW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwotaW1wb3J0IG9zCitpbXBvcnQgc29j
a2V0CiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJr
aXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZlcl9iYXNlIikKIApAQCAtNDQsNyArNDIs
MTAgQEAgY2xhc3MgU2VydmVyRXJyb3IoRXhjZXB0aW9uKToKIAogCiBjbGFzcyBIdHRwU2VydmVy
QmFzZShvYmplY3QpOgorICAgICIiIkEgc2tlbGV0b24gY2xhc3MgZm9yIHN0YXJ0aW5nIGFuZCBz
dG9wcGluZyBzZXJ2ZXJzIHVzZWQgYnkgdGhlIGxheW91dCB0ZXN0cy4iIiIKKwogICAgIG5hbWUg
PSAnPHZpcnR1YWw+JworICAgIG1hcHBpbmdzID0ge30KICAgICBwaWRfZmlsZSA9IE5vbmUKIAog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaik6CkBAIC01Myw3ICs1NCw3NSBAQCBjbGFz
cyBIdHRwU2VydmVyQmFzZShvYmplY3QpOgogICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9y
dF9vYmouX2ZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKIAotICAgIGRl
ZiB3YWl0X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICBkZWYgc3RhcnQoc2VsZik6Cisg
ICAgICAgICIiIlN0YXJ0cyB0aGUgc2VydmVyLiIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jZXNz
OgorICAgICAgICAgICAgcmFpc2UgU2VydmVyRXJyb3IoJyVzIGFscmVhZHkgcnVubmluZycgJSBz
ZWxmLm5hbWUpCisKKyAgICAgICAgIyBTb21ldGltZXMgbG9ncyBhcmUgb3BlbiBpbiBvdGhlciBw
cm9jZXNzZXMgYnV0IHRoZXkgc2hvdWxkIGNsZWFyIGV2ZW50dWFsbHkuCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3N0YWxlX2xvZ3MoKQorICAgICAgICBleGNlcHQgT1NF
cnJvciwgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygnRmFpbGVkIHRvIHJlbW92ZSBvbGQg
JXMgbG9nIGZpbGVzJyAlIHNlbGYubmFtZSkKKworICAgICAgICBzZWxmLnByZXBhcmVfY29uZmln
KCkKKworICAgICAgICBzZWxmLl9jaGVja190aGF0X2FsbF9wb3J0c19hcmVfYXZhaWxhYmxlKCkK
KworICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5zcGF3bl9wcm9jZXNzKCkKKworICAgICAg
ICBfbG9nLmRlYnVnKCIlcyBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIiAlIHNlbGYubmFtZSkKKyAg
ICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLl93YWl0X2Zvcl9hY3Rpb24oc2VsZi5faXNfc2Vy
dmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQorICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAg
ICAgICAgICAgIF9sb2cuZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIiAlIHNlbGYubmFt
ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdGYWlsZWQg
dG8gc3RhcnQgJXMgc2VydmVyJyAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgaWYgc2VsZi5waWRf
ZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYu
cGlkX2ZpbGUsIHN0cihzZWxmLl9wcm9jZXNzLnBpZCkpCisKKyAgICBkZWYgc3RvcChzZWxmKToK
KyAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVubmluZyAlcyBzZXJ2ZXJz
IiAlIHNlbGYubmFtZSkKKyAgICAgICAgcGlkID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9wcm9j
ZXNzOgorICAgICAgICAgICAgcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKKyAgICAgICAgZWxpZiBz
ZWxmLnBpZF9maWxlIGFuZCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLnBpZF9maWxlKToK
KyAgICAgICAgICAgIHBpZCA9IGludChzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNl
bGYucGlkX2ZpbGUpKQorCisgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICByZXR1cm4K
KworICAgICAgICBzZWxmLl9wb3J0X29iai5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhwaWQpCisg
ICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhy
ZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgorICAgICAgICAgICAgIyBodHRw
Oi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNworICAgICAgICAgICAgc2VsZi5fcHJvY2Vz
cy53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIGlmIHNl
bGYucGlkX2ZpbGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYucGlkX2ZpbGUpOgor
ICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5waWRfZmlsZSkKKworICAg
ICAgICBzZWxmLmNsZWFudXBfYWZ0ZXJfc3RvcCgpCisKKyAgICBkZWYgcHJlcGFyZV9jb25maWco
c2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiByZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToK
KyAgICAgICAgcGFzcworCisgICAgZGVmIHNwYXduX3Byb2Nlc3Moc2VsZik6CisgICAgICAgIHJh
aXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbGVhbnVwX2FmdGVyX3N0b3Aoc2Vs
Zik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiByZW1vdmVfbG9nX2ZpbGVzKHNlbGYsIGZvbGRl
ciwgc3RhcnRzX3dpdGgpOgorICAgICAgICBmaWxlcyA9IHNlbGYuX2ZpbGVzeXN0ZW0ubGlzdGRp
cihmb2xkZXIpCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYgZmls
ZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBz
ZWxmLl9maWxlc3lzdGVtLmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYu
X2ZpbGVzeXN0ZW0ucmVtb3ZlKGZ1bGxfcGF0aCkKKworICAgIGRlZiBfd2FpdF9mb3JfYWN0aW9u
KHNlbGYsIGFjdGlvbik6CiAgICAgICAgICIiIlJlcGVhdCB0aGUgYWN0aW9uIGZvciAyMCBzZWNv
bmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1cm5zCiAgICAgICAgIHdoZXRoZXIgaXQgc3Vj
Y2VlZGVkLiIiIgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKQEAgLTY1LDI4ICsx
MzQsMzcgQEAgY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKIAogICAgICAgICByZXR1cm4g
RmFsc2UKIAotICAgIGRlZiBpc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6Cisg
ICAgZGVmIF9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6CiAgICAgICAgICIi
IlJldHVybnMgd2hldGhlciB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gYWxsIHRoZSBkZXNpcmVk
IHBvcnRzLiIiIgotICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLm1hcHBpbmdzOgotICAgICAg
ICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6Ci0gICAgICAgICAgICAgICAgaHR0cF9zdWZm
aXggPSAncycKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHR0cF9zdWZmaXgg
PSAnJwotCi0gICAgICAgICAgICB1cmwgPSAnaHR0cCVzOi8vMTI3LjAuMC4xOiVkLycgJSAoaHR0
cF9zdWZmaXgsIG1hcHBpbmdbJ3BvcnQnXSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2V4ZWN1dGl2
ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9wcm9jZXNzLnBpZCk6CisgICAgICAgICAgICBfbG9n
LmRlYnVnKCJTZXJ2ZXIgaXNuJ3QgcnVubmluZyBhdCBhbGwiKQorICAgICAgICAgICAgcmFpc2Ug
U2VydmVyRXJyb3IoIlNlcnZlciBleGl0ZWQiKQogCisgICAgICAgIGZvciBtYXBwaW5nIGluIHNl
bGYubWFwcGluZ3M6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAg
ICBwb3J0ID0gbWFwcGluZ1sncG9ydCddCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAg
ICAgcmVzcG9uc2UgPSB1cmxsaWIudXJsb3Blbih1cmwsIHByb3hpZXM9e30pCi0gICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgYXQgJXMiICUgdXJsKQorICAgICAgICAg
ICAgICAgIHMuY29ubmVjdCgoJ2xvY2FsaG9zdCcsIHBvcnQpKQorICAgICAgICAgICAgICAgIF9s
b2cuZGVidWcoIlNlcnZlciBydW5uaW5nIG9uICVkIiAlIHBvcnQpCiAgICAgICAgICAgICBleGNl
cHQgSU9FcnJvciwgZToKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgTk9UIHJ1
bm5pbmcgYXQgJXM6ICVzIiAlICh1cmwsIGUpKQorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8g
bm90IGluIChlcnJuby5FQ09OTlJFRlVTRUQsIGVycm5vLkVDT05OUkVTRVQpOgorICAgICAgICAg
ICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBOT1Qg
cnVubmluZyBvbiAlZDogJXMiICUgKHBvcnQsIGUpKQogICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQotCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQog
ICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZGVmIHJlbW92ZV9sb2dfZmlsZXMoc2VsZiwgZm9s
ZGVyLCBzdGFydHNfd2l0aCk6Ci0gICAgICAgIGZpbGVzID0gb3MubGlzdGRpcihmb2xkZXIpCi0g
ICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgotICAgICAgICAgICAgaWYgZmlsZS5zdGFydHN3aXRo
KHN0YXJ0c193aXRoKToKLSAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4o
Zm9sZGVyLCBmaWxlKQotICAgICAgICAgICAgICAgIGZpbGVzeXN0ZW0uRmlsZVN5c3RlbSgpLnJl
bW92ZShmdWxsX3BhdGgpCisgICAgZGVmIF9jaGVja190aGF0X2FsbF9wb3J0c19hcmVfYXZhaWxh
YmxlKHNlbGYpOgorICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLm1hcHBpbmdzOgorICAgICAg
ICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgcG9ydCA9IG1hcHBpbmdbJ3Bv
cnQnXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2FsaG9z
dCcsIHBvcnQpKQorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAg
ICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFMUkVBRFksIGVycm5vLkVBRERSSU5VU0UpOgorICAg
ICAgICAgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignUG9ydCAlZCBpcyBhbHJlYWR5IGlu
IHVzZS4nICUgcG9ydCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vi
c29ja2V0X3NlcnZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3Bv
cnQvd2Vic29ja2V0X3NlcnZlci5weQppbmRleCA1OGYxYjc5ZDY3N2E4YzhlNDE2YzhhYjU4MGFi
ZTBkYjkxM2JjNDFlLi45MjU5ODRlOTVlY2M4ZmY0NjEzYjljZmNiMDY3OTQ5MzljOWI1ZDVlIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNv
Y2tldF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CkBAIC0yOSwxOCArMjksMTQgQEAKIAogIiIiQSBjbGFz
cyB0byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5V2ViU29ja2V0IHNlcnZlciB1c2VkIGJ5IGxheW91
dCB0ZXN0cy4iIiIKIAotCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBp
bXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgogCiBpbXBvcnQgaHR0cF9zZXJ2ZXIKIGltcG9ydCBo
dHRwX3NlcnZlcl9iYXNlCiAKLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5leGVjdXRpdmUg
aW1wb3J0IEV4ZWN1dGl2ZQotCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHku
bGF5b3V0X3Rlc3RzLnBvcnQud2Vic29ja2V0X3NlcnZlciIpCiAKQEAgLTUxLDMzICs0Nyw2IEBA
IF9ERUZBVUxUX1dTX1BPUlQgPSA4ODgwCiBfREVGQVVMVF9XU1NfUE9SVCA9IDkzMjMKIAogCi1k
ZWYgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3ZSBnZXQgYW4g
aHR0cCByZXNwb25zZSBmcm9tIHx1cmx8LgotICAgIFdlIHBvbGwgdGhlIHVybCAyMCB0aW1lcyB3
aXRoIGEgMC41IHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0Ci0gICAgZ2V0IGEgcmVwbHkgaW4g
dGhhdCB0aW1lLCB3ZSBnaXZlIHVwIGFuZCBhc3N1bWUgdGhlIGh0dHBkCi0gICAgZGlkbid0IHN0
YXJ0IHByb3Blcmx5LgotCi0gICAgQXJnczoKLSAgICAgIHVybDogVGhlIFVSTCB0byBjaGVjay4K
LSAgICBSZXR1cm46Ci0gICAgICBUcnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCi0gICAgIiIiCi0g
ICAgc2xlZXBfdGltZSA9IDAuNQotICAgIHdhaXRfdGltZSA9IDEwCi0gICAgd2hpbGUgd2FpdF90
aW1lID4gMDoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzcG9uc2UgPSB1cmxsaWIudXJs
b3Blbih1cmwsIHByb3hpZXM9e30pCi0gICAgICAgICAgICAjIFNlcnZlciBpcyB1cCBhbmQgcmVz
cG9uZGluZy4KLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9y
OgotICAgICAgICAgICAgcGFzcwotICAgICAgICAjIFdhaXQgZm9yIHNsZWVwX3RpbWUgYmVmb3Jl
IHRyeWluZyBhZ2Fpbi4KLSAgICAgICAgd2FpdF90aW1lIC09IHNsZWVwX3RpbWUKLSAgICAgICAg
dGltZS5zbGVlcChzbGVlcF90aW1lKQotCi0gICAgcmV0dXJuIEZhbHNlCi0KLQogY2xhc3MgUHlX
ZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgIG5hbWUgPSAncHl3ZWJzb2NrZXQn
CiAKQEAgLTEwMiw3ICs3MSw5IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0
dHBkKToKICAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKICAgICAgICAgICAgIHNlbGYubmFtZSA9
ICdweXdlYnNvY2tldF9zZWN1cmUnCiAgICAgICAgIHNlbGYucGlkX2ZpbGUgPSBwaWRmaWxlCisg
ICAgICAgIHNlbGYuX3dzaW4gPSBOb25lCiAgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQorICAg
ICAgICBzZWxmLm1hcHBpbmdzID0gW3sncG9ydCc6IHNlbGYuX3BvcnR9XQogCiAgICAgICAgICMg
V2Via2l0IHRlc3RzCiAgICAgICAgIGlmIHNlbGYuX3Jvb3Q6CkBAIC0xMTgsMjIgKzg5LDE1IEBA
IGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgIGV4
Y2VwdDoKICAgICAgICAgICAgICAgICBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzID0gTm9uZQogCi0g
ICAgZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5fd2ViX3NvY2tldF90ZXN0
czoKLSAgICAgICAgICAgIF9sb2cuaW5mbygnTm8gbmVlZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAl
IHNlbGYubmFtZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLmlzX3J1bm5p
bmcoKToKLSAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJyVz
IGlzIGFscmVhZHkgcnVubmluZy4nICUgc2VsZi5uYW1lKQotCi0gICAgICAgIHRpbWVfc3RyID0g
dGltZS5zdHJmdGltZSgnJWQlYiVZLSVIJU0lUycpCiAgICAgICAgIGlmIHNlbGYuX3VzZV90bHM6
Ci0gICAgICAgICAgICBsb2dfcHJlZml4ID0gX1dTU19MT0dfUFJFRklYCisgICAgICAgICAgICBz
ZWxmLl9sb2dfcHJlZml4ID0gX1dTU19MT0dfUFJFRklYCiAgICAgICAgIGVsc2U6Ci0gICAgICAg
ICAgICBsb2dfcHJlZml4ID0gX1dTX0xPR19QUkVGSVgKLSAgICAgICAgbG9nX2ZpbGVfbmFtZSA9
IGxvZ19wcmVmaXggKyB0aW1lX3N0cgorICAgICAgICAgICAgc2VsZi5fbG9nX3ByZWZpeCA9IF9X
U19MT0dfUFJFRklYCiAKLSAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBu
ZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KLSAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVz
KHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVmaXgpCisgICAgZGVmIHByZXBhcmVfY29uZmlnKHNl
bGYpOgorICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQor
ICAgICAgICBsb2dfZmlsZV9uYW1lID0gc2VsZi5fbG9nX3ByZWZpeCArIHRpbWVfc3RyCisgICAg
ICAgIHNlbGYuX3dzaW4gPSBvcGVuKG9zLmRldm51bGwsICdyJykKIAogICAgICAgICBlcnJvcl9s
b2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9nX2ZpbGVfbmFtZSArICItZXJy
LnR4dCIpCiAKQEAgLTE3MSw1OCArMTM1LDIxIEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2Vy
dmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgIHN0YXJ0X2NtZC5leHRlbmQoWyctdCcsICctaycs
IHNlbGYuX3ByaXZhdGVfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywg
c2VsZi5fY2VydGlmaWNhdGVdKQogCi0gICAgICAgIGVudiA9IHNlbGYuX3BvcnRfb2JqLnNldHVw
X2Vudmlyb25fZm9yX3NlcnZlcigpCi0gICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gKHB5d2Vi
c29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQorICAgICAgICBzZWxmLl9zdGFydF9jbWQg
PSBzdGFydF9jbWQKKyAgICAgICAgc2VsZi5fZW52ID0gc2VsZi5fcG9ydF9vYmouc2V0dXBfZW52
aXJvbl9mb3Jfc2VydmVyKCkKKyAgICAgICAgc2VsZi5fZW52WydQWVRIT05QQVRIJ10gPSAocHl3
ZWJzb2NrZXRfYmFzZSArIG9zLnBhdGgucGF0aHNlcCArIHNlbGYuX2Vudi5nZXQoJ1BZVEhPTlBB
VEgnLCAnJykpCiAKLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgJXMgc2VydmVyIG9uICVk
LCBjbWQ9IiVzIi4nICUgKHNlbGYubmFtZSwgc2VsZi5fcG9ydCwgc3RyKHN0YXJ0X2NtZCkpKQot
ICAgICAgICAjIE5vdGU6IE5vdCB0aHJlYWQgc2FmZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9p
c3N1ZTIzMjAKLSAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3Blbihz
dGFydF9jbWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkaW49b3Blbihvcy5kZXZudWxsLCAncicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zZWxmLl93c291dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c2VsZi5fZXhlY3V0aXZlLlNURE9V
VCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52
KQorICAgIGRlZiByZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToKKyAgICAgICAgc2VsZi5yZW1vdmVf
bG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIHNlbGYuX2xvZ19wcmVmaXgpCiAKLSAgICAgICAg
aWYgc2VsZi5fdXNlX3RsczoKLSAgICAgICAgICAgIHVybCA9ICdodHRwcycKLSAgICAgICAgZWxz
ZToKLSAgICAgICAgICAgIHVybCA9ICdodHRwJwotICAgICAgICB1cmwgPSB1cmwgKyAnOi8vMTI3
LjAuMC4xOiVkLycgJSBzZWxmLl9wb3J0Ci0gICAgICAgIGlmIG5vdCB1cmxfaXNfYWxpdmUodXJs
KToKLSAgICAgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSA9PSBOb25lOgotICAg
ICAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3Moc2VsZi5fcHJvY2Vzcy5w
aWQpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLnJlYWRfdGV4dF9maWxlKG91dHB1dF9s
b2cpLnNwbGl0bGluZXMoKToKLSAgICAgICAgICAgICAgICBfbG9nLmVycm9yKGxpbmUpCi0gICAg
ICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQgdG8gc3Rh
cnQgJXMgc2VydmVyIG9uIHBvcnQgJXMuJyAlIChzZWxmLm5hbWUsIHNlbGYuX3BvcnQpKQotCi0g
ICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5Ci0gICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2
ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5u
YW1lKQotICAgICAgICBpZiBzZWxmLnBpZF9maWxlOgotICAgICAgICAgICAgc2VsZi5fZmlsZXN5
c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5waWRfZmlsZSwgIiVkIiAlIHNlbGYuX3Byb2Nlc3Mu
cGlkKQotCi0gICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLmlzX3J1bm5p
bmcoKToKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgIHBpZCA9IE5vbmUKLSAgICAgICAg
aWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgIHBpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCi0g
ICAgICAgIGVsaWYgc2VsZi5waWRfZmlsZToKLSAgICAgICAgICAgIHBpZCA9IGludChzZWxmLl9m
aWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYucGlkX2ZpbGUpKQotCi0gICAgICAgIGlmIG5v
dCBwaWQ6Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdG
YWlsZWQgdG8gZmluZCAlcyBzZXJ2ZXIgcGlkLicgJSBzZWxmLm5hbWUpCi0KLSAgICAgICAgX2xv
Zy5kZWJ1ZygnU2h1dHRpbmcgZG93biAlcyBzZXJ2ZXIgJWQuJyAlIChzZWxmLm5hbWUsIHBpZCkp
Ci0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQotCi0gICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2FmZSBh
bmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAgICAgICAgIyBodHRwOi8vYnVncy5w
eXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgZGVmIHNwYXduX3Byb2Nlc3Mo
c2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoJ3N0YXJ0aW5nICVzLCBjbWQ9IiVzIicgJSAoc2Vs
Zi5uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZl
LnBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwgc2hlbGw9RmFsc2UsIHN0ZGlu
PXNlbGYuX3dzaW4sIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5T
VERPVVQpCiAKKyAgICBkZWYgY2xlYW51cF9hZnRlcl9zdG9wKHNlbGYpOgorICAgICAgICBpZiBz
ZWxmLl93c2luOgorICAgICAgICAgICAgc2VsZi5fd3Npbi5jbG9zZSgpCisgICAgICAgICAgICBz
ZWxmLl93c2luID0gTm9uZQogICAgICAgICBpZiBzZWxmLl93c291dDoKICAgICAgICAgICAgIHNl
bGYuX3dzb3V0LmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX3dzb3V0ID0gTm9uZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96841</attachid>
            <date>2011-06-10 20:40:02 -0700</date>
            <delta_ts>2011-06-10 20:51:00 -0700</delta_ts>
            <desc>update w/ more review feedback</desc>
            <filename>bug-62180-20110610204001.patch</filename>
            <type>text/plain</type>
            <size>23478</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NjljZDRmMTI4NWNiOWVhZjcxYjI2N2VjZjkxOWJkNjZi
MzIxZDhhLi5mNWJlODY2OGMxNDRmMTViOTQ5ODM3ZTUwNjk5YTE0ZmZmNjhiNDlkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDYtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogZml4IGh0
dHAsIHdlYnNvY2tldCBzZXJ2ZXIgc3RhcnR1cCwgc2h1dGRvd24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTgwCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgcmVmYWN0b3JzIGFsbCBvZiB0aGUgc2VydmVyLXJlbGF0ZWQgY29kZSB0bworICAgICAgICBo
YXZlIGNvbnNpc3RlbnQgc2VtYW50aWNzLiBJdCBwdXNoZXMgdGhlIHN0YXJ0KCkvc3RvcCgpCisg
ICAgICAgIGxvZ2ljIGludG8gdGhlIGJhc2UgY2xhc3MgYW5kIGFkZHMgZm91ciBtdWNoIHNtYWxs
ZXIgcm91dGluZXMKKyAgICAgICAgZm9yIHNwZWNpYWxpemF0aW9uOgorICAgICAgICBwcmVwYXJl
X2NvbmZpZygpIC0gZm9yIG9wdGlvbmFsbHkgd3JpdGluZyBjb25maWcgZmlsZXMgZXRjLgorICAg
ICAgICAgICAgdG8gZGlzayBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyCisgICAgICAgIHJl
bW92ZV9zdGFsZV9sb2dfZmlsZXMoKQorICAgICAgICBzcGF3bl9wcm9jZXNzKCkgLSB0aGUgYWN0
dWFsIGxhdW5jaCBvZiB0aGUgc3VicHJvY2VzcworICAgICAgICBjbGVhbnVwX2FmdGVyX3N0b3Ao
KSAtIGFuZCBjdXN0b20gY2xlYW51cCBjb2RlCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFu
Z2UgdGhlIHRocmVlIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2VyZQorICAgICAgICBmYWlybHkg
aW5jb25zaXN0ZW50LCBsZWFkaW5nIHRvIGxvdHMgb2Ygd2VpcmRuZXNzIG9uIHRoZSBib3RzCisg
ICAgICAgIHdpdGggc2VydmVycyBiZWluZyBsZWZ0IGFyb3VuZCwgZXRjLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorCiAyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9h
cGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRleCA0MTEzMzEyMmUzMmUxMTVlMjU1MWJi
MmY4ZjgyMzZjNGE4YTRjYmM3Li4xMzNmMDg1MmZmODY3MWY4MDUxOGYxMDc5MDRlNzI5ODY4YjIz
ZjYyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtNDEsNyArNDEsNiBAQCBfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmFwYWNoZV9o
dHRwX3NlcnZlciIpCiAKIAogY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgotICAgIG5hbWUgPSAnYXBhY2hlJwogCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyKToKICAgICAgICAgIiIiQXJnczoKQEAg
LTQ5LDE0ICs0OCwxNCBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJf
YmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRl
IHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKICAgICAgICAgIiIiCiAg
ICAgICAgIGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9y
dF9vYmopCisgICAgICAgIHNlbGYuX25hbWUgPSAnYXBhY2hlJworICAgICAgICBzZWxmLl9tYXBw
aW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0
JzogODA4MH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODF9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnc3NsY2VydCc6IFRydWV9XQog
ICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgogICAgICAgICBwb3J0X29iai5t
YXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQogCi0gICAgICAgIHNlbGYubWFwcGluZ3Mg
PSBbeydwb3J0JzogODAwMH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4
MH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ3NzbGNlcnQnOiBUcnVlfV0KLQogICAgICAg
ICAjIFRoZSB1cHN0cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1w
L1dlYktpdCBmb3IKICAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2Nr
IGZpbGUgdGhlcmUuCiAgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigi
L3RtcCIsICJXZWJLaXQiKQpAQCAtMTcxLDQ2ICsxNzAsMTkgQEAgY2xhc3MgTGF5b3V0VGVzdEFw
YWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRwZF9jb25maWdfY29weSkKICAgICAgICAg
cmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CiAKLSAgICBkZWYgX3N0YXJ0X2h0dHBkX3Byb2Nlc3Mo
c2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgaHR0cGQgcHJvY2VzcyBhbmQgcmV0dXJucyB3
aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIiIgorICAgIGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxm
KToKICAgICAgICAgIyBVc2Ugc2hlbGw9VHJ1ZSBiZWNhdXNlIHdlIGpvaW4gdGhlIGFyZ3VtZW50
cyBpbnRvIGEgc3RyaW5nIGZvcgogICAgICAgICAjIHRoZSBzYWtlIG9mIFdpbmRvdy9DeWd3aW4g
YW5kIGl0IG5lZWRzIHF1b3RpbmcgdGhhdCBicmVha3MKICAgICAgICAgIyBzaGVsbD1GYWxzZS4K
ICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIGJlIGpvaW5pbmcgc2hlbGwg
YXJndW1lbnRzIGludG8gc3RyaW5ncy4KICAgICAgICAgIyBzaGVsbD1UcnVlIGlzIGEgdHJhaWwg
b2YgdGVhcnMuCiAgICAgICAgICMgTm90ZTogTm90IHRocmVhZCBzYWZlOiBodHRwOi8vYnVncy5w
eXRob24ub3JnL2lzc3VlMjMyMAotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBodHRwIHNl
cnZlciwgY21kPSIlcyInICUgc3RyKHNlbGYuX3N0YXJ0X2NtZCkpCi0gICAgICAgIHNlbGYuX3By
b2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBzdGRlcnI9c2Vs
Zi5fZXhlY3V0aXZlLlBJUEUsIHNoZWxsPVRydWUpCi0gICAgICAgIGVyciA9IHNlbGYuX3Byb2Nl
c3Muc3RkZXJyLnJlYWQoKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIs
IGNtZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzdHIoc2VsZi5fc3RhcnRfY21kKSkpCisgICAgICAg
IHByb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBzaGVsbD1U
cnVlLCBzdGRlcnI9c2VsZi5fZXhlY3V0aXZlLlBJUEUpCisgICAgICAgIGVyciA9IHByb2Nlc3Mu
c3RkZXJyLnJlYWQoKQogICAgICAgICBpZiBsZW4oZXJyKToKICAgICAgICAgICAgIF9sb2cuZGVi
dWcoZXJyKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0K
LSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgYXBhY2hlIGh0dHAg
c2VydmVyLiIiIgotICAgICAgICAjIFN0b3AgYW55IGN1cnJlbnRseSBydW5uaW5nIHNlcnZlcnMu
Ci0gICAgICAgIHNlbGYuc3RvcCgpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiU3RhcnRpbmcgJXMg
c2VydmVyIiAlIHNlbGYuX25hbWUpCi0gICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0
X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKLSAgICAgICAgaWYgc2VydmVy
X3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJBcGFjaGUgc3RhcnRlZC4gVGVzdGlu
ZyBwb3J0cyIpCi0gICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0
aW9uKAotICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRz
KQotCi0gICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
U2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBodHRw
IHNlcnZlcicpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgIiIiU3RvcHMgdGhlIGFw
YWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBh
bnkgcnVubmluZyBodHRwIHNlcnZlcnMiKQotICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAg
ICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9j
ZXNzLnBpZAotICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKLSAg
ICAgICAgICAgIGh0dHBkX3BpZCA9IGludChvcGVuKHNlbGYuX3BpZF9maWxlKS5yZWFkbGluZSgp
KQotICAgICAgICBpZiBodHRwZF9waWQ6Ci0gICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKGh0dHBkX3BpZCkKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3By
b2Nlc3MocHJvY2Vzcy5waWQpCisgICAgICAgICAgICBwcm9jZXNzLndhaXQoKQorICAgICAgICAg
ICAgcmFpc2UgU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCAlczogJXMnICUgKHNlbGYuX25h
bWUsIGVycikpCisgICAgICAgIHJldHVybiBwcm9jZXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQppbmRleCBlYTQ4
NTI1MzI4MThkMmE4YTJkZDY0N2RiNDE0Y2IwZmM3MjIxYTAxLi5mYjM2MWJmZDQxNDMzMDQ0ZDJj
ODIxYWJhNjNhZjhmOTBkYzQ2NjFlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKQEAgLTMzLDcgKzMzLDYgQEAg
aW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9y
dCB1cmxsaWIKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgaHR0cF9z
ZXJ2ZXJfYmFzZQogCkBAIC01MSw3ICs1MCw2IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2
ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKQogICAgICAgICBzZWxmLl9uYW1lID0gJ2xp
Z2h0dHBkJwogICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gTm9uZQogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBz
ZWxmLl9yb290ID0gcm9vdAogICAgICAgICBzZWxmLl9ydW5fYmFja2dyb3VuZCA9IHJ1bl9iYWNr
Z3JvdW5kCkBAIC04MywxMyArODEsNyBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNl
Lkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9v
dCc6IHNlbGYuX3dlYmtpdF90ZXN0cywKICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBzZWxm
Ll9wZW1fZmlsZX1dKQogCi0gICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9wcm9jZXNzICE9IE5vbmUKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAg
aWYgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNl
LlNlcnZlckVycm9yKCdMaWdodHRwZCBhbHJlYWR5IHJ1bm5pbmcnKQotCisgICAgZGVmIF9wcmVw
YXJlX2NvbmZpZyhzZWxmKToKICAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29i
ai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywKICAgICAgICAgICAgICdTY3JpcHRzJywg
J3dlYmtpdHB5JywgJ2xheW91dF90ZXN0cycsICdwb3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQogICAg
ICAgICBvdXRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdo
dHRwZC5jb25mJykKQEAgLTk5LDEwICs5MSw2IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICBsb2dfZmlsZV9uYW1lID0gImVycm9yLmxv
Zy0iICsgdGltZV9zdHIgKyAiLnR4dCIKICAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2lu
KHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUpCiAKLSAgICAgICAgIyBSZW1vdmUgb2xk
IGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KLSAgICAgICAg
c2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJhY2Nlc3MubG9nLSIpCi0g
ICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9n
LSIpCi0KICAgICAgICAgIyBXcml0ZSBvdXQgdGhlIGNvbmZpZwogICAgICAgICBiYXNlX2NvbmYg
PSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGJhc2VfY29uZl9maWxlKQogCkBAIC0x
ODgsMzUgKzE3NiwyMSBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2
ZXJCYXNlKToKICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUob3MucGF0aC5q
b2luKG1vZHVsZV9wYXRoLCBsaWJfZmlsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9zLnBhdGguam9pbih0bXBfbW9kdWxlX3BhdGgsIGxpYl9maWxlKSkKIAotICAg
ICAgICBlbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQotICAg
ICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIsIGNtZD0iJXMiJyAlIChzZWxmLl9u
YW1lLCBzdHIoc3RhcnRfY21kKSkpCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVj
dXRpdmUucG9wZW4oc3RhcnRfY21kLCBlbnY9ZW52LCBzdGRpbj1zZWxmLl9leGVjdXRpdmUuUElQ
RSkKLQotICAgICAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4KLSAgICAgICAgc2VsZi5t
YXBwaW5ncyA9IG1hcHBpbmdzCi0gICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zv
cl9hY3Rpb24oCi0gICAgICAgICAgICBzZWxmLmlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0
cykKLQotICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQotICAgICAgICBp
ZiBub3Qgc2VydmVyX3N0YXJ0ZWQgb3Igc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlICE9IE5vbmU6
Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQg
dG8gc3RhcnQgJXMuJyAlIHNlbGYuX25hbWUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVy
IHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLQotICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNl
ciB3YXkgdG8gc2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCi0gICAgIyBwcm9i
YWJseSBub3QgYmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2
ZSBvcy5raWxsID8KLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5p
c19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBodHRwZF9waWQgPSBO
b25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBz
ZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBzZWxmLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0
dHBkX3BpZCkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAgICAgICAgIyB3YWl0
KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAg
ICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKLSAgICAgICAgICAg
IHNlbGYuX3Byb2Nlc3Mud2FpdCgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQor
ICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBzdGFydF9jbWQKKyAgICAgICAgc2VsZi5fZW52ID0g
c2VsZi5fcG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKKyAgICAgICAgc2VsZi5f
bWFwcGluZ3MgPSBtYXBwaW5ncworCisgICAgZGVmIF9yZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToK
KyAgICAgICAgIyBTb21ldGltZXMgbG9ncyBhcmUgb3BlbiBpbiBvdGhlciBwcm9jZXNzZXMgYnV0
IHRoZXkgc2hvdWxkIGNsZWFyIGV2ZW50dWFsbHkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuX3JlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikK
KyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0Zh
aWxlZCB0byByZW1vdmUgb2xkICVzIGxvZyBmaWxlcycgJSBzZWxmLl9uYW1lKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIs
ICJlcnJvci5sb2ctIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBf
bG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUgb2xkICVzIGxvZyBmaWxlcycgJSBzZWxmLl9u
YW1lKQorCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVn
KCdzdGFydGluZyAlcywgY21kPSIlcyInICUgKHNlbGYuX25hbWUsIHNlbGYuX3N0YXJ0X2NtZCkp
CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBl
bnY9c2VsZi5fZW52LCBzaGVsbD1GYWxzZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9odHRwX3NlcnZlcl9iYXNlLnB5CmluZGV4IDk3OTlkZjhlYTU2ZmM1NWVmOWQzYTk5ODVmMTA5
MjRkNTM0OGJiMDEuLjZjMWUxYmRiYjQwOWNkMTZmNzFhOTJlNGY3ZGJmNTA4MTcyZTUwYzQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXJfYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2h0dHBfc2VydmVyX2Jhc2UucHkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAiIiJCYXNlIGNs
YXNzIHdpdGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSwgTGlnaHR0cGQsIGFu
ZCB3ZWJzb2NrZXQgc2VydmVycy4iIiIKIAoraW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwot
aW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgotCi1m
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KIAogX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZlcl9i
YXNlIikKIApAQCAtNDQsMTYgKzQyLDkwIEBAIGNsYXNzIFNlcnZlckVycm9yKEV4Y2VwdGlvbik6
CiAKIAogY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKKyAgICAiIiJBIHNrZWxldG9uIGNs
YXNzIGZvciBzdGFydGluZyBhbmQgc3RvcHBpbmcgc2VydmVycyB1c2VkIGJ5IHRoZSBsYXlvdXQg
dGVzdHMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmopOgogICAgICAgICBz
ZWxmLl9uYW1lID0gJzx2aXJ0dWFsPicKKyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSB7fQogICAg
ICAgICBzZWxmLl9waWRfZmlsZSA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9ydF9vYmogPSBwb3J0
X29iagogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBwb3J0X29iai5fZXhlY3V0aXZlCiAgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0X29iai5fZmlsZXN5c3RlbQogICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gTm9uZQogCi0gICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24p
OgorICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRoZSBzZXJ2ZXIuIiIi
CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJv
cignJXMgYWxyZWFkeSBydW5uaW5nJyAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgc2VsZi5fcmVt
b3ZlX3N0YWxlX2xvZ3MoKQorICAgICAgICBzZWxmLl9wcmVwYXJlX2NvbmZpZygpCisgICAgICAg
IHNlbGYuX2NoZWNrX3RoYXRfYWxsX3BvcnRzX2FyZV9hdmFpbGFibGUoKQorICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gc2VsZi5fc3Bhd25fcHJvY2VzcygpCisgICAgICAgIF9sb2cuZGVidWcoIiVz
IHN0YXJ0ZWQuIFRlc3RpbmcgcG9ydHMiICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VydmVyX3N0
YXJ0ZWQgPSBzZWxmLl93YWl0X2Zvcl9hY3Rpb24oc2VsZi5faXNfc2VydmVyX3J1bm5pbmdfb25f
YWxsX3BvcnRzKQorICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIiAlIHNlbGYuX25hbWUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzIHNl
cnZlcicgJSBzZWxmLl9uYW1lKQorCisgICAgICAgIGlmIHNlbGYuX3BpZF9maWxlOgorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fcGlkX2ZpbGUsIHN0
cihzZWxmLl9wcm9jZXNzLnBpZCkpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgX2xv
Zy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVubmluZyAlcyBzZXJ2ZXJzIiAlIHNlbGYuX25h
bWUpCisgICAgICAgIHBpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAg
ICAgICAgIHBpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCisgICAgICAgIGVsaWYgc2VsZi5fcGlkX2Zp
bGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAg
ICAgIHBpZCA9IGludChzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX3BpZF9m
aWxlKSkKKworICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgc2VsZi5fcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQorICAgICAgICBp
ZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUg
YW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3Mu
cHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgp
CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9waWRf
ZmlsZSBhbmQgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisKKyAgICAgICAg
c2VsZi5fY2xlYW51cF9hZnRlcl9zdG9wKCkKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2Vs
Zik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgc3Vi
Y2xhc3NlcyB0byBkbyBhbnkgc29ydAorICAgICAgICBvZiBpbml0aWFsaXphdGlvbiByZXF1aXJl
ZCBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyIHRoYXQgbWF5IGZhaWwuIiIiCisgICAgICAg
IHBhc3MKKworICAgIGRlZiBfcmVtb3ZlX3N0YWxlX2xvZ3Moc2VsZik6CisgICAgICAgICIiIlRo
aXMgcm91dGluZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byB0cnkgYW5k
IHJlbW92ZSBsb2dzCisgICAgICAgIGxlZnQgb3ZlciBmcm9tIGEgcHJpb3IgcnVuLiBUaGlzIHJv
dXRpbmUgc2hvdWxkIGxvZyB3YXJuaW5ncyBpZiB0aGUKKyAgICAgICAgZmlsZXMgY2Fubm90IGJl
IGRlbGV0ZWQsIGJ1dCBzaG91bGQgbm90IGZhaWwgdW5sZXNzIGZhaWx1cmUgdG8KKyAgICAgICAg
ZGVsZXRlIHRoZSBsb2dzIHdpbGwgYWN0dWFsbHkgY2F1c2Ugc3RhcnQoKSB0byBmYWlsLiIiIgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgX3NwYXduX3Byb2Nlc3Moc2VsZik6CisgICAgICAgICIi
IlRoaXMgcm91dGluZSBtc3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBhY3R1YWxs
eQorICAgICAgICBsYXVuY2ggdGhlIHN1YnByb2Nlc3MgYW5kIHJldHVybiB0aGUgcHJvY2VzcyBv
YmplY3QuIFRoZSBtZXRob2QKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byBlbnN1cmUgdGhhdCB0
aGUgcHJvY2VzcyBzdGFydGVkIGNvcnJlY3RseSAoc3RhcnQoKQorICAgICAgICB3aWxsIHZlcmlm
eSB0aGF0IGl0c2VsZikuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwor
ICAgIGRlZiBfY2xlYW51cF9hZnRlcl9zdG9wKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRp
bmUgbWF5IGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMgdG8gY2xlYW4gdXAgYW55IHN0YXRl
CisgICAgICAgIGFzIG5lY2Vzc2FyeSBhZnRlciB0aGUgc2VydmVyIHByb2Nlc3MgaXMgc3RvcHBl
ZC4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9yZW1vdmVfbG9nX2ZpbGVzKHNlbGYsIGZv
bGRlciwgc3RhcnRzX3dpdGgpOgorICAgICAgICBmaWxlcyA9IHNlbGYuX2ZpbGVzeXN0ZW0ubGlz
dGRpcihmb2xkZXIpCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYg
ZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGgg
PSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGZ1bGxfcGF0aCkKKworICAgIGRlZiBfd2FpdF9mb3JfYWN0
aW9uKHNlbGYsIGFjdGlvbik6CiAgICAgICAgICIiIlJlcGVhdCB0aGUgYWN0aW9uIGZvciAyMCBz
ZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1cm5zCiAgICAgICAgIHdoZXRoZXIgaXQg
c3VjY2VlZGVkLiIiIgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKQEAgLTY1LDI4
ICsxMzcsMzcgQEAgY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKIAogICAgICAgICByZXR1
cm4gRmFsc2UKIAotICAgIGRlZiBpc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6
CisgICAgZGVmIF9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6CiAgICAgICAg
ICIiIlJldHVybnMgd2hldGhlciB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gYWxsIHRoZSBkZXNp
cmVkIHBvcnRzLiIiIgotICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLm1hcHBpbmdzOgotICAg
ICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6Ci0gICAgICAgICAgICAgICAgaHR0cF9z
dWZmaXggPSAncycKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHR0cF9zdWZm
aXggPSAnJwotCi0gICAgICAgICAgICB1cmwgPSAnaHR0cCVzOi8vMTI3LjAuMC4xOiVkLycgJSAo
aHR0cF9zdWZmaXgsIG1hcHBpbmdbJ3BvcnQnXSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2V4ZWN1
dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9wcm9jZXNzLnBpZCk6CisgICAgICAgICAgICBf
bG9nLmRlYnVnKCJTZXJ2ZXIgaXNuJ3QgcnVubmluZyBhdCBhbGwiKQorICAgICAgICAgICAgcmFp
c2UgU2VydmVyRXJyb3IoIlNlcnZlciBleGl0ZWQiKQogCisgICAgICAgIGZvciBtYXBwaW5nIGlu
IHNlbGYuX21hcHBpbmdzOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAg
ICAgICAgcG9ydCA9IG1hcHBpbmdbJ3BvcnQnXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsLCBwcm94aWVzPXt9KQotICAgICAg
ICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBydW5uaW5nIGF0ICVzIiAlIHVybCkKKyAgICAg
ICAgICAgICAgICBzLmNvbm5lY3QoKCdsb2NhbGhvc3QnLCBwb3J0KSkKKyAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBvbiAlZCIgJSBwb3J0KQogICAgICAgICAgICAg
ZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIE5P
VCBydW5uaW5nIGF0ICVzOiAlcyIgJSAodXJsLCBlKSkKKyAgICAgICAgICAgICAgICBpZiBlLmVy
cm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKToKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIg
Tk9UIHJ1bm5pbmcgb24gJWQ6ICVzIiAlIChwb3J0LCBlKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKLQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3Nl
KCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiByZW1vdmVfbG9nX2ZpbGVzKHNlbGYs
IGZvbGRlciwgc3RhcnRzX3dpdGgpOgotICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZm9sZGVy
KQotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZpbGUuc3RhcnRz
d2l0aChzdGFydHNfd2l0aCk6Ci0gICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5q
b2luKGZvbGRlciwgZmlsZSkKLSAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLkZpbGVTeXN0ZW0o
KS5yZW1vdmUoZnVsbF9wYXRoKQorICAgIGRlZiBfY2hlY2tfdGhhdF9hbGxfcG9ydHNfYXJlX2F2
YWlsYWJsZShzZWxmKToKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5fbWFwcGluZ3M6Cisg
ICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBwb3J0ID0gbWFwcGlu
Z1sncG9ydCddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5iaW5kKCgnbG9j
YWxob3N0JywgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAg
ICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUxSRUFEWSwgZXJybm8uRUFERFJJTlVTRSk6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdQb3J0ICVkIGlzIGFscmVh
ZHkgaW4gdXNlLicgJSBwb3J0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xv
c2UoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQppbmRleCBl
MjAyNGZjMTFiYzMzODBkYWNkMTc2OWNmOWRmNjkxNDdhM2U4NTkzLi44YjdiODY3ZDkxNjUyMWJm
ZmZiNjdmYzViNmFkNjBiZGFkZDAwZWNlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2ludGVncmF0aW9udGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2lu
dGVncmF0aW9udGVzdC5weQpAQCAtMzksOSArMzksOSBAQCBpbXBvcnQgdW5pdHRlc3QKIGltcG9y
dCBwb3J0X3Rlc3RjYXNlCiAKIAotY2xhc3MgTGlnaHR0cGRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0
Q2FzZSk6Ci0gICAgIiIiVGVzdHMgdGhhdCBhbGwgUG9ydCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBw
YXNzLiIiIgotICAgIEhUVFBfUE9SVFMgPSBbODAwMCwgODA4MCwgODQ0M10KK2NsYXNzIE5ld1J1
bldlYktpdEhUVFBkVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3RzIHRo
YXQgbmV3LXJ1bi13ZWJraXQtaHR0cGQgbXVzdCBwYXNzLiIiIgorICAgIEhUVFBfUE9SVFMgPSAo
ODAwMCwgODA4MCwgODQ0MykKIAogICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihzZWxm
LCBob3N0LCBwb3J0cyk6CiAgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVy
LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRf
c2VydmVyLnB5CmluZGV4IDg0ZWU4ZjYxNGI1MjJjNjUyYTIxZjViZjZiMTc0ZjA1YjQwZmVmM2Iu
LjIxNWE2ZWZiNjZjZWVkNWY1ODY4NWY1ZWUzNDM4MWU4NmM5NDViZmQgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5w
eQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tl
dF9zZXJ2ZXIucHkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAiIiJBIGNsYXNzIHRvIGhlbHAgc3Rh
cnQvc3RvcCB0aGUgUHlXZWJTb2NrZXQgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRlc3RzLiIiIgog
Ci0KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1p
bXBvcnQgdXJsbGliCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0
dHBfc2VydmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX3Nl
cnZlcl9iYXNlCkBAIC00OSwzMyArNDcsNiBAQCBfREVGQVVMVF9XU19QT1JUID0gODg4MAogX0RF
RkFVTFRfV1NTX1BPUlQgPSA5MzIzCiAKIAotZGVmIHVybF9pc19hbGl2ZSh1cmwpOgotICAgICIi
IkNoZWNrcyB0byBzZWUgaWYgd2UgZ2V0IGFuIGh0dHAgcmVzcG9uc2UgZnJvbSB8dXJsfC4KLSAg
ICBXZSBwb2xsIHRoZSB1cmwgMjAgdGltZXMgd2l0aCBhIDAuNSBzZWNvbmQgZGVsYXkuICBJZiB3
ZSBkb24ndAotICAgIGdldCBhIHJlcGx5IGluIHRoYXQgdGltZSwgd2UgZ2l2ZSB1cCBhbmQgYXNz
dW1lIHRoZSBodHRwZAotICAgIGRpZG4ndCBzdGFydCBwcm9wZXJseS4KLQotICAgIEFyZ3M6Ci0g
ICAgICB1cmw6IFRoZSBVUkwgdG8gY2hlY2suCi0gICAgUmV0dXJuOgotICAgICAgVHJ1ZSBpZiB0
aGUgdXJsIGlzIGFsaXZlLgotICAgICIiIgotICAgIHNsZWVwX3RpbWUgPSAwLjUKLSAgICB3YWl0
X3RpbWUgPSAxMAotICAgIHdoaWxlIHdhaXRfdGltZSA+IDA6Ci0gICAgICAgIHRyeToKLSAgICAg
ICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsLCBwcm94aWVzPXt9KQotICAgICAg
ICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcuCi0gICAgICAgICAgICByZXR1cm4g
VHJ1ZQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAg
IyBXYWl0IGZvciBzbGVlcF90aW1lIGJlZm9yZSB0cnlpbmcgYWdhaW4uCi0gICAgICAgIHdhaXRf
dGltZSAtPSBzbGVlcF90aW1lCi0gICAgICAgIHRpbWUuc2xlZXAoc2xlZXBfdGltZSkKLQotICAg
IHJldHVybiBGYWxzZQotCi0KIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBk
KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwgcG9ydD1f
REVGQVVMVF9XU19QT1JULApAQCAtMTAwLDcgKzcxLDkgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0
cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgogICAgICAgICAg
ICAgc2VsZi5fbmFtZSA9ICdweXdlYnNvY2tldF9zZWN1cmUnCiAgICAgICAgIHNlbGYuX3BpZF9m
aWxlID0gcGlkZmlsZQorICAgICAgICBzZWxmLl93c2luID0gTm9uZQogICAgICAgICBzZWxmLl93
c291dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSBbeydwb3J0Jzogc2VsZi5fcG9y
dH1dCiAKICAgICAgICAgIyBXZWJraXQgdGVzdHMKICAgICAgICAgaWYgc2VsZi5fcm9vdDoKQEAg
LTExNiwyMiArODksMTUgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQp
OgogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRf
dGVzdHMgPSBOb25lCiAKLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxm
Ll93ZWJfc29ja2V0X3Rlc3RzOgotICAgICAgICAgICAgX2xvZy5pbmZvKCdObyBuZWVkIHRvIHN0
YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fbmFtZSkKLSAgICAgICAgICAgIHJldHVybgotICAgICAg
ICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jh
c2UuU2VydmVyRXJyb3IoJyVzIGlzIGFscmVhZHkgcnVubmluZy4nICUgc2VsZi5fbmFtZSkKLQot
ICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQogICAgICAg
ICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BS
RUZJWAorICAgICAgICAgICAgc2VsZi5fbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAogICAg
ICAgICBlbHNlOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCi0gICAg
ICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9zdHIKKyAgICAgICAgICAgIHNl
bGYuX2xvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAogCi0gICAgICAgICMgUmVtb3ZlIG9sZCBs
b2cgZmlsZXMuIFdlIG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMuCi0gICAgICAgIHNl
bGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBsb2dfcHJlZml4KQorICAgIGRl
ZiBfcHJlcGFyZV9jb25maWcoc2VsZik6CisgICAgICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGlt
ZSgnJWQlYiVZLSVIJU0lUycpCisgICAgICAgIGxvZ19maWxlX25hbWUgPSBzZWxmLl9sb2dfcHJl
Zml4ICsgdGltZV9zdHIKKyAgICAgICAgc2VsZi5fd3NpbiA9IG9wZW4ob3MuZGV2bnVsbCwgJ3In
KQogCiAgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBs
b2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikKIApAQCAtMTY5LDU4ICsxMzUsMjQgQEAgY2xhc3Mg
UHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgc3RhcnRfY21k
LmV4dGVuZChbJy10JywgJy1rJywgc2VsZi5fcHJpdmF0ZV9rZXksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnLWMnLCBzZWxmLl9jZXJ0aWZpY2F0ZV0pCiAKLSAgICAgICAgZW52ID0g
c2VsZi5fcG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKLSAgICAgICAgZW52WydQ
WVRIT05QQVRIJ10gPSAocHl3ZWJzb2NrZXRfYmFzZSArIG9zLnBhdGgucGF0aHNlcCArCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5nZXQoJ1BZVEhPTlBBVEgnLCAnJykpCi0KLSAg
ICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgJXMgc2VydmVyIG9uICVkLCBjbWQ9IiVzIi4nICUg
KHNlbGYuX25hbWUsIHNlbGYuX3BvcnQsIHN0cihzdGFydF9jbWQpKSkKLSAgICAgICAgIyBOb3Rl
OiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIwCi0gICAg
ICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc3RhcnRfY21kLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPW9wZW4ob3Mu
ZGV2bnVsbCwgJ3InKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGRvdXQ9c2VsZi5fd3NvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5TVERPVVQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKLQotICAgICAgICBp
ZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAgdXJsID0gJ2h0dHBzJwotICAgICAgICBlbHNl
OgotICAgICAgICAgICAgdXJsID0gJ2h0dHAnCi0gICAgICAgIHVybCA9IHVybCArICc6Ly8xMjcu
MC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKLSAgICAgICAgaWYgbm90IHVybF9pc19hbGl2ZSh1cmwp
OgotICAgICAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlID09IE5vbmU6Ci0gICAg
ICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2VzcyhzZWxmLl9wcm9jZXNzLnBp
ZCkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYucmVhZF90ZXh0X2ZpbGUob3V0cHV0X2xv
Zykuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3IobGluZSkKLSAgICAg
ICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFy
dCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUgKHNlbGYuX25hbWUsIHNlbGYuX3BvcnQpKQotCi0g
ICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5Ci0gICAgICAgIGlmIHNlbGYu
X3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2
ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5f
bmFtZSkKLSAgICAgICAgaWYgc2VsZi5waWRfZmlsZToKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVz
eXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYucGlkX2ZpbGUsICIlZCIgJSBzZWxmLl9wcm9jZXNz
LnBpZCkKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5u
aW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBwaWQgPSBOb25lCi0gICAgICAg
IGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAot
ICAgICAgICBlbGlmIHNlbGYucGlkX2ZpbGU6Ci0gICAgICAgICAgICBwaWQgPSBpbnQoc2VsZi5f
ZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShzZWxmLnBpZF9maWxlKSkKLQotICAgICAgICBpZiBu
b3QgcGlkOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcign
RmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5fbmFtZSkKLQotICAgICAgICBf
bG9nLmRlYnVnKCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4nICUgKHNlbGYuX25hbWUsIHBp
ZCkpCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQotCi0gICAgICAg
IGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2Fm
ZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAgICAgICAgIyBodHRwOi8vYnVn
cy5weXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0
KCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3N0YXJ0
X2NtZCA9IHN0YXJ0X2NtZAorICAgICAgICBzZWxmLl9lbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1
cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9lbnZbJ1BZVEhPTlBBVEgnXSA9
IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsgc2VsZi5fZW52LmdldCgnUFlU
SE9OUEFUSCcsICcnKSkKIAorICAgIGRlZiBfcmVtb3ZlX3N0YWxlX2xvZ3Moc2VsZik6CisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0
X2Rpciwgc2VsZi5fbG9nX3ByZWZpeCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAg
ICAgICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUgc3RhbGUgJXMgbG9nIGZpbGVz
OiAlcycgJSAoc2VsZi5fbmFtZSwgc3RyKGUpKSkKKworICAgIGRlZiBfc3Bhd25fcHJvY2Vzcyhz
ZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1Zygnc3RhcnRpbmcgJXMsIGNtZD0iJXMiJyAlIChzZWxm
Ll9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZl
LnBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwgc2hlbGw9RmFsc2UsIHN0ZGlu
PXNlbGYuX3dzaW4sIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5T
VERPVVQpCisKKyAgICBkZWYgX2NsZWFudXBfYWZ0ZXJfc3RvcChzZWxmKToKKyAgICAgICAgaWYg
c2VsZi5fd3NpbjoKKyAgICAgICAgICAgIHNlbGYuX3dzaW4uY2xvc2UoKQorICAgICAgICAgICAg
c2VsZi5fd3NpbiA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CiAgICAgICAgICAgICBz
ZWxmLl93c291dC5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96843</attachid>
            <date>2011-06-10 20:51:03 -0700</date>
            <delta_ts>2011-06-10 20:52:14 -0700</delta_ts>
            <desc>rebasing</desc>
            <filename>bug-62180-20110610205102.patch</filename>
            <type>text/plain</type>
            <size>42134</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3ZDYwMTQ4ZDA2OWM5MDQ2YjZjOTI4Y2NlNWFkOGRmYWM5
YTM5NGFlLi5mNWJlODY2OGMxNDRmMTViOTQ5ODM3ZTUwNjk5YTE0ZmZmNjhiNDlkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcg
QEAKKzIwMTEtMDYtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogZml4IGh0
dHAsIHdlYnNvY2tldCBzZXJ2ZXIgc3RhcnR1cCwgc2h1dGRvd24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTgwCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgcmVmYWN0b3JzIGFsbCBvZiB0aGUgc2VydmVyLXJlbGF0ZWQgY29kZSB0bworICAgICAgICBo
YXZlIGNvbnNpc3RlbnQgc2VtYW50aWNzLiBJdCBwdXNoZXMgdGhlIHN0YXJ0KCkvc3RvcCgpCisg
ICAgICAgIGxvZ2ljIGludG8gdGhlIGJhc2UgY2xhc3MgYW5kIGFkZHMgZm91ciBtdWNoIHNtYWxs
ZXIgcm91dGluZXMKKyAgICAgICAgZm9yIHNwZWNpYWxpemF0aW9uOgorICAgICAgICBwcmVwYXJl
X2NvbmZpZygpIC0gZm9yIG9wdGlvbmFsbHkgd3JpdGluZyBjb25maWcgZmlsZXMgZXRjLgorICAg
ICAgICAgICAgdG8gZGlzayBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyCisgICAgICAgIHJl
bW92ZV9zdGFsZV9sb2dfZmlsZXMoKQorICAgICAgICBzcGF3bl9wcm9jZXNzKCkgLSB0aGUgYWN0
dWFsIGxhdW5jaCBvZiB0aGUgc3VicHJvY2VzcworICAgICAgICBjbGVhbnVwX2FmdGVyX3N0b3Ao
KSAtIGFuZCBjdXN0b20gY2xlYW51cCBjb2RlCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFu
Z2UgdGhlIHRocmVlIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2VyZQorICAgICAgICBmYWlybHkg
aW5jb25zaXN0ZW50LCBsZWFkaW5nIHRvIGxvdHMgb2Ygd2VpcmRuZXNzIG9uIHRoZSBib3RzCisg
ICAgICAgIHdpdGggc2VydmVycyBiZWluZyBsZWZ0IGFyb3VuZCwgZXRjLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorCisyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIHdlYmtpdHB5OiBjbGVhbiB1cCBjb2RlIHByaW9yIHRvIGZ1bmN0aW9uYWwg
Y2hhbmdlcyBmb3Igc2VydmVyIHN0YXJ0dXAvc2h1dGRvd24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMjU2CisKKyAgICAgICAgVGhpcyBwYXRjaCBk
b2VzIGEgYnVuY2ggb2YgbWlub3IgY2xlYW51cCBvZiB0aGUgY29kZSwgYnV0IHRoZXJlCisgICAg
ICAgIHNob3VsZCBiZSBubyBmdW5jdGlvbmFsIGNoYW5nZXMgZXhjZXB0IHRoYXQgYWxsIG9mIHRo
ZSBtb2R1bGVzCisgICAgICAgIHdpbGwgbm93IHVzZSB0aGUgc2FtZSBleGNlcHRpb24gdHlwZS4g
T3RoZXIgY2hhbmdlcyBpbmNsdWRlCisgICAgICAgIHJlbW92aW5nIHVudXNlZCBjb2RlIHBhdGhz
IGFuZCBmdW5jdGlvbnMsIHVzaW5nICduYW1lJyBhbmQKKyAgICAgICAgJ3BpZF9maWxlJyBhcyBw
dWJsaWMgcHJvcGVydGllcyBvbiB0aGUgc2VydmVyIG9iamVjdHMsIGFuZCB1c2luZworICAgICAg
ICB0aGUgRmlsZXN5c3RlbSBvYmplY3QgaW5zdGVhZCBvZiB0aGUgY29kZWNzLCB0ZW1wZmlsZSwg
YW5kCisgICAgICAgIHNodXRpbHMgbW9kdWxlcy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYXBhY2hlX2h0dHBfc2VydmVyLnB5OgorICAgICAgICAqIFNj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5
OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0
X3NlcnZlci5weToKKworMjAxMS0wNi0wNyAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICB3
ZWJraXRweTogYWRkIGludGVncmF0aW9uIHRlc3RzIGZvciBuZXctcnVuLXdlYmtpdC1odHRwZCwg
c3RvcCBjYWxsaW5nIHNodXRfZG93bl9odHRwX3NlcnZlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyNTEKKworICAgICAgICBzaHV0X2Rvd25faHR0
cF9zZXJ2ZXIoKSB3YXMgYSB0b3RhbCBoYWNrIHRoYXQgd2FzIG9ubHkgdXNlZCBieQorICAgICAg
ICBuZXctcnVuLXdlYmtpdC1odHRwZCwgc28gSSd2ZSBtb3ZlZCB0aGUgY29kZSB0aGVyZSBhbmQg
c3dpdGNoZWQKKyAgICAgICAgdG8gdXNpbmcgZXhlY3V0aXZlLmtpbGxfcHJvY2VzcygpIGZvciB0
aGUgY29tbW9uIGNhc2UuIFRoZQorICAgICAgICBtZXRob2QgaXRzZWxmIHdpbGwgYmUgcmVtb3Zl
ZCBpbiB0aGUgcGF0Y2ggb24gYnVnIDU5OTkzLgorCisgICAgICAgICogU2NyaXB0cy9uZXctcnVu
LXdlYmtpdC1odHRwZDoKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2FwYWNoZV9odHRwX3NlcnZlci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5OgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5OiBBZGRl
ZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tl
dF9zZXJ2ZXIucHk6CisKIDIwMTEtMDYtMDcgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LWh0dHBkIGIvVG9vbHMvU2NyaXB0cy9uZXctcnVu
LXdlYmtpdC1odHRwZAppbmRleCA0MTIyOTkzYzQ2NjRjZmY3NzQwNWE2ZDNhMzlkOWM5MWVhNWNi
ZDE0Li5lN2FjNWZlM2U2ZDBhOTZhYzNiMWVmNGI0YTAzYmNhYmM0YTk0ZjZkIDEwMDc1NQotLS0g
YS9Ub29scy9TY3JpcHRzL25ldy1ydW4td2Via2l0LWh0dHBkCisrKyBiL1Rvb2xzL1NjcmlwdHMv
bmV3LXJ1bi13ZWJraXQtaHR0cGQKQEAgLTcwLDggKzcwLDEyIEBAIGRlZiBydW4ob3B0aW9ucyk6
CiAgICAgICAgIGlmIG9wdGlvbnMuc2VydmVyID09ICdzdGFydCc6CiAgICAgICAgICAgICBodHRw
ZC5zdGFydCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBodHRwZC5zdG9wKGZvcmNlPVRy
dWUpCi0KKyAgICAgICAgICAgICMgRklYTUU6IFdlIHVzZSBfc2h1dF9kb3duX2h0dHBfc2VydmVy
KCkgaW5zdGVhZCBvZiBzdG9wX2h0dHBfc2VydmVyKCkKKyAgICAgICAgICAgICMgYmVjYXVzZSBz
dG9wKCkgb25seSB3b3JrcyBpZiBzdGFydCgpIHdhcyBjYWxsZWQgcHJldmlvdXNseSBpbiB0aGUK
KyAgICAgICAgICAgICMgc2FtZSBwcm9jZXNzLiBfc2h1dF9kb3duKCkgaXMgdG9vIGNvYXJzZSBh
bmQgbWF5IGtpbGwgdW5yZWxhdGVkIAorICAgICAgICAgICAgIyB3ZWIgc2VydmVycywgc28gdGhp
cyBpcyBhIGhhY2suIFdlIHNob3VsZCBjaGFuZ2UgdGhlIGludGVyZmFjZSBzbyB3ZQorICAgICAg
ICAgICAgIyBjYW4gcmVseSBvbiBwaWQgZmlsZXMgb3Igc29tZXRoaW5nLgorICAgICAgICAgICAg
cG9ydF9vYmouX3NodXRfZG93bl9odHRwX3NlcnZlcihOb25lKQogCiBkZWYgbWFpbigpOgogICAg
IG9wdGlvbl9wYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIoKQpkaWZmIC0tZ2l0IGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRw
X3NlcnZlci5weQppbmRleCAwNWEyMzM4MjQ1MGRlY2Q4MGM0MDM0NTk2NDdiNThmMTIxNTQ3MGIx
Li4xMzNmMDg1MmZmODY3MWY4MDUxOGYxMDc5MDRlNzI5ODY4YjIzZjYyIDEwMDY0NAotLS0gYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZl
ci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2FwYWNo
ZV9odHRwX3NlcnZlci5weQpAQCAtMSw1ICsxLDUgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgot
IyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMg
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMCwxNyArMzAsMTIgQEAKICIiIkEgY2xh
c3MgdG8gc3RhcnQvc3RvcCB0aGUgYXBhY2hlIGh0dHAgc2VydmVyIHVzZWQgYnkgbGF5b3V0IHRl
c3RzLiIiIgogCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQKLQotaW1w
b3J0IGNvZGVjcwogaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCiBp
bXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiAKLWltcG9ydCBodHRwX3Nl
cnZlcl9iYXNlCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX3Nl
cnZlcl9iYXNlCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQuYXBhY2hlX2h0dHBfc2VydmVyIikKIApAQCAtNTMsMTUgKzQ4LDE0IEBAIGNsYXNz
IExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToK
ICAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0IHRl
c3QgcmVzdWx0IGRpcmVjdG9yeQogICAgICAgICAiIiIKICAgICAgICAgaHR0cF9zZXJ2ZXJfYmFz
ZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKKyAgICAgICAgc2VsZi5f
bmFtZSA9ICdhcGFjaGUnCisgICAgICAgIHNlbGYuX21hcHBpbmdzID0gW3sncG9ydCc6IDgwMDB9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0sCisgICAgICAgICAgICAgICAgICAgICAgICAg
IHsncG9ydCc6IDg0NDMsICdzc2xjZXJ0JzogVHJ1ZX1dCiAgICAgICAgIHNlbGYuX291dHB1dF9k
aXIgPSBvdXRwdXRfZGlyCi0gICAgICAgIHNlbGYuX2h0dHBkX3Byb2MgPSBOb25lCiAgICAgICAg
IHBvcnRfb2JqLm1heWJlX21ha2VfZGlyZWN0b3J5KG91dHB1dF9kaXIpCiAKLSAgICAgICAgc2Vs
Zi5tYXBwaW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7
J3BvcnQnOiA4MDgwfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgxfSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnc3NsY2VydCc6IFRydWV9
XQotCiAgICAgICAgICMgVGhlIHVwc3RyZWFtIC5jb25mIGZpbGUgYXNzdW1lZCB0aGUgZXhpc3Rl
bmNlIG9mIC90bXAvV2ViS2l0IGZvcgogICAgICAgICAjIHBsYWNpbmcgYXBhY2hlIGZpbGVzIGxp
a2UgdGhlIGxvY2sgZmlsZSB0aGVyZS4KICAgICAgICAgc2VsZi5fcnVudGltZV9wYXRoID0gb3Mu
cGF0aC5qb2luKCIvdG1wIiwgIldlYktpdCIpCkBAIC0xNTcsOSArMTUxLDcgQEAgY2xhc3MgTGF5
b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAg
ICAgICAiIiIKICAgICAgICAgaHR0cGRfY29uZmlnID0gc2VsZi5fcG9ydF9vYmouX3BhdGhfdG9f
YXBhY2hlX2NvbmZpZ19maWxlKCkKICAgICAgICAgaHR0cGRfY29uZmlnX2NvcHkgPSBvcy5wYXRo
LmpvaW4ob3V0cHV0X2RpciwgImh0dHBkLmNvbmYiKQotICAgICAgICAjIGh0dHBkLmNvbmYgaXMg
YWx3YXlzIHV0Zi04IGFjY29yZGluZyB0byBodHRwOi8vYXJjaGl2ZS5hcGFjaGUub3JnL2duYXRz
LzEwMTI1Ci0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oaHR0cGRfY29uZmlnLCAiciIsICJ1dGYt
OCIpIGFzIGh0dHBkX2NvbmZpZ19maWxlOgotICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBk
X2NvbmZpZ19maWxlLnJlYWQoKQorICAgICAgICBodHRwZF9jb25mID0gc2VsZi5fZmlsZXN5c3Rl
bS5yZWFkX3RleHRfZmlsZShodHRwZF9jb25maWcpCiAgICAgICAgIGlmIHNlbGYuX2lzX2N5Z3dp
bigpOgogICAgICAgICAgICAgIyBUaGlzIGlzIGEgZ3Jvc3MgaGFjaywgYnV0IGl0IGxldHMgdXMg
dXNlIHRoZSB1cHN0cmVhbSAuY29uZiBmaWxlCiAgICAgICAgICAgICAjIGFuZCBvdXIgY2hlY2tl
ZCBpbiBjeWd3aW4uIFRoaXMgdGVsbHMgdGhlIHNlcnZlciB0aGUgcm9vdApAQCAtMTcyLDYyICsx
NjQsMjUgQEAgY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0
cFNlcnZlckJhc2UpOgogICAgICAgICAgICAgaHR0cGRfY29uZiA9IGh0dHBkX2NvbmYucmVwbGFj
ZSgnU2VydmVyUm9vdCAiL3VzciInLAogICAgICAgICAgICAgICAgICdTZXJ2ZXJSb290ICIlcyIn
ICUgc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGN5Z3VzcikpCiAKLSAgICAgICAgd2l0aCBjb2RlY3Mu
b3BlbihodHRwZF9jb25maWdfY29weSwgInciLCAidXRmLTgiKSBhcyBmaWxlOgotICAgICAgICAg
ICAgZmlsZS53cml0ZShodHRwZF9jb25mKQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtLndyaXRl
X3RleHRfZmlsZShodHRwZF9jb25maWdfY29weSwgaHR0cGRfY29uZikKIAogICAgICAgICBpZiBz
ZWxmLl9pc19jeWd3aW4oKToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9nZXRfY3lnd2luX3Bh
dGgoaHR0cGRfY29uZmlnX2NvcHkpCiAgICAgICAgIHJldHVybiBodHRwZF9jb25maWdfY29weQog
Ci0gICAgZGVmIF9nZXRfdmlydHVhbF9ob3N0X2NvbmZpZyhzZWxmLCBkb2N1bWVudF9yb290LCBw
b3J0LCBzc2w9RmFsc2UpOgotICAgICAgICAiIiJSZXR1cm5zIGEgPFZpcnR1YWxIb3N0PiBkaXJl
Y3RpdmUgYmxvY2sgZm9yIGFuIGh0dHBkLmNvbmYgZmlsZS4KLSAgICAgICAgSXQgd2lsbCBsaXN0
ZW4gdG8gMTI3LjAuMC4xIG9uIGVhY2ggb2YgdGhlIGdpdmVuIHBvcnQuCi0gICAgICAgICIiIgot
ICAgICAgICByZXR1cm4gJ1xuJy5qb2luKCgnPFZpcnR1YWxIb3N0IDEyNy4wLjAuMTolcz4nICUg
cG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RvY3VtZW50Um9vdCAiJXMiJyAlIGRv
Y3VtZW50X3Jvb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNzbCBhbmQgJ1NTTEVuZ2lu
ZSBPbicgb3IgJycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICc8L1ZpcnR1YWxIb3N0Pics
ICcnKSkKLQotICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxmKToKLSAgICAgICAgIiIi
U3RhcnRzIHRoZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlcmUgd2VyZSBl
cnJvcnMuIiIiCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYpOgogICAgICAgICAjIFVzZSBz
aGVsbD1UcnVlIGJlY2F1c2Ugd2Ugam9pbiB0aGUgYXJndW1lbnRzIGludG8gYSBzdHJpbmcgZm9y
CiAgICAgICAgICMgdGhlIHNha2Ugb2YgV2luZG93L0N5Z3dpbiBhbmQgaXQgbmVlZHMgcXVvdGlu
ZyB0aGF0IGJyZWFrcwogICAgICAgICAjIHNoZWxsPUZhbHNlLgogICAgICAgICAjIEZJWE1FOiBX
ZSBzaG91bGQgbm90IG5lZWQgdG8gYmUgam9pbmluZyBzaGVsbCBhcmd1bWVudHMgaW50byBzdHJp
bmdzLgogICAgICAgICAjIHNoZWxsPVRydWUgaXMgYSB0cmFpbCBvZiB0ZWFycy4KICAgICAgICAg
IyBOb3RlOiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzIw
Ci0gICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVyLCBjbWQ9IiVzIicgJSBz
dHIoc2VsZi5fc3RhcnRfY21kKSkKLSAgICAgICAgc2VsZi5faHR0cGRfcHJvYyA9IHN1YnByb2Nl
c3MuUG9wZW4oc2VsZi5fc3RhcnRfY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgc2hlbGw9
VHJ1ZSkKLSAgICAgICAgZXJyID0gc2VsZi5faHR0cGRfcHJvYy5zdGRlcnIucmVhZCgpCisgICAg
ICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciwgY21kPSIlcyInICUgKHNlbGYuX25h
bWUsIHN0cihzZWxmLl9zdGFydF9jbWQpKSkKKyAgICAgICAgcHJvY2VzcyA9IHNlbGYuX2V4ZWN1
dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIHNoZWxsPVRydWUsIHN0ZGVycj1zZWxmLl9leGVj
dXRpdmUuUElQRSkKKyAgICAgICAgZXJyID0gcHJvY2Vzcy5zdGRlcnIucmVhZCgpCiAgICAgICAg
IGlmIGxlbihlcnIpOgogICAgICAgICAgICAgX2xvZy5kZWJ1ZyhlcnIpCi0gICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBzdGFydChzZWxmKToK
LSAgICAgICAgIiIiU3RhcnRzIHRoZSBhcGFjaGUgaHR0cCBzZXJ2ZXIuIiIiCi0gICAgICAgICMg
U3RvcCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2VydmVycy4KLSAgICAgICAgc2VsZi5zdG9wKCkK
LQotICAgICAgICBfbG9nLmRlYnVnKCJTdGFydGluZyBhcGFjaGUgaHR0cCBzZXJ2ZXIiKQotICAg
ICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0aW9uKHNlbGYuX3N0YXJ0X2h0
dHBkX3Byb2Nlc3MpCi0gICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiQXBhY2hlIHN0YXJ0ZWQuIFRlc3RpbmcgcG9ydHMiKQotICAgICAgICAgICAgc2Vy
dmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbigKLSAgICAgICAgICAgICAgICBzZWxm
LmlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cykKLQotICAgICAgICBpZiBzZXJ2ZXJfc3Rh
cnRlZDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBzdWNjZXNzZnVsbHkgc3RhcnRl
ZCIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ0ZhaWxlZCB0
byBzdGFydCBodHRwIHNlcnZlcicpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgIiIi
U3RvcHMgdGhlIGFwYWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgX2xvZy5kZWJ1ZygiU2h1
dHRpbmcgZG93biBhbnkgcnVubmluZyBodHRwIHNlcnZlcnMiKQotICAgICAgICBodHRwZF9waWQg
PSBOb25lCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKLSAgICAg
ICAgICAgIGh0dHBkX3BpZCA9IGludChvcGVuKHNlbGYuX3BpZF9maWxlKS5yZWFkbGluZSgpKQot
ICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgY2FsbGluZyBhIHByb3RlY3RlZCBtZXRo
b2Qgb2YgX3BvcnRfb2JqIQotICAgICAgICBzZWxmLl9wb3J0X29iai5fc2h1dF9kb3duX2h0dHBf
c2VydmVyKGh0dHBkX3BpZCkKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nl
c3MocHJvY2Vzcy5waWQpCisgICAgICAgICAgICBwcm9jZXNzLndhaXQoKQorICAgICAgICAgICAg
cmFpc2UgU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCAlczogJXMnICUgKHNlbGYuX25hbWUs
IGVycikpCisgICAgICAgIHJldHVybiBwcm9jZXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQppbmRleCBlNTI1ZWUw
ZTQ5MTJmZTA5NTM4ZjdjZGZkZjNhMWI2MzQ4MTI0MzJkLi5mYjM2MWJmZDQxNDMzMDQ0ZDJjODIx
YWJhNjNhZjhmOTBkYzQ2NjFlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKQEAgLTEsNSArMSw1IEBACiAjIS91
c3IvYmluL2VudiBweXRob24KLSMgQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMjksMjEg
KzI5LDEyIEBACiAKICIiIkEgY2xhc3MgdG8gaGVscCBzdGFydC9zdG9wIHRoZSBsaWdodHRwZCBz
ZXJ2ZXIgdXNlZCBieSBsYXlvdXQgdGVzdHMuIiIiCiAKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQg
d2l0aF9zdGF0ZW1lbnQKLQotaW1wb3J0IGNvZGVjcwogaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBv
cHRwYXJzZQogaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi1pbXBvcnQgc3VicHJvY2VzcwogaW1w
b3J0IHN5cwotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgogCi1p
bXBvcnQgZmFjdG9yeQotaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKK2Zyb20gd2Via2l0cHkubGF5
b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfc2VydmVyX2Jhc2UKIAogX2xvZyA9IGxvZ2dpbmcu
Z2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZlciIpCiAKQEAg
LTU3LDggKzQ4LDggQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVy
QmFzZSk6CiAgICAgICAgICIiIgogICAgICAgICAjIFdlYmtpdCB0ZXN0cwogICAgICAgICBodHRw
X3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKQorICAg
ICAgICBzZWxmLl9uYW1lID0gJ2xpZ2h0dHBkJwogICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0g
b3V0cHV0X2RpcgotICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQogICAgICAgICBzZWxmLl9w
b3J0ID0gcG9ydAogICAgICAgICBzZWxmLl9yb290ID0gcm9vdAogICAgICAgICBzZWxmLl9ydW5f
YmFja2dyb3VuZCA9IHJ1bl9iYWNrZ3JvdW5kCkBAIC03MCwxOCArNjEsOSBAQCBjbGFzcyBMaWdo
dHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgaWYgbm90IHNl
bGYuX2xheW91dF90ZXN0c19kaXI6CiAgICAgICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfZGly
ID0gc2VsZi5fcG9ydF9vYmoubGF5b3V0X3Rlc3RzX2RpcigpCiAKLSAgICAgICAgdHJ5OgotICAg
ICAgICAgICAgc2VsZi5fd2Via2l0X3Rlc3RzID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICAg
ICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIsICdodHRwJywgJ3Rlc3RzJykKLSAgICAgICAgICAg
IHNlbGYuX2pzX3Rlc3RfcmVzb3VyY2UgPSBvcy5wYXRoLmpvaW4oCi0gICAgICAgICAgICAgICAg
c2VsZi5fbGF5b3V0X3Rlc3RzX2RpciwgJ2Zhc3QnLCAnanMnLCAncmVzb3VyY2VzJykKLSAgICAg
ICAgICAgIHNlbGYuX21lZGlhX3Jlc291cmNlID0gb3MucGF0aC5qb2luKAotICAgICAgICAgICAg
ICAgIHNlbGYuX2xheW91dF90ZXN0c19kaXIsICdtZWRpYScpCi0KLSAgICAgICAgZXhjZXB0Ogot
ICAgICAgICAgICAgc2VsZi5fd2Via2l0X3Rlc3RzID0gTm9uZQotICAgICAgICAgICAgc2VsZi5f
anNfdGVzdF9yZXNvdXJjZSA9IE5vbmUKLSAgICAgICAgICAgIHNlbGYuX21lZGlhX3Jlc291cmNl
ID0gTm9uZQorICAgICAgICBzZWxmLl93ZWJraXRfdGVzdHMgPSBvcy5wYXRoLmpvaW4oc2VsZi5f
bGF5b3V0X3Rlc3RzX2RpciwgJ2h0dHAnLCAndGVzdHMnKQorICAgICAgICBzZWxmLl9qc190ZXN0
X3Jlc291cmNlID0gb3MucGF0aC5qb2luKHNlbGYuX2xheW91dF90ZXN0c19kaXIsICdmYXN0Jywg
J2pzJywgJ3Jlc291cmNlcycpCisgICAgICAgIHNlbGYuX21lZGlhX3Jlc291cmNlID0gb3MucGF0
aC5qb2luKHNlbGYuX2xheW91dF90ZXN0c19kaXIsICdtZWRpYScpCiAKICAgICAgICAgIyBTZWxm
IGdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBmb3IgU1NMIHNlcnZlciAoZm9yIGNsaWVudCBjZXJ0IGdl
dAogICAgICAgICAjIDxiYXNlLXBhdGg+XGNocm9tZVx0ZXN0XGRhdGFcc3NsXGNlcnRzXHJvb3Rf
Y2FfY2VydC5jcnQpCkBAIC05OSwxMyArODEsNyBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZl
cl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAn
ZG9jcm9vdCc6IHNlbGYuX3dlYmtpdF90ZXN0cywKICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQn
OiBzZWxmLl9wZW1fZmlsZX1dKQogCi0gICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAg
IHJldHVybiBzZWxmLl9wcm9jZXNzICE9IE5vbmUKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAg
ICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSAnTGlnaHR0cGQg
YWxyZWFkeSBydW5uaW5nJwotCisgICAgZGVmIF9wcmVwYXJlX2NvbmZpZyhzZWxmKToKICAgICAg
ICAgYmFzZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2Uo
J1Rvb2xzJywKICAgICAgICAgICAgICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xheW91dF90ZXN0
cycsICdwb3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQogICAgICAgICBvdXRfY29uZl9maWxlID0gb3Mu
cGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKQEAgLTExNSwxOSAr
OTEsMTIgQEAgY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6
CiAgICAgICAgIGxvZ19maWxlX25hbWUgPSAiZXJyb3IubG9nLSIgKyB0aW1lX3N0ciArICIudHh0
IgogICAgICAgICBlcnJvcl9sb2cgPSBvcy5wYXRoLmpvaW4oc2VsZi5fb3V0cHV0X2RpciwgbG9n
X2ZpbGVfbmFtZSkKIAotICAgICAgICAjIFJlbW92ZSBvbGQgbG9nIGZpbGVzLiBXZSBvbmx5IG5l
ZWQgdG8ga2VlcCB0aGUgbGFzdCBvbmVzLgotICAgICAgICBzZWxmLnJlbW92ZV9sb2dfZmlsZXMo
c2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikKLSAgICAgICAgc2VsZi5yZW1vdmVfbG9n
X2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJlcnJvci5sb2ctIikKLQogICAgICAgICAjIFdyaXRl
IG91dCB0aGUgY29uZmlnCi0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oYmFzZV9jb25mX2ZpbGUs
ICJyIiwgInV0Zi04IikgYXMgZmlsZToKLSAgICAgICAgICAgIGJhc2VfY29uZiA9IGZpbGUucmVh
ZCgpCisgICAgICAgIGJhc2VfY29uZiA9IHNlbGYuX2ZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUo
YmFzZV9jb25mX2ZpbGUpCiAKICAgICAgICAgIyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcmUtd29y
a2VkIHNvIHRoYXQgdGhpcyBibG9jayBjYW4KICAgICAgICAgIyB1c2Ugd2l0aCBvcGVuKCkgaW5z
dGVhZCBvZiBhIG1hbnVhbCBmaWxlLmNsb3NlKCkgY2FsbC4KLSAgICAgICAgIyBsaWdodHRwZC5j
b25mIGZpbGVzIHNlZW0gdG8gYmUgVVRGLTggd2l0aG91dCBCT006Ci0gICAgICAgICMgaHR0cDov
L3JlZG1pbmUubGlnaHR0cGQubmV0L2lzc3Vlcy85OTIKLSAgICAgICAgZiA9IGNvZGVjcy5vcGVu
KG91dF9jb25mX2ZpbGUsICJ3IiwgInV0Zi04IikKKyAgICAgICAgZiA9IHNlbGYuX2ZpbGVzeXN0
ZW0ub3Blbl90ZXh0X2ZpbGVfZm9yX3dyaXRpbmcob3V0X2NvbmZfZmlsZSkKICAgICAgICAgZi53
cml0ZShiYXNlX2NvbmYpCiAKICAgICAgICAgIyBXcml0ZSBvdXQgb3VyIGNnaSBoYW5kbGVycy4g
IFJ1biBwZXJsIHRocm91Z2ggZW52IHNvIHRoYXQgaXQKQEAgLTIwNCwzOSArMTczLDI0IEBAIGNs
YXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAg
ICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRtcF9tb2R1bGVfcGF0aCk6CiAgICAgICAgICAgICAg
ICAgb3MubWFrZWRpcnModG1wX21vZHVsZV9wYXRoKQogICAgICAgICAgICAgbGliX2ZpbGUgPSAn
bGlibGlnaHRjb21wLmR5bGliJwotICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKG9zLnBhdGgu
am9pbihtb2R1bGVfcGF0aCwgbGliX2ZpbGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9zLnBhdGguam9pbih0bXBfbW9kdWxlX3BhdGgsIGxpYl9maWxlKSkKLQotICAgICAgICBlbnYg
PSBzZWxmLl9wb3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQotICAgICAgICBfbG9n
LmRlYnVnKCdTdGFydGluZyBodHRwIHNlcnZlciwgY21kPSIlcyInICUgc3RyKHN0YXJ0X2NtZCkp
Ci0gICAgICAgICMgRklYTUU6IFNob3VsZCB1c2UgRXhlY3V0aXZlLnJ1bl9jb21tYW5kCi0gICAg
ICAgIHNlbGYuX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHN0YXJ0X2NtZCwgZW52PWVudiwg
c3RkaW49c3VicHJvY2Vzcy5QSVBFKQotCi0gICAgICAgICMgV2FpdCBmb3Igc2VydmVyIHRvIHN0
YXJ0LgotICAgICAgICBzZWxmLm1hcHBpbmdzID0gbWFwcGluZ3MKLSAgICAgICAgc2VydmVyX3N0
YXJ0ZWQgPSBzZWxmLndhaXRfZm9yX2FjdGlvbigKLSAgICAgICAgICAgIHNlbGYuaXNfc2VydmVy
X3J1bm5pbmdfb25fYWxsX3BvcnRzKQotCi0gICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRl
ZCBhbHJlYWR5Ci0gICAgICAgIGlmIG5vdCBzZXJ2ZXJfc3RhcnRlZCBvciBzZWxmLl9wcm9jZXNz
LnJldHVybmNvZGUgIT0gTm9uZToKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbignRmFpbGVk
IHRvIHN0YXJ0IGh0dHBkLicpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3Nm
dWxseSBzdGFydGVkIikKLQotICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkgdG8g
c2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCi0gICAgIyBwcm9iYWJseSBub3Qg
YmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5raWxs
ID8KLQotICAgIGRlZiBzdG9wKHNlbGYsIGZvcmNlPUZhbHNlKToKLSAgICAgICAgaWYgbm90IGZv
cmNlIGFuZCBub3Qgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAg
ICAgICBodHRwZF9waWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAg
ICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBzZWxmLl9wb3J0X29i
ai5fc2h1dF9kb3duX2h0dHBfc2VydmVyKGh0dHBkX3BpZCkKLQotICAgICAgICBpZiBzZWxmLl9w
cm9jZXNzOgotICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0
aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9y
Zy9pc3N1ZTE3MzE3MTcKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCi0gICAgICAg
ICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5j
b3B5ZmlsZShvcy5wYXRoLmpvaW4obW9kdWxlX3BhdGgsIGxpYl9maWxlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRtcF9tb2R1bGVfcGF0aCwg
bGliX2ZpbGUpKQorCisgICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IHN0YXJ0X2NtZAorICAgICAg
ICBzZWxmLl9lbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQor
ICAgICAgICBzZWxmLl9tYXBwaW5ncyA9IG1hcHBpbmdzCisKKyAgICBkZWYgX3JlbW92ZV9zdGFs
ZV9sb2dzKHNlbGYpOgorICAgICAgICAjIFNvbWV0aW1lcyBsb2dzIGFyZSBvcGVuIGluIG90aGVy
IHByb2Nlc3NlcyBidXQgdGhleSBzaG91bGQgY2xlYXIgZXZlbnR1YWxseS4KKyAgICAgICAgdHJ5
OgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAi
YWNjZXNzLmxvZy0iKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAgICAgICAgIF9s
b2cud2FybmluZygnRmFpbGVkIHRvIHJlbW92ZSBvbGQgJXMgbG9nIGZpbGVzJyAlIHNlbGYuX25h
bWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9sb2dfZmlsZXMoc2Vs
Zi5fb3V0cHV0X2RpciwgImVycm9yLmxvZy0iKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToK
KyAgICAgICAgICAgIF9sb2cud2FybmluZygnRmFpbGVkIHRvIHJlbW92ZSBvbGQgJXMgbG9nIGZp
bGVzJyAlIHNlbGYuX25hbWUpCisKKyAgICBkZWYgX3NwYXduX3Byb2Nlc3Moc2VsZik6CisgICAg
ICAgIF9sb2cuZGVidWcoJ3N0YXJ0aW5nICVzLCBjbWQ9IiVzIicgJSAoc2VsZi5fbmFtZSwgc2Vs
Zi5fc3RhcnRfY21kKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxm
Ll9zdGFydF9jbWQsIGVudj1zZWxmLl9lbnYsIHNoZWxsPUZhbHNlLCBzdGRlcnI9c2VsZi5fZXhl
Y3V0aXZlLlBJUEUpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkKaW5kZXggMmE0M2U4MTk3OGI5MmM2
Y2E2ODFhOGE0YzI4Zjk5YjgzYjg3NmViYi4uNmMxZTFiZGJiNDA5Y2QxNmY3MWE5MmU0ZjdkYmY1
MDgxNzJlNTBjNCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9odHRwX3NlcnZlcl9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5weQpAQCAtMSw1ICsxLDUgQEAKICMh
L3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0yNywy
NCArMjcsMTA1IEBACiAjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCi0iIiJCYXNlIGNs
YXNzIHdpdGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSBhbmQgTGlnaHR0cGQg
c2VydmVycy4iIiIKKyIiIkJhc2UgY2xhc3Mgd2l0aCBjb21tb24gcm91dGluZXMgYmV0d2VlbiB0
aGUgQXBhY2hlLCBMaWdodHRwZCwgYW5kIHdlYnNvY2tldCBzZXJ2ZXJzLiIiIgogCitpbXBvcnQg
ZXJybm8KIGltcG9ydCBsb2dnaW5nCi1pbXBvcnQgb3MKK2ltcG9ydCBzb2NrZXQKIGltcG9ydCB0
aW1lCi1pbXBvcnQgdXJsbGliCi0KLWZyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbSBpbXBvcnQg
ZmlsZXN5c3RlbQogCiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90
ZXN0cy5wb3J0Lmh0dHBfc2VydmVyX2Jhc2UiKQogCiAKK2NsYXNzIFNlcnZlckVycm9yKEV4Y2Vw
dGlvbik6CisgICAgcGFzcworCisKIGNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CisgICAg
IiIiQSBza2VsZXRvbiBjbGFzcyBmb3Igc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHNlcnZlcnMgdXNl
ZCBieSB0aGUgbGF5b3V0IHRlc3RzLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRf
b2JqKToKKyAgICAgICAgc2VsZi5fbmFtZSA9ICc8dmlydHVhbD4nCisgICAgICAgIHNlbGYuX21h
cHBpbmdzID0ge30KKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBOb25lCiAgICAgICAgIHNlbGYu
X3BvcnRfb2JqID0gcG9ydF9vYmoKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0gcG9ydF9vYmou
X2V4ZWN1dGl2ZQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydF9vYmouX2ZpbGVzeXN0
ZW0KKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKworICAgIGRlZiBzdGFydChzZWxmKToK
KyAgICAgICAgIiIiU3RhcnRzIHRoZSBzZXJ2ZXIuIiIiCisgICAgICAgIGlmIHNlbGYuX3Byb2Nl
c3M6CisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignJXMgYWxyZWFkeSBydW5uaW5nJyAl
IHNlbGYuX25hbWUpCisKKyAgICAgICAgc2VsZi5fcmVtb3ZlX3N0YWxlX2xvZ3MoKQorICAgICAg
ICBzZWxmLl9wcmVwYXJlX2NvbmZpZygpCisgICAgICAgIHNlbGYuX2NoZWNrX3RoYXRfYWxsX3Bv
cnRzX2FyZV9hdmFpbGFibGUoKQorICAgICAgICBzZWxmLl9wcm9jZXNzID0gc2VsZi5fc3Bhd25f
cHJvY2VzcygpCisgICAgICAgIF9sb2cuZGVidWcoIiVzIHN0YXJ0ZWQuIFRlc3RpbmcgcG9ydHMi
ICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLl93YWl0X2Zvcl9h
Y3Rpb24oc2VsZi5faXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRzKQorICAgICAgICBpZiBz
ZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIF9sb2cuZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBz
dGFydGVkIiAlIHNlbGYuX25hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBT
ZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzIHNlcnZlcicgJSBzZWxmLl9uYW1lKQorCisg
ICAgICAgIGlmIHNlbGYuX3BpZF9maWxlOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS53
cml0ZV90ZXh0X2ZpbGUoc2VsZi5fcGlkX2ZpbGUsIHN0cihzZWxmLl9wcm9jZXNzLnBpZCkpCisK
KyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBh
bnkgcnVubmluZyAlcyBzZXJ2ZXJzIiAlIHNlbGYuX25hbWUpCisgICAgICAgIHBpZCA9IE5vbmUK
KyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgIHBpZCA9IHNlbGYuX3Byb2Nl
c3MucGlkCisgICAgICAgIGVsaWYgc2VsZi5fcGlkX2ZpbGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0u
ZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAgICAgIHBpZCA9IGludChzZWxmLl9maWxl
c3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlKSkKKworICAgICAgICBpZiBub3Qg
cGlkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fcG9ydF9vYmouX2V4ZWN1
dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAgICAg
ICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1
ZSB0bzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcK
KyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICBzZWxmLl9wcm9j
ZXNzID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9waWRfZmlsZSBhbmQgc2VsZi5fZmlsZXN5c3Rl
bS5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAgICAgICAgc2VsZi5fZmlsZXN5c3RlbS5y
ZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisKKyAgICAgICAgc2VsZi5fY2xlYW51cF9hZnRlcl9zdG9w
KCkKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2VsZik6CisgICAgICAgICIiIlRoaXMgcm91
dGluZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBkbyBhbnkgc29ydAor
ICAgICAgICBvZiBpbml0aWFsaXphdGlvbiByZXF1aXJlZCBwcmlvciB0byBzdGFydGluZyB0aGUg
c2VydmVyIHRoYXQgbWF5IGZhaWwuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfcmVtb3Zl
X3N0YWxlX2xvZ3Moc2VsZik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBzaG91bGQgYmUgaW1w
bGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byB0cnkgYW5kIHJlbW92ZSBsb2dzCisgICAgICAgIGxl
ZnQgb3ZlciBmcm9tIGEgcHJpb3IgcnVuLiBUaGlzIHJvdXRpbmUgc2hvdWxkIGxvZyB3YXJuaW5n
cyBpZiB0aGUKKyAgICAgICAgZmlsZXMgY2Fubm90IGJlIGRlbGV0ZWQsIGJ1dCBzaG91bGQgbm90
IGZhaWwgdW5sZXNzIGZhaWx1cmUgdG8KKyAgICAgICAgZGVsZXRlIHRoZSBsb2dzIHdpbGwgYWN0
dWFsbHkgY2F1c2Ugc3RhcnQoKSB0byBmYWlsLiIiIgorICAgICAgICBwYXNzCiAKLSAgICBkZWYg
d2FpdF9mb3JfYWN0aW9uKHNlbGYsIGFjdGlvbik6CisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNl
bGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUgbXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNs
YXNzZXMgdG8gYWN0dWFsbHkKKyAgICAgICAgbGF1bmNoIHRoZSBzdWJwcm9jZXNzIGFuZCByZXR1
cm4gdGhlIHByb2Nlc3Mgb2JqZWN0LiBUaGUgbWV0aG9kCisgICAgICAgIGRvZXMgbm90IG5lZWQg
dG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3Mgc3RhcnRlZCBjb3JyZWN0bHkgKHN0YXJ0KCkKKyAg
ICAgICAgd2lsbCB2ZXJpZnkgdGhhdCBpdHNlbGYpLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBs
ZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2NsZWFudXBfYWZ0ZXJfc3RvcChzZWxmKToKKyAgICAg
ICAgIiIiVGhpcyByb3V0aW5lIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFzc2VzIHRvIGNs
ZWFuIHVwIGFueSBzdGF0ZQorICAgICAgICBhcyBuZWNlc3NhcnkgYWZ0ZXIgdGhlIHNlcnZlciBw
cm9jZXNzIGlzIHN0b3BwZWQuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBfcmVtb3ZlX2xv
Z19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKKyAgICAgICAgZmlsZXMgPSBzZWxm
Ll9maWxlc3lzdGVtLmxpc3RkaXIoZm9sZGVyKQorICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoK
KyAgICAgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6CisgICAgICAgICAg
ICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGZvbGRlciwgZmlsZSkKKyAg
ICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShmdWxsX3BhdGgpCisKKyAgICBk
ZWYgX3dhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgogICAgICAgICAiIiJSZXBlYXQgdGhl
IGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4gUmV0dXJucwogICAg
ICAgICB3aGV0aGVyIGl0IHN1Y2NlZWRlZC4iIiIKICAgICAgICAgc3RhcnRfdGltZSA9IHRpbWUu
dGltZSgpCkBAIC01NiwyOCArMTM3LDM3IEBAIGNsYXNzIEh0dHBTZXJ2ZXJCYXNlKG9iamVjdCk6
CiAKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgaXNfc2VydmVyX3J1bm5pbmdfb25f
YWxsX3BvcnRzKHNlbGYpOgorICAgIGRlZiBfaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRz
KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZlciBpcyBydW5uaW5n
IG9uIGFsbCB0aGUgZGVzaXJlZCBwb3J0cy4iIiIKLSAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2Vs
Zi5tYXBwaW5nczoKLSAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5nOgotICAgICAg
ICAgICAgICAgIGh0dHBfc3VmZml4ID0gJ3MnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgICAgIGh0dHBfc3VmZml4ID0gJycKLQotICAgICAgICAgICAgdXJsID0gJ2h0dHAlczovLzEy
Ny4wLjAuMTolZC8nICUgKGh0dHBfc3VmZml4LCBtYXBwaW5nWydwb3J0J10pCisgICAgICAgIGlm
IG5vdCBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcHJvY2Vzcy5waWQp
OgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIGlzbid0IHJ1bm5pbmcgYXQgYWxsIikK
KyAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCJTZXJ2ZXIgZXhpdGVkIikKIAorICAgICAg
ICBmb3IgbWFwcGluZyBpbiBzZWxmLl9tYXBwaW5nczoKKyAgICAgICAgICAgIHMgPSBzb2NrZXQu
c29ja2V0KCkKKyAgICAgICAgICAgIHBvcnQgPSBtYXBwaW5nWydwb3J0J10KICAgICAgICAgICAg
IHRyeToKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVuKHVybCwgcHJv
eGllcz17fSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBhdCAl
cyIgJSB1cmwpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgnbG9jYWxob3N0JywgcG9ydCkp
CisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgb24gJWQiICUgcG9y
dCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAgICAgIF9sb2cu
ZGVidWcoIlNlcnZlciBOT1QgcnVubmluZyBhdCAlczogJXMiICUgKHVybCwgZSkpCisgICAgICAg
ICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVGVVNFRCwgZXJybm8uRUNP
Tk5SRVNFVCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgX2xv
Zy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5nIG9uICVkOiAlcyIgJSAocG9ydCwgZSkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICAgICAgcy5jbG9zZSgpCiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBkZWYgcmVtb3Zl
X2xvZ19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKLSAgICAgICAgZmlsZXMgPSBv
cy5saXN0ZGlyKGZvbGRlcikKLSAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAg
ICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgotICAgICAgICAgICAgICAgIGZ1bGxf
cGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAgICAgICAgZmlsZXN5
c3RlbS5GaWxlU3lzdGVtKCkucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICBkZWYgX2NoZWNrX3RoYXRf
YWxsX3BvcnRzX2FyZV9hdmFpbGFibGUoc2VsZik6CisgICAgICAgIGZvciBtYXBwaW5nIGluIHNl
bGYuX21hcHBpbmdzOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAg
ICAgcG9ydCA9IG1hcHBpbmdbJ3BvcnQnXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAg
ICAgIHMuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnQpKQorICAgICAgICAgICAgZXhjZXB0IElPRXJy
b3IsIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFMUkVBRFksIGVy
cm5vLkVBRERSSU5VU0UpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcign
UG9ydCAlZCBpcyBhbHJlYWR5IGluIHVzZS4nICUgcG9ydCkKKyAgICAgICAgICAgICAgICBlbHNl
OgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgICAgICBzLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlcl9pbnRlZ3JhdGlv
bnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY0MWJkNzkzNDgwMWNmZTBhMDg0Yjc2NjU1OTY1OWFmZjBl
OTZmMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL3BvcnQvaHR0cF9zZXJ2ZXJfaW50ZWdyYXRpb250ZXN0LnB5CkBAIC0wLDAgKzEsMTI2IEBA
CisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4K
KyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworIiIiSW50ZWdyYXRpb24gdGVzdGluZyBmb3IgdGhlIG5ldy1ydW4t
d2Via2l0LWh0dHBkIHNjcmlwdCIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0
IHNvY2tldAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQor
aW1wb3J0IHVuaXR0ZXN0CisKK2ltcG9ydCBwb3J0X3Rlc3RjYXNlCisKKworY2xhc3MgTmV3UnVu
V2ViS2l0SFRUUGRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0cyB0aGF0IG5l
dy1ydW4td2Via2l0LWh0dHBkIG11c3QgcGFzcy4iIiIKKyAgICBIVFRQX1BPUlRTID0gKDgwMDAs
IDgwODAsIDg0NDMpCisKKyAgICBkZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oc2VsZiwgaG9z
dCwgcG9ydHMpOgorICAgICAgICBmb3IgcG9ydCBpbiBwb3J0czoKKyAgICAgICAgICAgIHRyeToK
KyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAg
ICAgICAgIHRlc3Rfc29ja2V0LmNvbm5lY3QoKGhvc3QsIHBvcnQpKQorICAgICAgICAgICAgICAg
IHNlbGYuZmFpbCgpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZS5lcnJubyBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJu
by5FQ09OTlJFU0VUKSkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgdGVz
dF9zb2NrZXQuY2xvc2UoKQorCisgICAgZGVmIGFzc2VydF9zZXJ2ZXJzX2FyZV91cChzZWxmLCBo
b3N0LCBwb3J0cyk6CisgICAgICAgIGZvciBwb3J0IGluIHBvcnRzOgorICAgICAgICAgICAgdHJ5
OgorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAg
ICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoaG9zdCwgcG9ydCkpCisgICAgICAgICAgICBl
eGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWxlZCB0byBj
b25uZWN0IHRvICVzOiVkJyAlIChob3N0LCBwb3J0KSkKKyAgICAgICAgICAgIGZpbmFsbHk6Cisg
ICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQuY2xvc2UoKQorCisgICAgZGVmIHJ1bl9zY3JpcHQo
c2VsZiwgYXJncyk6CisgICAgICAgIHNjcmlwdF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0
aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRo
KF9fZmlsZV9fKSkpKSkKKyAgICAgICAgc2NyaXB0X3BhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0
X2RpciwgJ25ldy1ydW4td2Via2l0LWh0dHBkJykKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3Mu
Y2FsbChbc3lzLmV4ZWN1dGFibGUsIHNjcmlwdF9wYXRoXSArIGFyZ3MsIHN0ZG91dD1zdWJwcm9j
ZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICBkZWYgaW50ZWdyYXRpb25f
dGVzdF9odHRwX3NlcnZlcl9fbm9ybWFsKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2
ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0YXJ0J10pLCAwKQor
ICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQ
X1BPUlRTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNl
cnZlcicsICdzdG9wJ10pLCAwKQorICAgICAgICBzZWxmLmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3du
KCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVz
dF9odHRwX3NlcnZlcl9fZmFpbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGlmIGEgcG9y
dCBpc24ndCBhdmFpbGFibGUsIHRoZSBjYWxsIGZhaWxzLgorICAgICAgICBmb3IgcG9ydF9udW1i
ZXIgaW4gc2VsZi5IVFRQX1BPUlRTOgorICAgICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQu
c29ja2V0KCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0X251bWJlcikp
CisgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKKyAgICAgICAgICAgICAg
ICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFERFJJTlVTRSwgZXJybm8uRUFMUkVBRFkpOgor
ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb3VsZCBub3QgYmluZCB0byBwb3J0
ICVkOiAlcycgJSAocG9ydF9udW1iZXIsIHN0cihlKSkpCisgICAgICAgICAgICAgICAgICAgIHJh
aXNlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5ydW5fc2NyaXB0KFsn
LS1zZXJ2ZXInLCAnc3RhcnQnXSksIDEpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAg
ICAgICAgIHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3AnXSkKKyAgICAgICAgICAg
ICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCisKKyAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBz
dGFydCgpIHR3aWNlIGZhaWxzLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFscyhzZWxmLnJ1bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdGFydCddKSwgMCkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0
YXJ0J10pLCAxKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5ydW5fc2NyaXB0
KFsnLS1zZXJ2ZXInLCAnc3RvcCddKQorCisgICAgICAgICMgVGVzdCB0aGF0IGNhbGxpbmcgc3Rv
cCgpIHR3aWNlIGlzIGhhcm1sZXNzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLnJ1
bl9zY3JpcHQoWyctLXNlcnZlcicsICdzdG9wJ10pLCAwKQorCisgICAgZGVmIG1heWJlX21ha2Vf
ZGlyKHNlbGYsICpjb21wcyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1ha2VkaXJz
KG9zLnBhdGguam9pbigqY29tcHMpKQorICAgICAgICBleGNlcHQgT1NFcnJvciwgZToKKyAgICAg
ICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgorICAgICAgICAgICAgICAgIHJhaXNl
CisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX3NlcnZlcl9wb3J0X2FuZF9yb290KHNl
bGYpOgorICAgICAgICB0bXBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKHByZWZpeD0nd2Via2l0cHl0
ZXN0JykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdodHRwJywgJ3Rlc3Rz
JykKKyAgICAgICAgc2VsZi5tYXliZV9tYWtlX2Rpcih0bXBkaXIsICdmYXN0JywgJ2pzJywgJ3Jl
c291cmNlcycpCisgICAgICAgIHNlbGYubWF5YmVfbWFrZV9kaXIodG1wZGlyLCAnbWVkaWEnKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcsIFsxODAw
MF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVy
JywgJ3N0YXJ0JywgJy0tcG9ydD0xODAwMCcsICctLXJvb3QnLCB0bXBkaXJdKSwgMCkKKyAgICAg
ICAgc2VsZi5hc3NlcnRfc2VydmVyc19hcmVfdXAoJ2xvY2FsaG9zdCcsIFsxODAwMF0pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYucnVuX3NjcmlwdChbJy0tc2VydmVyJywgJ3N0b3An
XSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0X3NlcnZlcnNfYXJlX2Rvd24oJ2xvY2FsaG9zdCcs
IFsxODAwMF0pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBwb3J0X3Rlc3Rj
YXNlLm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC9wb3J0X3Rlc3RjYXNlLnB5CmluZGV4IGY2MTczN2QzYTYxOTQ0ODNlMmI1OWUx
MTcwZTlkYTIxZDM2ZmIyYjguLjMzMjQwY2Q3N2U3MTlhMDZmNGVhZGRlYzEzMjgzOWRlMTVkYjg4
MDMgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
cG9ydF90ZXN0Y2FzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3BvcnRfdGVzdGNhc2UucHkKQEAgLTQ4LDkgKzQ4LDggQEAgbW9ja19vcHRpb25zID0g
bW9ja3Rvb2wuTW9ja09wdGlvbnMoY29uZmlndXJhdGlvbj0nUmVsZWFzZScpCiAKIGNsYXNzIFBv
cnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgdGhhdCBhbGwgUG9y
dCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXNzLiIiIgotCi0gICAgSFRUUF9QT1JUUyA9IFs4MDAw
LCA4MDgwLCA4NDQzXQotICAgIFdFQlNPQ0tFVF9QT1JUUyA9IFs4ODgwXQorICAgIEhUVFBfUE9S
VFMgPSAoODAwMCwgODA4MCwgODQ0MykKKyAgICBXRUJTT0NLRVRfUE9SVFMgPSAoODg4MCwpCiAK
ICAgICBkZWYgcG9ydF9tYWtlcihzZWxmLCBwbGF0Zm9ybSk6CiAgICAgICAgICIiIk92ZXJyaWRl
IHRvIHJldHVybiB0aGUgY2xhc3Mgb2JqZWN0IG9mIHRoZSBwb3J0IHRvIGJlIHRlc3RlZCwKQEAg
LTkyLDIzICs5MSwyMyBAQCBjbGFzcyBQb3J0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgog
ICAgIGRlZiBhc3NlcnRfc2VydmVyc19hcmVfZG93bihzZWxmLCBob3N0LCBwb3J0cyk6CiAgICAg
ICAgIGZvciBwb3J0IGluIHBvcnRzOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IHMgPSBzb2NrZXQuc29ja2V0KCkKLSAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKGhvc3QsIHBv
cnQpKQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCisgICAg
ICAgICAgICAgICAgdGVzdF9zb2NrZXQuY29ubmVjdCgoaG9zdCwgcG9ydCkpCiAgICAgICAgICAg
ICAgICAgc2VsZi5mYWlsKCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgogICAgICAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmVycm5vIGluIChlcnJuby5FQ09OTlJFRlVTRUQs
IGVycm5vLkVDT05OUkVTRVQpKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAg
ICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgpCiAKICAgICBk
ZWYgYXNzZXJ0X3NlcnZlcnNfYXJlX3VwKHNlbGYsIGhvc3QsIHBvcnRzKToKICAgICAgICAgZm9y
IHBvcnQgaW4gcG9ydHM6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcyA9IHNv
Y2tldC5zb2NrZXQoKQotICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoaG9zdCwgcG9ydCkpCisg
ICAgICAgICAgICAgICAgdGVzdF9zb2NrZXQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAg
ICAgICB0ZXN0X3NvY2tldC5jb25uZWN0KChob3N0LCBwb3J0KSkKICAgICAgICAgICAgIGV4Y2Vw
dCBJT0Vycm9yLCBlOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbGVkIHRvIGNvbm5l
Y3QgdG8gJXM6JWQnICUgKGhvc3QsIHBvcnQpKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAg
ICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tldC5jbG9zZSgp
CiAKICAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9odHRwX2xvY2soc2VsZik6CiAgICAgICAgIHBv
cnQgPSBzZWxmLm1ha2VfcG9ydCgpCkBAIC0xMzcsNyArMTM2LDYgQEAgY2xhc3MgUG9ydFRlc3RD
YXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9ydCA9IHNlbGYubWFrZV9wb3J0KCkK
ICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICByZXR1cm4KLQogICAgICAgICBzZWxm
LmFzc2VydF9zZXJ2ZXJzX2FyZV9kb3duKCdsb2NhbGhvc3QnLCBzZWxmLkhUVFBfUE9SVFMpCiAg
ICAgICAgIHBvcnQuc3RhcnRfaHR0cF9zZXJ2ZXIoKQogICAgICAgICBzZWxmLmFzc2VydF9zZXJ2
ZXJzX2FyZV91cCgnbG9jYWxob3N0Jywgc2VsZi5IVFRQX1BPUlRTKQpAQCAtMTQ4LDEzICsxNDYs
MTIgQEAgY2xhc3MgUG9ydFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAgICAgcG9y
dCA9IHNlbGYubWFrZV9wb3J0KCkKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICBy
ZXR1cm4KLQogICAgICAgICAjIFRlc3QgdGhhdCBpZiBhIHBvcnQgaXNuJ3QgYXZhaWxhYmxlLCB0
aGUgY2FsbCBmYWlscy4KICAgICAgICAgZm9yIHBvcnRfbnVtYmVyIGluIHNlbGYuSFRUUF9QT1JU
UzoKLSAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHRlc3Rfc29j
a2V0ID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAg
dHJ5OgotICAgICAgICAgICAgICAgICAgICBzLmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0X251bWJl
cikpCisgICAgICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCdsb2NhbGhvc3QnLCBw
b3J0X251bWJlcikpCiAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciwgZToKICAg
ICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFERFJJTlVTRSwgZXJybm8u
RUFMUkVBRFkpOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdjb3VsZCBub3Qg
YmluZCB0byBwb3J0ICVkJyAlIHBvcnRfbnVtYmVyKQpAQCAtMTY2LDcgKzE2Myw3IEBAIGNsYXNz
IFBvcnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICAgICAgICAgIHBh
c3MKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcG9ydC5zdG9wX2h0dHBf
c2VydmVyKCkKLSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0ZXN0
X3NvY2tldC5jbG9zZSgpCiAKICAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBzdGFydCgpIHR3
aWNlIGZhaWxzLgogICAgICAgICB0cnk6CkBAIC0yNjAsOSArMjU3LDkgQEAgY2xhc3MgUG9ydFRl
c3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICAgICAjIFRlc3QgdGhhdCBzdGFydCgp
IGZhaWxzIGlmIGEgcG9ydCBpc24ndCBhdmFpbGFibGUuCiAgICAgICAgIGZvciBwb3J0X251bWJl
ciBpbiBzZWxmLldFQlNPQ0tFVF9QT1JUUzoKLSAgICAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0
KCkKKyAgICAgICAgICAgIHRlc3Rfc29ja2V0ID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICAgICAgcy5iaW5kKCgnbG9jYWxob3N0JywgcG9ydF9udW1iZXIp
KQorICAgICAgICAgICAgICAgIHRlc3Rfc29ja2V0LmJpbmQoKCdsb2NhbGhvc3QnLCBwb3J0X251
bWJlcikpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwb3J0LnN0
YXJ0X3dlYnNvY2tldF9zZXJ2ZXIoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3No
b3VsZCBub3QgaGF2ZSBiZWVuIGFibGUgdG8gc3RhcnQgdGhlIHNlcnZlciB3aGlsZSBib3VuZCB0
byAlZCcgJSBwb3J0X251bWJlcikKQEAgLTI3MCw3ICsyNjcsNyBAQCBjbGFzcyBQb3J0VGVzdENh
c2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAg
ICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHBvcnQuc3RvcF93ZWJzb2NrZXRfc2VydmVy
KCkKLSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB0ZXN0X3NvY2tl
dC5jbG9zZSgpCiAKICAgICAgICAgIyBUZXN0IHRoYXQgY2FsbGluZyBzdGFydCgpIHR3aWNlIGZh
aWxzLgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKaW5kZXggYTU5Y2IxZmFk
YjhjODc3Njc1ZDAyMTE0MzEzMWI2ODM2MTllMGUyZS4uMjE1YTZlZmI2NmNlZWQ1ZjU4Njg1ZjVl
ZTM0MzgxZTg2Yzk0NWJmZCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQpAQCAtMSw1ICsxLDUg
QEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgotIyBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBA
IC0yOSwyMyArMjksMTMgQEAKIAogIiIiQSBjbGFzcyB0byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5
V2ViU29ja2V0IHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIKIAotCi1mcm9tIF9fZnV0
dXJlX18gaW1wb3J0IHdpdGhfc3RhdGVtZW50Ci0KLWltcG9ydCBjb2RlY3MKIGltcG9ydCBsb2dn
aW5nCi1pbXBvcnQgb3B0cGFyc2UKIGltcG9ydCBvcwotaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9y
dCBzeXMKLWltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxsaWIKIAotaW1w
b3J0IGZhY3RvcnkKLWltcG9ydCBodHRwX3NlcnZlcgotCi1mcm9tIHdlYmtpdHB5LmNvbW1vbi5z
eXN0ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCitmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCiAKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC53ZWJzb2NrZXRfc2VydmVyIikKQEAgLTU3LDQx
ICs0Nyw2IEBAIF9ERUZBVUxUX1dTX1BPUlQgPSA4ODgwCiBfREVGQVVMVF9XU1NfUE9SVCA9IDkz
MjMKIAogCi1kZWYgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAgIiIiQ2hlY2tzIHRvIHNlZSBpZiB3
ZSBnZXQgYW4gaHR0cCByZXNwb25zZSBmcm9tIHx1cmx8LgotICAgIFdlIHBvbGwgdGhlIHVybCAy
MCB0aW1lcyB3aXRoIGEgMC41IHNlY29uZCBkZWxheS4gIElmIHdlIGRvbid0Ci0gICAgZ2V0IGEg
cmVwbHkgaW4gdGhhdCB0aW1lLCB3ZSBnaXZlIHVwIGFuZCBhc3N1bWUgdGhlIGh0dHBkCi0gICAg
ZGlkbid0IHN0YXJ0IHByb3Blcmx5LgotCi0gICAgQXJnczoKLSAgICAgIHVybDogVGhlIFVSTCB0
byBjaGVjay4KLSAgICBSZXR1cm46Ci0gICAgICBUcnVlIGlmIHRoZSB1cmwgaXMgYWxpdmUuCi0g
ICAgIiIiCi0gICAgc2xlZXBfdGltZSA9IDAuNQotICAgIHdhaXRfdGltZSA9IDEwCi0gICAgd2hp
bGUgd2FpdF90aW1lID4gMDoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmVzcG9uc2UgPSB1
cmxsaWIudXJsb3Blbih1cmwsIHByb3hpZXM9e30pCi0gICAgICAgICAgICAjIFNlcnZlciBpcyB1
cCBhbmQgcmVzcG9uZGluZy4KLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIGV4Y2Vw
dCBJT0Vycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAjIFdhaXQgZm9yIHNsZWVwX3Rp
bWUgYmVmb3JlIHRyeWluZyBhZ2Fpbi4KLSAgICAgICAgd2FpdF90aW1lIC09IHNsZWVwX3RpbWUK
LSAgICAgICAgdGltZS5zbGVlcChzbGVlcF90aW1lKQotCi0gICAgcmV0dXJuIEZhbHNlCi0KLQot
Y2xhc3MgUHlXZWJTb2NrZXROb3RTdGFydGVkKEV4Y2VwdGlvbik6Ci0gICAgcGFzcwotCi0KLWNs
YXNzIFB5V2ViU29ja2V0Tm90Rm91bmQoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLQogY2xhc3Mg
UHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogCiAgICAgZGVmIF9faW5pdF9fKHNl
bGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyLCBwb3J0PV9ERUZBVUxUX1dTX1BPUlQsCkBAIC0xMTIs
MTIgKzY3LDEzIEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKICAg
ICAgICAgc2VsZi5fY2VydGlmaWNhdGUgPSBzZWxmLl9wZW1fZmlsZQogICAgICAgICBpZiBzZWxm
Ll9wb3J0OgogICAgICAgICAgICAgc2VsZi5fcG9ydCA9IGludChzZWxmLl9wb3J0KQorICAgICAg
ICBzZWxmLl9uYW1lID0gJ3B5d2Vic29ja2V0JwogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgot
ICAgICAgICAgICAgc2VsZi5fc2VydmVyX25hbWUgPSAnUHlXZWJTb2NrZXQoU2VjdXJlKScKLSAg
ICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9uYW1lID0gJ1B5V2ViU29ja2V0
JwotICAgICAgICBzZWxmLl9waWRmaWxlID0gcGlkZmlsZQorICAgICAgICAgICAgc2VsZi5fbmFt
ZSA9ICdweXdlYnNvY2tldF9zZWN1cmUnCisgICAgICAgIHNlbGYuX3BpZF9maWxlID0gcGlkZmls
ZQorICAgICAgICBzZWxmLl93c2luID0gTm9uZQogICAgICAgICBzZWxmLl93c291dCA9IE5vbmUK
KyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSBbeydwb3J0Jzogc2VsZi5fcG9ydH1dCiAKICAgICAg
ICAgIyBXZWJraXQgdGVzdHMKICAgICAgICAgaWYgc2VsZi5fcm9vdDoKQEAgLTEzMywyOCArODks
MjAgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAg
ICAgZXhjZXB0OgogICAgICAgICAgICAgICAgIHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBOb25l
CiAKLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl93ZWJfc29ja2V0
X3Rlc3RzOgotICAgICAgICAgICAgX2xvZy5pbmZvKCdObyBuZWVkIHRvIHN0YXJ0ICVzIHNlcnZl
ci4nICUgc2VsZi5fc2VydmVyX25hbWUpCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYg
c2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0
ZWQoJyVzIGlzIGFscmVhZHkgcnVubmluZy4nICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfbmFtZSkKLQotICAgICAgICB0aW1lX3N0ciA9IHRp
bWUuc3RyZnRpbWUoJyVkJWIlWS0lSCVNJVMnKQogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgot
ICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAorICAgICAgICAgICAgc2Vs
Zi5fbG9nX3ByZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAogICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgbG9nX3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCi0gICAgICAgIGxvZ19maWxlX25hbWUgPSBs
b2dfcHJlZml4ICsgdGltZV9zdHIKKyAgICAgICAgICAgIHNlbGYuX2xvZ19wcmVmaXggPSBfV1Nf
TE9HX1BSRUZJWAogCi0gICAgICAgICMgUmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdlIG9ubHkgbmVl
ZCB0byBrZWVwIHRoZSBsYXN0IG9uZXMuCi0gICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhz
ZWxmLl9vdXRwdXRfZGlyLCBsb2dfcHJlZml4KQorICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2Vs
Zik6CisgICAgICAgIHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgnJWQlYiVZLSVIJU0lUycpCisg
ICAgICAgIGxvZ19maWxlX25hbWUgPSBzZWxmLl9sb2dfcHJlZml4ICsgdGltZV9zdHIKKyAgICAg
ICAgc2VsZi5fd3NpbiA9IG9wZW4ob3MuZGV2bnVsbCwgJ3InKQogCiAgICAgICAgIGVycm9yX2xv
ZyA9IG9zLnBhdGguam9pbihzZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1lcnIu
dHh0IikKIAogICAgICAgICBvdXRwdXRfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9k
aXIsIGxvZ19maWxlX25hbWUgKyAiLW91dC50eHQiKQotICAgICAgICBzZWxmLl93c291dCA9IGNv
ZGVjcy5vcGVuKG91dHB1dF9sb2csICJ3IiwgInV0Zi04IikKKyAgICAgICAgc2VsZi5fd3NvdXQg
PSBzZWxmLl9maWxlc3lzdGVtLm9wZW5fdGV4dF9maWxlX2Zvcl93cml0aW5nKG91dHB1dF9sb2cp
CiAKICAgICAgICAgZnJvbSB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQucHl3ZWJz
b2NrZXQgaW1wb3J0IG1vZF9weXdlYnNvY2tldAogICAgICAgICBweXRob25faW50ZXJwID0gc3lz
LmV4ZWN1dGFibGUKQEAgLTE4Nyw3MSArMTM1LDI0IEBAIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBf
c2VydmVyLkxpZ2h0dHBkKToKICAgICAgICAgICAgIHN0YXJ0X2NtZC5leHRlbmQoWyctdCcsICct
aycsIHNlbGYuX3ByaXZhdGVfa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1j
Jywgc2VsZi5fY2VydGlmaWNhdGVdKQogCi0gICAgICAgIGVudiA9IHNlbGYuX3BvcnRfb2JqLnNl
dHVwX2Vudmlyb25fZm9yX3NlcnZlcigpCi0gICAgICAgIGVudlsnUFlUSE9OUEFUSCddID0gKHB5
d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQotCi0gICAgICAgIF9sb2cuZGVidWco
J1N0YXJ0aW5nICVzIHNlcnZlciBvbiAlZC4nICUgKAotICAgICAgICAgICAgICAgICAgIHNlbGYu
X3NlcnZlcl9uYW1lLCBzZWxmLl9wb3J0KSkKLSAgICAgICAgX2xvZy5kZWJ1ZygnY21kbGluZTog
JXMnICUgJyAnLmpvaW4oc3RhcnRfY21kKSkKLSAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGRp
cmVjdCB0aGlzIGNhbGwgdGhyb3VnaCBFeGVjdXRpdmUgZm9yIHRlc3RpbmcuCi0gICAgICAgICMg
Tm90ZTogTm90IHRocmVhZCBzYWZlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjMyMAot
ICAgICAgICBzZWxmLl9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3BlbihzdGFydF9jbWQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPW9wZW4ob3MuZGV2bnVs
bCwgJ3InKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0
PXNlbGYuX3dzb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVudj1lbnYpCi0KLSAgICAgICAgaWYgc2VsZi5fdXNlX3RsczoKLSAgICAgICAg
ICAgIHVybCA9ICdodHRwcycKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHVybCA9ICdodHRw
JwotICAgICAgICB1cmwgPSB1cmwgKyAnOi8vMTI3LjAuMC4xOiVkLycgJSBzZWxmLl9wb3J0Ci0g
ICAgICAgIGlmIG5vdCB1cmxfaXNfYWxpdmUodXJsKToKLSAgICAgICAgICAgIGlmIHNlbGYuX3By
b2Nlc3MucmV0dXJuY29kZSA9PSBOb25lOgotICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIHNo
b3VsZCB1c2UgYSBub24tc3RhdGljIEV4ZWN1dGl2ZSBmb3IgZWFzaWVyCi0gICAgICAgICAgICAg
ICAgIyB0ZXN0aW5nLgotICAgICAgICAgICAgICAgIEV4ZWN1dGl2ZSgpLmtpbGxfcHJvY2Vzcyhz
ZWxmLl9wcm9jZXNzLnBpZCkKLSAgICAgICAgICAgIHdpdGggY29kZWNzLm9wZW4ob3V0cHV0X2xv
ZywgInIiLCAidXRmLTgiKSBhcyBmcDoKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmcDoK
LSAgICAgICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQotICAgICAgICAgICAgcmFpc2Ug
UHlXZWJTb2NrZXROb3RTdGFydGVkKAotICAgICAgICAgICAgICAgICdGYWlsZWQgdG8gc3RhcnQg
JXMgc2VydmVyIG9uIHBvcnQgJXMuJyAlCi0gICAgICAgICAgICAgICAgICAgIChzZWxmLl9zZXJ2
ZXJfbmFtZSwgc2VsZi5fcG9ydCkpCi0KLSAgICAgICAgIyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVk
IGFscmVhZHkKLSAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlICE9IE5vbmU6Ci0g
ICAgICAgICAgICByYWlzZSBQeVdlYlNvY2tldE5vdFN0YXJ0ZWQoCi0gICAgICAgICAgICAgICAg
J0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQotICAgICAg
ICBpZiBzZWxmLl9waWRmaWxlOgotICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzZWxmLl9w
aWRmaWxlLCAidyIsICJhc2NpaSIpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgZmlsZS53cml0
ZSgiJWQiICUgc2VsZi5fcHJvY2Vzcy5waWQpCi0KLSAgICBkZWYgc3RvcChzZWxmLCBmb3JjZT1G
YWxzZSk6Ci0gICAgICAgIGlmIG5vdCBmb3JjZSBhbmQgbm90IHNlbGYuaXNfcnVubmluZygpOgot
ICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcGlkID0gTm9uZQotICAgICAgICBpZiBzZWxm
Ll9wcm9jZXNzOgotICAgICAgICAgICAgcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAgICAg
ZWxpZiBzZWxmLl9waWRmaWxlOgotICAgICAgICAgICAgd2l0aCBjb2RlY3Mub3BlbihzZWxmLl9w
aWRmaWxlLCAiciIsICJhc2NpaSIpIGFzIGZpbGU6Ci0gICAgICAgICAgICAgICAgcGlkID0gaW50
KGZpbGUucmVhZCgpLnN0cmlwKCkpCi0KLSAgICAgICAgaWYgbm90IHBpZDoKLSAgICAgICAgICAg
IHJhaXNlIFB5V2ViU29ja2V0Tm90Rm91bmQoCi0gICAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBm
aW5kICVzIHNlcnZlciBwaWQuJyAlIHNlbGYuX3NlcnZlcl9uYW1lKQotCi0gICAgICAgIF9sb2cu
ZGVidWcoJ1NodXR0aW5nIGRvd24gJXMgc2VydmVyICVkLicgJSAoc2VsZi5fc2VydmVyX25hbWUs
IHBpZCkpCi0gICAgICAgICMgRklYTUU6IFdlIHNob3VsZCB1c2UgYSBub24tc3RhdGljIEV4ZWN1
dGl2ZSBmb3IgZWFzaWVyIHRlc3RpbmcuCi0gICAgICAgIEV4ZWN1dGl2ZSgpLmtpbGxfcHJvY2Vz
cyhwaWQpCi0KLSAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgICMgd2FpdCgp
IGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Ci0gICAgICAg
ICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3Ci0gICAgICAgICAgICBz
ZWxmLl9wcm9jZXNzLndhaXQoKQotICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKKyAg
ICAgICAgc2VsZi5fc3RhcnRfY21kID0gc3RhcnRfY21kCisgICAgICAgIHNlbGYuX2VudiA9IHNl
bGYuX3BvcnRfb2JqLnNldHVwX2Vudmlyb25fZm9yX3NlcnZlcigpCisgICAgICAgIHNlbGYuX2Vu
dlsnUFlUSE9OUEFUSCddID0gKHB5d2Vic29ja2V0X2Jhc2UgKyBvcy5wYXRoLnBhdGhzZXAgKyBz
ZWxmLl9lbnYuZ2V0KCdQWVRIT05QQVRIJywgJycpKQogCisgICAgZGVmIF9yZW1vdmVfc3RhbGVf
bG9ncyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fcmVtb3ZlX2xvZ19m
aWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBzZWxmLl9sb2dfcHJlZml4KQorICAgICAgICBleGNlcHQg
T1NFcnJvciwgZToKKyAgICAgICAgICAgIF9sb2cud2FybmluZygnRmFpbGVkIHRvIHJlbW92ZSBz
dGFsZSAlcyBsb2cgZmlsZXM6ICVzJyAlIChzZWxmLl9uYW1lLCBzdHIoZSkpKQorCisgICAgZGVm
IF9zcGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVnKCdzdGFydGluZyAlcywg
Y21kPSIlcyInICUgKHNlbGYuX25hbWUsIHNlbGYuX3N0YXJ0X2NtZCkpCisgICAgICAgIHJldHVy
biBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBlbnY9c2VsZi5fZW52LCBz
aGVsbD1GYWxzZSwgc3RkaW49c2VsZi5fd3Npbiwgc3Rkb3V0PXNlbGYuX3dzb3V0LCBzdGRlcnI9
c2VsZi5fZXhlY3V0aXZlLlNURE9VVCkKKworICAgIGRlZiBfY2xlYW51cF9hZnRlcl9zdG9wKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLl93c2luOgorICAgICAgICAgICAgc2VsZi5fd3Npbi5jbG9z
ZSgpCisgICAgICAgICAgICBzZWxmLl93c2luID0gTm9uZQogICAgICAgICBpZiBzZWxmLl93c291
dDoKICAgICAgICAgICAgIHNlbGYuX3dzb3V0LmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX3dz
b3V0ID0gTm9uZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96844</attachid>
            <date>2011-06-10 20:52:17 -0700</date>
            <delta_ts>2011-06-13 13:11:58 -0700</delta_ts>
            <desc>rebasing again</desc>
            <filename>bug-62180-20110610205216.patch</filename>
            <type>text/plain</type>
            <size>22641</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NjljZDRmMTI4NWNiOWVhZjcxYjI2N2VjZjkxOWJkNjZi
MzIxZDhhLi5mNWJlODY2OGMxNDRmMTViOTQ5ODM3ZTUwNjk5YTE0ZmZmNjhiNDlkIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDYtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgbnJ3dDogZml4IGh0
dHAsIHdlYnNvY2tldCBzZXJ2ZXIgc3RhcnR1cCwgc2h1dGRvd24KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyMTgwCisKKyAgICAgICAgVGhpcyBjaGFu
Z2UgcmVmYWN0b3JzIGFsbCBvZiB0aGUgc2VydmVyLXJlbGF0ZWQgY29kZSB0bworICAgICAgICBo
YXZlIGNvbnNpc3RlbnQgc2VtYW50aWNzLiBJdCBwdXNoZXMgdGhlIHN0YXJ0KCkvc3RvcCgpCisg
ICAgICAgIGxvZ2ljIGludG8gdGhlIGJhc2UgY2xhc3MgYW5kIGFkZHMgZm91ciBtdWNoIHNtYWxs
ZXIgcm91dGluZXMKKyAgICAgICAgZm9yIHNwZWNpYWxpemF0aW9uOgorICAgICAgICBwcmVwYXJl
X2NvbmZpZygpIC0gZm9yIG9wdGlvbmFsbHkgd3JpdGluZyBjb25maWcgZmlsZXMgZXRjLgorICAg
ICAgICAgICAgdG8gZGlzayBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyCisgICAgICAgIHJl
bW92ZV9zdGFsZV9sb2dfZmlsZXMoKQorICAgICAgICBzcGF3bl9wcm9jZXNzKCkgLSB0aGUgYWN0
dWFsIGxhdW5jaCBvZiB0aGUgc3VicHJvY2VzcworICAgICAgICBjbGVhbnVwX2FmdGVyX3N0b3Ao
KSAtIGFuZCBjdXN0b20gY2xlYW51cCBjb2RlCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFu
Z2UgdGhlIHRocmVlIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2VyZQorICAgICAgICBmYWlybHkg
aW5jb25zaXN0ZW50LCBsZWFkaW5nIHRvIGxvdHMgb2Ygd2VpcmRuZXNzIG9uIHRoZSBib3RzCisg
ICAgICAgIHdpdGggc2VydmVycyBiZWluZyBsZWZ0IGFyb3VuZCwgZXRjLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorCiAyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9h
cGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRleCA0MTEzMzEyMmUzMmUxMTVlMjU1MWJi
MmY4ZjgyMzZjNGE4YTRjYmM3Li4xMzNmMDg1MmZmODY3MWY4MDUxOGYxMDc5MDRlNzI5ODY4YjIz
ZjYyIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtNDEsNyArNDEsNiBAQCBfbG9n
ID0gbG9nZ2luZy5nZXRMb2dnZXIoIndlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LmFwYWNoZV9o
dHRwX3NlcnZlciIpCiAKIAogY2xhc3MgTGF5b3V0VGVzdEFwYWNoZUh0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgotICAgIG5hbWUgPSAnYXBhY2hlJwogCiAgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHBvcnRfb2JqLCBvdXRwdXRfZGlyKToKICAgICAgICAgIiIiQXJnczoKQEAg
LTQ5LDE0ICs0OCwxNCBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJf
YmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICAgb3V0cHV0X2RpcjogdGhlIGFic29sdXRl
IHBhdGggdG8gdGhlIGxheW91dCB0ZXN0IHJlc3VsdCBkaXJlY3RvcnkKICAgICAgICAgIiIiCiAg
ICAgICAgIGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9y
dF9vYmopCisgICAgICAgIHNlbGYuX25hbWUgPSAnYXBhY2hlJworICAgICAgICBzZWxmLl9tYXBw
aW5ncyA9IFt7J3BvcnQnOiA4MDAwfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0
JzogODA4MH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHsncG9ydCc6IDgwODF9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnc3NsY2VydCc6IFRydWV9XQog
ICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgogICAgICAgICBwb3J0X29iai5t
YXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQogCi0gICAgICAgIHNlbGYubWFwcGluZ3Mg
PSBbeydwb3J0JzogODAwMH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4
MH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ3NzbGNlcnQnOiBUcnVlfV0KLQogICAgICAg
ICAjIFRoZSB1cHN0cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0ZW5jZSBvZiAvdG1w
L1dlYktpdCBmb3IKICAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBsaWtlIHRoZSBsb2Nr
IGZpbGUgdGhlcmUuCiAgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9zLnBhdGguam9pbigi
L3RtcCIsICJXZWJLaXQiKQpAQCAtMTcxLDQ2ICsxNzAsMTkgQEAgY2xhc3MgTGF5b3V0VGVzdEFw
YWNoZUh0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX2dldF9jeWd3aW5fcGF0aChodHRwZF9jb25maWdfY29weSkKICAgICAgICAg
cmV0dXJuIGh0dHBkX2NvbmZpZ19jb3B5CiAKLSAgICBkZWYgX3N0YXJ0X2h0dHBkX3Byb2Nlc3Mo
c2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgaHR0cGQgcHJvY2VzcyBhbmQgcmV0dXJucyB3
aGV0aGVyIHRoZXJlIHdlcmUgZXJyb3JzLiIiIgorICAgIGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxm
KToKICAgICAgICAgIyBVc2Ugc2hlbGw9VHJ1ZSBiZWNhdXNlIHdlIGpvaW4gdGhlIGFyZ3VtZW50
cyBpbnRvIGEgc3RyaW5nIGZvcgogICAgICAgICAjIHRoZSBzYWtlIG9mIFdpbmRvdy9DeWd3aW4g
YW5kIGl0IG5lZWRzIHF1b3RpbmcgdGhhdCBicmVha3MKICAgICAgICAgIyBzaGVsbD1GYWxzZS4K
ICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIG5vdCBuZWVkIHRvIGJlIGpvaW5pbmcgc2hlbGwg
YXJndW1lbnRzIGludG8gc3RyaW5ncy4KICAgICAgICAgIyBzaGVsbD1UcnVlIGlzIGEgdHJhaWwg
b2YgdGVhcnMuCiAgICAgICAgICMgTm90ZTogTm90IHRocmVhZCBzYWZlOiBodHRwOi8vYnVncy5w
eXRob24ub3JnL2lzc3VlMjMyMAotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyBodHRwIHNl
cnZlciwgY21kPSIlcyInICUgc3RyKHNlbGYuX3N0YXJ0X2NtZCkpCi0gICAgICAgIHNlbGYuX3By
b2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBzdGRlcnI9c2Vs
Zi5fZXhlY3V0aXZlLlBJUEUsIHNoZWxsPVRydWUpCi0gICAgICAgIGVyciA9IHNlbGYuX3Byb2Nl
c3Muc3RkZXJyLnJlYWQoKQorICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIs
IGNtZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzdHIoc2VsZi5fc3RhcnRfY21kKSkpCisgICAgICAg
IHByb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBzaGVsbD1U
cnVlLCBzdGRlcnI9c2VsZi5fZXhlY3V0aXZlLlBJUEUpCisgICAgICAgIGVyciA9IHByb2Nlc3Mu
c3RkZXJyLnJlYWQoKQogICAgICAgICBpZiBsZW4oZXJyKToKICAgICAgICAgICAgIF9sb2cuZGVi
dWcoZXJyKQotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIHJldHVybiBUcnVlCi0K
LSAgICBkZWYgc3RhcnQoc2VsZik6Ci0gICAgICAgICIiIlN0YXJ0cyB0aGUgYXBhY2hlIGh0dHAg
c2VydmVyLiIiIgotICAgICAgICAjIFN0b3AgYW55IGN1cnJlbnRseSBydW5uaW5nIHNlcnZlcnMu
Ci0gICAgICAgIHNlbGYuc3RvcCgpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiU3RhcnRpbmcgJXMg
c2VydmVyIiAlIHNlbGYuX25hbWUpCi0gICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0
X2Zvcl9hY3Rpb24oc2VsZi5fc3RhcnRfaHR0cGRfcHJvY2VzcykKLSAgICAgICAgaWYgc2VydmVy
X3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJBcGFjaGUgc3RhcnRlZC4gVGVzdGlu
ZyBwb3J0cyIpCi0gICAgICAgICAgICBzZXJ2ZXJfc3RhcnRlZCA9IHNlbGYud2FpdF9mb3JfYWN0
aW9uKAotICAgICAgICAgICAgICAgIHNlbGYuaXNfc2VydmVyX3J1bm5pbmdfb25fYWxsX3BvcnRz
KQotCi0gICAgICAgIGlmIHNlcnZlcl9zdGFydGVkOgotICAgICAgICAgICAgX2xvZy5kZWJ1Zygi
U2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBodHRw
IHNlcnZlcicpCi0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgIiIiU3RvcHMgdGhlIGFw
YWNoZSBodHRwIHNlcnZlci4iIiIKLSAgICAgICAgX2xvZy5kZWJ1ZygiU2h1dHRpbmcgZG93biBh
bnkgcnVubmluZyBodHRwIHNlcnZlcnMiKQotICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAg
ICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9j
ZXNzLnBpZAotICAgICAgICBlbGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKLSAg
ICAgICAgICAgIGh0dHBkX3BpZCA9IGludChvcGVuKHNlbGYuX3BpZF9maWxlKS5yZWFkbGluZSgp
KQotICAgICAgICBpZiBodHRwZF9waWQ6Ci0gICAgICAgICAgICBzZWxmLl9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKGh0dHBkX3BpZCkKKyAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3By
b2Nlc3MocHJvY2Vzcy5waWQpCisgICAgICAgICAgICBwcm9jZXNzLndhaXQoKQorICAgICAgICAg
ICAgcmFpc2UgU2VydmVyRXJyb3IoJ0ZhaWxlZCB0byBzdGFydCAlczogJXMnICUgKHNlbGYuX25h
bWUsIGVycikpCisgICAgICAgIHJldHVybiBwcm9jZXNzCmRpZmYgLS1naXQgYS9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5IGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQppbmRleCBlYTQ4
NTI1MzI4MThkMmE4YTJkZDY0N2RiNDE0Y2IwZmM3MjIxYTAxLi5mYjM2MWJmZDQxNDMzMDQ0ZDJj
ODIxYWJhNjNhZjhmOTBkYzQ2NjFlIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKQEAgLTMzLDcgKzMzLDYgQEAg
aW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9y
dCB1cmxsaWIKIAogZnJvbSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgaHR0cF9z
ZXJ2ZXJfYmFzZQogCkBAIC01MSw3ICs1MCw2IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICBodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2
ZXJCYXNlLl9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKQogICAgICAgICBzZWxmLl9uYW1lID0gJ2xp
Z2h0dHBkJwogICAgICAgICBzZWxmLl9vdXRwdXRfZGlyID0gb3V0cHV0X2RpcgotICAgICAgICBz
ZWxmLl9wcm9jZXNzID0gTm9uZQogICAgICAgICBzZWxmLl9wb3J0ID0gcG9ydAogICAgICAgICBz
ZWxmLl9yb290ID0gcm9vdAogICAgICAgICBzZWxmLl9ydW5fYmFja2dyb3VuZCA9IHJ1bl9iYWNr
Z3JvdW5kCkBAIC04MywxMyArODEsNyBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNl
Lkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4NDQzLCAnZG9jcm9v
dCc6IHNlbGYuX3dlYmtpdF90ZXN0cywKICAgICAgICAgICAgICAgICAgJ3NzbGNlcnQnOiBzZWxm
Ll9wZW1fZmlsZX1dKQogCi0gICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9wcm9jZXNzICE9IE5vbmUKLQotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAg
aWYgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNl
LlNlcnZlckVycm9yKCdMaWdodHRwZCBhbHJlYWR5IHJ1bm5pbmcnKQotCisgICAgZGVmIF9wcmVw
YXJlX2NvbmZpZyhzZWxmKToKICAgICAgICAgYmFzZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29i
ai5wYXRoX2Zyb21fd2Via2l0X2Jhc2UoJ1Rvb2xzJywKICAgICAgICAgICAgICdTY3JpcHRzJywg
J3dlYmtpdHB5JywgJ2xheW91dF90ZXN0cycsICdwb3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQogICAg
ICAgICBvdXRfY29uZl9maWxlID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdo
dHRwZC5jb25mJykKQEAgLTk5LDEwICs5MSw2IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVy
X2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICBsb2dfZmlsZV9uYW1lID0gImVycm9yLmxv
Zy0iICsgdGltZV9zdHIgKyAiLnR4dCIKICAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2lu
KHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxlX25hbWUpCiAKLSAgICAgICAgIyBSZW1vdmUgb2xk
IGxvZyBmaWxlcy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KLSAgICAgICAg
c2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsICJhY2Nlc3MubG9nLSIpCi0g
ICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9n
LSIpCi0KICAgICAgICAgIyBXcml0ZSBvdXQgdGhlIGNvbmZpZwogICAgICAgICBiYXNlX2NvbmYg
PSBzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKGJhc2VfY29uZl9maWxlKQogCkBAIC0x
ODgsMzUgKzE3NiwyMSBAQCBjbGFzcyBMaWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2
ZXJCYXNlKToKICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUob3MucGF0aC5q
b2luKG1vZHVsZV9wYXRoLCBsaWJfZmlsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9zLnBhdGguam9pbih0bXBfbW9kdWxlX3BhdGgsIGxpYl9maWxlKSkKIAotICAg
ICAgICBlbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQotICAg
ICAgICBfbG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIsIGNtZD0iJXMiJyAlIChzZWxmLl9u
YW1lLCBzdHIoc3RhcnRfY21kKSkpCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVj
dXRpdmUucG9wZW4oc3RhcnRfY21kLCBlbnY9ZW52LCBzdGRpbj1zZWxmLl9leGVjdXRpdmUuUElQ
RSkKLQotICAgICAgICAjIFdhaXQgZm9yIHNlcnZlciB0byBzdGFydC4KLSAgICAgICAgc2VsZi5t
YXBwaW5ncyA9IG1hcHBpbmdzCi0gICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zv
cl9hY3Rpb24oCi0gICAgICAgICAgICBzZWxmLmlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0
cykKLQotICAgICAgICAjIE91ciBwcm9jZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQotICAgICAgICBp
ZiBub3Qgc2VydmVyX3N0YXJ0ZWQgb3Igc2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlICE9IE5vbmU6
Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQg
dG8gc3RhcnQgJXMuJyAlIHNlbGYuX25hbWUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVy
IHN1Y2Nlc3NmdWxseSBzdGFydGVkIikKLQotICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNl
ciB3YXkgdG8gc2h1dGRvd24gY2xlYW5seS4gIE91ciBsb2cgZmlsZXMgYXJlCi0gICAgIyBwcm9i
YWJseSBub3QgYmVpbmcgZmx1c2hlZCwgZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2
ZSBvcy5raWxsID8KLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5p
c19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBodHRwZF9waWQgPSBO
b25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBz
ZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBzZWxmLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0
dHBkX3BpZCkKLQotICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgotICAgICAgICAgICAgIyB3YWl0
KCkgaXMgbm90IHRocmVhZHNhZmUgYW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAg
ICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKLSAgICAgICAgICAg
IHNlbGYuX3Byb2Nlc3Mud2FpdCgpCi0gICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQor
ICAgICAgICBzZWxmLl9zdGFydF9jbWQgPSBzdGFydF9jbWQKKyAgICAgICAgc2VsZi5fZW52ID0g
c2VsZi5fcG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVyKCkKKyAgICAgICAgc2VsZi5f
bWFwcGluZ3MgPSBtYXBwaW5ncworCisgICAgZGVmIF9yZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToK
KyAgICAgICAgIyBTb21ldGltZXMgbG9ncyBhcmUgb3BlbiBpbiBvdGhlciBwcm9jZXNzZXMgYnV0
IHRoZXkgc2hvdWxkIGNsZWFyIGV2ZW50dWFsbHkuCisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IHNlbGYuX3JlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgImFjY2Vzcy5sb2ctIikK
KyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0Zh
aWxlZCB0byByZW1vdmUgb2xkICVzIGxvZyBmaWxlcycgJSBzZWxmLl9uYW1lKQorICAgICAgICB0
cnk6CisgICAgICAgICAgICBzZWxmLl9yZW1vdmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIs
ICJlcnJvci5sb2ctIikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBf
bG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUgb2xkICVzIGxvZyBmaWxlcycgJSBzZWxmLl9u
YW1lKQorCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYpOgorICAgICAgICBfbG9nLmRlYnVn
KCdzdGFydGluZyAlcywgY21kPSIlcyInICUgKHNlbGYuX25hbWUsIHNlbGYuX3N0YXJ0X2NtZCkp
CisgICAgICAgIHJldHVybiBzZWxmLl9leGVjdXRpdmUucG9wZW4oc2VsZi5fc3RhcnRfY21kLCBl
bnY9c2VsZi5fZW52LCBzaGVsbD1GYWxzZSwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5QSVBFKQpk
aWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRw
X3NlcnZlcl9iYXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9odHRwX3NlcnZlcl9iYXNlLnB5CmluZGV4IDk3OTlkZjhlYTU2ZmM1NWVmOWQzYTk5ODVmMTA5
MjRkNTM0OGJiMDEuLjZjMWUxYmRiYjQwOWNkMTZmNzFhOTJlNGY3ZGJmNTA4MTcyZTUwYzQgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9z
ZXJ2ZXJfYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2h0dHBfc2VydmVyX2Jhc2UucHkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAiIiJCYXNlIGNs
YXNzIHdpdGggY29tbW9uIHJvdXRpbmVzIGJldHdlZW4gdGhlIEFwYWNoZSwgTGlnaHR0cGQsIGFu
ZCB3ZWJzb2NrZXQgc2VydmVycy4iIiIKIAoraW1wb3J0IGVycm5vCiBpbXBvcnQgbG9nZ2luZwot
aW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgotCi1m
cm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0gaW1wb3J0IGZpbGVzeXN0ZW0KIAogX2xvZyA9IGxv
Z2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydC5odHRwX3NlcnZlcl9i
YXNlIikKIApAQCAtNDQsMTYgKzQyLDkwIEBAIGNsYXNzIFNlcnZlckVycm9yKEV4Y2VwdGlvbik6
CiAKIAogY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKKyAgICAiIiJBIHNrZWxldG9uIGNs
YXNzIGZvciBzdGFydGluZyBhbmQgc3RvcHBpbmcgc2VydmVycyB1c2VkIGJ5IHRoZSBsYXlvdXQg
dGVzdHMuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmopOgogICAgICAgICBz
ZWxmLl9uYW1lID0gJzx2aXJ0dWFsPicKKyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSB7fQogICAg
ICAgICBzZWxmLl9waWRfZmlsZSA9IE5vbmUKICAgICAgICAgc2VsZi5fcG9ydF9vYmogPSBwb3J0
X29iagogICAgICAgICBzZWxmLl9leGVjdXRpdmUgPSBwb3J0X29iai5fZXhlY3V0aXZlCiAgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0X29iai5fZmlsZXN5c3RlbQogICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gTm9uZQogCi0gICAgZGVmIHdhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24p
OgorICAgIGRlZiBzdGFydChzZWxmKToKKyAgICAgICAgIiIiU3RhcnRzIHRoZSBzZXJ2ZXIuIiIi
CisgICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJv
cignJXMgYWxyZWFkeSBydW5uaW5nJyAlIHNlbGYuX25hbWUpCisKKyAgICAgICAgc2VsZi5fcmVt
b3ZlX3N0YWxlX2xvZ3MoKQorICAgICAgICBzZWxmLl9wcmVwYXJlX2NvbmZpZygpCisgICAgICAg
IHNlbGYuX2NoZWNrX3RoYXRfYWxsX3BvcnRzX2FyZV9hdmFpbGFibGUoKQorICAgICAgICBzZWxm
Ll9wcm9jZXNzID0gc2VsZi5fc3Bhd25fcHJvY2VzcygpCisgICAgICAgIF9sb2cuZGVidWcoIiVz
IHN0YXJ0ZWQuIFRlc3RpbmcgcG9ydHMiICUgc2VsZi5fbmFtZSkKKyAgICAgICAgc2VydmVyX3N0
YXJ0ZWQgPSBzZWxmLl93YWl0X2Zvcl9hY3Rpb24oc2VsZi5faXNfc2VydmVyX3J1bm5pbmdfb25f
YWxsX3BvcnRzKQorICAgICAgICBpZiBzZXJ2ZXJfc3RhcnRlZDoKKyAgICAgICAgICAgIF9sb2cu
ZGVidWcoIiVzIHN1Y2Nlc3NmdWxseSBzdGFydGVkIiAlIHNlbGYuX25hbWUpCisgICAgICAgIGVs
c2U6CisgICAgICAgICAgICByYWlzZSBTZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzIHNl
cnZlcicgJSBzZWxmLl9uYW1lKQorCisgICAgICAgIGlmIHNlbGYuX3BpZF9maWxlOgorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS53cml0ZV90ZXh0X2ZpbGUoc2VsZi5fcGlkX2ZpbGUsIHN0
cihzZWxmLl9wcm9jZXNzLnBpZCkpCisKKyAgICBkZWYgc3RvcChzZWxmKToKKyAgICAgICAgX2xv
Zy5kZWJ1ZygiU2h1dHRpbmcgZG93biBhbnkgcnVubmluZyAlcyBzZXJ2ZXJzIiAlIHNlbGYuX25h
bWUpCisgICAgICAgIHBpZCA9IE5vbmUKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAg
ICAgICAgIHBpZCA9IHNlbGYuX3Byb2Nlc3MucGlkCisgICAgICAgIGVsaWYgc2VsZi5fcGlkX2Zp
bGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAg
ICAgIHBpZCA9IGludChzZWxmLl9maWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX3BpZF9m
aWxlKSkKKworICAgICAgICBpZiBub3QgcGlkOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAg
ICAgc2VsZi5fcG9ydF9vYmouX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQorICAgICAgICBp
ZiBzZWxmLl9wcm9jZXNzOgorICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUg
YW5kIGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKKyAgICAgICAgICAgICMgaHR0cDovL2J1Z3Mu
cHl0aG9uLm9yZy9pc3N1ZTE3MzE3MTcKKyAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgp
CisgICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9waWRf
ZmlsZSBhbmQgc2VsZi5fZmlsZXN5c3RlbS5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgorICAgICAg
ICAgICAgc2VsZi5fZmlsZXN5c3RlbS5yZW1vdmUoc2VsZi5fcGlkX2ZpbGUpCisKKyAgICAgICAg
c2VsZi5fY2xlYW51cF9hZnRlcl9zdG9wKCkKKworICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2Vs
Zik6CisgICAgICAgICIiIlRoaXMgcm91dGluZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgc3Vi
Y2xhc3NlcyB0byBkbyBhbnkgc29ydAorICAgICAgICBvZiBpbml0aWFsaXphdGlvbiByZXF1aXJl
ZCBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyIHRoYXQgbWF5IGZhaWwuIiIiCisgICAgICAg
IHBhc3MKKworICAgIGRlZiBfcmVtb3ZlX3N0YWxlX2xvZ3Moc2VsZik6CisgICAgICAgICIiIlRo
aXMgcm91dGluZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byB0cnkgYW5k
IHJlbW92ZSBsb2dzCisgICAgICAgIGxlZnQgb3ZlciBmcm9tIGEgcHJpb3IgcnVuLiBUaGlzIHJv
dXRpbmUgc2hvdWxkIGxvZyB3YXJuaW5ncyBpZiB0aGUKKyAgICAgICAgZmlsZXMgY2Fubm90IGJl
IGRlbGV0ZWQsIGJ1dCBzaG91bGQgbm90IGZhaWwgdW5sZXNzIGZhaWx1cmUgdG8KKyAgICAgICAg
ZGVsZXRlIHRoZSBsb2dzIHdpbGwgYWN0dWFsbHkgY2F1c2Ugc3RhcnQoKSB0byBmYWlsLiIiIgor
ICAgICAgICBwYXNzCisKKyAgICBkZWYgX3NwYXduX3Byb2Nlc3Moc2VsZik6CisgICAgICAgICIi
IlRoaXMgcm91dGluZSBtc3QgYmUgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3NlcyB0byBhY3R1YWxs
eQorICAgICAgICBsYXVuY2ggdGhlIHN1YnByb2Nlc3MgYW5kIHJldHVybiB0aGUgcHJvY2VzcyBv
YmplY3QuIFRoZSBtZXRob2QKKyAgICAgICAgZG9lcyBub3QgbmVlZCB0byBlbnN1cmUgdGhhdCB0
aGUgcHJvY2VzcyBzdGFydGVkIGNvcnJlY3RseSAoc3RhcnQoKQorICAgICAgICB3aWxsIHZlcmlm
eSB0aGF0IGl0c2VsZikuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKwor
ICAgIGRlZiBfY2xlYW51cF9hZnRlcl9zdG9wKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRp
bmUgbWF5IGJlIGltcGxlbWVudGVkIGluIHN1YmNsYXNzZXMgdG8gY2xlYW4gdXAgYW55IHN0YXRl
CisgICAgICAgIGFzIG5lY2Vzc2FyeSBhZnRlciB0aGUgc2VydmVyIHByb2Nlc3MgaXMgc3RvcHBl
ZC4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9yZW1vdmVfbG9nX2ZpbGVzKHNlbGYsIGZv
bGRlciwgc3RhcnRzX3dpdGgpOgorICAgICAgICBmaWxlcyA9IHNlbGYuX2ZpbGVzeXN0ZW0ubGlz
dGRpcihmb2xkZXIpCisgICAgICAgIGZvciBmaWxlIGluIGZpbGVzOgorICAgICAgICAgICAgaWYg
ZmlsZS5zdGFydHN3aXRoKHN0YXJ0c193aXRoKToKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGgg
PSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oZm9sZGVyLCBmaWxlKQorICAgICAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGZ1bGxfcGF0aCkKKworICAgIGRlZiBfd2FpdF9mb3JfYWN0
aW9uKHNlbGYsIGFjdGlvbik6CiAgICAgICAgICIiIlJlcGVhdCB0aGUgYWN0aW9uIGZvciAyMCBz
ZWNvbmRzIG9yIHVudGlsIGl0IHN1Y2NlZWRzLiBSZXR1cm5zCiAgICAgICAgIHdoZXRoZXIgaXQg
c3VjY2VlZGVkLiIiIgogICAgICAgICBzdGFydF90aW1lID0gdGltZS50aW1lKCkKQEAgLTY1LDI4
ICsxMzcsMzcgQEAgY2xhc3MgSHR0cFNlcnZlckJhc2Uob2JqZWN0KToKIAogICAgICAgICByZXR1
cm4gRmFsc2UKIAotICAgIGRlZiBpc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6
CisgICAgZGVmIF9pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMoc2VsZik6CiAgICAgICAg
ICIiIlJldHVybnMgd2hldGhlciB0aGUgc2VydmVyIGlzIHJ1bm5pbmcgb24gYWxsIHRoZSBkZXNp
cmVkIHBvcnRzLiIiIgotICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLm1hcHBpbmdzOgotICAg
ICAgICAgICAgaWYgJ3NzbGNlcnQnIGluIG1hcHBpbmc6Ci0gICAgICAgICAgICAgICAgaHR0cF9z
dWZmaXggPSAncycKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHR0cF9zdWZm
aXggPSAnJwotCi0gICAgICAgICAgICB1cmwgPSAnaHR0cCVzOi8vMTI3LjAuMC4xOiVkLycgJSAo
aHR0cF9zdWZmaXgsIG1hcHBpbmdbJ3BvcnQnXSkKKyAgICAgICAgaWYgbm90IHNlbGYuX2V4ZWN1
dGl2ZS5jaGVja19ydW5uaW5nX3BpZChzZWxmLl9wcm9jZXNzLnBpZCk6CisgICAgICAgICAgICBf
bG9nLmRlYnVnKCJTZXJ2ZXIgaXNuJ3QgcnVubmluZyBhdCBhbGwiKQorICAgICAgICAgICAgcmFp
c2UgU2VydmVyRXJyb3IoIlNlcnZlciBleGl0ZWQiKQogCisgICAgICAgIGZvciBtYXBwaW5nIGlu
IHNlbGYuX21hcHBpbmdzOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgICAg
ICAgICAgcG9ydCA9IG1hcHBpbmdbJ3BvcnQnXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAg
ICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsLCBwcm94aWVzPXt9KQotICAgICAg
ICAgICAgICAgIF9sb2cuZGVidWcoIlNlcnZlciBydW5uaW5nIGF0ICVzIiAlIHVybCkKKyAgICAg
ICAgICAgICAgICBzLmNvbm5lY3QoKCdsb2NhbGhvc3QnLCBwb3J0KSkKKyAgICAgICAgICAgICAg
ICBfbG9nLmRlYnVnKCJTZXJ2ZXIgcnVubmluZyBvbiAlZCIgJSBwb3J0KQogICAgICAgICAgICAg
ZXhjZXB0IElPRXJyb3IsIGU6Ci0gICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIE5P
VCBydW5uaW5nIGF0ICVzOiAlcyIgJSAodXJsLCBlKSkKKyAgICAgICAgICAgICAgICBpZiBlLmVy
cm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRUZVU0VELCBlcnJuby5FQ09OTlJFU0VUKToKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIg
Tk9UIHJ1bm5pbmcgb24gJWQ6ICVzIiAlIChwb3J0LCBlKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gRmFsc2UKLQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzLmNsb3Nl
KCkKICAgICAgICAgcmV0dXJuIFRydWUKIAotICAgIGRlZiByZW1vdmVfbG9nX2ZpbGVzKHNlbGYs
IGZvbGRlciwgc3RhcnRzX3dpdGgpOgotICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZm9sZGVy
KQotICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGlmIGZpbGUuc3RhcnRz
d2l0aChzdGFydHNfd2l0aCk6Ci0gICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gb3MucGF0aC5q
b2luKGZvbGRlciwgZmlsZSkKLSAgICAgICAgICAgICAgICBmaWxlc3lzdGVtLkZpbGVTeXN0ZW0o
KS5yZW1vdmUoZnVsbF9wYXRoKQorICAgIGRlZiBfY2hlY2tfdGhhdF9hbGxfcG9ydHNfYXJlX2F2
YWlsYWJsZShzZWxmKToKKyAgICAgICAgZm9yIG1hcHBpbmcgaW4gc2VsZi5fbWFwcGluZ3M6Cisg
ICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBwb3J0ID0gbWFwcGlu
Z1sncG9ydCddCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcy5iaW5kKCgnbG9j
YWxob3N0JywgcG9ydCkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvciwgZToKKyAgICAgICAg
ICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUxSRUFEWSwgZXJybm8uRUFERFJJTlVTRSk6
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCdQb3J0ICVkIGlzIGFscmVh
ZHkgaW4gdXNlLicgJSBwb3J0KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xv
c2UoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC93ZWJzb2NrZXRfc2VydmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CmluZGV4IDg0ZWU4ZjYxNGI1MjJjNjUyYTIxZjVi
ZjZiMTc0ZjA1YjQwZmVmM2IuLjIxNWE2ZWZiNjZjZWVkNWY1ODY4NWY1ZWUzNDM4MWU4NmM5NDVi
ZmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
d2Vic29ja2V0X3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKQEAgLTI5LDEyICsyOSwxMCBAQAogCiAiIiJB
IGNsYXNzIHRvIGhlbHAgc3RhcnQvc3RvcCB0aGUgUHlXZWJTb2NrZXQgc2VydmVyIHVzZWQgYnkg
bGF5b3V0IHRlc3RzLiIiIgogCi0KIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBz
eXMKIGltcG9ydCB0aW1lCi1pbXBvcnQgdXJsbGliCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rl
c3RzLnBvcnQgaW1wb3J0IGh0dHBfc2VydmVyCiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5w
b3J0IGltcG9ydCBodHRwX3NlcnZlcl9iYXNlCkBAIC00OSwzMyArNDcsNiBAQCBfREVGQVVMVF9X
U19QT1JUID0gODg4MAogX0RFRkFVTFRfV1NTX1BPUlQgPSA5MzIzCiAKIAotZGVmIHVybF9pc19h
bGl2ZSh1cmwpOgotICAgICIiIkNoZWNrcyB0byBzZWUgaWYgd2UgZ2V0IGFuIGh0dHAgcmVzcG9u
c2UgZnJvbSB8dXJsfC4KLSAgICBXZSBwb2xsIHRoZSB1cmwgMjAgdGltZXMgd2l0aCBhIDAuNSBz
ZWNvbmQgZGVsYXkuICBJZiB3ZSBkb24ndAotICAgIGdldCBhIHJlcGx5IGluIHRoYXQgdGltZSwg
d2UgZ2l2ZSB1cCBhbmQgYXNzdW1lIHRoZSBodHRwZAotICAgIGRpZG4ndCBzdGFydCBwcm9wZXJs
eS4KLQotICAgIEFyZ3M6Ci0gICAgICB1cmw6IFRoZSBVUkwgdG8gY2hlY2suCi0gICAgUmV0dXJu
OgotICAgICAgVHJ1ZSBpZiB0aGUgdXJsIGlzIGFsaXZlLgotICAgICIiIgotICAgIHNsZWVwX3Rp
bWUgPSAwLjUKLSAgICB3YWl0X3RpbWUgPSAxMAotICAgIHdoaWxlIHdhaXRfdGltZSA+IDA6Ci0g
ICAgICAgIHRyeToKLSAgICAgICAgICAgIHJlc3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsLCBw
cm94aWVzPXt9KQotICAgICAgICAgICAgIyBTZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcuCi0g
ICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAg
ICAgIHBhc3MKLSAgICAgICAgIyBXYWl0IGZvciBzbGVlcF90aW1lIGJlZm9yZSB0cnlpbmcgYWdh
aW4uCi0gICAgICAgIHdhaXRfdGltZSAtPSBzbGVlcF90aW1lCi0gICAgICAgIHRpbWUuc2xlZXAo
c2xlZXBfdGltZSkKLQotICAgIHJldHVybiBGYWxzZQotCi0KIGNsYXNzIFB5V2ViU29ja2V0KGh0
dHBfc2VydmVyLkxpZ2h0dHBkKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwg
b3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9XU19QT1JULApAQCAtMTAwLDcgKzcxLDkgQEAgY2xh
c3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICBpZiBzZWxmLl91
c2VfdGxzOgogICAgICAgICAgICAgc2VsZi5fbmFtZSA9ICdweXdlYnNvY2tldF9zZWN1cmUnCiAg
ICAgICAgIHNlbGYuX3BpZF9maWxlID0gcGlkZmlsZQorICAgICAgICBzZWxmLl93c2luID0gTm9u
ZQogICAgICAgICBzZWxmLl93c291dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSBb
eydwb3J0Jzogc2VsZi5fcG9ydH1dCiAKICAgICAgICAgIyBXZWJraXQgdGVzdHMKICAgICAgICAg
aWYgc2VsZi5fcm9vdDoKQEAgLTExNiwyMiArODksMTUgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0
cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAg
IHNlbGYuX3dlYl9zb2NrZXRfdGVzdHMgPSBOb25lCiAKLSAgICBkZWYgc3RhcnQoc2VsZik6Ci0g
ICAgICAgIGlmIG5vdCBzZWxmLl93ZWJfc29ja2V0X3Rlc3RzOgotICAgICAgICAgICAgX2xvZy5p
bmZvKCdObyBuZWVkIHRvIHN0YXJ0ICVzIHNlcnZlci4nICUgc2VsZi5fbmFtZSkKLSAgICAgICAg
ICAgIHJldHVybgotICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAgICAgIHJh
aXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJyVzIGlzIGFscmVhZHkgcnVubmluZy4n
ICUgc2VsZi5fbmFtZSkKLQotICAgICAgICB0aW1lX3N0ciA9IHRpbWUuc3RyZnRpbWUoJyVkJWIl
WS0lSCVNJVMnKQogICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAgbG9nX3By
ZWZpeCA9IF9XU1NfTE9HX1BSRUZJWAorICAgICAgICAgICAgc2VsZi5fbG9nX3ByZWZpeCA9IF9X
U1NfTE9HX1BSRUZJWAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbG9nX3ByZWZpeCA9IF9X
U19MT0dfUFJFRklYCi0gICAgICAgIGxvZ19maWxlX25hbWUgPSBsb2dfcHJlZml4ICsgdGltZV9z
dHIKKyAgICAgICAgICAgIHNlbGYuX2xvZ19wcmVmaXggPSBfV1NfTE9HX1BSRUZJWAogCi0gICAg
ICAgICMgUmVtb3ZlIG9sZCBsb2cgZmlsZXMuIFdlIG9ubHkgbmVlZCB0byBrZWVwIHRoZSBsYXN0
IG9uZXMuCi0gICAgICAgIHNlbGYucmVtb3ZlX2xvZ19maWxlcyhzZWxmLl9vdXRwdXRfZGlyLCBs
b2dfcHJlZml4KQorICAgIGRlZiBfcHJlcGFyZV9jb25maWcoc2VsZik6CisgICAgICAgIHRpbWVf
c3RyID0gdGltZS5zdHJmdGltZSgnJWQlYiVZLSVIJU0lUycpCisgICAgICAgIGxvZ19maWxlX25h
bWUgPSBzZWxmLl9sb2dfcHJlZml4ICsgdGltZV9zdHIKKyAgICAgICAgc2VsZi5fd3NpbiA9IG9w
ZW4ob3MuZGV2bnVsbCwgJ3InKQogCiAgICAgICAgIGVycm9yX2xvZyA9IG9zLnBhdGguam9pbihz
ZWxmLl9vdXRwdXRfZGlyLCBsb2dfZmlsZV9uYW1lICsgIi1lcnIudHh0IikKIApAQCAtMTY5LDU4
ICsxMzUsMjQgQEAgY2xhc3MgUHlXZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAg
ICAgICAgICAgc3RhcnRfY21kLmV4dGVuZChbJy10JywgJy1rJywgc2VsZi5fcHJpdmF0ZV9rZXks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCBzZWxmLl9jZXJ0aWZpY2F0ZV0p
CiAKLSAgICAgICAgZW52ID0gc2VsZi5fcG9ydF9vYmouc2V0dXBfZW52aXJvbl9mb3Jfc2VydmVy
KCkKLSAgICAgICAgZW52WydQWVRIT05QQVRIJ10gPSAocHl3ZWJzb2NrZXRfYmFzZSArIG9zLnBh
dGgucGF0aHNlcCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudi5nZXQoJ1BZVEhP
TlBBVEgnLCAnJykpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygnU3RhcnRpbmcgJXMgc2VydmVyIG9u
ICVkLCBjbWQ9IiVzIi4nICUgKHNlbGYuX25hbWUsIHNlbGYuX3BvcnQsIHN0cihzdGFydF9jbWQp
KSkKLSAgICAgICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhvbi5v
cmcvaXNzdWUyMzIwCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9w
ZW4oc3RhcnRfY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZGluPW9wZW4ob3MuZGV2bnVsbCwgJ3InKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c2VsZi5fd3NvdXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5T
VERPVVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52
PWVudikKLQotICAgICAgICBpZiBzZWxmLl91c2VfdGxzOgotICAgICAgICAgICAgdXJsID0gJ2h0
dHBzJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdXJsID0gJ2h0dHAnCi0gICAgICAgIHVy
bCA9IHVybCArICc6Ly8xMjcuMC4wLjE6JWQvJyAlIHNlbGYuX3BvcnQKLSAgICAgICAgaWYgbm90
IHVybF9pc19hbGl2ZSh1cmwpOgotICAgICAgICAgICAgaWYgc2VsZi5fcHJvY2Vzcy5yZXR1cm5j
b2RlID09IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2Vz
cyhzZWxmLl9wcm9jZXNzLnBpZCkKLSAgICAgICAgICAgIGZvciBsaW5lIGluIHNlbGYucmVhZF90
ZXh0X2ZpbGUob3V0cHV0X2xvZykuc3BsaXRsaW5lcygpOgotICAgICAgICAgICAgICAgIF9sb2cu
ZXJyb3IobGluZSkKLSAgICAgICAgICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJy
b3IoJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXIgb24gcG9ydCAlcy4nICUgKHNlbGYuX25hbWUs
IHNlbGYuX3BvcnQpKQotCi0gICAgICAgICMgT3VyIHByb2Nlc3MgdGVybWluYXRlZCBhbHJlYWR5
Ci0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3MucmV0dXJuY29kZSAhPSBOb25lOgotICAgICAgICAg
ICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVz
IHNlcnZlci4nICUgc2VsZi5fbmFtZSkKLSAgICAgICAgaWYgc2VsZi5waWRfZmlsZToKLSAgICAg
ICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4dF9maWxlKHNlbGYucGlkX2ZpbGUsICIl
ZCIgJSBzZWxmLl9wcm9jZXNzLnBpZCkKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICBp
ZiBub3Qgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBw
aWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICBwaWQgPSBz
ZWxmLl9wcm9jZXNzLnBpZAotICAgICAgICBlbGlmIHNlbGYucGlkX2ZpbGU6Ci0gICAgICAgICAg
ICBwaWQgPSBpbnQoc2VsZi5fZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZShzZWxmLnBpZF9maWxl
KSkKLQotICAgICAgICBpZiBub3QgcGlkOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJf
YmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5f
bmFtZSkKLQotICAgICAgICBfbG9nLmRlYnVnKCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4n
ICUgKHNlbGYuX25hbWUsIHBpZCkpCi0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nl
c3MocGlkKQotCi0gICAgICAgIGlmIHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICAjIHdhaXQo
KSBpcyBub3QgdGhyZWFkc2FmZSBhbmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAg
ICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICAgICAg
c2VsZi5fcHJvY2Vzcy53YWl0KCkKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisg
ICAgICAgIHNlbGYuX3N0YXJ0X2NtZCA9IHN0YXJ0X2NtZAorICAgICAgICBzZWxmLl9lbnYgPSBz
ZWxmLl9wb3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9l
bnZbJ1BZVEhPTlBBVEgnXSA9IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsg
c2VsZi5fZW52LmdldCgnUFlUSE9OUEFUSCcsICcnKSkKIAorICAgIGRlZiBfcmVtb3ZlX3N0YWxl
X2xvZ3Moc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9sb2df
ZmlsZXMoc2VsZi5fb3V0cHV0X2Rpciwgc2VsZi5fbG9nX3ByZWZpeCkKKyAgICAgICAgZXhjZXB0
IE9TRXJyb3IsIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUg
c3RhbGUgJXMgbG9nIGZpbGVzOiAlcycgJSAoc2VsZi5fbmFtZSwgc3RyKGUpKSkKKworICAgIGRl
ZiBfc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1Zygnc3RhcnRpbmcgJXMs
IGNtZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICByZXR1
cm4gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwg
c2hlbGw9RmFsc2UsIHN0ZGluPXNlbGYuX3dzaW4sIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJy
PXNlbGYuX2V4ZWN1dGl2ZS5TVERPVVQpCisKKyAgICBkZWYgX2NsZWFudXBfYWZ0ZXJfc3RvcChz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5fd3NpbjoKKyAgICAgICAgICAgIHNlbGYuX3dzaW4uY2xv
c2UoKQorICAgICAgICAgICAgc2VsZi5fd3NpbiA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5fd3Nv
dXQ6CiAgICAgICAgICAgICBzZWxmLl93c291dC5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl93
c291dCA9IE5vbmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96995</attachid>
            <date>2011-06-13 13:12:01 -0700</date>
            <delta_ts>2011-06-13 13:12:01 -0700</delta_ts>
            <desc>rebase, update w/ last bits of feedback</desc>
            <filename>bug-62180-20110613131200.patch</filename>
            <type>text/plain</type>
            <size>23988</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyODgKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCA3MTRhOGJkYjkxOTY1NGU0NWQ4Mjc0M2IxZDJkNzMxYjlm
NDI1YWU0Li43NzM1NDI1NTA1YmNiNzFmZjM3YWEwNWQyMjgxMzY4NzBmZjVlZDRlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDYtMDYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4KKworICAgICAgICBucnd0OiBmaXggaHR0cCwg
d2Vic29ja2V0IHNlcnZlciBzdGFydHVwLCBzaHV0ZG93bgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIxODAKKworICAgICAgICBUaGlzIGNoYW5nZSBy
ZWZhY3RvcnMgYWxsIG9mIHRoZSBzZXJ2ZXItcmVsYXRlZCBjb2RlIHRvCisgICAgICAgIGhhdmUg
Y29uc2lzdGVudCBzZW1hbnRpY3MuIEl0IHB1c2hlcyB0aGUgc3RhcnQoKS9zdG9wKCkKKyAgICAg
ICAgbG9naWMgaW50byB0aGUgYmFzZSBjbGFzcyBhbmQgYWRkcyBmb3VyIG11Y2ggc21hbGxlciBy
b3V0aW5lcworICAgICAgICBmb3Igc3BlY2lhbGl6YXRpb246CisgICAgICAgIF9wcmVwYXJlX2Nv
bmZpZygpIC0gZm9yIG9wdGlvbmFsbHkgd3JpdGluZyBjb25maWcgZmlsZXMgZXRjLgorICAgICAg
ICAgICAgdG8gZGlzayBwcmlvciB0byBzdGFydGluZyB0aGUgc2VydmVyCisgICAgICAgIF9yZW1v
dmVfc3RhbGVfbG9nX2ZpbGVzKCkKKyAgICAgICAgX3NwYXduX3Byb2Nlc3MoKSAtIHRoZSBhY3R1
YWwgbGF1bmNoIG9mIHRoZSBzdWJwcm9jZXNzCisgICAgICAgIF9jbGVhbnVwX2FmdGVyX3N0b3Ao
KSAtIGFuZCBjdXN0b20gY2xlYW51cCBjb2RlCisKKyAgICAgICAgUHJpb3IgdG8gdGhpcyBjaGFu
Z2UgdGhlIHRocmVlIHNlcnZlciBpbXBsZW1lbnRhdGlvbnMgd2VyZQorICAgICAgICBmYWlybHkg
aW5jb25zaXN0ZW50LCBsZWFkaW5nIHRvIGxvdHMgb2Ygd2VpcmRuZXNzIG9uIHRoZSBib3RzCisg
ICAgICAgIHdpdGggc2VydmVycyBiZWluZyBsZWZ0IGFyb3VuZCwgZXRjLgorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9hcGFjaGVfaHR0cF9zZXJ2ZXIucHk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
ci5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBf
c2VydmVyX2Jhc2UucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5OgorCiAyMDExLTA2LTA3ICBEaXJrIFByYW5rZSAgPGRw
cmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9h
cGFjaGVfaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQppbmRleCA2MDMyODRhN2ZmYzhiYjI2MDg0MzI0
MDAxYjM4NWQ0N2NiODQ5OGI5Li42MjhhMmFjNzQwMmI4ZGU0MzZlODhlOWMyZjg3OTI1ZWRlMTc3
ODU1IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L2FwYWNoZV9odHRwX3NlcnZlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2FwYWNoZV9odHRwX3NlcnZlci5weQpAQCAtNDgsMTUgKzQ4LDE1IEBAIGNs
YXNzIExheW91dFRlc3RBcGFjaGVIdHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNl
KToKICAgICAgICAgICBvdXRwdXRfZGlyOiB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgbGF5b3V0
IHRlc3QgcmVzdWx0IGRpcmVjdG9yeQogICAgICAgICAiIiIKICAgICAgICAgaHR0cF9zZXJ2ZXJf
YmFzZS5IdHRwU2VydmVyQmFzZS5fX2luaXRfXyhzZWxmLCBwb3J0X29iaikKKyAgICAgICAgc2Vs
Zi5fbmFtZSA9ICdhcGFjaGUnCisgICAgICAgIHNlbGYuX21hcHBpbmdzID0gW3sncG9ydCc6IDgw
MDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICB7J3BvcnQnOiA4MDgwfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsncG9ydCc6IDg0NDMsICdzc2xjZXJ0JzogVHJ1ZX1dCiAgICAgICAgIHNlbGYuX291dHB1
dF9kaXIgPSBvdXRwdXRfZGlyCiAgICAgICAgIHNlbGYuX25hbWUgPSAnYXBhY2hlJwogICAgICAg
ICBwb3J0X29iai5tYXliZV9tYWtlX2RpcmVjdG9yeShvdXRwdXRfZGlyKQogCi0gICAgICAgIHNl
bGYubWFwcGluZ3MgPSBbeydwb3J0JzogODAwMH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAg
eydwb3J0JzogODA4MH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODA4MX0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgeydwb3J0JzogODQ0MywgJ3NzbGNlcnQnOiBUcnVl
fV0KLQogICAgICAgICAjIFRoZSB1cHN0cmVhbSAuY29uZiBmaWxlIGFzc3VtZWQgdGhlIGV4aXN0
ZW5jZSBvZiAvdG1wL1dlYktpdCBmb3IKICAgICAgICAgIyBwbGFjaW5nIGFwYWNoZSBmaWxlcyBs
aWtlIHRoZSBsb2NrIGZpbGUgdGhlcmUuCiAgICAgICAgIHNlbGYuX3J1bnRpbWVfcGF0aCA9IG9z
LnBhdGguam9pbigiL3RtcCIsICJXZWJLaXQiKQpAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBMYXlv
dXRUZXN0QXBhY2hlSHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAg
ICAgICMgVGhlIFBJRCByZXR1cm5lZCB3aGVuIEFwYWNoZSBpcyBzdGFydGVkIGdvZXMgYXdheSAo
ZHVlIHRvIGRyb3BwaW5nCiAgICAgICAgICMgcHJpdmlsZWdlcz8pLiBUaGUgcHJvcGVyIGNvbnRy
b2xsaW5nIFBJRCBpcyB3cml0dGVuIHRvIGEgZmlsZSBpbiB0aGUKICAgICAgICAgIyBhcGFjaGUg
cnVudGltZSBkaXJlY3RvcnkuCi0gICAgICAgIHNlbGYuX3BpZF9maWxlID0gb3MucGF0aC5qb2lu
KHNlbGYuX3J1bnRpbWVfcGF0aCwgJ2h0dHBkLnBpZCcpCisgICAgICAgIHNlbGYucGlkX2ZpbGUg
PSBvcy5wYXRoLmpvaW4oc2VsZi5fcnVudGltZV9wYXRoLCAnaHR0cGQucGlkJykKIAogICAgICAg
ICB0ZXN0X2RpciA9IHNlbGYuX3BvcnRfb2JqLmxheW91dF90ZXN0c19kaXIoKQogICAgICAgICBq
c190ZXN0X3Jlc291cmNlc19kaXIgPSBzZWxmLl9jeWd3aW5fc2FmZV9qb2luKHRlc3RfZGlyLCAi
ZmFzdCIsICJqcyIsCkBAIC0xNzEsNDYgKzE3MSwxOSBAQCBjbGFzcyBMYXlvdXRUZXN0QXBhY2hl
SHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAgICAgICByZXR1
cm4gc2VsZi5fZ2V0X2N5Z3dpbl9wYXRoKGh0dHBkX2NvbmZpZ19jb3B5KQogICAgICAgICByZXR1
cm4gaHR0cGRfY29uZmlnX2NvcHkKIAotICAgIGRlZiBfc3RhcnRfaHR0cGRfcHJvY2VzcyhzZWxm
KToKLSAgICAgICAgIiIiU3RhcnRzIHRoZSBodHRwZCBwcm9jZXNzIGFuZCByZXR1cm5zIHdoZXRo
ZXIgdGhlcmUgd2VyZSBlcnJvcnMuIiIiCisgICAgZGVmIF9zcGF3bl9wcm9jZXNzKHNlbGYpOgog
ICAgICAgICAjIFVzZSBzaGVsbD1UcnVlIGJlY2F1c2Ugd2Ugam9pbiB0aGUgYXJndW1lbnRzIGlu
dG8gYSBzdHJpbmcgZm9yCiAgICAgICAgICMgdGhlIHNha2Ugb2YgV2luZG93L0N5Z3dpbiBhbmQg
aXQgbmVlZHMgcXVvdGluZyB0aGF0IGJyZWFrcwogICAgICAgICAjIHNoZWxsPUZhbHNlLgogICAg
ICAgICAjIEZJWE1FOiBXZSBzaG91bGQgbm90IG5lZWQgdG8gYmUgam9pbmluZyBzaGVsbCBhcmd1
bWVudHMgaW50byBzdHJpbmdzLgogICAgICAgICAjIHNoZWxsPVRydWUgaXMgYSB0cmFpbCBvZiB0
ZWFycy4KICAgICAgICAgIyBOb3RlOiBOb3QgdGhyZWFkIHNhZmU6IGh0dHA6Ly9idWdzLnB5dGhv
bi5vcmcvaXNzdWUyMzIwCi0gICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nIGh0dHAgc2VydmVy
LCBjbWQ9IiVzIicgJSBzdHIoc2VsZi5fc3RhcnRfY21kKSkKLSAgICAgICAgc2VsZi5fcHJvY2Vz
cyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIHN0ZGVycj1zZWxmLl9l
eGVjdXRpdmUuUElQRSwgc2hlbGw9VHJ1ZSkKLSAgICAgICAgZXJyID0gc2VsZi5fcHJvY2Vzcy5z
dGRlcnIucmVhZCgpCisgICAgICAgIF9sb2cuZGVidWcoJ1N0YXJ0aW5nICVzIHNlcnZlciwgY21k
PSIlcyInICUgKHNlbGYuX25hbWUsIHN0cihzZWxmLl9zdGFydF9jbWQpKSkKKyAgICAgICAgcHJv
Y2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzZWxmLl9zdGFydF9jbWQsIHNoZWxsPVRydWUs
IHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuUElQRSkKKyAgICAgICAgZXJyID0gcHJvY2Vzcy5zdGRl
cnIucmVhZCgpCiAgICAgICAgIGlmIGxlbihlcnIpOgogICAgICAgICAgICAgX2xvZy5kZWJ1Zyhl
cnIpCi0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAg
IGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgIiIiU3RhcnRzIHRoZSBhcGFjaGUgaHR0cCBzZXJ2
ZXIuIiIiCi0gICAgICAgICMgU3RvcCBhbnkgY3VycmVudGx5IHJ1bm5pbmcgc2VydmVycy4KLSAg
ICAgICAgc2VsZi5zdG9wKCkKLQotICAgICAgICBfbG9nLmRlYnVnKCJTdGFydGluZyAlcyBzZXJ2
ZXIiICUgc2VsZi5fbmFtZSkKLSAgICAgICAgc2VydmVyX3N0YXJ0ZWQgPSBzZWxmLndhaXRfZm9y
X2FjdGlvbihzZWxmLl9zdGFydF9odHRwZF9wcm9jZXNzKQotICAgICAgICBpZiBzZXJ2ZXJfc3Rh
cnRlZDoKLSAgICAgICAgICAgIF9sb2cuZGVidWcoIkFwYWNoZSBzdGFydGVkLiBUZXN0aW5nIHBv
cnRzIikKLSAgICAgICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24o
Ci0gICAgICAgICAgICAgICAgc2VsZi5pc19zZXJ2ZXJfcnVubmluZ19vbl9hbGxfcG9ydHMpCi0K
LSAgICAgICAgaWYgc2VydmVyX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2
ZXIgc3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFp
c2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0IGh0dHAgc2Vy
dmVyJykKLQotICAgIGRlZiBzdG9wKHNlbGYpOgotICAgICAgICAiIiJTdG9wcyB0aGUgYXBhY2hl
IGh0dHAgc2VydmVyLiIiIgotICAgICAgICBfbG9nLmRlYnVnKCJTaHV0dGluZyBkb3duIGFueSBy
dW5uaW5nIGh0dHAgc2VydmVycyIpCi0gICAgICAgIGh0dHBkX3BpZCA9IE5vbmUKLSAgICAgICAg
aWYgc2VsZi5fcHJvY2VzczoKLSAgICAgICAgICAgIGh0dHBkX3BpZCA9IHNlbGYuX3Byb2Nlc3Mu
cGlkCi0gICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMoc2VsZi5fcGlkX2ZpbGUpOgotICAgICAg
ICAgICAgaHR0cGRfcGlkID0gaW50KG9wZW4oc2VsZi5fcGlkX2ZpbGUpLnJlYWRsaW5lKCkpCi0g
ICAgICAgIGlmIGh0dHBkX3BpZDoKLSAgICAgICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3By
b2Nlc3MoaHR0cGRfcGlkKQorICAgICAgICAgICAgc2VsZi5fZXhlY3V0aXZlLmtpbGxfcHJvY2Vz
cyhwcm9jZXNzLnBpZCkKKyAgICAgICAgICAgIHByb2Nlc3Mud2FpdCgpCisgICAgICAgICAgICBy
YWlzZSBTZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzOiAlcycgJSAoc2VsZi5fbmFtZSwg
ZXJyKSkKKyAgICAgICAgcmV0dXJuIHByb2Nlc3MKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyLnB5CmluZGV4IDZkYTVkNTI1
OTI4N2YxZWFlOTZkYzc1NGNmOTRlMTY1ZmMxNjUwNzcuLjk1OWJmOTI0NGRmNjNlNWU2MDMzMDQx
ZjQ0NDFiMTUxMzlhYjk3YzggMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZlci5weQpAQCAtMzMsMTMgKzMzLDExIEBAIGlt
cG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCi1pbXBvcnQg
dXJsbGliCiAKIGZyb20gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQgaW1wb3J0IGh0dHBfc2Vy
dmVyX2Jhc2UKIAogX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ3ZWJraXRweS5sYXlvdXRfdGVz
dHMucG9ydC5odHRwX3NlcnZlciIpCiAKLQogY2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFz
ZS5IdHRwU2VydmVyQmFzZSk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydF9vYmosIG91
dHB1dF9kaXIsIGJhY2tncm91bmQ9RmFsc2UsIHBvcnQ9Tm9uZSwKQEAgLTUxLDcgKzQ5LDYgQEAg
Y2xhc3MgTGlnaHR0cGQoaHR0cF9zZXJ2ZXJfYmFzZS5IdHRwU2VydmVyQmFzZSk6CiAgICAgICAg
IGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UuX19pbml0X18oc2VsZiwgcG9ydF9vYmop
CiAgICAgICAgIHNlbGYuX25hbWUgPSAnbGlnaHR0cGQnCiAgICAgICAgIHNlbGYuX291dHB1dF9k
aXIgPSBvdXRwdXRfZGlyCi0gICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCiAgICAgICAgIHNl
bGYuX3BvcnQgPSBwb3J0CiAgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CiAgICAgICAgIHNlbGYu
X3J1bl9iYWNrZ3JvdW5kID0gcnVuX2JhY2tncm91bmQKQEAgLTgzLDEzICs4MCw3IEBAIGNsYXNz
IExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgogICAgICAgICAgICAg
ICAgIHsncG9ydCc6IDg0NDMsICdkb2Nyb290Jzogc2VsZi5fd2Via2l0X3Rlc3RzLAogICAgICAg
ICAgICAgICAgICAnc3NsY2VydCc6IHNlbGYuX3BlbV9maWxlfV0pCiAKLSAgICBkZWYgaXNfcnVu
bmluZyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2Nlc3MgIT0gTm9uZQotCi0gICAg
ZGVmIHN0YXJ0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKLSAgICAgICAg
ICAgIHJhaXNlIGh0dHBfc2VydmVyX2Jhc2UuU2VydmVyRXJyb3IoJyVzIGFscmVhZHkgcnVubmlu
ZycgJSBzZWxmLl9uYW1lKQotCisgICAgZGVmIF9wcmVwYXJlX2NvbmZpZyhzZWxmKToKICAgICAg
ICAgYmFzZV9jb25mX2ZpbGUgPSBzZWxmLl9wb3J0X29iai5wYXRoX2Zyb21fd2Via2l0X2Jhc2Uo
J1Rvb2xzJywKICAgICAgICAgICAgICdTY3JpcHRzJywgJ3dlYmtpdHB5JywgJ2xheW91dF90ZXN0
cycsICdwb3J0JywgJ2xpZ2h0dHBkLmNvbmYnKQogICAgICAgICBvdXRfY29uZl9maWxlID0gb3Mu
cGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsICdsaWdodHRwZC5jb25mJykKQEAgLTk5LDEwICs5
MCw2IEBAIGNsYXNzIExpZ2h0dHBkKGh0dHBfc2VydmVyX2Jhc2UuSHR0cFNlcnZlckJhc2UpOgog
ICAgICAgICBsb2dfZmlsZV9uYW1lID0gImVycm9yLmxvZy0iICsgdGltZV9zdHIgKyAiLnR4dCIK
ICAgICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19m
aWxlX25hbWUpCiAKLSAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxlcy4gV2Ugb25seSBuZWVk
IHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KLSAgICAgICAgc2VsZi5yZW1vdmVfbG9nX2ZpbGVzKHNl
bGYuX291dHB1dF9kaXIsICJhY2Nlc3MubG9nLSIpCi0gICAgICAgIHNlbGYucmVtb3ZlX2xvZ19m
aWxlcyhzZWxmLl9vdXRwdXRfZGlyLCAiZXJyb3IubG9nLSIpCi0KICAgICAgICAgIyBXcml0ZSBv
dXQgdGhlIGNvbmZpZwogICAgICAgICBiYXNlX2NvbmYgPSBzZWxmLl9maWxlc3lzdGVtLnJlYWRf
dGV4dF9maWxlKGJhc2VfY29uZl9maWxlKQogCkBAIC0xODgsMzUgKzE3NSwxOCBAQCBjbGFzcyBM
aWdodHRwZChodHRwX3NlcnZlcl9iYXNlLkh0dHBTZXJ2ZXJCYXNlKToKICAgICAgICAgICAgIHNl
bGYuX2ZpbGVzeXN0ZW0uY29weWZpbGUob3MucGF0aC5qb2luKG1vZHVsZV9wYXRoLCBsaWJfZmls
ZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbih0
bXBfbW9kdWxlX3BhdGgsIGxpYl9maWxlKSkKIAotICAgICAgICBlbnYgPSBzZWxmLl9wb3J0X29i
ai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQotICAgICAgICBfbG9nLmRlYnVnKCdTdGFydGlu
ZyAlcyBzZXJ2ZXIsIGNtZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzdHIoc3RhcnRfY21kKSkpCi0g
ICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBzZWxmLl9leGVjdXRpdmUucG9wZW4oc3RhcnRfY21kLCBl
bnY9ZW52LCBzdGRpbj1zZWxmLl9leGVjdXRpdmUuUElQRSkKLQotICAgICAgICAjIFdhaXQgZm9y
IHNlcnZlciB0byBzdGFydC4KLSAgICAgICAgc2VsZi5tYXBwaW5ncyA9IG1hcHBpbmdzCi0gICAg
ICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi53YWl0X2Zvcl9hY3Rpb24oCi0gICAgICAgICAgICBz
ZWxmLmlzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cykKLQotICAgICAgICAjIE91ciBwcm9j
ZXNzIHRlcm1pbmF0ZWQgYWxyZWFkeQotICAgICAgICBpZiBub3Qgc2VydmVyX3N0YXJ0ZWQgb3Ig
c2VsZi5fcHJvY2Vzcy5yZXR1cm5jb2RlICE9IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBodHRw
X3NlcnZlcl9iYXNlLlNlcnZlckVycm9yKCdGYWlsZWQgdG8gc3RhcnQgJXMuJyAlIHNlbGYuX25h
bWUpCi0KLSAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHN1Y2Nlc3NmdWxseSBzdGFydGVkIikK
LQotICAgICMgVE9ETyhkZWFubSk6IEZpbmQgYSBuaWNlciB3YXkgdG8gc2h1dGRvd24gY2xlYW5s
eS4gIE91ciBsb2cgZmlsZXMgYXJlCi0gICAgIyBwcm9iYWJseSBub3QgYmVpbmcgZmx1c2hlZCwg
ZXRjLi4uIHdoeSBkb2Vzbid0IG91ciBweXRob24gaGF2ZSBvcy5raWxsID8KLQotICAgIGRlZiBz
dG9wKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5pc19ydW5uaW5nKCk6Ci0gICAgICAgICAg
ICByZXR1cm4KLQotICAgICAgICBodHRwZF9waWQgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuX3By
b2Nlc3M6Ci0gICAgICAgICAgICBodHRwZF9waWQgPSBzZWxmLl9wcm9jZXNzLnBpZAotICAgICAg
ICBzZWxmLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKGh0dHBkX3BpZCkKLQotICAgICAgICBpZiBz
ZWxmLl9wcm9jZXNzOgotICAgICAgICAgICAgIyB3YWl0KCkgaXMgbm90IHRocmVhZHNhZmUgYW5k
IGNhbiB0aHJvdyBPU0Vycm9yIGR1ZSB0bzoKLSAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0
aG9uLm9yZy9pc3N1ZTE3MzE3MTcKLSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3Mud2FpdCgpCi0g
ICAgICAgICAgICBzZWxmLl9wcm9jZXNzID0gTm9uZQorICAgICAgICBzZWxmLl9zdGFydF9jbWQg
PSBzdGFydF9jbWQKKyAgICAgICAgc2VsZi5fZW52ID0gc2VsZi5fcG9ydF9vYmouc2V0dXBfZW52
aXJvbl9mb3Jfc2VydmVyKCkKKyAgICAgICAgc2VsZi5fbWFwcGluZ3MgPSBtYXBwaW5ncworCisg
ICAgZGVmIF9yZW1vdmVfc3RhbGVfbG9ncyhzZWxmKToKKyAgICAgICAgIyBTb21ldGltZXMgbG9n
cyBhcmUgb3BlbiBpbiBvdGhlciBwcm9jZXNzZXMgYnV0IHRoZXkgc2hvdWxkIGNsZWFyIGV2ZW50
dWFsbHkuCisgICAgICAgIGZvciBsb2dfcHJlZml4IGluICgnYWNjZXNzLmxvZy0nLCAnZXJyb3Iu
bG9nLScpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9s
b2dfZmlsZXMoc2VsZi5fb3V0cHV0X2RpciwgbG9nX3ByZWZpeCkKKyAgICAgICAgICAgIGV4Y2Vw
dCBPU0Vycm9yLCBlOgorICAgICAgICAgICAgICAgIF9sb2cud2FybmluZygnRmFpbGVkIHRvIHJl
bW92ZSBvbGQgJXMgJXMgZmlsZXMnICUgc2VsZi5fbmFtZSwgbG9nX3ByZWZpeCkKKworICAgIGRl
ZiBfc3Bhd25fcHJvY2VzcyhzZWxmKToKKyAgICAgICAgX2xvZy5kZWJ1Zygnc3RhcnRpbmcgJXMs
IGNtZD0iJXMiJyAlIChzZWxmLl9uYW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICByZXR1
cm4gc2VsZi5fZXhlY3V0aXZlLnBvcGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwg
c2hlbGw9RmFsc2UsIHN0ZGVycj1zZWxmLl9leGVjdXRpdmUuUElQRSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJfYmFzZS5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvaHR0cF9zZXJ2ZXJf
YmFzZS5weQppbmRleCA5Nzk5ZGY4ZWE1NmZjNTVlZjlkM2E5OTg1ZjEwOTI0ZDUzNDhiYjAxLi42
NzhjZDRmMjlkNTlkZGU3ZjcwZmMyMzZjMTI2MWQ3YTQ4YjFkMmNlIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2h0dHBfc2VydmVyX2Jhc2UucHkK
KysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9odHRwX3NlcnZl
cl9iYXNlLnB5CkBAIC0yOSwxMiArMjksMTAgQEAKIAogIiIiQmFzZSBjbGFzcyB3aXRoIGNvbW1v
biByb3V0aW5lcyBiZXR3ZWVuIHRoZSBBcGFjaGUsIExpZ2h0dHBkLCBhbmQgd2Vic29ja2V0IHNl
cnZlcnMuIiIiCiAKK2ltcG9ydCBlcnJubwogaW1wb3J0IGxvZ2dpbmcKLWltcG9ydCBvcworaW1w
b3J0IHNvY2tldAogaW1wb3J0IHRpbWUKLWltcG9ydCB1cmxsaWIKLQotZnJvbSB3ZWJraXRweS5j
b21tb24uc3lzdGVtIGltcG9ydCBmaWxlc3lzdGVtCiAKIF9sb2cgPSBsb2dnaW5nLmdldExvZ2dl
cigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQuaHR0cF9zZXJ2ZXJfYmFzZSIpCiAKQEAgLTQ0
LDE2ICs0Miw5MCBAQCBjbGFzcyBTZXJ2ZXJFcnJvcihFeGNlcHRpb24pOgogCiAKIGNsYXNzIEh0
dHBTZXJ2ZXJCYXNlKG9iamVjdCk6CisgICAgIiIiQSBza2VsZXRvbiBjbGFzcyBmb3Igc3RhcnRp
bmcgYW5kIHN0b3BwaW5nIHNlcnZlcnMgdXNlZCBieSB0aGUgbGF5b3V0IHRlc3RzLiIiIgogCiAg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnRfb2JqKToKKyAgICAgICAgc2VsZi5fZXhlY3V0aXZl
ID0gcG9ydF9vYmouX2V4ZWN1dGl2ZQorICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydF9v
YmouX2ZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fbmFtZSA9ICc8dmlydHVhbD4nCisgICAgICAg
IHNlbGYuX21hcHBpbmdzID0ge30KICAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBOb25lCiAgICAg
ICAgIHNlbGYuX3BvcnRfb2JqID0gcG9ydF9vYmoKLSAgICAgICAgc2VsZi5fZXhlY3V0aXZlID0g
cG9ydF9vYmouX2V4ZWN1dGl2ZQotICAgICAgICBzZWxmLl9maWxlc3lzdGVtID0gcG9ydF9vYmou
X2ZpbGVzeXN0ZW0KICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5vbmUKIAotICAgIGRlZiB3YWl0
X2Zvcl9hY3Rpb24oc2VsZiwgYWN0aW9uKToKKyAgICBkZWYgc3RhcnQoc2VsZik6CisgICAgICAg
ICIiIlN0YXJ0cyB0aGUgc2VydmVyLiIiIgorICAgICAgICBpZiBzZWxmLl9wcm9jZXNzOgorICAg
ICAgICAgICAgcmFpc2UgU2VydmVyRXJyb3IoJyVzIGFscmVhZHkgcnVubmluZycgJSBzZWxmLl9u
YW1lKQorCisgICAgICAgIHNlbGYuX3JlbW92ZV9zdGFsZV9sb2dzKCkKKyAgICAgICAgc2VsZi5f
cHJlcGFyZV9jb25maWcoKQorICAgICAgICBzZWxmLl9jaGVja190aGF0X2FsbF9wb3J0c19hcmVf
YXZhaWxhYmxlKCkKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX3NwYXduX3Byb2Nlc3Mo
KQorICAgICAgICBfbG9nLmRlYnVnKCIlcyBzdGFydGVkLiBUZXN0aW5nIHBvcnRzIiAlIHNlbGYu
X25hbWUpCisgICAgICAgIHNlcnZlcl9zdGFydGVkID0gc2VsZi5fd2FpdF9mb3JfYWN0aW9uKHNl
bGYuX2lzX3NlcnZlcl9ydW5uaW5nX29uX2FsbF9wb3J0cykKKyAgICAgICAgaWYgc2VydmVyX3N0
YXJ0ZWQ6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCIlcyBzdWNjZXNzZnVsbHkgc3RhcnRlZCIg
JSBzZWxmLl9uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgU2VydmVyRXJy
b3IoJ0ZhaWxlZCB0byBzdGFydCAlcyBzZXJ2ZXInICUgc2VsZi5fbmFtZSkKKworICAgICAgICBp
ZiBzZWxmLl9waWRfZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4
dF9maWxlKHNlbGYuX3BpZF9maWxlLCBzdHIoc2VsZi5fcHJvY2Vzcy5waWQpKQorCisgICAgZGVm
IHN0b3Aoc2VsZik6CisgICAgICAgIF9sb2cuZGVidWcoIlNodXR0aW5nIGRvd24gYW55IHJ1bm5p
bmcgJXMgc2VydmVycyIgJSBzZWxmLl9uYW1lKQorICAgICAgICBwaWQgPSBOb25lCisgICAgICAg
IGlmIHNlbGYuX3Byb2Nlc3M6CisgICAgICAgICAgICBwaWQgPSBzZWxmLl9wcm9jZXNzLnBpZAor
ICAgICAgICBlbGlmIHNlbGYuX3BpZF9maWxlIGFuZCBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhz
ZWxmLl9waWRfZmlsZSk6CisgICAgICAgICAgICBwaWQgPSBpbnQoc2VsZi5fZmlsZXN5c3RlbS5y
ZWFkX3RleHRfZmlsZShzZWxmLl9waWRfZmlsZSkpCisKKyAgICAgICAgaWYgbm90IHBpZDoKKyAg
ICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3BvcnRfb2JqLl9leGVjdXRpdmUua2ls
bF9wcm9jZXNzKHBpZCkKKyAgICAgICAgaWYgc2VsZi5fcHJvY2VzczoKKyAgICAgICAgICAgICMg
d2FpdCgpIGlzIG5vdCB0aHJlYWRzYWZlIGFuZCBjYW4gdGhyb3cgT1NFcnJvciBkdWUgdG86Cisg
ICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzMxNzE3CisgICAgICAg
ICAgICBzZWxmLl9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2VzcyA9IE5v
bmUKKyAgICAgICAgaWYgc2VsZi5fcGlkX2ZpbGUgYW5kIHNlbGYuX2ZpbGVzeXN0ZW0uZXhpc3Rz
KHNlbGYuX3BpZF9maWxlKToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNl
bGYuX3BpZF9maWxlKQorCisgICAgICAgIHNlbGYuX2NsZWFudXBfYWZ0ZXJfc3RvcCgpCisKKyAg
ICBkZWYgX3ByZXBhcmVfY29uZmlnKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUgc2hv
dWxkIGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMgdG8gZG8gYW55IHNvcnQKKyAgICAgICAg
b2YgaW5pdGlhbGl6YXRpb24gcmVxdWlyZWQgcHJpb3IgdG8gc3RhcnRpbmcgdGhlIHNlcnZlciB0
aGF0IG1heSBmYWlsLiIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX3JlbW92ZV9zdGFsZV9s
b2dzKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGltcGxlbWVudGVk
IGJ5IHN1YmNsYXNzZXMgdG8gdHJ5IGFuZCByZW1vdmUgbG9ncworICAgICAgICBsZWZ0IG92ZXIg
ZnJvbSBhIHByaW9yIHJ1bi4gVGhpcyByb3V0aW5lIHNob3VsZCBsb2cgd2FybmluZ3MgaWYgdGhl
CisgICAgICAgIGZpbGVzIGNhbm5vdCBiZSBkZWxldGVkLCBidXQgc2hvdWxkIG5vdCBmYWlsIHVu
bGVzcyBmYWlsdXJlIHRvCisgICAgICAgIGRlbGV0ZSB0aGUgbG9ncyB3aWxsIGFjdHVhbGx5IGNh
dXNlIHN0YXJ0KCkgdG8gZmFpbC4iIiIKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9zcGF3bl9w
cm9jZXNzKHNlbGYpOgorICAgICAgICAiIiJUaGlzIHJvdXRpbmUgbXN0IGJlIGltcGxlbWVudGVk
IGJ5IHN1YmNsYXNzZXMgdG8gYWN0dWFsbHkKKyAgICAgICAgbGF1bmNoIHRoZSBzdWJwcm9jZXNz
IGFuZCByZXR1cm4gdGhlIHByb2Nlc3Mgb2JqZWN0LiBUaGUgbWV0aG9kCisgICAgICAgIGRvZXMg
bm90IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHByb2Nlc3Mgc3RhcnRlZCBjb3JyZWN0bHkgKHN0
YXJ0KCkKKyAgICAgICAgd2lsbCB2ZXJpZnkgdGhhdCBpdHNlbGYpLiIiIgorICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2NsZWFudXBfYWZ0ZXJfc3RvcChzZWxm
KToKKyAgICAgICAgIiIiVGhpcyByb3V0aW5lIG1heSBiZSBpbXBsZW1lbnRlZCBpbiBzdWJjbGFz
c2VzIHRvIGNsZWFuIHVwIGFueSBzdGF0ZQorICAgICAgICBhcyBuZWNlc3NhcnkgYWZ0ZXIgdGhl
IHNlcnZlciBwcm9jZXNzIGlzIHN0b3BwZWQuIiIiCisgICAgICAgIHBhc3MKKworICAgIGRlZiBf
cmVtb3ZlX2xvZ19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKKyAgICAgICAgZmls
ZXMgPSBzZWxmLl9maWxlc3lzdGVtLmxpc3RkaXIoZm9sZGVyKQorICAgICAgICBmb3IgZmlsZSBp
biBmaWxlczoKKyAgICAgICAgICAgIGlmIGZpbGUuc3RhcnRzd2l0aChzdGFydHNfd2l0aCk6Cisg
ICAgICAgICAgICAgICAgZnVsbF9wYXRoID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKGZvbGRlciwg
ZmlsZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlc3lzdGVtLnJlbW92ZShmdWxsX3BhdGgp
CisKKyAgICBkZWYgX3dhaXRfZm9yX2FjdGlvbihzZWxmLCBhY3Rpb24pOgogICAgICAgICAiIiJS
ZXBlYXQgdGhlIGFjdGlvbiBmb3IgMjAgc2Vjb25kcyBvciB1bnRpbCBpdCBzdWNjZWVkcy4gUmV0
dXJucwogICAgICAgICB3aGV0aGVyIGl0IHN1Y2NlZWRlZC4iIiIKICAgICAgICAgc3RhcnRfdGlt
ZSA9IHRpbWUudGltZSgpCkBAIC02NSwyOCArMTM3LDM3IEBAIGNsYXNzIEh0dHBTZXJ2ZXJCYXNl
KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIEZhbHNlCiAKLSAgICBkZWYgaXNfc2VydmVyX3J1
bm5pbmdfb25fYWxsX3BvcnRzKHNlbGYpOgorICAgIGRlZiBfaXNfc2VydmVyX3J1bm5pbmdfb25f
YWxsX3BvcnRzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIHdoZXRoZXIgdGhlIHNlcnZlciBp
cyBydW5uaW5nIG9uIGFsbCB0aGUgZGVzaXJlZCBwb3J0cy4iIiIKLSAgICAgICAgZm9yIG1hcHBp
bmcgaW4gc2VsZi5tYXBwaW5nczoKLSAgICAgICAgICAgIGlmICdzc2xjZXJ0JyBpbiBtYXBwaW5n
OgotICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJ3MnCi0gICAgICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgICAgIGh0dHBfc3VmZml4ID0gJycKLQotICAgICAgICAgICAgdXJsID0gJ2h0
dHAlczovLzEyNy4wLjAuMTolZC8nICUgKGh0dHBfc3VmZml4LCBtYXBwaW5nWydwb3J0J10pCisg
ICAgICAgIGlmIG5vdCBzZWxmLl9leGVjdXRpdmUuY2hlY2tfcnVubmluZ19waWQoc2VsZi5fcHJv
Y2Vzcy5waWQpOgorICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIGlzbid0IHJ1bm5pbmcg
YXQgYWxsIikKKyAgICAgICAgICAgIHJhaXNlIFNlcnZlckVycm9yKCJTZXJ2ZXIgZXhpdGVkIikK
IAorICAgICAgICBmb3IgbWFwcGluZyBpbiBzZWxmLl9tYXBwaW5nczoKKyAgICAgICAgICAgIHMg
PSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgIHBvcnQgPSBtYXBwaW5nWydwb3J0J10KICAg
ICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXNwb25zZSA9IHVybGxpYi51cmxvcGVu
KHVybCwgcHJveGllcz17fSkKLSAgICAgICAgICAgICAgICBfbG9nLmRlYnVnKCJTZXJ2ZXIgcnVu
bmluZyBhdCAlcyIgJSB1cmwpCisgICAgICAgICAgICAgICAgcy5jb25uZWN0KCgnbG9jYWxob3N0
JywgcG9ydCkpCisgICAgICAgICAgICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIHJ1bm5pbmcgb24g
JWQiICUgcG9ydCkKICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yLCBlOgotICAgICAgICAgICAg
ICAgIF9sb2cuZGVidWcoIlNlcnZlciBOT1QgcnVubmluZyBhdCAlczogJXMiICUgKHVybCwgZSkp
CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVGVVNFRCwg
ZXJybm8uRUNPTk5SRVNFVCk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAg
ICAgICAgX2xvZy5kZWJ1ZygiU2VydmVyIE5PVCBydW5uaW5nIG9uICVkOiAlcyIgJSAocG9ydCwg
ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KKyAgICAgICAgICAgIGZpbmFsbHk6
CisgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBk
ZWYgcmVtb3ZlX2xvZ19maWxlcyhzZWxmLCBmb2xkZXIsIHN0YXJ0c193aXRoKToKLSAgICAgICAg
ZmlsZXMgPSBvcy5saXN0ZGlyKGZvbGRlcikKLSAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0g
ICAgICAgICAgICBpZiBmaWxlLnN0YXJ0c3dpdGgoc3RhcnRzX3dpdGgpOgotICAgICAgICAgICAg
ICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbihmb2xkZXIsIGZpbGUpCi0gICAgICAgICAgICAg
ICAgZmlsZXN5c3RlbS5GaWxlU3lzdGVtKCkucmVtb3ZlKGZ1bGxfcGF0aCkKKyAgICBkZWYgX2No
ZWNrX3RoYXRfYWxsX3BvcnRzX2FyZV9hdmFpbGFibGUoc2VsZik6CisgICAgICAgIGZvciBtYXBw
aW5nIGluIHNlbGYuX21hcHBpbmdzOgorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQor
ICAgICAgICAgICAgcG9ydCA9IG1hcHBpbmdbJ3BvcnQnXQorICAgICAgICAgICAgdHJ5OgorICAg
ICAgICAgICAgICAgIHMuYmluZCgoJ2xvY2FsaG9zdCcsIHBvcnQpKQorICAgICAgICAgICAgZXhj
ZXB0IElPRXJyb3IsIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyBpbiAoZXJybm8uRUFM
UkVBRFksIGVycm5vLkVBRERSSU5VU0UpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTZXJ2
ZXJFcnJvcignUG9ydCAlZCBpcyBhbHJlYWR5IGluIHVzZS4nICUgcG9ydCkKKyAgICAgICAgICAg
ICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZmluYWxs
eToKKyAgICAgICAgICAgICAgICBzLmNsb3NlKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvd2Vic29ja2V0X3NlcnZlci5weQppbmRl
eCBkNDZhNDE5MmJlNzA2NjI4MDcxNjJiMjMyNzRiMDA2NDQ0NjE0ZWVhLi5lNTgwMmM3ZDNmN2Ni
ZGU2OTllMjE4NDA5NjE0MWY2MTU3Y2I3YWU5IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3dlYnNvY2tldF9zZXJ2ZXIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC93ZWJzb2NrZXRfc2VydmVyLnB5CkBA
IC0yOSwxNyArMjksMTQgQEAKIAogIiIiQSBjbGFzcyB0byBoZWxwIHN0YXJ0L3N0b3AgdGhlIFB5
V2ViU29ja2V0IHNlcnZlciB1c2VkIGJ5IGxheW91dCB0ZXN0cy4iIiIKIAotCiBpbXBvcnQgbG9n
Z2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQotaW1wb3J0IHVybGxpYgog
CiBmcm9tIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0IGltcG9ydCBodHRwX3NlcnZlcgogZnJv
bSB3ZWJraXRweS5sYXlvdXRfdGVzdHMucG9ydCBpbXBvcnQgaHR0cF9zZXJ2ZXJfYmFzZQogCi0K
IF9sb2cgPSBsb2dnaW5nLmdldExvZ2dlcigid2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQud2Vi
c29ja2V0X3NlcnZlciIpCiAKIF9XU19MT0dfUFJFRklYID0gJ3B5d2Vic29ja2V0LndzLmxvZy0n
CkBAIC00OSwzNSArNDYsNyBAQCBfREVGQVVMVF9XU19QT1JUID0gODg4MAogX0RFRkFVTFRfV1NT
X1BPUlQgPSA5MzIzCiAKIAotZGVmIHVybF9pc19hbGl2ZSh1cmwpOgotICAgICIiIkNoZWNrcyB0
byBzZWUgaWYgd2UgZ2V0IGFuIGh0dHAgcmVzcG9uc2UgZnJvbSB8dXJsfC4KLSAgICBXZSBwb2xs
IHRoZSB1cmwgMjAgdGltZXMgd2l0aCBhIDAuNSBzZWNvbmQgZGVsYXkuICBJZiB3ZSBkb24ndAot
ICAgIGdldCBhIHJlcGx5IGluIHRoYXQgdGltZSwgd2UgZ2l2ZSB1cCBhbmQgYXNzdW1lIHRoZSBo
dHRwZAotICAgIGRpZG4ndCBzdGFydCBwcm9wZXJseS4KLQotICAgIEFyZ3M6Ci0gICAgICB1cmw6
IFRoZSBVUkwgdG8gY2hlY2suCi0gICAgUmV0dXJuOgotICAgICAgVHJ1ZSBpZiB0aGUgdXJsIGlz
IGFsaXZlLgotICAgICIiIgotICAgIHNsZWVwX3RpbWUgPSAwLjUKLSAgICB3YWl0X3RpbWUgPSAx
MAotICAgIHdoaWxlIHdhaXRfdGltZSA+IDA6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJl
c3BvbnNlID0gdXJsbGliLnVybG9wZW4odXJsLCBwcm94aWVzPXt9KQotICAgICAgICAgICAgIyBT
ZXJ2ZXIgaXMgdXAgYW5kIHJlc3BvbmRpbmcuCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAg
ICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgIyBXYWl0IGZv
ciBzbGVlcF90aW1lIGJlZm9yZSB0cnlpbmcgYWdhaW4uCi0gICAgICAgIHdhaXRfdGltZSAtPSBz
bGVlcF90aW1lCi0gICAgICAgIHRpbWUuc2xlZXAoc2xlZXBfdGltZSkKLQotICAgIHJldHVybiBG
YWxzZQotCi0KIGNsYXNzIFB5V2ViU29ja2V0KGh0dHBfc2VydmVyLkxpZ2h0dHBkKToKLQogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBwb3J0X29iaiwgb3V0cHV0X2RpciwgcG9ydD1fREVGQVVMVF9X
U19QT1JULAogICAgICAgICAgICAgICAgICByb290PU5vbmUsIHVzZV90bHM9RmFsc2UsCiAgICAg
ICAgICAgICAgICAgIHBpZGZpbGU9Tm9uZSk6CkBAIC04OCwxOSArNTcsMjQgQEAgY2xhc3MgUHlX
ZWJTb2NrZXQoaHR0cF9zZXJ2ZXIuTGlnaHR0cGQpOgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0PV9ERUZBVUxUX1dTX1BPUlQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJvb3Q9cm9vdCkKICAgICAgICAgc2VsZi5fb3V0cHV0X2RpciA9
IG91dHB1dF9kaXIKKyAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBwaWRmaWxlCiAgICAgICAgIHNl
bGYuX3Byb2Nlc3MgPSBOb25lCisKICAgICAgICAgc2VsZi5fcG9ydCA9IHBvcnQKICAgICAgICAg
c2VsZi5fcm9vdCA9IHJvb3QKICAgICAgICAgc2VsZi5fdXNlX3RscyA9IHVzZV90bHMKKworICAg
ICAgICBzZWxmLl9uYW1lID0gJ3B5d2Vic29ja2V0JworICAgICAgICBpZiBzZWxmLl91c2VfdGxz
OgorICAgICAgICAgICAgc2VsZi5fbmFtZSA9ICdweXdlYnNvY2tldF9zZWN1cmUnCisKICAgICAg
ICAgc2VsZi5fcHJpdmF0ZV9rZXkgPSBzZWxmLl9wZW1fZmlsZQogICAgICAgICBzZWxmLl9jZXJ0
aWZpY2F0ZSA9IHNlbGYuX3BlbV9maWxlCiAgICAgICAgIGlmIHNlbGYuX3BvcnQ6CiAgICAgICAg
ICAgICBzZWxmLl9wb3J0ID0gaW50KHNlbGYuX3BvcnQpCi0gICAgICAgIHNlbGYuX25hbWUgPSAn
cHl3ZWJzb2NrZXQnCi0gICAgICAgIGlmIHNlbGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBzZWxm
Ll9uYW1lID0gJ3B5d2Vic29ja2V0X3NlY3VyZScKLSAgICAgICAgc2VsZi5fcGlkX2ZpbGUgPSBw
aWRmaWxlCisgICAgICAgIHNlbGYuX3dzaW4gPSBOb25lCiAgICAgICAgIHNlbGYuX3dzb3V0ID0g
Tm9uZQorICAgICAgICBzZWxmLl9tYXBwaW5ncyA9IFt7J3BvcnQnOiBzZWxmLl9wb3J0fV0KIAog
ICAgICAgICAjIFdlYmtpdCB0ZXN0cwogICAgICAgICBpZiBzZWxmLl9yb290OgpAQCAtMTE2LDIy
ICs5MCwxNSBAQCBjbGFzcyBQeVdlYlNvY2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAg
ICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgc2VsZi5fd2ViX3NvY2tldF90ZXN0cyA9
IE5vbmUKIAotICAgIGRlZiBzdGFydChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3dlYl9z
b2NrZXRfdGVzdHM6Ci0gICAgICAgICAgICBfbG9nLmluZm8oJ05vIG5lZWQgdG8gc3RhcnQgJXMg
c2VydmVyLicgJSBzZWxmLl9uYW1lKQotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNl
bGYuaXNfcnVubmluZygpOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2
ZXJFcnJvcignJXMgaXMgYWxyZWFkeSBydW5uaW5nLicgJSBzZWxmLl9uYW1lKQotCi0gICAgICAg
IHRpbWVfc3RyID0gdGltZS5zdHJmdGltZSgnJWQlYiVZLSVIJU0lUycpCiAgICAgICAgIGlmIHNl
bGYuX3VzZV90bHM6Ci0gICAgICAgICAgICBsb2dfcHJlZml4ID0gX1dTU19MT0dfUFJFRklYCisg
ICAgICAgICAgICBzZWxmLl9sb2dfcHJlZml4ID0gX1dTU19MT0dfUFJFRklYCiAgICAgICAgIGVs
c2U6Ci0gICAgICAgICAgICBsb2dfcHJlZml4ID0gX1dTX0xPR19QUkVGSVgKLSAgICAgICAgbG9n
X2ZpbGVfbmFtZSA9IGxvZ19wcmVmaXggKyB0aW1lX3N0cgorICAgICAgICAgICAgc2VsZi5fbG9n
X3ByZWZpeCA9IF9XU19MT0dfUFJFRklYCiAKLSAgICAgICAgIyBSZW1vdmUgb2xkIGxvZyBmaWxl
cy4gV2Ugb25seSBuZWVkIHRvIGtlZXAgdGhlIGxhc3Qgb25lcy4KLSAgICAgICAgc2VsZi5yZW1v
dmVfbG9nX2ZpbGVzKHNlbGYuX291dHB1dF9kaXIsIGxvZ19wcmVmaXgpCisgICAgZGVmIF9wcmVw
YXJlX2NvbmZpZyhzZWxmKToKKyAgICAgICAgdGltZV9zdHIgPSB0aW1lLnN0cmZ0aW1lKCclZCVi
JVktJUglTSVTJykKKyAgICAgICAgbG9nX2ZpbGVfbmFtZSA9IHNlbGYuX2xvZ19wcmVmaXggKyB0
aW1lX3N0cgorICAgICAgICBzZWxmLl93c2luID0gb3Blbihvcy5kZXZudWxsLCAncicpCiAKICAg
ICAgICAgZXJyb3JfbG9nID0gb3MucGF0aC5qb2luKHNlbGYuX291dHB1dF9kaXIsIGxvZ19maWxl
X25hbWUgKyAiLWVyci50eHQiKQogCkBAIC0xNjksNTggKzEzNiwyNCBAQCBjbGFzcyBQeVdlYlNv
Y2tldChodHRwX3NlcnZlci5MaWdodHRwZCk6CiAgICAgICAgICAgICBzdGFydF9jbWQuZXh0ZW5k
KFsnLXQnLCAnLWsnLCBzZWxmLl9wcml2YXRlX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICctYycsIHNlbGYuX2NlcnRpZmljYXRlXSkKIAotICAgICAgICBlbnYgPSBzZWxmLl9w
b3J0X29iai5zZXR1cF9lbnZpcm9uX2Zvcl9zZXJ2ZXIoKQotICAgICAgICBlbnZbJ1BZVEhPTlBB
VEgnXSA9IChweXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW52LmdldCgnUFlUSE9OUEFUSCcsICcnKSkKLQotICAgICAgICBf
bG9nLmRlYnVnKCdTdGFydGluZyAlcyBzZXJ2ZXIgb24gJWQsIGNtZD0iJXMiLicgJSAoc2VsZi5f
bmFtZSwgc2VsZi5fcG9ydCwgc3RyKHN0YXJ0X2NtZCkpKQotICAgICAgICAjIE5vdGU6IE5vdCB0
aHJlYWQgc2FmZTogaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIzMjAKLSAgICAgICAgc2Vs
Zi5fcHJvY2VzcyA9IHNlbGYuX2V4ZWN1dGl2ZS5wb3BlbihzdGFydF9jbWQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49b3Blbihvcy5kZXZudWxs
LCAncicpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZG91dD1zZWxmLl93c291dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGRlcnI9c2VsZi5fZXhlY3V0aXZlLlNURE9VVCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQotCi0gICAgICAgIGlmIHNlbGYu
X3VzZV90bHM6Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cHMnCi0gICAgICAgIGVsc2U6Ci0gICAg
ICAgICAgICB1cmwgPSAnaHR0cCcKLSAgICAgICAgdXJsID0gdXJsICsgJzovLzEyNy4wLjAuMTol
ZC8nICUgc2VsZi5fcG9ydAotICAgICAgICBpZiBub3QgdXJsX2lzX2FsaXZlKHVybCk6Ci0gICAg
ICAgICAgICBpZiBzZWxmLl9wcm9jZXNzLnJldHVybmNvZGUgPT0gTm9uZToKLSAgICAgICAgICAg
ICAgICBzZWxmLl9leGVjdXRpdmUua2lsbF9wcm9jZXNzKHNlbGYuX3Byb2Nlc3MucGlkKQotICAg
ICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5yZWFkX3RleHRfZmlsZShvdXRwdXRfbG9nKS5zcGxp
dGxpbmVzKCk6Ci0gICAgICAgICAgICAgICAgX2xvZy5lcnJvcihsaW5lKQotICAgICAgICAgICAg
cmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFpbGVkIHRvIHN0YXJ0ICVzIHNl
cnZlciBvbiBwb3J0ICVzLicgJSAoc2VsZi5fbmFtZSwgc2VsZi5fcG9ydCkpCi0KLSAgICAgICAg
IyBPdXIgcHJvY2VzcyB0ZXJtaW5hdGVkIGFscmVhZHkKLSAgICAgICAgaWYgc2VsZi5fcHJvY2Vz
cy5yZXR1cm5jb2RlICE9IE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBodHRwX3NlcnZlcl9iYXNl
LlNlcnZlckVycm9yKCdGYWlsZWQgdG8gc3RhcnQgJXMgc2VydmVyLicgJSBzZWxmLl9uYW1lKQot
ICAgICAgICBpZiBzZWxmLl9waWRfZmlsZToKLSAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0u
d3JpdGVfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlLCAiJWQiICUgc2VsZi5fcHJvY2Vzcy5waWQp
Ci0KLSAgICBkZWYgc3RvcChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygp
OgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgcGlkID0gTm9uZQotICAgICAgICBpZiBz
ZWxmLl9wcm9jZXNzOgotICAgICAgICAgICAgcGlkID0gc2VsZi5fcHJvY2Vzcy5waWQKLSAgICAg
ICAgZWxpZiBzZWxmLl9waWRfZmlsZToKLSAgICAgICAgICAgIHBpZCA9IGludChzZWxmLl9maWxl
c3lzdGVtLnJlYWRfdGV4dF9maWxlKHNlbGYuX3BpZF9maWxlKSkKLQotICAgICAgICBpZiBub3Qg
cGlkOgotICAgICAgICAgICAgcmFpc2UgaHR0cF9zZXJ2ZXJfYmFzZS5TZXJ2ZXJFcnJvcignRmFp
bGVkIHRvIGZpbmQgJXMgc2VydmVyIHBpZC4nICUgc2VsZi5fbmFtZSkKLQotICAgICAgICBfbG9n
LmRlYnVnKCdTaHV0dGluZyBkb3duICVzIHNlcnZlciAlZC4nICUgKHNlbGYuX25hbWUsIHBpZCkp
Ci0gICAgICAgIHNlbGYuX2V4ZWN1dGl2ZS5raWxsX3Byb2Nlc3MocGlkKQotCi0gICAgICAgIGlm
IHNlbGYuX3Byb2Nlc3M6Ci0gICAgICAgICAgICAjIHdhaXQoKSBpcyBub3QgdGhyZWFkc2FmZSBh
bmQgY2FuIHRocm93IE9TRXJyb3IgZHVlIHRvOgotICAgICAgICAgICAgIyBodHRwOi8vYnVncy5w
eXRob24ub3JnL2lzc3VlMTczMTcxNwotICAgICAgICAgICAgc2VsZi5fcHJvY2Vzcy53YWl0KCkK
LSAgICAgICAgICAgIHNlbGYuX3Byb2Nlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3N0YXJ0X2Nt
ZCA9IHN0YXJ0X2NtZAorICAgICAgICBzZWxmLl9lbnYgPSBzZWxmLl9wb3J0X29iai5zZXR1cF9l
bnZpcm9uX2Zvcl9zZXJ2ZXIoKQorICAgICAgICBzZWxmLl9lbnZbJ1BZVEhPTlBBVEgnXSA9IChw
eXdlYnNvY2tldF9iYXNlICsgb3MucGF0aC5wYXRoc2VwICsgc2VsZi5fZW52LmdldCgnUFlUSE9O
UEFUSCcsICcnKSkKIAorICAgIGRlZiBfcmVtb3ZlX3N0YWxlX2xvZ3Moc2VsZik6CisgICAgICAg
IHRyeToKKyAgICAgICAgICAgIHNlbGYuX3JlbW92ZV9sb2dfZmlsZXMoc2VsZi5fb3V0cHV0X2Rp
ciwgc2VsZi5fbG9nX3ByZWZpeCkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IsIGU6CisgICAgICAg
ICAgICBfbG9nLndhcm5pbmcoJ0ZhaWxlZCB0byByZW1vdmUgc3RhbGUgJXMgbG9nIGZpbGVzOiAl
cycgJSAoc2VsZi5fbmFtZSwgc3RyKGUpKSkKKworICAgIGRlZiBfc3Bhd25fcHJvY2VzcyhzZWxm
KToKKyAgICAgICAgX2xvZy5kZWJ1Zygnc3RhcnRpbmcgJXMsIGNtZD0iJXMiJyAlIChzZWxmLl9u
YW1lLCBzZWxmLl9zdGFydF9jbWQpKQorICAgICAgICByZXR1cm4gc2VsZi5fZXhlY3V0aXZlLnBv
cGVuKHNlbGYuX3N0YXJ0X2NtZCwgZW52PXNlbGYuX2Vudiwgc2hlbGw9RmFsc2UsIHN0ZGluPXNl
bGYuX3dzaW4sIHN0ZG91dD1zZWxmLl93c291dCwgc3RkZXJyPXNlbGYuX2V4ZWN1dGl2ZS5TVERP
VVQpCisKKyAgICBkZWYgX2NsZWFudXBfYWZ0ZXJfc3RvcChzZWxmKToKKyAgICAgICAgaWYgc2Vs
Zi5fd3NpbjoKKyAgICAgICAgICAgIHNlbGYuX3dzaW4uY2xvc2UoKQorICAgICAgICAgICAgc2Vs
Zi5fd3NpbiA9IE5vbmUKICAgICAgICAgaWYgc2VsZi5fd3NvdXQ6CiAgICAgICAgICAgICBzZWxm
Ll93c291dC5jbG9zZSgpCiAgICAgICAgICAgICBzZWxmLl93c291dCA9IE5vbmUK
</data>

          </attachment>
      

    </bug>

</bugzilla>