<?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>33454</bug_id>
          
          <creation_ts>2010-01-10 16:40:52 -0800</creation_ts>
          <short_desc>check-webkit-style: Create a class to represent a list of filter rules.</short_desc>
          <delta_ts>2010-01-13 08:02:13 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Jerdonek">cjerdonek</reporter>
          <assigned_to name="Chris Jerdonek">cjerdonek</assigned_to>
          <cc>abarth</cc>
    
    <cc>cjerdonek</cc>
    
    <cc>eric</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>179192</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 16:40:52 -0800</bug_when>
    <thetext>This class will encapsulate the logic of checking filter rules against the category names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179245</commentid>
    <comment_count>1</comment_count>
      <attachid>46252</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 20:44:38 -0800</bug_when>
    <thetext>Created attachment 46252
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179248</commentid>
    <comment_count>2</comment_count>
      <attachid>46252</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 20:50:24 -0800</bug_when>
    <thetext>Comment on attachment 46252
Proposed patch

Obsoleting &quot;Proposed Patch 1.&quot; I should add unit tests first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179288</commentid>
    <comment_count>3</comment_count>
      <attachid>46258</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-10 21:51:15 -0800</bug_when>
    <thetext>Created attachment 46258
Proposed patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>179296</commentid>
    <comment_count>4</comment_count>
      <attachid>46261</attachid>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-11 00:14:33 -0800</bug_when>
    <thetext>Created attachment 46261
Proposed patch 3

Corrected index paths to be properly rooted.  This is the reason why all of the status bubbles were red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180098</commentid>
    <comment_count>5</comment_count>
      <attachid>46261</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-01-12 23:13:14 -0800</bug_when>
    <thetext>Comment on attachment 46261
Proposed patch 3

Looks good. Thanks for this refactoring. r- for a few nitpicks (yay I&apos;m a reviewer now :).

&gt; +        This method performs argument validation but does not strip
&gt; +        leading or trailing white space.

Why don&apos;t we strip the arguments? I guess you want to be stricter than before? If so, we may want to raise a ValueError for the case where rule.find(&apos; &apos;) &gt;= 0 in the integrity check of this function.

&gt; +        Raises:
&gt; +          ValueError: Invalid filter rule if a rule does not start with
&gt; +                      plus (&quot;+&quot;) or minus (&quot;-&quot;).
&gt; +
&gt; +        &quot;&quot;&quot;

I think usually we don&apos;t put an empty line in the end of docstrings.

&gt; +    def __str__(self):
&gt; +        return &quot;,&quot;.join(self._filter_rules)

I think we basically use single-quotes for string literals except for multi-line string literals.

&gt; +    def test_init(self):
&gt; +        &quot;&quot;&quot;Test __init__ constructor.&quot;&quot;&quot;
&gt; +        self.assertRaises(ValueError, CategoryFilter, [&quot;no_prefix&quot;])
&gt; +        CategoryFilter([]) # No ValueError: works
&gt; +        CategoryFilter([&quot;+&quot;]) # No ValueError: works
&gt; +        CategoryFilter([&quot;-&quot;]) # No ValueError: works

If we decide to raise a ValueError for whitespaces, we may want to have an assertions for them as well. Also, please consider using single-quotes in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180115</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-13 00:40:18 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 46261 [details])
&gt; Looks good. Thanks for this refactoring. r- for a few nitpicks (yay I&apos;m a
&gt; reviewer now :).

Congrats, Shinichiro!  That&apos;s great news!  And thanks for choosing my patch to be one of your first!  :)

&gt; &gt; +        This method performs argument validation but does not strip
&gt; &gt; +        leading or trailing white space.
&gt; 
&gt; Why don&apos;t we strip the arguments?

Good question.  I guess I tend to prefer if &quot;inner-most&quot; functions simply operate on what is given to them rather than do any clean-up.  I&apos;d rather the caller be responsible for choosing what clean-up to do depending on the case at hand.  This could even be by calling a wrapper function that cleans up and then calls the &quot;bare&quot; function.

Some of my reasons are--

(1) If the function always does clean-up, the caller doesn&apos;t have the option of trying to call the function without cleaning up.  The function is doing two things instead of one thing.

(2) It can often be an arbitrary choice as to what clean-up to include and what not to include.  Should white space be stripped?  Should strings be converted to lower case?  Etc.  Because of this arbitrariness, the caller is never sure and winds up having to look more to verify what clean-up is done.

(3) There is also the performance argument, which practically speaking doesn&apos;t matter here, but illustrates a principle.  If the function cleans up every time, it can be cleaning up even when it doesn&apos;t need to.  And if the caller is cleaning up in certain circumstances, things can wind up getting cleaned up twice, which is unnecessary.

Does that seem reasonable to you?

&gt; I guess you want to be stricter than before?
&gt; If so, we may want to raise a ValueError for the case where rule.find(&apos; &apos;) &gt;= 0
&gt; in the integrity check of this function.

I believe the end result is not any stricter than before because the parse function (which is the caller in this case) strips white space before instantiating the CategoryFilter.  This is done in the  _parse_filter_flag function:

&gt; for uncleaned_filter in flag_value.split(&apos;,&apos;):
&gt;     filter = uncleaned_filter.strip()
&gt;     if not filter:
&gt;         continue
&gt;    filters.append(filter)

And the unit tests now check that the default filter rules do not have white space at the beginning or end.

I chose not to check for spaces to allow for category names with spaces.  If category names should not have white space, we should probably include that in the documentation about what filter rules are valid.  Should we rule out category names with more than one word?

&gt; 
&gt; &gt; +        Raises:
&gt; &gt; +          ValueError: Invalid filter rule if a rule does not start with
&gt; &gt; +                      plus (&quot;+&quot;) or minus (&quot;-&quot;).
&gt; &gt; +
&gt; &gt; +        &quot;&quot;&quot;
&gt; 
&gt; I think usually we don&apos;t put an empty line in the end of docstrings.

I noticed recently that this is recommended in the Python style guide on docstring conventions:

&gt; The BDFL [3] recommends inserting a blank line between the last paragraph in a multi-line docstring and its closing quotes, placing the closing quotes on a line by themselves. This way, Emacs&apos; fill-paragraph command can be used on it. ( from http://www.python.org/dev/peps/pep-0257/ )

Should we depart from this?  I don&apos;t care too much.  After having tried both though, I do think it looks a bit nicer with the space.  It looks less scrunched that way, especially if the subsequent code starts on the line immediately after the &quot;&quot;&quot;.

&gt; 
&gt; &gt; +    def __str__(self):
&gt; &gt; +        return &quot;,&quot;.join(self._filter_rules)
&gt; 
&gt; I think we basically use single-quotes for string literals except for
&gt; multi-line string literals.

Yeah, I was doing that before, and then Eric recently told me that he and Adam were leaning towards double quotes.  I don&apos;t really care as long as we&apos;re consistent.  If I had to make a choice, I&apos;d probably prefer double because it&apos;s more consistent with docstring quotes being double.  The Python style guide only seems to have an opinion about docstring quotes (which should be double).  Should we try to settle on something with Eric, Adam, and David going forward?

&gt; &gt; +    def test_init(self):
&gt; &gt; +        &quot;&quot;&quot;Test __init__ constructor.&quot;&quot;&quot;
&gt; &gt; +        self.assertRaises(ValueError, CategoryFilter, [&quot;no_prefix&quot;])
&gt; &gt; +        CategoryFilter([]) # No ValueError: works
&gt; &gt; +        CategoryFilter([&quot;+&quot;]) # No ValueError: works
&gt; &gt; +        CategoryFilter([&quot;-&quot;]) # No ValueError: works
&gt; 
&gt; If we decide to raise a ValueError for whitespaces, we may want to have an
&gt; assertions for them as well. Also, please consider using single-quotes in this
&gt; file.

Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180146</commentid>
    <comment_count>7</comment_count>
      <attachid>46261</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-01-13 03:56:22 -0800</bug_when>
    <thetext>Comment on attachment 46261
Proposed patch 3

All concerns are resolved. Thanks!

&gt; &gt; Why don&apos;t we strip the arguments?
&gt; ... snipped ...
&gt; Does that seem reasonable to you?

I see. Thanks for the detailed description!

&gt; I believe the end result is not any stricter than before because the parse
&gt; function (which is the caller in this case) strips white space before
&gt; instantiating the CategoryFilter.  This is done in the  _parse_filter_flag
&gt; function:

Ah, I see. I missed _parse_filter_flag is stripping the filters. So, I guess I wanted a testcase for _parse_filter_flag about stripping. It may be like

        (files, options) = parse([&apos;--filter= +foo , -bar &apos;])
        self.assertEquals(options.filter_rules,
                          [&apos;-&apos;, &apos;+whitespace&apos;, &apos;+foo&apos;, &apos;-bar&apos;])

But I don&apos;t think we should add this in this bug.

&gt; &gt; The BDFL [3] recommends inserting a blank line between the last paragraph in a multi-line docstring and its closing quotes, placing the closing quotes on a line by themselves. This way, Emacs&apos; fill-paragraph command can be used on it. ( from http://www.python.org/dev/peps/pep-0257/ )
&gt; 
&gt; Should we depart from this?  I don&apos;t care too much.  After having tried both
&gt; though, I do think it looks a bit nicer with the space.  It looks less
&gt; scrunched that way, especially if the subsequent code starts on the line
&gt; immediately after the &quot;&quot;&quot;.

Ah, I see. I didn&apos;t know this, thanks for the info! I don&apos;t have strong preference on this and I guess other people don&apos;t care so much either.

&gt; Yeah, I was doing that before, and then Eric recently told me that he and Adam
&gt; were leaning towards double quotes.  I don&apos;t really care as long as we&apos;re
&gt; consistent.  If I had to make a choice, I&apos;d probably prefer double because it&apos;s
&gt; more consistent with docstring quotes being double.  The Python style guide
&gt; only seems to have an opinion about docstring quotes (which should be double). 
&gt; Should we try to settle on something with Eric, Adam, and David going forward?

I have no strong preference here, too. Though having two styles in one file isn&apos;t good, we may be able to fix all style inconsistencies issues in another patch later. Let&apos;s go ahead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180221</commentid>
    <comment_count>8</comment_count>
      <attachid>46261</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-01-13 07:53:05 -0800</bug_when>
    <thetext>Comment on attachment 46261
Proposed patch 3

Clearing flags on attachment: 46261

Committed r53185: &lt;http://trac.webkit.org/changeset/53185&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180222</commentid>
    <comment_count>9</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-01-13 07:53:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>180225</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Jerdonek">cjerdonek</who>
    <bug_when>2010-01-13 08:02:13 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I believe the end result is not any stricter than before because the parse
&gt; &gt; function (which is the caller in this case) strips white space before
&gt; &gt; instantiating the CategoryFilter.  This is done in the  _parse_filter_flag
&gt; &gt; function:
&gt; 
&gt; Ah, I see. I missed _parse_filter_flag is stripping the filters. So, I guess I
&gt; wanted a testcase for _parse_filter_flag about stripping. It may be like
&gt; 
&gt;         (files, options) = parse([&apos;--filter= +foo , -bar &apos;])
&gt;         self.assertEquals(options.filter_rules,
&gt;                           [&apos;-&apos;, &apos;+whitespace&apos;, &apos;+foo&apos;, &apos;-bar&apos;])
&gt;
&gt; But I don&apos;t think we should add this in this bug.

Good point.  I&apos;ll add such a test case in my next patch to check-webkit-style.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46252</attachid>
            <date>2010-01-10 20:44:38 -0800</date>
            <delta_ts>2010-01-10 20:50:24 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch-tools3-1.txt</filename>
            <type>text/plain</type>
            <size>16400</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDUzMDU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDEt
MTAgIENocmlzIEplcmRvbmVrICA8Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyZWF0ZWQgYSBDYXRlZ29y
eUZpbHRlciBjbGFzcyB0byBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgb2YKKyAgICAgICAgZmlsdGVy
IHJ1bGVzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMzQ1NAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Ogor
ICAgICAgICAgIC0gQWRkZWQgQ2F0ZWdvcnlGaWx0ZXIgY2xhc3MuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jcHBfc3R5bGUucHk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jcHBfc3R5bGVfdW5pdHRlc3QucHk6CisKIDIwMTAtMDEtMTAgIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGNvc21ldGljIGNoYW5n
ZS4gIFJlbW92ZSB0aGUgc3RhdHVzIGJ1YmJsZSBmb3IgbWFjLWV3cwpJbmRleDogU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkv
c3R5bGUvY2hlY2tlci5weQkocmV2aXNpb24gNTMwNTMpCisrKyBTY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNzEgQEAgU3ludGF4
OiAlKHByb2dyYW1fbmFtZSlzIFstLXZlcmJvc2U9I10gWwogICAgIHJldHVybiB1c2FnZQogCiAK
K2NsYXNzIENhdGVnb3J5RmlsdGVyKG9iamVjdCk6CisKKyAgICAiIiJGaWx0ZXJzIHdoZXRoZXIg
dG8gY2hlY2sgc3R5bGUgY2F0ZWdvcmllcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBm
aWx0ZXJfcnVsZXMpOgorICAgICAgICAiIiJDcmVhdGUgYSBjYXRlZ29yeSBmaWx0ZXIuCisKKyAg
ICAgICAgVGhpcyBtZXRob2QgcGVyZm9ybXMgYXJndW1lbnQgdmFsaWRhdGlvbiBidXQgZG9lcyBu
b3Qgc3RyaXAKKyAgICAgICAgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKworICAg
ICAgICBBcmdzOgorICAgICAgICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhh
dCBhcmUgZmlsdGVyIHJ1bGVzLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHN0
cmluZ3MgYmVnaW5uaW5nIHdpdGggdGhlIHBsdXMgb3IgbWludXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN5bWJvbCAoKy8tKS4gVGhlIGxpc3Qgc2hvdWxkIGluY2x1ZGUgYW55CisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0IGZpbHRlciBydWxlcyBhdCB0aGUgYmVnaW5uaW5nLgor
CisgICAgICAgIFJhaXNlczoKKyAgICAgICAgICBWYWx1ZUVycm9yOiBJbnZhbGlkIGZpbHRlciBy
dWxlIGlmIGEgcnVsZSBkb2VzIG5vdCBzdGFydCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAg
cGx1cyAoIisiKSBvciBtaW51cyAoIi0iKS4KKworICAgICAgICAiIiIKKyAgICAgICAgZm9yIHJ1
bGUgaW4gZmlsdGVyX3J1bGVzOgorICAgICAgICAgICAgaWYgbm90IChydWxlLnN0YXJ0c3dpdGgo
JysnKSBvciBydWxlLnN0YXJ0c3dpdGgoJy0nKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignSW52YWxpZCBmaWx0ZXIgcnVsZSAiJXMiOiBldmVyeSBydWxlICcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdydWxlIGluIHRoZSAtLWZpbHRlciBmbGFnIG11c3Qg
c3RhcnQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggKyBvciAtLicg
JSBydWxlKQorCisgICAgICAgIHNlbGYuX2ZpbHRlcl9ydWxlcyA9IGZpbHRlcl9ydWxlcworICAg
ICAgICBzZWxmLl9zaG91bGRfY2hlY2tfY2F0ZWdvcnkgPSB7fSAjIENhY2hlZCBkaWN0aW9uYXJ5
IG9mIGNhdGVnb3J5IHRvIFRydWUvRmFsc2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAg
ICAgICByZXR1cm4gIiwiLmpvaW4oc2VsZi5fZmlsdGVyX3J1bGVzKQorCisgICAgZGVmIF9fZXFf
XyhzZWxmLCBvdGhlcik6CisgICAgICAgICMgVGhpcyBpcyB1c2VmdWwgZm9yIHVuaXQgdGVzdGlu
Zy4KKyAgICAgICAgIyBUd28gY2F0ZWdvcnkgZmlsdGVycyBhcmUgdGhlIHNhbWUgaWYgYW5kIG9u
bHkgaWYgdGhlaXIKKyAgICAgICAgIyBjb25zdGl0dWVudCBmaWx0ZXIgcnVsZXMgYXJlIHRoZSBz
YW1lLgorICAgICAgICByZXR1cm4gKHN0cihzZWxmKSA9PSBzdHIob3RoZXIpKQorCisgICAgZGVm
IHNob3VsZF9jaGVjayhzZWxmLCBjYXRlZ29yeSk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVy
IHRoZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZC4KKworICAgICAgICBUaGUgcnVsZXMgZm9y
IGRldGVybWluaW5nIHdoZXRoZXIgYSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZAorICAgICAg
ICBhcmUgYXMgZm9sbG93cy4gQWxsIGNhdGVnb3JpZXMgc3RhcnQgc3RhcnQgb3V0IGJlaW5nIGNo
ZWNrZWQuCisgICAgICAgIFRoZW4gYXBwbHkgdGhlIGZpbHRlciBydWxlcyBpbiBvcmRlciBmcm9t
IGZpcnN0IHRvIGxhc3QsIHdpdGgKKyAgICAgICAgbGF0ZXIgZmxhZ3MgdGFraW5nIHByZWNlZGVu
Y2UuCisKKyAgICAgICAgQSBmaWx0ZXIgaXRlbSBhcHBsaWVzIHRvIGEgY2F0ZWdvcnkgaWYgdGhl
IHN0cmluZyBhZnRlciB0aGUKKyAgICAgICAgbGVhZGluZyBwbHVzL21pbnVzICgrLy0pIG1hdGNo
ZXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgY2F0ZWdvcnkKKyAgICAgICAgbmFtZS4gQSBwbHVzICgr
KSBtZWFucyB0aGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQsIHdoaWxlIGEKKyAgICAgICAg
bWludXMgKC0pIG1lYW5zIHRoZSBjYXRlZ29yeSBzaG91bGQgbm90IGJlIGNoZWNrZWQuCisKKyAg
ICAgICAgIiIiCisgICAgICAgIGlmIGNhdGVnb3J5IGluIHNlbGYuX3Nob3VsZF9jaGVja19jYXRl
Z29yeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zaG91bGRfY2hlY2tfY2F0ZWdvcnlbY2F0
ZWdvcnldCisKKyAgICAgICAgc2hvdWxkX2NoZWNrID0gVHJ1ZSAjIEFsbCBjYXRlZ29yaWVzIGNo
ZWNrZWQgYnkgZGVmYXVsdC4KKyAgICAgICAgZm9yIHJ1bGUgaW4gc2VsZi5fZmlsdGVyX3J1bGVz
OgorICAgICAgICAgICAgaWYgbm90IGNhdGVnb3J5LnN0YXJ0c3dpdGgocnVsZVsxOl0pOgorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzaG91bGRfY2hlY2sgPSBydWxlLnN0
YXJ0c3dpdGgoJysnKQorICAgICAgICBzZWxmLl9zaG91bGRfY2hlY2tfY2F0ZWdvcnlbY2F0ZWdv
cnldID0gc2hvdWxkX2NoZWNrICMgVXBkYXRlIGNhY2hlLgorICAgICAgICByZXR1cm4gc2hvdWxk
X2NoZWNrCisKKwogIyBUaGlzIGNsYXNzIHNob3VsZCBub3QgaGF2ZSBrbm93bGVkZ2Ugb2YgdGhl
IGZsYWcga2V5IG5hbWVzLgogY2xhc3MgUHJvY2Vzc29yT3B0aW9ucyhvYmplY3QpOgogCkBAIC0y
NDQsMTIgKzMwOSw4IEBAIGNsYXNzIFByb2Nlc3Nvck9wdGlvbnMob2JqZWN0KToKICAgICAgICAg
ICAgICAgICAgY29uZmlkZW5jZSBzY29yZSBhdCBvciBhYm92ZSB0aGlzIHZhbHVlLgogICAgICAg
ICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyAxLCB3aGljaCBkaXNwbGF5cyBhbGwgZXJyb3JzLgog
Ci0gICAgICBmaWx0ZXJfcnVsZXM6IEEgbGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4g
ZmlsdGVyIHJ1bGVzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIHdoZXRo
ZXIgYSBzdHlsZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZC4KLSAgICAgICAgICAgICAgICAg
ICAgRWFjaCBzdHJpbmcgc2hvdWxkIHN0YXJ0IHdpdGggKyBvciAtLiBBbiBleGFtcGxlCi0gICAg
ICAgICAgICAgICAgICAgIHN0cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50Ii4gVGhlIGxpc3Qg
aW5jbHVkZXMgYW55Ci0gICAgICAgICAgICAgICAgICAgIHByZXBlbmRlZCBkZWZhdWx0IGZpbHRl
ciBydWxlcy4gVGhlIGRlZmF1bHQgaXMgdGhlCi0gICAgICAgICAgICAgICAgICAgIGVtcHR5IGxp
c3QsIHdoaWNoIGluY2x1ZGVzIGFsbCBjYXRlZ29yaWVzLgorICAgICAgZmlsdGVyOiBBIENhdGVn
b3J5RmlsdGVyIGluc3RhbmNlLiBUaGUgZGVmYXVsdCBpcyB0aGUgZW1wdHkgZmlsdGVyLAorICAg
ICAgICAgICAgICB3aGljaCBtZWFucyB0aGF0IGFsbCBjYXRlZ29yaWVzIHNob3VsZCBiZSBjaGVj
a2VkLgogCiAgICAgICBnaXRfY29tbWl0OiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGdpdCBj
b21taXQgdG8gY2hlY2suCiAgICAgICAgICAgICAgICAgICBUaGUgZGVmYXVsdCBpcyBOb25lLgpA
QCAtMjU5LDE2ICszMjAsMTYgQEAgY2xhc3MgUHJvY2Vzc29yT3B0aW9ucyhvYmplY3QpOgogICAg
ICAgICAgICAgICAgICAgICAgICAgIGNsYXNzLiBUaGUgZGVmYXVsdCBpcyB0aGUgZW1wdHkgZGlj
dGlvbmFyeS4KICAgICAiIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRwdXRfZm9ybWF0
LCB2ZXJib3NpdHk9MSwgZmlsdGVyX3J1bGVzPU5vbmUsCisgICAgZGVmIF9faW5pdF9fKHNlbGYs
IG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0eT0xLCBmaWx0ZXI9Tm9uZSwKICAgICAgICAgICAgICAg
ICAgZ2l0X2NvbW1pdD1Ob25lLCBleHRyYV9mbGFnX3ZhbHVlcz1Ob25lKToKLSAgICAgICAgaWYg
ZmlsdGVyX3J1bGVzIGlzIE5vbmU6Ci0gICAgICAgICAgICBmaWx0ZXJfcnVsZXMgPSBbXQorICAg
ICAgICBpZiBmaWx0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIGZpbHRlciA9IENhdGVnb3J5Rmls
dGVyKFtdKQogICAgICAgICBpZiBleHRyYV9mbGFnX3ZhbHVlcyBpcyBOb25lOgogICAgICAgICAg
ICAgZXh0cmFfZmxhZ192YWx1ZXMgPSB7fQogCiAgICAgICAgIHNlbGYub3V0cHV0X2Zvcm1hdCA9
IG91dHB1dF9mb3JtYXQKICAgICAgICAgc2VsZi52ZXJib3NpdHkgPSB2ZXJib3NpdHkKLSAgICAg
ICAgc2VsZi5maWx0ZXJfcnVsZXMgPSBmaWx0ZXJfcnVsZXMKKyAgICAgICAgc2VsZi5maWx0ZXIg
PSBmaWx0ZXIKICAgICAgICAgc2VsZi5naXRfY29tbWl0ID0gZ2l0X2NvbW1pdAogICAgICAgICBz
ZWxmLmV4dHJhX2ZsYWdfdmFsdWVzID0gZXh0cmFfZmxhZ192YWx1ZXMKIApAQCAtMjg1LDcgKzM0
Niw3IEBAIGRlZiBzZXRfb3B0aW9ucyhvcHRpb25zKToKICAgICAiIiIKICAgICBjcHBfc3R5bGUu
X3NldF9vdXRwdXRfZm9ybWF0KG9wdGlvbnMub3V0cHV0X2Zvcm1hdCkKICAgICBjcHBfc3R5bGUu
X3NldF92ZXJib3NlX2xldmVsKG9wdGlvbnMudmVyYm9zaXR5KQotICAgIGNwcF9zdHlsZS5fc2V0
X2ZpbHRlcnMob3B0aW9ucy5maWx0ZXJfcnVsZXMpCisgICAgY3BwX3N0eWxlLl9zZXRfZmlsdGVy
KG9wdGlvbnMuZmlsdGVyKQogCiAKICMgVGhpcyBjbGFzcyBzaG91bGQgbm90IGhhdmUga25vd2xl
ZGdlIG9mIHRoZSBmbGFnIGtleSBuYW1lcy4KQEAgLTMyOCw4ICszODksMTEgQEAgY2xhc3MgQXJn
dW1lbnRQcmludGVyKG9iamVjdCk6CiAKICAgICAgICAgZmxhZ3NbJ291dHB1dCddID0gb3B0aW9u
cy5vdXRwdXRfZm9ybWF0CiAgICAgICAgIGZsYWdzWyd2ZXJib3NlJ10gPSBvcHRpb25zLnZlcmJv
c2l0eQotICAgICAgICBpZiBvcHRpb25zLmZpbHRlcl9ydWxlczoKLSAgICAgICAgICAgIGZsYWdz
WydmaWx0ZXInXSA9ICcsJy5qb2luKG9wdGlvbnMuZmlsdGVyX3J1bGVzKQorICAgICAgICBpZiBv
cHRpb25zLmZpbHRlcjoKKyAgICAgICAgICAgICMgT25seSBpbmNsdWRlIHRoZSBmaWx0ZXIgZmxh
ZyBpZiBydWxlcyBhcmUgcHJlc2VudC4KKyAgICAgICAgICAgIGZpbHRlcl9zdHJpbmcgPSBzdHIo
b3B0aW9ucy5maWx0ZXIpCisgICAgICAgICAgICBpZiBmaWx0ZXJfc3RyaW5nOgorICAgICAgICAg
ICAgICAgIGZsYWdzWydmaWx0ZXInXSA9IGZpbHRlcl9zdHJpbmcKICAgICAgICAgaWYgb3B0aW9u
cy5naXRfY29tbWl0OgogICAgICAgICAgICAgZmxhZ3NbJ2dpdC1jb21taXQnXSA9IG9wdGlvbnMu
Z2l0X2NvbW1pdAogCkBAIC00OTEsMTMgKzU1NSw5IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyKG9i
amVjdCk6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbnZhbGlkIC0tdmVyYm9zZSB2
YWx1ZSAlczogdmFsdWUgbXVzdCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZSBi
ZXR3ZWVuIDEtNS4nICUgdmVyYm9zaXR5KQogCi0gICAgICAgIGZvciBydWxlIGluIGZpbHRlcl9y
dWxlczoKLSAgICAgICAgICAgIGlmIG5vdCAocnVsZS5zdGFydHN3aXRoKCcrJykgb3IgcnVsZS5z
dGFydHN3aXRoKCctJykpOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFs
aWQgZmlsdGVyIHJ1bGUgIiVzIjogZXZlcnkgcnVsZSAnCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAncnVsZSBpbiB0aGUgLS1maWx0ZXIgZmxhZyBtdXN0IHN0YXJ0ICcKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoICsgb3IgLS4nICUgcnVsZSkKKyAgICAg
ICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoZmlsdGVyX3J1bGVzKQogCi0gICAgICAgIG9wdGlv
bnMgPSBQcm9jZXNzb3JPcHRpb25zKG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0eSwgZmlsdGVyX3J1
bGVzLAorICAgICAgICBvcHRpb25zID0gUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2
ZXJib3NpdHksIGZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0
X2NvbW1pdCwgZXh0cmFfZmxhZ192YWx1ZXMpCiAKICAgICAgICAgcmV0dXJuIChmaWxlbmFtZXMs
IG9wdGlvbnMpCkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiA1MzA1MykKKysrIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91
bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsOCBAQCBjbGFzcyBEZWZhdWx0
QXJndW1lbnRzVGVzdCh1bml0dGVzdC5UZXN0CiAgICAgZGVmIHRlc3RfZmlsdGVyX3J1bGVzKHNl
bGYpOgogICAgICAgICBhbHJlYWR5X3NlZW4gPSBbXQogICAgICAgICBmb3IgcnVsZSBpbiBzdHls
ZS5XRUJLSVRfRklMVEVSX1JVTEVTOgorICAgICAgICAgICAgIyBDaGVjayBubyBsZWFkaW5nIG9y
IHRyYWlsaW5nIHdoaXRlIHNwYWNlLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocnVs
ZSwgcnVsZS5zdHJpcCgpKQogICAgICAgICAgICAgIyBBbGwgY2F0ZWdvcmllcyBhcmUgb24gYnkg
ZGVmYXVsdCwgc28gZGVmYXVsdHMgc2hvdWxkCiAgICAgICAgICAgICAjIGJlZ2luIHdpdGggLS4K
ICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydWxlLnN0YXJ0c3dpdGgoJy0nKSkKQEAgLTc1
LDcgKzc3LDggQEAgY2xhc3MgQXJndW1lbnRQcmludGVyVGVzdCh1bml0dGVzdC5UZXN0QwogICAg
IGRlZiBfY3JlYXRlX29wdGlvbnMoc2VsZiwgb3V0cHV0X2Zvcm1hdD0nZW1hY3MnLCB2ZXJib3Np
dHk9MywKICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcl9ydWxlcz1bXSwgZ2l0X2NvbW1p
dD1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9e30pOgot
ICAgICAgICByZXR1cm4gc3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJi
b3NpdHksIGZpbHRlcl9ydWxlcywKKyAgICAgICAgZmlsdGVyID0gc3R5bGUuQ2F0ZWdvcnlGaWx0
ZXIoZmlsdGVyX3J1bGVzKQorICAgICAgICByZXR1cm4gc3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhv
dXRwdXRfZm9ybWF0LCB2ZXJib3NpdHksIGZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ2l0X2NvbW1pdCwgZXh0cmFfZmxhZ192YWx1ZXMpCiAKICAgICBkZWYg
dGVzdF90b19mbGFnX3N0cmluZyhzZWxmKToKQEAgLTE3Myw3ICsxNzYsOCBAQCBjbGFzcyBBcmd1
bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0LCAndnM3JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMob3B0aW9ucy52ZXJib3NpdHksIDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlv
bnMuZmlsdGVyX3J1bGVzLCBbJy0nLCAnK3doaXRlc3BhY2UnXSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMob3B0aW9ucy5maWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
LkNhdGVnb3J5RmlsdGVyKFsiLSIsICIrd2hpdGVzcGFjZSJdKSkKICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0LCBOb25lKQogCiAgICAgZGVmIHRlc3RfcGFyc2Vf
ZXhwbGljaXRfYXJndW1lbnRzKHNlbGYpOgpAQCAtMTg3LDggKzE5MSw4IEBAIGNsYXNzIEFyZ3Vt
ZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2EKICAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9
IHBhcnNlKFsnLS1naXQtY29tbWl0PWNvbW1pdCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFs
cyhvcHRpb25zLmdpdF9jb21taXQsICdjb21taXQnKQogICAgICAgICAoZmlsZXMsIG9wdGlvbnMp
ID0gcGFyc2UoWyctLWZpbHRlcj0rZm9vLC1iYXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMob3B0aW9ucy5maWx0ZXJfcnVsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsnLScs
ICcrd2hpdGVzcGFjZScsICcrZm9vJywgJy1iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMob3B0aW9ucy5maWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLkNhdGVn
b3J5RmlsdGVyKFsiLSIsICIrd2hpdGVzcGFjZSIsICIrZm9vIiwgIi1iYXIiXSkpCiAKICAgICAg
ICAgIyBQYXNzIGV4dHJhIGZsYWcgdmFsdWVzLgogICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0g
cGFyc2UoWyctLWV4dHJhJ10sIFsnZXh0cmEnXSkKSW5kZXg6IFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY3BwX3N0eWxlLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3Bw
X3N0eWxlLnB5CShyZXZpc2lvbiA1MzA1MykKKysrIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3Bw
X3N0eWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsOCArMjQ4LDggQEAgY2xhc3MgX0NwcFN0
eWxlU3RhdGUob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYu
dmVyYm9zZV9sZXZlbCA9IDEgICMgZ2xvYmFsIHNldHRpbmcuCiAgICAgICAgIHNlbGYuZXJyb3Jf
Y291bnQgPSAwICAgICMgZ2xvYmFsIGNvdW50IG9mIHJlcG9ydGVkIGVycm9ycwotICAgICAgICAj
IGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBlbWl0dGluZyBlcnJvciBtZXNzYWdlcwotICAgICAgICBz
ZWxmLmZpbHRlcnMgPSBbXQorICAgICAgICAjIGZpbHRlciB0byBhcHBseSB3aGVuIGVtaXR0aW5n
IGVycm9yIG1lc3NhZ2VzCisgICAgICAgIHNlbGYuZmlsdGVyID0gTm9uZQogCiAgICAgICAgICMg
b3V0cHV0IGZvcm1hdDoKICAgICAgICAgIyAiZW1hY3MiIC0gZm9ybWF0IHRoYXQgZW1hY3MgY2Fu
IHBhcnNlIChkZWZhdWx0KQpAQCAtMjY2LDMyICsyNjYsMTQgQEAgY2xhc3MgX0NwcFN0eWxlU3Rh
dGUob2JqZWN0KToKICAgICAgICAgc2VsZi52ZXJib3NlX2xldmVsID0gbGV2ZWwKICAgICAgICAg
cmV0dXJuIGxhc3RfdmVyYm9zZV9sZXZlbAogCi0gICAgZGVmIHNldF9maWx0ZXJzKHNlbGYsIGZp
bHRlcnMpOgotICAgICAgICAiIiJTZXRzIHRoZSBlcnJvci1tZXNzYWdlIGZpbHRlcnMuCi0KLSAg
ICAgICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8g
ZW1pdCBhIGdpdmVuCi0gICAgICAgIGVycm9yIG1lc3NhZ2UuCisgICAgZGVmIHNldF9maWx0ZXIo
c2VsZiwgZmlsdGVyKToKKyAgICAgICAgIiIiU2V0cyB0aGUgZXJyb3ItbWVzc2FnZSBmaWx0ZXIu
CiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICBmaWx0ZXJzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0
aGF0IGFyZSBib29sZWFuIGZpbHRlciBydWxlcyB1c2VkCi0gICAgICAgICAgICAgICAgICAgdG8g
ZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdHlsZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZC4KLSAg
ICAgICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFu
IGV4YW1wbGUKLSAgICAgICAgICAgICAgICAgICBzdHJpbmcgaXMgIit3aGl0ZXNwYWNlL2luZGVu
dCIuIFRoZSBsaXN0IGluY2x1ZGVzIGFueQotICAgICAgICAgICAgICAgICAgIHByZXBlbmRlZCBk
ZWZhdWx0IGZpbHRlciBydWxlcy4KLQotICAgICAgICBSYWlzZXM6Ci0gICAgICAgICAgVmFsdWVF
cnJvcjogTm90IGFsbCBmaWx0ZXJzIHN0YXJ0ZWQgd2l0aCAnKycgb3IgJy0nLiBGb3IgZXhhbXBs
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAiLSwrd2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRl
bnQsd2hpdGVzcGFjZS9iYWRmaWx0ZXIiCisgICAgICAgICAgZmlsdGVyOiBBIENhdGVnb3J5Rmls
dGVyIGluc3RhbmNlLgorCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZpbHRlcnMgPSBbXQot
ICAgICAgICBmb3IgZmlsdGVyIGluIGZpbHRlcnM6Ci0gICAgICAgICAgICBjbGVhbl9maWx0ZXIg
PSBmaWx0ZXIuc3RyaXAoKQotICAgICAgICAgICAgaWYgY2xlYW5fZmlsdGVyOgotICAgICAgICAg
ICAgICAgIHNlbGYuZmlsdGVycy5hcHBlbmQoY2xlYW5fZmlsdGVyKQotICAgICAgICBmb3IgZmls
dGVyIGluIHNlbGYuZmlsdGVyczoKLSAgICAgICAgICAgIGlmIG5vdCAoZmlsdGVyLnN0YXJ0c3dp
dGgoJysnKSBvciBmaWx0ZXIuc3RhcnRzd2l0aCgnLScpKToKLSAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdFdmVyeSBmaWx0ZXIgaW4gLS1maWx0ZXIgbXVzdCBzdGFydCB3aXRoICcK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrIG9yIC0gKCVzIGRvZXMgbm90KScg
JSBmaWx0ZXIpCisgICAgICAgIHNlbGYuZmlsdGVyID0gZmlsdGVyCiAKICAgICBkZWYgcmVzZXRf
ZXJyb3JfY291bnQoc2VsZik6CiAgICAgICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yIHN0
YXRpc3RpYyBiYWNrIHRvIHplcm8uIiIiCkBAIC0zMjUsMjUgKzMwNywyMiBAQCBkZWYgX3NldF92
ZXJib3NlX2xldmVsKGxldmVsKToKICAgICByZXR1cm4gX2NwcF9zdHlsZV9zdGF0ZS5zZXRfdmVy
Ym9zZV9sZXZlbChsZXZlbCkKIAogCi1kZWYgX2ZpbHRlcnMoKToKLSAgICAiIiJSZXR1cm5zIHRo
ZSBtb2R1bGUncyBsaXN0IG9mIG91dHB1dCBmaWx0ZXJzLCBhcyBhIGxpc3QuIiIiCi0gICAgcmV0
dXJuIF9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycworZGVmIF9maWx0ZXIoKToKKyAgICAiIiJSZXR1
cm5zIHRoZSBtb2R1bGUncyBDYXRlZ29yeUZpbHRlciBpbnN0YW5jZS4iIiIKKyAgICByZXR1cm4g
X2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXIKIAogCi1kZWYgX3NldF9maWx0ZXJzKGZpbHRlcnMpOgot
ICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yLW1lc3NhZ2UgZmlsdGVycy4KK2RlZiBfc2V0
X2ZpbHRlcihmaWx0ZXIpOgorICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yLW1lc3NhZ2Ug
ZmlsdGVyLgogCi0gICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdo
ZXRoZXIgdG8gZW1pdCBhIGdpdmVuCisgICAgVGhlIGZpbHRlciBpcyBhcHBsaWVkIHdoZW4gZGVj
aWRpbmcgd2hldGhlciB0byBlbWl0IGEgZ2l2ZW4KICAgICBlcnJvciBtZXNzYWdlLgogCiAgICAg
QXJnczoKLSAgICAgIGZpbHRlcnM6IEEgbGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4g
ZmlsdGVyIHJ1bGVzIHVzZWQKLSAgICAgICAgICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGEg
c3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCi0gICAgICAgICAgICAgICBFYWNoIHN0
cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4YW1wbGUKLSAgICAgICAgICAgICAg
IHN0cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50Ii4gVGhlIGxpc3QgaW5jbHVkZXMgYW55Ci0g
ICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIgcnVsZXMuCisgICAgICBmaWx0
ZXI6IEEgQ2F0ZWdvcnlGaWx0ZXIgaW5zdGFuY2UuCisKICAgICAiIiIKLSAgICBfY3BwX3N0eWxl
X3N0YXRlLnNldF9maWx0ZXJzKGZpbHRlcnMpCisgICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmls
dGVyKGZpbHRlcikKIAogCiBkZWYgZXJyb3JfY291bnQoKToKQEAgLTUwNSwyMCArNDg0LDEyIEBA
IGRlZiBfc2hvdWxkX3ByaW50X2Vycm9yKGNhdGVnb3J5LCBjb25maWQKICAgICBpZiBjb25maWRl
bmNlIDwgX2NwcF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xldmVsOgogICAgICAgICByZXR1cm4gRmFs
c2UKIAotICAgIGlzX2ZpbHRlcmVkID0gRmFsc2UKLSAgICBmb3Igb25lX2ZpbHRlciBpbiBfZmls
dGVycygpOgotICAgICAgICBpZiBvbmVfZmlsdGVyLnN0YXJ0c3dpdGgoJy0nKToKLSAgICAgICAg
ICAgIGlmIGNhdGVnb3J5LnN0YXJ0c3dpdGgob25lX2ZpbHRlclsxOl0pOgotICAgICAgICAgICAg
ICAgIGlzX2ZpbHRlcmVkID0gVHJ1ZQotICAgICAgICBlbGlmIG9uZV9maWx0ZXIuc3RhcnRzd2l0
aCgnKycpOgotICAgICAgICAgICAgaWYgY2F0ZWdvcnkuc3RhcnRzd2l0aChvbmVfZmlsdGVyWzE6
XSk6Ci0gICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQgPSBGYWxzZQotICAgICAgICBlbHNlOgot
ICAgICAgICAgICAgYXNzZXJ0IEZhbHNlICAjIHNob3VsZCBoYXZlIGJlZW4gY2hlY2tlZCBmb3Ig
aW4gc2V0X2ZpbHRlci4KLSAgICBpZiBpc19maWx0ZXJlZDoKLSAgICAgICAgcmV0dXJuIEZhbHNl
CisgICAgZmlsdGVyID0gX2ZpbHRlcigpCiAKLSAgICByZXR1cm4gVHJ1ZQorICAgIGlmIGZpbHRl
ciBpcyBOb25lOgorICAgICAgICByZXR1cm4gVHJ1ZSAjIEFsbCBjYXRlZ29yaWVzIHNob3VsZCBi
ZSBjaGVja2VkIGJ5IGRlZmF1bHQuCisKKyAgICByZXR1cm4gZmlsdGVyLnNob3VsZF9jaGVjayhj
YXRlZ29yeSkKIAogCiBkZWYgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwg
Y29uZmlkZW5jZSwgbWVzc2FnZSk6CkluZGV4OiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NwcF9z
dHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2Nw
cF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTMwNTMpCisrKyBTY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQx
LDExIEBAIGltcG9ydCByYW5kb20KIGltcG9ydCByZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQg
Y3BwX3N0eWxlCi0jIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgdG8gaW1wb3J0IHNvbWV0aGluZyBm
cm9tIGNoZWNrZXIuIFNlZSB0aGUKKyMgRklYTUU6IFJlbW92ZSB0aGUgbmVlZCB0byBpbXBvcnQg
YW55dGhpbmcgZnJvbSBjaGVja2VyLiBTZWUgdGhlCiAjICAgICAgICBGSVhNRSBub3RlcyBuZWFy
IHRoZSBTVFlMRV9DQVRFR09SSUVTIGRlZmluaXRpb24gZm9yIGEKICMgICAgICAgIHN1Z2dlc3Rp
b24gb24gaG93IHRvIGJlc3QgZG8gdGhpcy4KIGZyb20gY2hlY2tlciBpbXBvcnQgU1RZTEVfQ0FU
RUdPUklFUworZnJvbSBjaGVja2VyIGltcG9ydCBDYXRlZ29yeUZpbHRlcgogCiAjIFRoaXMgY2xh
c3Mgd29ya3MgYXMgYW4gZXJyb3IgY29sbGVjdG9yIGFuZCByZXBsYWNlcyBjcHBfc3R5bGUuRXJy
b3IKICMgZnVuY3Rpb24gZm9yIHRoZSB1bml0IHRlc3RzLiAgV2UgYWxzbyB2ZXJpZnkgZWFjaCBj
YXRlZ29yeSB3ZSBzZWUKQEAgLTE1NzEsOSArMTU3Miw5IEBAIGNsYXNzIENwcFN0eWxlVGVzdChD
cHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFiIGZvdW5kOyBi
ZXR0ZXIgdG8gdXNlIHNwYWNlcyAgW3doaXRlc3BhY2UvdGFiXSBbMV0nKQogCiAgICAgZGVmIHRl
c3RfZmlsdGVyKHNlbGYpOgotICAgICAgICBvbGRfZmlsdGVycyA9IGNwcF9zdHlsZS5fY3BwX3N0
eWxlX3N0YXRlLmZpbHRlcnMKKyAgICAgICAgb2xkX2ZpbHRlciA9IGNwcF9zdHlsZS5fY3BwX3N0
eWxlX3N0YXRlLmZpbHRlcgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUuX2Nw
cF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhbJy0nLCAnK3doaXRlc3BhY2UnLCAnLXdoaXRlc3Bh
Y2UvaW5kZW50J10pCisgICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRf
ZmlsdGVyKENhdGVnb3J5RmlsdGVyKFsnLScsICcrd2hpdGVzcGFjZScsICctd2hpdGVzcGFjZS9p
bmRlbnQnXSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KAogICAgICAgICAgICAgICAg
ICcvLyBIZWxsbyB0aGVyZSAnLAogICAgICAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVz
cGFjZS4gIENvbnNpZGVyIGRlbGV0aW5nIHRoZXNlIGV4dHJhIHNwYWNlcy4nCkBAIC0xNTgxLDIy
ICsxNTgyLDIyIEBAIGNsYXNzIENwcFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhID0gKGludCkxLjA7JywgJycpCiAgICAgICAg
ICAgICBzZWxmLmFzc2VydF9saW50KCcgd2VpcmQgb3BlbmluZyBzcGFjZScsICcnKQogICAgICAg
ICBmaW5hbGx5OgotICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVy
cyA9IG9sZF9maWx0ZXJzCisgICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5m
aWx0ZXIgPSBvbGRfZmlsdGVyCiAKICAgICBkZWYgdGVzdF9maWx0ZXJfYXBwZW5kaW5nKHNlbGYp
OgotICAgICAgICBvbGRfZmlsdGVycyA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRl
cnMKKyAgICAgICAgb2xkX2ZpbHRlciA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRl
cgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIFJlc2V0IGZpbHRlcnMKLSAgICAgICAgICAg
IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXJzKFsnLXdoaXRlc3BhY2UnXSkK
KyAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXIoQ2F0ZWdv
cnlGaWx0ZXIoWyctd2hpdGVzcGFjZSddKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
Jy8vIEhlbGxvIHRoZXJlICcsICcnKQotICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVf
c3RhdGUuc2V0X2ZpbHRlcnMoWyctd2hpdGVzcGFjZScsICcrd2hpdGVzcGFjZS9lbmRfb2ZfbGlu
ZSddKQorICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcihD
YXRlZ29yeUZpbHRlcihbJy13aGl0ZXNwYWNlJywgJyt3aGl0ZXNwYWNlL2VuZF9vZl9saW5lJ10p
KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgKICAgICAgICAgICAgICAgICAnLy8gSGVs
bG8gdGhlcmUgJywKICAgICAgICAgICAgICAgICAnTGluZSBlbmRzIGluIHdoaXRlc3BhY2UuICBD
b25zaWRlciBkZWxldGluZyB0aGVzZSBleHRyYSBzcGFjZXMuJwogICAgICAgICAgICAgICAgICcg
IFt3aGl0ZXNwYWNlL2VuZF9vZl9saW5lXSBbNF0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRf
bGludCgnIHdlaXJkIG9wZW5pbmcgc3BhY2UnLCAnJykKICAgICAgICAgZmluYWxseToKLSAgICAg
ICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMgPSBvbGRfZmlsdGVycwor
ICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVyID0gb2xkX2ZpbHRl
cgogCiAgICAgZGVmIHRlc3RfdW5uYW1lZF9uYW1lc3BhY2VzX2luX2hlYWRlcnMoc2VsZik6CiAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVzX2NoZWNrKAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46258</attachid>
            <date>2010-01-10 21:51:15 -0800</date>
            <delta_ts>2010-01-11 00:14:33 -0800</delta_ts>
            <desc>Proposed patch 2</desc>
            <filename>patch-tools3-1.txt</filename>
            <type>text/plain</type>
            <size>18362</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDUzMDU1
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDEt
MTAgIENocmlzIEplcmRvbmVrICA8Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENyZWF0ZWQgYSBDYXRlZ29y
eUZpbHRlciBjbGFzcyB0byBlbmNhcHN1bGF0ZSB0aGUgbG9naWMgb2YKKyAgICAgICAgZmlsdGVy
IHJ1bGVzLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zMzQ1NAorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Ogor
ICAgICAgICAgIC0gQWRkZWQgQ2F0ZWdvcnlGaWx0ZXIgY2xhc3MuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBBZGRl
ZCBDYXRlZ29yeUZpbHRlciB1bml0IHRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRw
eS9zdHlsZS9jcHBfc3R5bGUucHk6CisgICAgICAgICAgLSBVcGRhdGVkIGZpbHRlciBtZXRob2Rz
IHRvIHVzZSBDYXRlZ29yeUZpbHRlci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY3BwX3N0eWxlX3VuaXR0ZXN0LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCByZWZlcmVuY2Vz
IHRvIGZpbHRlcnMuCisKIDIwMTAtMDEtMTAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KIAogICAgICAgICBVbnJldmlld2VkIGNvc21ldGljIGNoYW5nZS4gIFJlbW92ZSB0aGUgc3Rh
dHVzIGJ1YmJsZSBmb3IgbWFjLWV3cwpJbmRleDogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVj
a2VyLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQko
cmV2aXNpb24gNTMwNTMpCisrKyBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkJKHdv
cmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNzEgQEAgU3ludGF4OiAlKHByb2dyYW1fbmFtZSlz
IFstLXZlcmJvc2U9I10gWwogICAgIHJldHVybiB1c2FnZQogCiAKK2NsYXNzIENhdGVnb3J5Rmls
dGVyKG9iamVjdCk6CisKKyAgICAiIiJGaWx0ZXJzIHdoZXRoZXIgdG8gY2hlY2sgc3R5bGUgY2F0
ZWdvcmllcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0ZXJfcnVsZXMpOgorICAg
ICAgICAiIiJDcmVhdGUgYSBjYXRlZ29yeSBmaWx0ZXIuCisKKyAgICAgICAgVGhpcyBtZXRob2Qg
cGVyZm9ybXMgYXJndW1lbnQgdmFsaWRhdGlvbiBidXQgZG9lcyBub3Qgc3RyaXAKKyAgICAgICAg
bGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKworICAgICAgICBBcmdzOgorICAgICAg
ICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgZmlsdGVyIHJ1bGVz
LCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHN0cmluZ3MgYmVnaW5uaW5nIHdp
dGggdGhlIHBsdXMgb3IgbWludXMKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbCAoKy8t
KS4gVGhlIGxpc3Qgc2hvdWxkIGluY2x1ZGUgYW55CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZWZhdWx0IGZpbHRlciBydWxlcyBhdCB0aGUgYmVnaW5uaW5nLgorCisgICAgICAgIFJhaXNlczoK
KyAgICAgICAgICBWYWx1ZUVycm9yOiBJbnZhbGlkIGZpbHRlciBydWxlIGlmIGEgcnVsZSBkb2Vz
IG5vdCBzdGFydCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgcGx1cyAoIisiKSBvciBtaW51
cyAoIi0iKS4KKworICAgICAgICAiIiIKKyAgICAgICAgZm9yIHJ1bGUgaW4gZmlsdGVyX3J1bGVz
OgorICAgICAgICAgICAgaWYgbm90IChydWxlLnN0YXJ0c3dpdGgoJysnKSBvciBydWxlLnN0YXJ0
c3dpdGgoJy0nKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBm
aWx0ZXIgcnVsZSAiJXMiOiBldmVyeSBydWxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdydWxlIGluIHRoZSAtLWZpbHRlciBmbGFnIG11c3Qgc3RhcnQgJworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggKyBvciAtLicgJSBydWxlKQorCisgICAgICAg
IHNlbGYuX2ZpbHRlcl9ydWxlcyA9IGZpbHRlcl9ydWxlcworICAgICAgICBzZWxmLl9zaG91bGRf
Y2hlY2tfY2F0ZWdvcnkgPSB7fSAjIENhY2hlZCBkaWN0aW9uYXJ5IG9mIGNhdGVnb3J5IHRvIFRy
dWUvRmFsc2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiwiLmpv
aW4oc2VsZi5fZmlsdGVyX3J1bGVzKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Cisg
ICAgICAgICMgVGhpcyBpcyB1c2VmdWwgZm9yIHVuaXQgdGVzdGluZy4KKyAgICAgICAgIyBUd28g
Y2F0ZWdvcnkgZmlsdGVycyBhcmUgdGhlIHNhbWUgaWYgYW5kIG9ubHkgaWYgdGhlaXIKKyAgICAg
ICAgIyBjb25zdGl0dWVudCBmaWx0ZXIgcnVsZXMgYXJlIHRoZSBzYW1lLgorICAgICAgICByZXR1
cm4gKHN0cihzZWxmKSA9PSBzdHIob3RoZXIpKQorCisgICAgZGVmIHNob3VsZF9jaGVjayhzZWxm
LCBjYXRlZ29yeSk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBjYXRlZ29yeSBzaG91
bGQgYmUgY2hlY2tlZC4KKworICAgICAgICBUaGUgcnVsZXMgZm9yIGRldGVybWluaW5nIHdoZXRo
ZXIgYSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZAorICAgICAgICBhcmUgYXMgZm9sbG93cy4g
QnkgZGVmYXVsdCBhbGwgY2F0ZWdvcmllcyBzaG91bGQgYmUgY2hlY2tlZC4KKyAgICAgICAgVGhl
biBhcHBseSB0aGUgZmlsdGVyIHJ1bGVzIGluIG9yZGVyIGZyb20gZmlyc3QgdG8gbGFzdCwgd2l0
aAorICAgICAgICBsYXRlciBmbGFncyB0YWtpbmcgcHJlY2VkZW5jZS4KKworICAgICAgICBBIGZp
bHRlciBydWxlIGFwcGxpZXMgdG8gYSBjYXRlZ29yeSBpZiB0aGUgc3RyaW5nIGFmdGVyIHRoZQor
ICAgICAgICBsZWFkaW5nIHBsdXMvbWludXMgKCsvLSkgbWF0Y2hlcyB0aGUgYmVnaW5uaW5nIG9m
IHRoZSBjYXRlZ29yeQorICAgICAgICBuYW1lLiBBIHBsdXMgKCspIG1lYW5zIHRoZSBjYXRlZ29y
eSBzaG91bGQgYmUgY2hlY2tlZCwgd2hpbGUgYQorICAgICAgICBtaW51cyAoLSkgbWVhbnMgdGhl
IGNhdGVnb3J5IHNob3VsZCBub3QgYmUgY2hlY2tlZC4KKworICAgICAgICAiIiIKKyAgICAgICAg
aWYgY2F0ZWdvcnkgaW4gc2VsZi5fc2hvdWxkX2NoZWNrX2NhdGVnb3J5OgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuX3Nob3VsZF9jaGVja19jYXRlZ29yeVtjYXRlZ29yeV0KKworICAgICAgICBz
aG91bGRfY2hlY2sgPSBUcnVlICMgQWxsIGNhdGVnb3JpZXMgY2hlY2tlZCBieSBkZWZhdWx0Lgor
ICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLl9maWx0ZXJfcnVsZXM6CisgICAgICAgICAgICBpZiBu
b3QgY2F0ZWdvcnkuc3RhcnRzd2l0aChydWxlWzE6XSk6CisgICAgICAgICAgICAgICAgY29udGlu
dWUKKyAgICAgICAgICAgIHNob3VsZF9jaGVjayA9IHJ1bGUuc3RhcnRzd2l0aCgnKycpCisgICAg
ICAgIHNlbGYuX3Nob3VsZF9jaGVja19jYXRlZ29yeVtjYXRlZ29yeV0gPSBzaG91bGRfY2hlY2sg
IyBVcGRhdGUgY2FjaGUuCisgICAgICAgIHJldHVybiBzaG91bGRfY2hlY2sKKworCiAjIFRoaXMg
Y2xhc3Mgc2hvdWxkIG5vdCBoYXZlIGtub3dsZWRnZSBvZiB0aGUgZmxhZyBrZXkgbmFtZXMuCiBj
bGFzcyBQcm9jZXNzb3JPcHRpb25zKG9iamVjdCk6CiAKQEAgLTI0NCwxMiArMzA5LDggQEAgY2xh
c3MgUHJvY2Vzc29yT3B0aW9ucyhvYmplY3QpOgogICAgICAgICAgICAgICAgICBjb25maWRlbmNl
IHNjb3JlIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUuCiAgICAgICAgICAgICAgICAgIFRoZSBkZWZh
dWx0IGlzIDEsIHdoaWNoIGRpc3BsYXlzIGFsbCBlcnJvcnMuCiAKLSAgICAgIGZpbHRlcl9ydWxl
czogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVhbiBmaWx0ZXIgcnVsZXMgdXNlZAot
ICAgICAgICAgICAgICAgICAgICB0byBkZXRlcm1pbmUgd2hldGhlciBhIHN0eWxlIGNhdGVnb3J5
IHNob3VsZCBiZSBjaGVja2VkLgotICAgICAgICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91
bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4YW1wbGUKLSAgICAgICAgICAgICAgICAgICAgc3Ry
aW5nIGlzICIrd2hpdGVzcGFjZS9pbmRlbnQiLiBUaGUgbGlzdCBpbmNsdWRlcyBhbnkKLSAgICAg
ICAgICAgICAgICAgICAgcHJlcGVuZGVkIGRlZmF1bHQgZmlsdGVyIHJ1bGVzLiBUaGUgZGVmYXVs
dCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgZW1wdHkgbGlzdCwgd2hpY2ggaW5jbHVkZXMg
YWxsIGNhdGVnb3JpZXMuCisgICAgICBmaWx0ZXI6IEEgQ2F0ZWdvcnlGaWx0ZXIgaW5zdGFuY2Uu
IFRoZSBkZWZhdWx0IGlzIHRoZSBlbXB0eSBmaWx0ZXIsCisgICAgICAgICAgICAgIHdoaWNoIG1l
YW5zIHRoYXQgYWxsIGNhdGVnb3JpZXMgc2hvdWxkIGJlIGNoZWNrZWQuCiAKICAgICAgIGdpdF9j
b21taXQ6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l0IGNvbW1pdCB0byBjaGVjay4KICAg
ICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIE5vbmUuCkBAIC0yNTksMTYgKzMyMCwxNiBA
QCBjbGFzcyBQcm9jZXNzb3JPcHRpb25zKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2xhc3MuIFRoZSBkZWZhdWx0IGlzIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LgogICAgICIiIgog
Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0eT0xLCBmaWx0
ZXJfcnVsZXM9Tm9uZSwKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0cHV0X2Zvcm1hdCwgdmVy
Ym9zaXR5PTEsIGZpbHRlcj1Ob25lLAogICAgICAgICAgICAgICAgICBnaXRfY29tbWl0PU5vbmUs
IGV4dHJhX2ZsYWdfdmFsdWVzPU5vbmUpOgotICAgICAgICBpZiBmaWx0ZXJfcnVsZXMgaXMgTm9u
ZToKLSAgICAgICAgICAgIGZpbHRlcl9ydWxlcyA9IFtdCisgICAgICAgIGlmIGZpbHRlciBpcyBO
b25lOgorICAgICAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoW10pCiAgICAgICAgIGlm
IGV4dHJhX2ZsYWdfdmFsdWVzIGlzIE5vbmU6CiAgICAgICAgICAgICBleHRyYV9mbGFnX3ZhbHVl
cyA9IHt9CiAKICAgICAgICAgc2VsZi5vdXRwdXRfZm9ybWF0ID0gb3V0cHV0X2Zvcm1hdAogICAg
ICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQotICAgICAgICBzZWxmLmZpbHRlcl9ydWxl
cyA9IGZpbHRlcl9ydWxlcworICAgICAgICBzZWxmLmZpbHRlciA9IGZpbHRlcgogICAgICAgICBz
ZWxmLmdpdF9jb21taXQgPSBnaXRfY29tbWl0CiAgICAgICAgIHNlbGYuZXh0cmFfZmxhZ192YWx1
ZXMgPSBleHRyYV9mbGFnX3ZhbHVlcwogCkBAIC0yODUsNyArMzQ2LDcgQEAgZGVmIHNldF9vcHRp
b25zKG9wdGlvbnMpOgogICAgICIiIgogICAgIGNwcF9zdHlsZS5fc2V0X291dHB1dF9mb3JtYXQo
b3B0aW9ucy5vdXRwdXRfZm9ybWF0KQogICAgIGNwcF9zdHlsZS5fc2V0X3ZlcmJvc2VfbGV2ZWwo
b3B0aW9ucy52ZXJib3NpdHkpCi0gICAgY3BwX3N0eWxlLl9zZXRfZmlsdGVycyhvcHRpb25zLmZp
bHRlcl9ydWxlcykKKyAgICBjcHBfc3R5bGUuX3NldF9maWx0ZXIob3B0aW9ucy5maWx0ZXIpCiAK
IAogIyBUaGlzIGNsYXNzIHNob3VsZCBub3QgaGF2ZSBrbm93bGVkZ2Ugb2YgdGhlIGZsYWcga2V5
IG5hbWVzLgpAQCAtMzI4LDggKzM4OSwxMSBAQCBjbGFzcyBBcmd1bWVudFByaW50ZXIob2JqZWN0
KToKIAogICAgICAgICBmbGFnc1snb3V0cHV0J10gPSBvcHRpb25zLm91dHB1dF9mb3JtYXQKICAg
ICAgICAgZmxhZ3NbJ3ZlcmJvc2UnXSA9IG9wdGlvbnMudmVyYm9zaXR5Ci0gICAgICAgIGlmIG9w
dGlvbnMuZmlsdGVyX3J1bGVzOgotICAgICAgICAgICAgZmxhZ3NbJ2ZpbHRlciddID0gJywnLmpv
aW4ob3B0aW9ucy5maWx0ZXJfcnVsZXMpCisgICAgICAgIGlmIG9wdGlvbnMuZmlsdGVyOgorICAg
ICAgICAgICAgIyBPbmx5IGluY2x1ZGUgdGhlIGZpbHRlciBmbGFnIGlmIHJ1bGVzIGFyZSBwcmVz
ZW50LgorICAgICAgICAgICAgZmlsdGVyX3N0cmluZyA9IHN0cihvcHRpb25zLmZpbHRlcikKKyAg
ICAgICAgICAgIGlmIGZpbHRlcl9zdHJpbmc6CisgICAgICAgICAgICAgICAgZmxhZ3NbJ2ZpbHRl
ciddID0gZmlsdGVyX3N0cmluZwogICAgICAgICBpZiBvcHRpb25zLmdpdF9jb21taXQ6CiAgICAg
ICAgICAgICBmbGFnc1snZ2l0LWNvbW1pdCddID0gb3B0aW9ucy5naXRfY29tbWl0CiAKQEAgLTQ5
MSwxMyArNTU1LDkgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0KToKICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgLS12ZXJib3NlIHZhbHVlICVzOiB2YWx1ZSBtdXN0
ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlIGJldHdlZW4gMS01LicgJSB2ZXJi
b3NpdHkpCiAKLSAgICAgICAgZm9yIHJ1bGUgaW4gZmlsdGVyX3J1bGVzOgotICAgICAgICAgICAg
aWYgbm90IChydWxlLnN0YXJ0c3dpdGgoJysnKSBvciBydWxlLnN0YXJ0c3dpdGgoJy0nKSk6Ci0g
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBmaWx0ZXIgcnVsZSAiJXMi
OiBldmVyeSBydWxlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydWxlIGlu
IHRoZSAtLWZpbHRlciBmbGFnIG11c3Qgc3RhcnQgJwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3dpdGggKyBvciAtLicgJSBydWxlKQorICAgICAgICBmaWx0ZXIgPSBDYXRlZ29y
eUZpbHRlcihmaWx0ZXJfcnVsZXMpCiAKLSAgICAgICAgb3B0aW9ucyA9IFByb2Nlc3Nvck9wdGlv
bnMob3V0cHV0X2Zvcm1hdCwgdmVyYm9zaXR5LCBmaWx0ZXJfcnVsZXMsCisgICAgICAgIG9wdGlv
bnMgPSBQcm9jZXNzb3JPcHRpb25zKG91dHB1dF9mb3JtYXQsIHZlcmJvc2l0eSwgZmlsdGVyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29tbWl0LCBleHRyYV9mbGFn
X3ZhbHVlcykKIAogICAgICAgICByZXR1cm4gKGZpbGVuYW1lcywgb3B0aW9ucykKSW5kZXg6IFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUzMDUz
KQorKysgU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0zNyw2ICszNyw1MiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBjaGVj
a2VyIGFzIHN0eWxlCitmcm9tIGNoZWNrZXIgaW1wb3J0IENhdGVnb3J5RmlsdGVyCisKKworY2xh
c3MgQ2F0ZWdvcnlGaWx0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3Rz
IENhdGVnb3J5RmlsdGVyIGNsYXNzLiIiIgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAg
ICAgICAgIiIiVGVzdCBfX2luaXRfXyBjb25zdHJ1Y3Rvci4iIiIKKyAgICAgICAgc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvciwgQ2F0ZWdvcnlGaWx0ZXIsIFsibm9fcHJlZml4Il0pCisgICAg
ICAgIENhdGVnb3J5RmlsdGVyKFtdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtzCisgICAgICAgIENh
dGVnb3J5RmlsdGVyKFsiKyJdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtzCisgICAgICAgIENhdGVn
b3J5RmlsdGVyKFsiLSJdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtzCisKKyAgICBkZWYgdGVzdF9z
dHIoc2VsZik6CisgICAgICAgICIiIlRlc3QgX19zdHJfXyAidG8gc3RyaW5nIiBvcGVyYXRvci4i
IiIKKyAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyIrYSIsICItYiJdKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhzdHIoZmlsdGVyKSwgIithLC1iIikKKworICAgIGRlZiB0ZXN0
X2VxKHNlbGYpOgorICAgICAgICAiIiJUZXN0IF9fZXFfXyBlcXVhbGl0eSBvcGVyYXRvci4iIiIK
KyAgICAgICAgZmlsdGVyMSA9IENhdGVnb3J5RmlsdGVyKFsiK2EiLCAiK2IiXSkKKyAgICAgICAg
ZmlsdGVyMiA9IENhdGVnb3J5RmlsdGVyKFsiK2EiLCAiK2IiXSkKKyAgICAgICAgZmlsdGVyMyA9
IENhdGVnb3J5RmlsdGVyKFsiK2IiLCAiK2EiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
ZmlsdGVyMSwgZmlsdGVyMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZmlsdGVyMSwg
ZmlsdGVyMykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jaGVjayhzZWxmKToKKyAgICAgICAgIiIi
VGVzdCBzaG91bGRfY2hlY2soKSBtZXRob2QuIiIiCisgICAgICAgIGZpbHRlciA9IENhdGVnb3J5
RmlsdGVyKFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsdGVyLnNob3VsZF9jaGVjaygi
ZXZlcnl0aGluZyIpKQorICAgICAgICAjIENoZWNrIGEgc2Vjb25kIHRpbWUgdG8gZXhlcmNpc2Ug
Y2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWx0ZXIuc2hvdWxkX2NoZWNrKCJldmVy
eXRoaW5nIikpCisKKyAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyItIl0pCisgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsdGVyLnNob3VsZF9jaGVjaygiYW55dGhpbmciKSkKKyAg
ICAgICAgIyBDaGVjayBhIHNlY29uZCB0aW1lIHRvIGV4ZXJjaXNlIGNhY2hlLgorICAgICAgICBz
ZWxmLmFzc2VydEZhbHNlKGZpbHRlci5zaG91bGRfY2hlY2soImFueXRoaW5nIikpCisKKyAgICAg
ICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyItIiwgIithYiJdKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoZmlsdGVyLnNob3VsZF9jaGVjaygiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0
RmFsc2UoZmlsdGVyLnNob3VsZF9jaGVjaygiYSIpKQorCisgICAgICAgIGZpbHRlciA9IENhdGVn
b3J5RmlsdGVyKFsiKyIsICItYWIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWx0ZXIu
c2hvdWxkX2NoZWNrKCJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbHRlci5zaG91
bGRfY2hlY2soImEiKSkKIAogCiBjbGFzcyBEZWZhdWx0QXJndW1lbnRzVGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CkBAIC00Niw2ICs5Miw4IEBAIGNsYXNzIERlZmF1bHRBcmd1bWVudHNUZXN0KHVu
aXR0ZXN0LlRlc3QKICAgICBkZWYgdGVzdF9maWx0ZXJfcnVsZXMoc2VsZik6CiAgICAgICAgIGFs
cmVhZHlfc2VlbiA9IFtdCiAgICAgICAgIGZvciBydWxlIGluIHN0eWxlLldFQktJVF9GSUxURVJf
UlVMRVM6CisgICAgICAgICAgICAjIENoZWNrIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGUg
c3BhY2UuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhydWxlLCBydWxlLnN0cmlwKCkp
CiAgICAgICAgICAgICAjIEFsbCBjYXRlZ29yaWVzIGFyZSBvbiBieSBkZWZhdWx0LCBzbyBkZWZh
dWx0cyBzaG91bGQKICAgICAgICAgICAgICMgYmVnaW4gd2l0aCAtLgogICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKHJ1bGUuc3RhcnRzd2l0aCgnLScpKQpAQCAtNzUsNyArMTIzLDggQEAgY2xh
c3MgQXJndW1lbnRQcmludGVyVGVzdCh1bml0dGVzdC5UZXN0QwogICAgIGRlZiBfY3JlYXRlX29w
dGlvbnMoc2VsZiwgb3V0cHV0X2Zvcm1hdD0nZW1hY3MnLCB2ZXJib3NpdHk9MywKICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbHRlcl9ydWxlcz1bXSwgZ2l0X2NvbW1pdD1Ob25lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9e30pOgotICAgICAgICByZXR1cm4g
c3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHksIGZpbHRlcl9y
dWxlcywKKyAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoZmlsdGVyX3J1bGVzKQorICAg
ICAgICByZXR1cm4gc3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3Np
dHksIGZpbHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2Nv
bW1pdCwgZXh0cmFfZmxhZ192YWx1ZXMpCiAKICAgICBkZWYgdGVzdF90b19mbGFnX3N0cmluZyhz
ZWxmKToKQEAgLTE3Myw3ICsyMjIsOCBAQCBjbGFzcyBBcmd1bWVudFBhcnNlclRlc3QodW5pdHRl
c3QuVGVzdENhCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9y
bWF0LCAndnM3JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy52ZXJib3NpdHks
IDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyX3J1bGVzLCBbJy0n
LCAnK3doaXRlc3BhY2UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIENhdGVnb3J5RmlsdGVyKFsiLSIsICIrd2hp
dGVzcGFjZSJdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0
LCBOb25lKQogCiAgICAgZGVmIHRlc3RfcGFyc2VfZXhwbGljaXRfYXJndW1lbnRzKHNlbGYpOgpA
QCAtMTg3LDggKzIzNyw4IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0
Q2EKICAgICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1naXQtY29tbWl0PWNvbW1p
dCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmdpdF9jb21taXQsICdjb21t
aXQnKQogICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0rZm9vLC1i
YXInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXJfcnVsZXMsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFsnLScsICcrd2hpdGVzcGFjZScsICcrZm9vJywgJy1i
YXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIENhdGVnb3J5RmlsdGVyKFsiLSIsICIrd2hpdGVzcGFjZSIsICIr
Zm9vIiwgIi1iYXIiXSkpCiAKICAgICAgICAgIyBQYXNzIGV4dHJhIGZsYWcgdmFsdWVzLgogICAg
ICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWV4dHJhJ10sIFsnZXh0cmEnXSkKSW5k
ZXg6IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlLnB5CShyZXZpc2lvbiA1MzA1MykKKysrIFNj
cmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDgs
OCArMjQ4LDggQEAgY2xhc3MgX0NwcFN0eWxlU3RhdGUob2JqZWN0KToKICAgICBkZWYgX19pbml0
X18oc2VsZik6CiAgICAgICAgIHNlbGYudmVyYm9zZV9sZXZlbCA9IDEgICMgZ2xvYmFsIHNldHRp
bmcuCiAgICAgICAgIHNlbGYuZXJyb3JfY291bnQgPSAwICAgICMgZ2xvYmFsIGNvdW50IG9mIHJl
cG9ydGVkIGVycm9ycwotICAgICAgICAjIGZpbHRlcnMgdG8gYXBwbHkgd2hlbiBlbWl0dGluZyBl
cnJvciBtZXNzYWdlcwotICAgICAgICBzZWxmLmZpbHRlcnMgPSBbXQorICAgICAgICAjIGZpbHRl
ciB0byBhcHBseSB3aGVuIGVtaXR0aW5nIGVycm9yIG1lc3NhZ2VzCisgICAgICAgIHNlbGYuZmls
dGVyID0gTm9uZQogCiAgICAgICAgICMgb3V0cHV0IGZvcm1hdDoKICAgICAgICAgIyAiZW1hY3Mi
IC0gZm9ybWF0IHRoYXQgZW1hY3MgY2FuIHBhcnNlIChkZWZhdWx0KQpAQCAtMjY2LDMyICsyNjYs
MTQgQEAgY2xhc3MgX0NwcFN0eWxlU3RhdGUob2JqZWN0KToKICAgICAgICAgc2VsZi52ZXJib3Nl
X2xldmVsID0gbGV2ZWwKICAgICAgICAgcmV0dXJuIGxhc3RfdmVyYm9zZV9sZXZlbAogCi0gICAg
ZGVmIHNldF9maWx0ZXJzKHNlbGYsIGZpbHRlcnMpOgotICAgICAgICAiIiJTZXRzIHRoZSBlcnJv
ci1tZXNzYWdlIGZpbHRlcnMuCi0KLSAgICAgICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3
aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW1pdCBhIGdpdmVuCi0gICAgICAgIGVycm9yIG1lc3Nh
Z2UuCisgICAgZGVmIHNldF9maWx0ZXIoc2VsZiwgZmlsdGVyKToKKyAgICAgICAgIiIiU2V0cyB0
aGUgZXJyb3ItbWVzc2FnZSBmaWx0ZXIuCiAKICAgICAgICAgQXJnczoKLSAgICAgICAgICBmaWx0
ZXJzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IGFyZSBib29sZWFuIGZpbHRlciBydWxlcyB1c2Vk
Ci0gICAgICAgICAgICAgICAgICAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBzdHlsZSBjYXRlZ29y
eSBzaG91bGQgYmUgY2hlY2tlZC4KLSAgICAgICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91
bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4YW1wbGUKLSAgICAgICAgICAgICAgICAgICBzdHJp
bmcgaXMgIit3aGl0ZXNwYWNlL2luZGVudCIuIFRoZSBsaXN0IGluY2x1ZGVzIGFueQotICAgICAg
ICAgICAgICAgICAgIHByZXBlbmRlZCBkZWZhdWx0IGZpbHRlciBydWxlcy4KLQotICAgICAgICBS
YWlzZXM6Ci0gICAgICAgICAgVmFsdWVFcnJvcjogTm90IGFsbCBmaWx0ZXJzIHN0YXJ0ZWQgd2l0
aCAnKycgb3IgJy0nLiBGb3IgZXhhbXBsZSwKLSAgICAgICAgICAgICAgICAgICAgICAiLSwrd2hp
dGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRlbnQsd2hpdGVzcGFjZS9iYWRmaWx0ZXIiCisgICAgICAg
ICAgZmlsdGVyOiBBIENhdGVnb3J5RmlsdGVyIGluc3RhbmNlLgorCiAgICAgICAgICIiIgotICAg
ICAgICBzZWxmLmZpbHRlcnMgPSBbXQotICAgICAgICBmb3IgZmlsdGVyIGluIGZpbHRlcnM6Ci0g
ICAgICAgICAgICBjbGVhbl9maWx0ZXIgPSBmaWx0ZXIuc3RyaXAoKQotICAgICAgICAgICAgaWYg
Y2xlYW5fZmlsdGVyOgotICAgICAgICAgICAgICAgIHNlbGYuZmlsdGVycy5hcHBlbmQoY2xlYW5f
ZmlsdGVyKQotICAgICAgICBmb3IgZmlsdGVyIGluIHNlbGYuZmlsdGVyczoKLSAgICAgICAgICAg
IGlmIG5vdCAoZmlsdGVyLnN0YXJ0c3dpdGgoJysnKSBvciBmaWx0ZXIuc3RhcnRzd2l0aCgnLScp
KToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFdmVyeSBmaWx0ZXIgaW4gLS1m
aWx0ZXIgbXVzdCBzdGFydCB3aXRoICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICcrIG9yIC0gKCVzIGRvZXMgbm90KScgJSBmaWx0ZXIpCisgICAgICAgIHNlbGYuZmlsdGVyID0g
ZmlsdGVyCiAKICAgICBkZWYgcmVzZXRfZXJyb3JfY291bnQoc2VsZik6CiAgICAgICAgICIiIlNl
dHMgdGhlIG1vZHVsZSdzIGVycm9yIHN0YXRpc3RpYyBiYWNrIHRvIHplcm8uIiIiCkBAIC0zMjUs
MjUgKzMwNywyMiBAQCBkZWYgX3NldF92ZXJib3NlX2xldmVsKGxldmVsKToKICAgICByZXR1cm4g
X2NwcF9zdHlsZV9zdGF0ZS5zZXRfdmVyYm9zZV9sZXZlbChsZXZlbCkKIAogCi1kZWYgX2ZpbHRl
cnMoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBtb2R1bGUncyBsaXN0IG9mIG91dHB1dCBmaWx0ZXJz
LCBhcyBhIGxpc3QuIiIiCi0gICAgcmV0dXJuIF9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycworZGVm
IF9maWx0ZXIoKToKKyAgICAiIiJSZXR1cm5zIHRoZSBtb2R1bGUncyBDYXRlZ29yeUZpbHRlciBp
bnN0YW5jZS4iIiIKKyAgICByZXR1cm4gX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXIKIAogCi1kZWYg
X3NldF9maWx0ZXJzKGZpbHRlcnMpOgotICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yLW1l
c3NhZ2UgZmlsdGVycy4KK2RlZiBfc2V0X2ZpbHRlcihmaWx0ZXIpOgorICAgICIiIlNldHMgdGhl
IG1vZHVsZSdzIGVycm9yLW1lc3NhZ2UgZmlsdGVyLgogCi0gICAgVGhlc2UgZmlsdGVycyBhcmUg
YXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW1pdCBhIGdpdmVuCisgICAgVGhlIGZp
bHRlciBpcyBhcHBsaWVkIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBlbWl0IGEgZ2l2ZW4KICAg
ICBlcnJvciBtZXNzYWdlLgogCiAgICAgQXJnczoKLSAgICAgIGZpbHRlcnM6IEEgbGlzdCBvZiBz
dHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmlsdGVyIHJ1bGVzIHVzZWQKLSAgICAgICAgICAgICAg
IHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3R5bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQu
Ci0gICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFu
IGV4YW1wbGUKLSAgICAgICAgICAgICAgIHN0cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50Ii4g
VGhlIGxpc3QgaW5jbHVkZXMgYW55Ci0gICAgICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBm
aWx0ZXIgcnVsZXMuCisgICAgICBmaWx0ZXI6IEEgQ2F0ZWdvcnlGaWx0ZXIgaW5zdGFuY2UuCisK
ICAgICAiIiIKLSAgICBfY3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXJzKGZpbHRlcnMpCisgICAg
X2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVyKGZpbHRlcikKIAogCiBkZWYgZXJyb3JfY291bnQo
KToKQEAgLTUwNSwyMCArNDg0LDEyIEBAIGRlZiBfc2hvdWxkX3ByaW50X2Vycm9yKGNhdGVnb3J5
LCBjb25maWQKICAgICBpZiBjb25maWRlbmNlIDwgX2NwcF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xl
dmVsOgogICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgIGlzX2ZpbHRlcmVkID0gRmFsc2UKLSAg
ICBmb3Igb25lX2ZpbHRlciBpbiBfZmlsdGVycygpOgotICAgICAgICBpZiBvbmVfZmlsdGVyLnN0
YXJ0c3dpdGgoJy0nKToKLSAgICAgICAgICAgIGlmIGNhdGVnb3J5LnN0YXJ0c3dpdGgob25lX2Zp
bHRlclsxOl0pOgotICAgICAgICAgICAgICAgIGlzX2ZpbHRlcmVkID0gVHJ1ZQotICAgICAgICBl
bGlmIG9uZV9maWx0ZXIuc3RhcnRzd2l0aCgnKycpOgotICAgICAgICAgICAgaWYgY2F0ZWdvcnku
c3RhcnRzd2l0aChvbmVfZmlsdGVyWzE6XSk6Ci0gICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQg
PSBGYWxzZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXNzZXJ0IEZhbHNlICAjIHNob3Vs
ZCBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgaW4gc2V0X2ZpbHRlci4KLSAgICBpZiBpc19maWx0ZXJl
ZDoKLSAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZmlsdGVyID0gX2ZpbHRlcigpCiAKLSAgICBy
ZXR1cm4gVHJ1ZQorICAgIGlmIGZpbHRlciBpcyBOb25lOgorICAgICAgICByZXR1cm4gVHJ1ZSAj
IEFsbCBjYXRlZ29yaWVzIHNob3VsZCBiZSBjaGVja2VkIGJ5IGRlZmF1bHQuCisKKyAgICByZXR1
cm4gZmlsdGVyLnNob3VsZF9jaGVjayhjYXRlZ29yeSkKIAogCiBkZWYgZXJyb3IoZmlsZW5hbWUs
IGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29uZmlkZW5jZSwgbWVzc2FnZSk6CkluZGV4OiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
Y3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTMw
NTMpCisrKyBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQkod29y
a2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDExIEBAIGltcG9ydCByYW5kb20KIGltcG9ydCByZQog
aW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgY3BwX3N0eWxlCi0jIEZJWE1FOiBSZW1vdmUgdGhlIG5l
ZWQgdG8gaW1wb3J0IHNvbWV0aGluZyBmcm9tIGNoZWNrZXIuIFNlZSB0aGUKKyMgRklYTUU6IFJl
bW92ZSB0aGUgbmVlZCB0byBpbXBvcnQgYW55dGhpbmcgZnJvbSBjaGVja2VyLiBTZWUgdGhlCiAj
ICAgICAgICBGSVhNRSBub3RlcyBuZWFyIHRoZSBTVFlMRV9DQVRFR09SSUVTIGRlZmluaXRpb24g
Zm9yIGEKICMgICAgICAgIHN1Z2dlc3Rpb24gb24gaG93IHRvIGJlc3QgZG8gdGhpcy4KIGZyb20g
Y2hlY2tlciBpbXBvcnQgU1RZTEVfQ0FURUdPUklFUworZnJvbSBjaGVja2VyIGltcG9ydCBDYXRl
Z29yeUZpbHRlcgogCiAjIFRoaXMgY2xhc3Mgd29ya3MgYXMgYW4gZXJyb3IgY29sbGVjdG9yIGFu
ZCByZXBsYWNlcyBjcHBfc3R5bGUuRXJyb3IKICMgZnVuY3Rpb24gZm9yIHRoZSB1bml0IHRlc3Rz
LiAgV2UgYWxzbyB2ZXJpZnkgZWFjaCBjYXRlZ29yeSB3ZSBzZWUKQEAgLTE1NzEsOSArMTU3Miw5
IEBAIGNsYXNzIENwcFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgICAg
ICAgICAgICAgICAnVGFiIGZvdW5kOyBiZXR0ZXIgdG8gdXNlIHNwYWNlcyAgW3doaXRlc3BhY2Uv
dGFiXSBbMV0nKQogCiAgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgotICAgICAgICBvbGRfZmls
dGVycyA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKKyAgICAgICAgb2xkX2Zp
bHRlciA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcgogICAgICAgICB0cnk6Ci0g
ICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVycyhbJy0nLCAn
K3doaXRlc3BhY2UnLCAnLXdoaXRlc3BhY2UvaW5kZW50J10pCisgICAgICAgICAgICBjcHBfc3R5
bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVyKENhdGVnb3J5RmlsdGVyKFsnLScsICcrd2hp
dGVzcGFjZScsICctd2hpdGVzcGFjZS9pbmRlbnQnXSkpCiAgICAgICAgICAgICBzZWxmLmFzc2Vy
dF9saW50KAogICAgICAgICAgICAgICAgICcvLyBIZWxsbyB0aGVyZSAnLAogICAgICAgICAgICAg
ICAgICdMaW5lIGVuZHMgaW4gd2hpdGVzcGFjZS4gIENvbnNpZGVyIGRlbGV0aW5nIHRoZXNlIGV4
dHJhIHNwYWNlcy4nCkBAIC0xNTgxLDIyICsxNTgyLDIyIEBAIGNsYXNzIENwcFN0eWxlVGVzdChD
cHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJ2ludCBhID0g
KGludCkxLjA7JywgJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KCcgd2VpcmQgb3Bl
bmluZyBzcGFjZScsICcnKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgY3BwX3N0eWxl
Ll9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycyA9IG9sZF9maWx0ZXJzCisgICAgICAgICAgICBjcHBf
c3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXIgPSBvbGRfZmlsdGVyCiAKICAgICBkZWYgdGVz
dF9maWx0ZXJfYXBwZW5kaW5nKHNlbGYpOgotICAgICAgICBvbGRfZmlsdGVycyA9IGNwcF9zdHls
ZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKKyAgICAgICAgb2xkX2ZpbHRlciA9IGNwcF9zdHls
ZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcgogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIFJl
c2V0IGZpbHRlcnMKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLnNldF9m
aWx0ZXJzKFsnLXdoaXRlc3BhY2UnXSkKKyAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxl
X3N0YXRlLnNldF9maWx0ZXIoQ2F0ZWdvcnlGaWx0ZXIoWyctd2hpdGVzcGFjZSddKSkKICAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vIEhlbGxvIHRoZXJlICcsICcnKQotICAgICAgICAg
ICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoWyctd2hpdGVzcGFjZScs
ICcrd2hpdGVzcGFjZS9lbmRfb2ZfbGluZSddKQorICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBf
c3R5bGVfc3RhdGUuc2V0X2ZpbHRlcihDYXRlZ29yeUZpbHRlcihbJy13aGl0ZXNwYWNlJywgJyt3
aGl0ZXNwYWNlL2VuZF9vZl9saW5lJ10pKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgK
ICAgICAgICAgICAgICAgICAnLy8gSGVsbG8gdGhlcmUgJywKICAgICAgICAgICAgICAgICAnTGlu
ZSBlbmRzIGluIHdoaXRlc3BhY2UuICBDb25zaWRlciBkZWxldGluZyB0aGVzZSBleHRyYSBzcGFj
ZXMuJwogICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2VuZF9vZl9saW5lXSBbNF0nKQog
ICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnIHdlaXJkIG9wZW5pbmcgc3BhY2UnLCAnJykK
ICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRl
LmZpbHRlcnMgPSBvbGRfZmlsdGVycworICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVf
c3RhdGUuZmlsdGVyID0gb2xkX2ZpbHRlcgogCiAgICAgZGVmIHRlc3RfdW5uYW1lZF9uYW1lc3Bh
Y2VzX2luX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1YWdlX3J1bGVz
X2NoZWNrKAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46261</attachid>
            <date>2010-01-11 00:14:33 -0800</date>
            <delta_ts>2010-01-13 07:53:05 -0800</delta_ts>
            <desc>Proposed patch 3</desc>
            <filename>patch-tools3-3.txt</filename>
            <type>text/plain</type>
            <size>18542</size>
            <attacher name="Chris Jerdonek">cjerdonek</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDUzMDU1KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDEtMTAgIENocmlzIEplcmRvbmVrICA8
Y2hyaXMuamVyZG9uZWtAZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIENyZWF0ZWQgYSBDYXRlZ29yeUZpbHRlciBjbGFzcyB0byBlbmNh
cHN1bGF0ZSB0aGUgbG9naWMgb2YKKyAgICAgICAgZmlsdGVyIHJ1bGVzLgorCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzQ1NAorCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorICAgICAgICAgIC0gQWRkZWQgQ2F0
ZWdvcnlGaWx0ZXIgY2xhc3MuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2No
ZWNrZXJfdW5pdHRlc3QucHk6CisgICAgICAgICAgLSBBZGRlZCBDYXRlZ29yeUZpbHRlciB1bml0
IHRlc3RzLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jcHBfc3R5bGUucHk6
CisgICAgICAgICAgLSBVcGRhdGVkIGZpbHRlciBtZXRob2RzIHRvIHVzZSBDYXRlZ29yeUZpbHRl
ci4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlX3VuaXR0ZXN0
LnB5OgorICAgICAgICAgIC0gVXBkYXRlZCByZWZlcmVuY2VzIHRvIGZpbHRlcnMuCisKIDIwMTAt
MDEtMTAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkIGNvc21ldGljIGNoYW5nZS4gIFJlbW92ZSB0aGUgc3RhdHVzIGJ1YmJsZSBmb3IgbWFjLWV3
cwpJbmRleDogV2ViS2l0VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5w
eQkocmV2aXNpb24gNTMwNTMpCisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXIucHkJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsNzEgQEAgU3ludGF4OiAl
KHByb2dyYW1fbmFtZSlzIFstLXZlcmJvc2U9I10gWwogICAgIHJldHVybiB1c2FnZQogCiAKK2Ns
YXNzIENhdGVnb3J5RmlsdGVyKG9iamVjdCk6CisKKyAgICAiIiJGaWx0ZXJzIHdoZXRoZXIgdG8g
Y2hlY2sgc3R5bGUgY2F0ZWdvcmllcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWx0
ZXJfcnVsZXMpOgorICAgICAgICAiIiJDcmVhdGUgYSBjYXRlZ29yeSBmaWx0ZXIuCisKKyAgICAg
ICAgVGhpcyBtZXRob2QgcGVyZm9ybXMgYXJndW1lbnQgdmFsaWRhdGlvbiBidXQgZG9lcyBub3Qg
c3RyaXAKKyAgICAgICAgbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZSBzcGFjZS4KKworICAgICAg
ICBBcmdzOgorICAgICAgICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBh
cmUgZmlsdGVyIHJ1bGVzLCB3aGljaAorICAgICAgICAgICAgICAgICAgICAgICAgYXJlIHN0cmlu
Z3MgYmVnaW5uaW5nIHdpdGggdGhlIHBsdXMgb3IgbWludXMKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN5bWJvbCAoKy8tKS4gVGhlIGxpc3Qgc2hvdWxkIGluY2x1ZGUgYW55CisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0IGZpbHRlciBydWxlcyBhdCB0aGUgYmVnaW5uaW5nLgorCisg
ICAgICAgIFJhaXNlczoKKyAgICAgICAgICBWYWx1ZUVycm9yOiBJbnZhbGlkIGZpbHRlciBydWxl
IGlmIGEgcnVsZSBkb2VzIG5vdCBzdGFydCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgcGx1
cyAoIisiKSBvciBtaW51cyAoIi0iKS4KKworICAgICAgICAiIiIKKyAgICAgICAgZm9yIHJ1bGUg
aW4gZmlsdGVyX3J1bGVzOgorICAgICAgICAgICAgaWYgbm90IChydWxlLnN0YXJ0c3dpdGgoJysn
KSBvciBydWxlLnN0YXJ0c3dpdGgoJy0nKSk6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcignSW52YWxpZCBmaWx0ZXIgcnVsZSAiJXMiOiBldmVyeSBydWxlICcKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdydWxlIGluIHRoZSAtLWZpbHRlciBmbGFnIG11c3Qgc3Rh
cnQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggKyBvciAtLicgJSBy
dWxlKQorCisgICAgICAgIHNlbGYuX2ZpbHRlcl9ydWxlcyA9IGZpbHRlcl9ydWxlcworICAgICAg
ICBzZWxmLl9zaG91bGRfY2hlY2tfY2F0ZWdvcnkgPSB7fSAjIENhY2hlZCBkaWN0aW9uYXJ5IG9m
IGNhdGVnb3J5IHRvIFRydWUvRmFsc2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAg
ICByZXR1cm4gIiwiLmpvaW4oc2VsZi5fZmlsdGVyX3J1bGVzKQorCisgICAgZGVmIF9fZXFfXyhz
ZWxmLCBvdGhlcik6CisgICAgICAgICMgVGhpcyBpcyB1c2VmdWwgZm9yIHVuaXQgdGVzdGluZy4K
KyAgICAgICAgIyBUd28gY2F0ZWdvcnkgZmlsdGVycyBhcmUgdGhlIHNhbWUgaWYgYW5kIG9ubHkg
aWYgdGhlaXIKKyAgICAgICAgIyBjb25zdGl0dWVudCBmaWx0ZXIgcnVsZXMgYXJlIHRoZSBzYW1l
LgorICAgICAgICByZXR1cm4gKHN0cihzZWxmKSA9PSBzdHIob3RoZXIpKQorCisgICAgZGVmIHNo
b3VsZF9jaGVjayhzZWxmLCBjYXRlZ29yeSk6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRo
ZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZC4KKworICAgICAgICBUaGUgcnVsZXMgZm9yIGRl
dGVybWluaW5nIHdoZXRoZXIgYSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZAorICAgICAgICBh
cmUgYXMgZm9sbG93cy4gQnkgZGVmYXVsdCBhbGwgY2F0ZWdvcmllcyBzaG91bGQgYmUgY2hlY2tl
ZC4KKyAgICAgICAgVGhlbiBhcHBseSB0aGUgZmlsdGVyIHJ1bGVzIGluIG9yZGVyIGZyb20gZmly
c3QgdG8gbGFzdCwgd2l0aAorICAgICAgICBsYXRlciBmbGFncyB0YWtpbmcgcHJlY2VkZW5jZS4K
KworICAgICAgICBBIGZpbHRlciBydWxlIGFwcGxpZXMgdG8gYSBjYXRlZ29yeSBpZiB0aGUgc3Ry
aW5nIGFmdGVyIHRoZQorICAgICAgICBsZWFkaW5nIHBsdXMvbWludXMgKCsvLSkgbWF0Y2hlcyB0
aGUgYmVnaW5uaW5nIG9mIHRoZSBjYXRlZ29yeQorICAgICAgICBuYW1lLiBBIHBsdXMgKCspIG1l
YW5zIHRoZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZCwgd2hpbGUgYQorICAgICAgICBtaW51
cyAoLSkgbWVhbnMgdGhlIGNhdGVnb3J5IHNob3VsZCBub3QgYmUgY2hlY2tlZC4KKworICAgICAg
ICAiIiIKKyAgICAgICAgaWYgY2F0ZWdvcnkgaW4gc2VsZi5fc2hvdWxkX2NoZWNrX2NhdGVnb3J5
OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3VsZF9jaGVja19jYXRlZ29yeVtjYXRlZ29y
eV0KKworICAgICAgICBzaG91bGRfY2hlY2sgPSBUcnVlICMgQWxsIGNhdGVnb3JpZXMgY2hlY2tl
ZCBieSBkZWZhdWx0LgorICAgICAgICBmb3IgcnVsZSBpbiBzZWxmLl9maWx0ZXJfcnVsZXM6Cisg
ICAgICAgICAgICBpZiBub3QgY2F0ZWdvcnkuc3RhcnRzd2l0aChydWxlWzE6XSk6CisgICAgICAg
ICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNob3VsZF9jaGVjayA9IHJ1bGUuc3RhcnRz
d2l0aCgnKycpCisgICAgICAgIHNlbGYuX3Nob3VsZF9jaGVja19jYXRlZ29yeVtjYXRlZ29yeV0g
PSBzaG91bGRfY2hlY2sgIyBVcGRhdGUgY2FjaGUuCisgICAgICAgIHJldHVybiBzaG91bGRfY2hl
Y2sKKworCiAjIFRoaXMgY2xhc3Mgc2hvdWxkIG5vdCBoYXZlIGtub3dsZWRnZSBvZiB0aGUgZmxh
ZyBrZXkgbmFtZXMuCiBjbGFzcyBQcm9jZXNzb3JPcHRpb25zKG9iamVjdCk6CiAKQEAgLTI0NCwx
MiArMzA5LDggQEAgY2xhc3MgUHJvY2Vzc29yT3B0aW9ucyhvYmplY3QpOgogICAgICAgICAgICAg
ICAgICBjb25maWRlbmNlIHNjb3JlIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUuCiAgICAgICAgICAg
ICAgICAgIFRoZSBkZWZhdWx0IGlzIDEsIHdoaWNoIGRpc3BsYXlzIGFsbCBlcnJvcnMuCiAKLSAg
ICAgIGZpbHRlcl9ydWxlczogQSBsaXN0IG9mIHN0cmluZ3MgdGhhdCBhcmUgYm9vbGVhbiBmaWx0
ZXIgcnVsZXMgdXNlZAotICAgICAgICAgICAgICAgICAgICB0byBkZXRlcm1pbmUgd2hldGhlciBh
IHN0eWxlIGNhdGVnb3J5IHNob3VsZCBiZSBjaGVja2VkLgotICAgICAgICAgICAgICAgICAgICBF
YWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4YW1wbGUKLSAgICAgICAg
ICAgICAgICAgICAgc3RyaW5nIGlzICIrd2hpdGVzcGFjZS9pbmRlbnQiLiBUaGUgbGlzdCBpbmNs
dWRlcyBhbnkKLSAgICAgICAgICAgICAgICAgICAgcHJlcGVuZGVkIGRlZmF1bHQgZmlsdGVyIHJ1
bGVzLiBUaGUgZGVmYXVsdCBpcyB0aGUKLSAgICAgICAgICAgICAgICAgICAgZW1wdHkgbGlzdCwg
d2hpY2ggaW5jbHVkZXMgYWxsIGNhdGVnb3JpZXMuCisgICAgICBmaWx0ZXI6IEEgQ2F0ZWdvcnlG
aWx0ZXIgaW5zdGFuY2UuIFRoZSBkZWZhdWx0IGlzIHRoZSBlbXB0eSBmaWx0ZXIsCisgICAgICAg
ICAgICAgIHdoaWNoIG1lYW5zIHRoYXQgYWxsIGNhdGVnb3JpZXMgc2hvdWxkIGJlIGNoZWNrZWQu
CiAKICAgICAgIGdpdF9jb21taXQ6IEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZ2l0IGNvbW1p
dCB0byBjaGVjay4KICAgICAgICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGlzIE5vbmUuCkBAIC0y
NTksMTYgKzMyMCwxNiBAQCBjbGFzcyBQcm9jZXNzb3JPcHRpb25zKG9iamVjdCk6CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xhc3MuIFRoZSBkZWZhdWx0IGlzIHRoZSBlbXB0eSBkaWN0aW9u
YXJ5LgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dHB1dF9mb3JtYXQsIHZl
cmJvc2l0eT0xLCBmaWx0ZXJfcnVsZXM9Tm9uZSwKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3V0
cHV0X2Zvcm1hdCwgdmVyYm9zaXR5PTEsIGZpbHRlcj1Ob25lLAogICAgICAgICAgICAgICAgICBn
aXRfY29tbWl0PU5vbmUsIGV4dHJhX2ZsYWdfdmFsdWVzPU5vbmUpOgotICAgICAgICBpZiBmaWx0
ZXJfcnVsZXMgaXMgTm9uZToKLSAgICAgICAgICAgIGZpbHRlcl9ydWxlcyA9IFtdCisgICAgICAg
IGlmIGZpbHRlciBpcyBOb25lOgorICAgICAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIo
W10pCiAgICAgICAgIGlmIGV4dHJhX2ZsYWdfdmFsdWVzIGlzIE5vbmU6CiAgICAgICAgICAgICBl
eHRyYV9mbGFnX3ZhbHVlcyA9IHt9CiAKICAgICAgICAgc2VsZi5vdXRwdXRfZm9ybWF0ID0gb3V0
cHV0X2Zvcm1hdAogICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IHZlcmJvc2l0eQotICAgICAgICBz
ZWxmLmZpbHRlcl9ydWxlcyA9IGZpbHRlcl9ydWxlcworICAgICAgICBzZWxmLmZpbHRlciA9IGZp
bHRlcgogICAgICAgICBzZWxmLmdpdF9jb21taXQgPSBnaXRfY29tbWl0CiAgICAgICAgIHNlbGYu
ZXh0cmFfZmxhZ192YWx1ZXMgPSBleHRyYV9mbGFnX3ZhbHVlcwogCkBAIC0yODUsNyArMzQ2LDcg
QEAgZGVmIHNldF9vcHRpb25zKG9wdGlvbnMpOgogICAgICIiIgogICAgIGNwcF9zdHlsZS5fc2V0
X291dHB1dF9mb3JtYXQob3B0aW9ucy5vdXRwdXRfZm9ybWF0KQogICAgIGNwcF9zdHlsZS5fc2V0
X3ZlcmJvc2VfbGV2ZWwob3B0aW9ucy52ZXJib3NpdHkpCi0gICAgY3BwX3N0eWxlLl9zZXRfZmls
dGVycyhvcHRpb25zLmZpbHRlcl9ydWxlcykKKyAgICBjcHBfc3R5bGUuX3NldF9maWx0ZXIob3B0
aW9ucy5maWx0ZXIpCiAKIAogIyBUaGlzIGNsYXNzIHNob3VsZCBub3QgaGF2ZSBrbm93bGVkZ2Ug
b2YgdGhlIGZsYWcga2V5IG5hbWVzLgpAQCAtMzI4LDggKzM4OSwxMSBAQCBjbGFzcyBBcmd1bWVu
dFByaW50ZXIob2JqZWN0KToKIAogICAgICAgICBmbGFnc1snb3V0cHV0J10gPSBvcHRpb25zLm91
dHB1dF9mb3JtYXQKICAgICAgICAgZmxhZ3NbJ3ZlcmJvc2UnXSA9IG9wdGlvbnMudmVyYm9zaXR5
Ci0gICAgICAgIGlmIG9wdGlvbnMuZmlsdGVyX3J1bGVzOgotICAgICAgICAgICAgZmxhZ3NbJ2Zp
bHRlciddID0gJywnLmpvaW4ob3B0aW9ucy5maWx0ZXJfcnVsZXMpCisgICAgICAgIGlmIG9wdGlv
bnMuZmlsdGVyOgorICAgICAgICAgICAgIyBPbmx5IGluY2x1ZGUgdGhlIGZpbHRlciBmbGFnIGlm
IHJ1bGVzIGFyZSBwcmVzZW50LgorICAgICAgICAgICAgZmlsdGVyX3N0cmluZyA9IHN0cihvcHRp
b25zLmZpbHRlcikKKyAgICAgICAgICAgIGlmIGZpbHRlcl9zdHJpbmc6CisgICAgICAgICAgICAg
ICAgZmxhZ3NbJ2ZpbHRlciddID0gZmlsdGVyX3N0cmluZwogICAgICAgICBpZiBvcHRpb25zLmdp
dF9jb21taXQ6CiAgICAgICAgICAgICBmbGFnc1snZ2l0LWNvbW1pdCddID0gb3B0aW9ucy5naXRf
Y29tbWl0CiAKQEAgLTQ5MSwxMyArNTU1LDkgQEAgY2xhc3MgQXJndW1lbnRQYXJzZXIob2JqZWN0
KToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgLS12ZXJib3NlIHZhbHVl
ICVzOiB2YWx1ZSBtdXN0ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JlIGJldHdl
ZW4gMS01LicgJSB2ZXJib3NpdHkpCiAKLSAgICAgICAgZm9yIHJ1bGUgaW4gZmlsdGVyX3J1bGVz
OgotICAgICAgICAgICAgaWYgbm90IChydWxlLnN0YXJ0c3dpdGgoJysnKSBvciBydWxlLnN0YXJ0
c3dpdGgoJy0nKSk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBm
aWx0ZXIgcnVsZSAiJXMiOiBldmVyeSBydWxlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdydWxlIGluIHRoZSAtLWZpbHRlciBmbGFnIG11c3Qgc3RhcnQgJwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggKyBvciAtLicgJSBydWxlKQorICAgICAgICBm
aWx0ZXIgPSBDYXRlZ29yeUZpbHRlcihmaWx0ZXJfcnVsZXMpCiAKLSAgICAgICAgb3B0aW9ucyA9
IFByb2Nlc3Nvck9wdGlvbnMob3V0cHV0X2Zvcm1hdCwgdmVyYm9zaXR5LCBmaWx0ZXJfcnVsZXMs
CisgICAgICAgIG9wdGlvbnMgPSBQcm9jZXNzb3JPcHRpb25zKG91dHB1dF9mb3JtYXQsIHZlcmJv
c2l0eSwgZmlsdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaXRfY29t
bWl0LCBleHRyYV9mbGFnX3ZhbHVlcykKIAogICAgICAgICByZXR1cm4gKGZpbGVuYW1lcywgb3B0
aW9ucykKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlcl91
bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NoZWNrZXJfdW5pdHRlc3QucHkJKHJldmlzaW9uIDUzMDUzKQorKysgV2ViS2l0VG9vbHMv
U2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw1MiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBjaGVja2VyIGFz
IHN0eWxlCitmcm9tIGNoZWNrZXIgaW1wb3J0IENhdGVnb3J5RmlsdGVyCisKKworY2xhc3MgQ2F0
ZWdvcnlGaWx0ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICIiIlRlc3RzIENhdGVn
b3J5RmlsdGVyIGNsYXNzLiIiIgorCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAg
IiIiVGVzdCBfX2luaXRfXyBjb25zdHJ1Y3Rvci4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvciwgQ2F0ZWdvcnlGaWx0ZXIsIFsibm9fcHJlZml4Il0pCisgICAgICAgIENh
dGVnb3J5RmlsdGVyKFtdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtzCisgICAgICAgIENhdGVnb3J5
RmlsdGVyKFsiKyJdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtzCisgICAgICAgIENhdGVnb3J5Rmls
dGVyKFsiLSJdKSAjIE5vIFZhbHVlRXJyb3I6IHdvcmtzCisKKyAgICBkZWYgdGVzdF9zdHIoc2Vs
Zik6CisgICAgICAgICIiIlRlc3QgX19zdHJfXyAidG8gc3RyaW5nIiBvcGVyYXRvci4iIiIKKyAg
ICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyIrYSIsICItYiJdKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFscyhzdHIoZmlsdGVyKSwgIithLC1iIikKKworICAgIGRlZiB0ZXN0X2VxKHNl
bGYpOgorICAgICAgICAiIiJUZXN0IF9fZXFfXyBlcXVhbGl0eSBvcGVyYXRvci4iIiIKKyAgICAg
ICAgZmlsdGVyMSA9IENhdGVnb3J5RmlsdGVyKFsiK2EiLCAiK2IiXSkKKyAgICAgICAgZmlsdGVy
MiA9IENhdGVnb3J5RmlsdGVyKFsiK2EiLCAiK2IiXSkKKyAgICAgICAgZmlsdGVyMyA9IENhdGVn
b3J5RmlsdGVyKFsiK2IiLCAiK2EiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoZmlsdGVy
MSwgZmlsdGVyMikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbHMoZmlsdGVyMSwgZmlsdGVy
MykKKworICAgIGRlZiB0ZXN0X3Nob3VsZF9jaGVjayhzZWxmKToKKyAgICAgICAgIiIiVGVzdCBz
aG91bGRfY2hlY2soKSBtZXRob2QuIiIiCisgICAgICAgIGZpbHRlciA9IENhdGVnb3J5RmlsdGVy
KFtdKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsdGVyLnNob3VsZF9jaGVjaygiZXZlcnl0
aGluZyIpKQorICAgICAgICAjIENoZWNrIGEgc2Vjb25kIHRpbWUgdG8gZXhlcmNpc2UgY2FjaGUu
CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWx0ZXIuc2hvdWxkX2NoZWNrKCJldmVyeXRoaW5n
IikpCisKKyAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyItIl0pCisgICAgICAgIHNl
bGYuYXNzZXJ0RmFsc2UoZmlsdGVyLnNob3VsZF9jaGVjaygiYW55dGhpbmciKSkKKyAgICAgICAg
IyBDaGVjayBhIHNlY29uZCB0aW1lIHRvIGV4ZXJjaXNlIGNhY2hlLgorICAgICAgICBzZWxmLmFz
c2VydEZhbHNlKGZpbHRlci5zaG91bGRfY2hlY2soImFueXRoaW5nIikpCisKKyAgICAgICAgZmls
dGVyID0gQ2F0ZWdvcnlGaWx0ZXIoWyItIiwgIithYiJdKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoZmlsdGVyLnNob3VsZF9jaGVjaygiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
ZmlsdGVyLnNob3VsZF9jaGVjaygiYSIpKQorCisgICAgICAgIGZpbHRlciA9IENhdGVnb3J5Rmls
dGVyKFsiKyIsICItYWIiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWx0ZXIuc2hvdWxk
X2NoZWNrKCJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbHRlci5zaG91bGRfY2hl
Y2soImEiKSkKIAogCiBjbGFzcyBEZWZhdWx0QXJndW1lbnRzVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSk6CkBAIC00Niw2ICs5Miw4IEBAIGNsYXNzIERlZmF1bHRBcmd1bWVudHNUZXN0KHVuaXR0ZXN0
LlRlc3QKICAgICBkZWYgdGVzdF9maWx0ZXJfcnVsZXMoc2VsZik6CiAgICAgICAgIGFscmVhZHlf
c2VlbiA9IFtdCiAgICAgICAgIGZvciBydWxlIGluIHN0eWxlLldFQktJVF9GSUxURVJfUlVMRVM6
CisgICAgICAgICAgICAjIENoZWNrIG5vIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGUgc3BhY2Uu
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhydWxlLCBydWxlLnN0cmlwKCkpCiAgICAg
ICAgICAgICAjIEFsbCBjYXRlZ29yaWVzIGFyZSBvbiBieSBkZWZhdWx0LCBzbyBkZWZhdWx0cyBz
aG91bGQKICAgICAgICAgICAgICMgYmVnaW4gd2l0aCAtLgogICAgICAgICAgICAgc2VsZi5hc3Nl
cnRUcnVlKHJ1bGUuc3RhcnRzd2l0aCgnLScpKQpAQCAtNzUsNyArMTIzLDggQEAgY2xhc3MgQXJn
dW1lbnRQcmludGVyVGVzdCh1bml0dGVzdC5UZXN0QwogICAgIGRlZiBfY3JlYXRlX29wdGlvbnMo
c2VsZiwgb3V0cHV0X2Zvcm1hdD0nZW1hY3MnLCB2ZXJib3NpdHk9MywKICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbHRlcl9ydWxlcz1bXSwgZ2l0X2NvbW1pdD1Ob25lLAogICAgICAgICAgICAg
ICAgICAgICAgICAgZXh0cmFfZmxhZ192YWx1ZXM9e30pOgotICAgICAgICByZXR1cm4gc3R5bGUu
UHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHksIGZpbHRlcl9ydWxlcywK
KyAgICAgICAgZmlsdGVyID0gQ2F0ZWdvcnlGaWx0ZXIoZmlsdGVyX3J1bGVzKQorICAgICAgICBy
ZXR1cm4gc3R5bGUuUHJvY2Vzc29yT3B0aW9ucyhvdXRwdXRfZm9ybWF0LCB2ZXJib3NpdHksIGZp
bHRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2l0X2NvbW1pdCwg
ZXh0cmFfZmxhZ192YWx1ZXMpCiAKICAgICBkZWYgdGVzdF90b19mbGFnX3N0cmluZyhzZWxmKToK
QEAgLTE3Myw3ICsyMjIsOCBAQCBjbGFzcyBBcmd1bWVudFBhcnNlclRlc3QodW5pdHRlc3QuVGVz
dENhCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5vdXRwdXRfZm9ybWF0LCAn
dnM3JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy52ZXJib3NpdHksIDMpCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKG9wdGlvbnMuZmlsdGVyX3J1bGVzLCBbJy0nLCAnK3do
aXRlc3BhY2UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIENhdGVnb3J5RmlsdGVyKFsiLSIsICIrd2hpdGVzcGFj
ZSJdKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5naXRfY29tbWl0LCBOb25l
KQogCiAgICAgZGVmIHRlc3RfcGFyc2VfZXhwbGljaXRfYXJndW1lbnRzKHNlbGYpOgpAQCAtMTg3
LDggKzIzNyw4IEBAIGNsYXNzIEFyZ3VtZW50UGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2EKICAg
ICAgICAgKGZpbGVzLCBvcHRpb25zKSA9IHBhcnNlKFsnLS1naXQtY29tbWl0PWNvbW1pdCddKQog
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcHRpb25zLmdpdF9jb21taXQsICdjb21taXQnKQog
ICAgICAgICAoZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWZpbHRlcj0rZm9vLC1iYXInXSkK
LSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXJfcnVsZXMsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIFsnLScsICcrd2hpdGVzcGFjZScsICcrZm9vJywgJy1iYXInXSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3B0aW9ucy5maWx0ZXIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIENhdGVnb3J5RmlsdGVyKFsiLSIsICIrd2hpdGVzcGFjZSIsICIrZm9vIiwg
Ii1iYXIiXSkpCiAKICAgICAgICAgIyBQYXNzIGV4dHJhIGZsYWcgdmFsdWVzLgogICAgICAgICAo
ZmlsZXMsIG9wdGlvbnMpID0gcGFyc2UoWyctLWV4dHJhJ10sIFsnZXh0cmEnXSkKSW5kZXg6IFdl
YktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0eWxlLnB5CShyZXZp
c2lvbiA1MzA1MykKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY3BwX3N0
eWxlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsOCArMjQ4LDggQEAgY2xhc3MgX0NwcFN0eWxl
U3RhdGUob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYudmVy
Ym9zZV9sZXZlbCA9IDEgICMgZ2xvYmFsIHNldHRpbmcuCiAgICAgICAgIHNlbGYuZXJyb3JfY291
bnQgPSAwICAgICMgZ2xvYmFsIGNvdW50IG9mIHJlcG9ydGVkIGVycm9ycwotICAgICAgICAjIGZp
bHRlcnMgdG8gYXBwbHkgd2hlbiBlbWl0dGluZyBlcnJvciBtZXNzYWdlcwotICAgICAgICBzZWxm
LmZpbHRlcnMgPSBbXQorICAgICAgICAjIGZpbHRlciB0byBhcHBseSB3aGVuIGVtaXR0aW5nIGVy
cm9yIG1lc3NhZ2VzCisgICAgICAgIHNlbGYuZmlsdGVyID0gTm9uZQogCiAgICAgICAgICMgb3V0
cHV0IGZvcm1hdDoKICAgICAgICAgIyAiZW1hY3MiIC0gZm9ybWF0IHRoYXQgZW1hY3MgY2FuIHBh
cnNlIChkZWZhdWx0KQpAQCAtMjY2LDMyICsyNjYsMTQgQEAgY2xhc3MgX0NwcFN0eWxlU3RhdGUo
b2JqZWN0KToKICAgICAgICAgc2VsZi52ZXJib3NlX2xldmVsID0gbGV2ZWwKICAgICAgICAgcmV0
dXJuIGxhc3RfdmVyYm9zZV9sZXZlbAogCi0gICAgZGVmIHNldF9maWx0ZXJzKHNlbGYsIGZpbHRl
cnMpOgotICAgICAgICAiIiJTZXRzIHRoZSBlcnJvci1tZXNzYWdlIGZpbHRlcnMuCi0KLSAgICAg
ICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gZW1p
dCBhIGdpdmVuCi0gICAgICAgIGVycm9yIG1lc3NhZ2UuCisgICAgZGVmIHNldF9maWx0ZXIoc2Vs
ZiwgZmlsdGVyKToKKyAgICAgICAgIiIiU2V0cyB0aGUgZXJyb3ItbWVzc2FnZSBmaWx0ZXIuCiAK
ICAgICAgICAgQXJnczoKLSAgICAgICAgICBmaWx0ZXJzOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0
IGFyZSBib29sZWFuIGZpbHRlciBydWxlcyB1c2VkCi0gICAgICAgICAgICAgICAgICAgdG8gZGV0
ZXJtaW5lIHdoZXRoZXIgYSBzdHlsZSBjYXRlZ29yeSBzaG91bGQgYmUgY2hlY2tlZC4KLSAgICAg
ICAgICAgICAgICAgICBFYWNoIHN0cmluZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4
YW1wbGUKLSAgICAgICAgICAgICAgICAgICBzdHJpbmcgaXMgIit3aGl0ZXNwYWNlL2luZGVudCIu
IFRoZSBsaXN0IGluY2x1ZGVzIGFueQotICAgICAgICAgICAgICAgICAgIHByZXBlbmRlZCBkZWZh
dWx0IGZpbHRlciBydWxlcy4KLQotICAgICAgICBSYWlzZXM6Ci0gICAgICAgICAgVmFsdWVFcnJv
cjogTm90IGFsbCBmaWx0ZXJzIHN0YXJ0ZWQgd2l0aCAnKycgb3IgJy0nLiBGb3IgZXhhbXBsZSwK
LSAgICAgICAgICAgICAgICAgICAgICAiLSwrd2hpdGVzcGFjZSwtd2hpdGVzcGFjZS9pbmRlbnQs
d2hpdGVzcGFjZS9iYWRmaWx0ZXIiCisgICAgICAgICAgZmlsdGVyOiBBIENhdGVnb3J5RmlsdGVy
IGluc3RhbmNlLgorCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZpbHRlcnMgPSBbXQotICAg
ICAgICBmb3IgZmlsdGVyIGluIGZpbHRlcnM6Ci0gICAgICAgICAgICBjbGVhbl9maWx0ZXIgPSBm
aWx0ZXIuc3RyaXAoKQotICAgICAgICAgICAgaWYgY2xlYW5fZmlsdGVyOgotICAgICAgICAgICAg
ICAgIHNlbGYuZmlsdGVycy5hcHBlbmQoY2xlYW5fZmlsdGVyKQotICAgICAgICBmb3IgZmlsdGVy
IGluIHNlbGYuZmlsdGVyczoKLSAgICAgICAgICAgIGlmIG5vdCAoZmlsdGVyLnN0YXJ0c3dpdGgo
JysnKSBvciBmaWx0ZXIuc3RhcnRzd2l0aCgnLScpKToKLSAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdFdmVyeSBmaWx0ZXIgaW4gLS1maWx0ZXIgbXVzdCBzdGFydCB3aXRoICcKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrIG9yIC0gKCVzIGRvZXMgbm90KScgJSBm
aWx0ZXIpCisgICAgICAgIHNlbGYuZmlsdGVyID0gZmlsdGVyCiAKICAgICBkZWYgcmVzZXRfZXJy
b3JfY291bnQoc2VsZik6CiAgICAgICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yIHN0YXRp
c3RpYyBiYWNrIHRvIHplcm8uIiIiCkBAIC0zMjUsMjUgKzMwNywyMiBAQCBkZWYgX3NldF92ZXJi
b3NlX2xldmVsKGxldmVsKToKICAgICByZXR1cm4gX2NwcF9zdHlsZV9zdGF0ZS5zZXRfdmVyYm9z
ZV9sZXZlbChsZXZlbCkKIAogCi1kZWYgX2ZpbHRlcnMoKToKLSAgICAiIiJSZXR1cm5zIHRoZSBt
b2R1bGUncyBsaXN0IG9mIG91dHB1dCBmaWx0ZXJzLCBhcyBhIGxpc3QuIiIiCi0gICAgcmV0dXJu
IF9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycworZGVmIF9maWx0ZXIoKToKKyAgICAiIiJSZXR1cm5z
IHRoZSBtb2R1bGUncyBDYXRlZ29yeUZpbHRlciBpbnN0YW5jZS4iIiIKKyAgICByZXR1cm4gX2Nw
cF9zdHlsZV9zdGF0ZS5maWx0ZXIKIAogCi1kZWYgX3NldF9maWx0ZXJzKGZpbHRlcnMpOgotICAg
ICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yLW1lc3NhZ2UgZmlsdGVycy4KK2RlZiBfc2V0X2Zp
bHRlcihmaWx0ZXIpOgorICAgICIiIlNldHMgdGhlIG1vZHVsZSdzIGVycm9yLW1lc3NhZ2UgZmls
dGVyLgogCi0gICAgVGhlc2UgZmlsdGVycyBhcmUgYXBwbGllZCB3aGVuIGRlY2lkaW5nIHdoZXRo
ZXIgdG8gZW1pdCBhIGdpdmVuCisgICAgVGhlIGZpbHRlciBpcyBhcHBsaWVkIHdoZW4gZGVjaWRp
bmcgd2hldGhlciB0byBlbWl0IGEgZ2l2ZW4KICAgICBlcnJvciBtZXNzYWdlLgogCiAgICAgQXJn
czoKLSAgICAgIGZpbHRlcnM6IEEgbGlzdCBvZiBzdHJpbmdzIHRoYXQgYXJlIGJvb2xlYW4gZmls
dGVyIHJ1bGVzIHVzZWQKLSAgICAgICAgICAgICAgIHRvIGRldGVybWluZSB3aGV0aGVyIGEgc3R5
bGUgY2F0ZWdvcnkgc2hvdWxkIGJlIGNoZWNrZWQuCi0gICAgICAgICAgICAgICBFYWNoIHN0cmlu
ZyBzaG91bGQgc3RhcnQgd2l0aCArIG9yIC0uIEFuIGV4YW1wbGUKLSAgICAgICAgICAgICAgIHN0
cmluZyBpcyAiK3doaXRlc3BhY2UvaW5kZW50Ii4gVGhlIGxpc3QgaW5jbHVkZXMgYW55Ci0gICAg
ICAgICAgICAgICBwcmVwZW5kZWQgZGVmYXVsdCBmaWx0ZXIgcnVsZXMuCisgICAgICBmaWx0ZXI6
IEEgQ2F0ZWdvcnlGaWx0ZXIgaW5zdGFuY2UuCisKICAgICAiIiIKLSAgICBfY3BwX3N0eWxlX3N0
YXRlLnNldF9maWx0ZXJzKGZpbHRlcnMpCisgICAgX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVy
KGZpbHRlcikKIAogCiBkZWYgZXJyb3JfY291bnQoKToKQEAgLTUwNSwyMCArNDg0LDEyIEBAIGRl
ZiBfc2hvdWxkX3ByaW50X2Vycm9yKGNhdGVnb3J5LCBjb25maWQKICAgICBpZiBjb25maWRlbmNl
IDwgX2NwcF9zdHlsZV9zdGF0ZS52ZXJib3NlX2xldmVsOgogICAgICAgICByZXR1cm4gRmFsc2UK
IAotICAgIGlzX2ZpbHRlcmVkID0gRmFsc2UKLSAgICBmb3Igb25lX2ZpbHRlciBpbiBfZmlsdGVy
cygpOgotICAgICAgICBpZiBvbmVfZmlsdGVyLnN0YXJ0c3dpdGgoJy0nKToKLSAgICAgICAgICAg
IGlmIGNhdGVnb3J5LnN0YXJ0c3dpdGgob25lX2ZpbHRlclsxOl0pOgotICAgICAgICAgICAgICAg
IGlzX2ZpbHRlcmVkID0gVHJ1ZQotICAgICAgICBlbGlmIG9uZV9maWx0ZXIuc3RhcnRzd2l0aCgn
KycpOgotICAgICAgICAgICAgaWYgY2F0ZWdvcnkuc3RhcnRzd2l0aChvbmVfZmlsdGVyWzE6XSk6
Ci0gICAgICAgICAgICAgICAgaXNfZmlsdGVyZWQgPSBGYWxzZQotICAgICAgICBlbHNlOgotICAg
ICAgICAgICAgYXNzZXJ0IEZhbHNlICAjIHNob3VsZCBoYXZlIGJlZW4gY2hlY2tlZCBmb3IgaW4g
c2V0X2ZpbHRlci4KLSAgICBpZiBpc19maWx0ZXJlZDoKLSAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgZmlsdGVyID0gX2ZpbHRlcigpCiAKLSAgICByZXR1cm4gVHJ1ZQorICAgIGlmIGZpbHRlciBp
cyBOb25lOgorICAgICAgICByZXR1cm4gVHJ1ZSAjIEFsbCBjYXRlZ29yaWVzIHNob3VsZCBiZSBj
aGVja2VkIGJ5IGRlZmF1bHQuCisKKyAgICByZXR1cm4gZmlsdGVyLnNob3VsZF9jaGVjayhjYXRl
Z29yeSkKIAogCiBkZWYgZXJyb3IoZmlsZW5hbWUsIGxpbmVfbnVtYmVyLCBjYXRlZ29yeSwgY29u
ZmlkZW5jZSwgbWVzc2FnZSk6CkluZGV4OiBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0
eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NwcF9zdHlsZV91bml0dGVzdC5weQkocmV2aXNpb24gNTMwNTMp
CisrKyBXZWJLaXRUb29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NwcF9zdHlsZV91bml0dGVz
dC5weQkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDExIEBAIGltcG9ydCByYW5kb20KIGlt
cG9ydCByZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgY3BwX3N0eWxlCi0jIEZJWE1FOiBSZW1v
dmUgdGhlIG5lZWQgdG8gaW1wb3J0IHNvbWV0aGluZyBmcm9tIGNoZWNrZXIuIFNlZSB0aGUKKyMg
RklYTUU6IFJlbW92ZSB0aGUgbmVlZCB0byBpbXBvcnQgYW55dGhpbmcgZnJvbSBjaGVja2VyLiBT
ZWUgdGhlCiAjICAgICAgICBGSVhNRSBub3RlcyBuZWFyIHRoZSBTVFlMRV9DQVRFR09SSUVTIGRl
ZmluaXRpb24gZm9yIGEKICMgICAgICAgIHN1Z2dlc3Rpb24gb24gaG93IHRvIGJlc3QgZG8gdGhp
cy4KIGZyb20gY2hlY2tlciBpbXBvcnQgU1RZTEVfQ0FURUdPUklFUworZnJvbSBjaGVja2VyIGlt
cG9ydCBDYXRlZ29yeUZpbHRlcgogCiAjIFRoaXMgY2xhc3Mgd29ya3MgYXMgYW4gZXJyb3IgY29s
bGVjdG9yIGFuZCByZXBsYWNlcyBjcHBfc3R5bGUuRXJyb3IKICMgZnVuY3Rpb24gZm9yIHRoZSB1
bml0IHRlc3RzLiAgV2UgYWxzbyB2ZXJpZnkgZWFjaCBjYXRlZ29yeSB3ZSBzZWUKQEAgLTE1NzEs
OSArMTU3Miw5IEBAIGNsYXNzIENwcFN0eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAg
ICAgICAgICAgICAgICAgICAgICAnVGFiIGZvdW5kOyBiZXR0ZXIgdG8gdXNlIHNwYWNlcyAgW3do
aXRlc3BhY2UvdGFiXSBbMV0nKQogCiAgICAgZGVmIHRlc3RfZmlsdGVyKHNlbGYpOgotICAgICAg
ICBvbGRfZmlsdGVycyA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKKyAgICAg
ICAgb2xkX2ZpbHRlciA9IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcgogICAgICAg
ICB0cnk6Ci0gICAgICAgICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVy
cyhbJy0nLCAnK3doaXRlc3BhY2UnLCAnLXdoaXRlc3BhY2UvaW5kZW50J10pCisgICAgICAgICAg
ICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5zZXRfZmlsdGVyKENhdGVnb3J5RmlsdGVyKFsn
LScsICcrd2hpdGVzcGFjZScsICctd2hpdGVzcGFjZS9pbmRlbnQnXSkpCiAgICAgICAgICAgICBz
ZWxmLmFzc2VydF9saW50KAogICAgICAgICAgICAgICAgICcvLyBIZWxsbyB0aGVyZSAnLAogICAg
ICAgICAgICAgICAgICdMaW5lIGVuZHMgaW4gd2hpdGVzcGFjZS4gIENvbnNpZGVyIGRlbGV0aW5n
IHRoZXNlIGV4dHJhIHNwYWNlcy4nCkBAIC0xNTgxLDIyICsxNTgyLDIyIEBAIGNsYXNzIENwcFN0
eWxlVGVzdChDcHBTdHlsZVRlc3RCYXNlKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQo
J2ludCBhID0gKGludCkxLjA7JywgJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9saW50KCcg
d2VpcmQgb3BlbmluZyBzcGFjZScsICcnKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAg
Y3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuZmlsdGVycyA9IG9sZF9maWx0ZXJzCisgICAgICAg
ICAgICBjcHBfc3R5bGUuX2NwcF9zdHlsZV9zdGF0ZS5maWx0ZXIgPSBvbGRfZmlsdGVyCiAKICAg
ICBkZWYgdGVzdF9maWx0ZXJfYXBwZW5kaW5nKHNlbGYpOgotICAgICAgICBvbGRfZmlsdGVycyA9
IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcnMKKyAgICAgICAgb2xkX2ZpbHRlciA9
IGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0YXRlLmZpbHRlcgogICAgICAgICB0cnk6CiAgICAgICAg
ICAgICAjIFJlc2V0IGZpbHRlcnMKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0eWxlX3N0
YXRlLnNldF9maWx0ZXJzKFsnLXdoaXRlc3BhY2UnXSkKKyAgICAgICAgICAgIGNwcF9zdHlsZS5f
Y3BwX3N0eWxlX3N0YXRlLnNldF9maWx0ZXIoQ2F0ZWdvcnlGaWx0ZXIoWyctd2hpdGVzcGFjZSdd
KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xpbnQoJy8vIEhlbGxvIHRoZXJlICcsICcnKQot
ICAgICAgICAgICAgY3BwX3N0eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcnMoWyctd2hp
dGVzcGFjZScsICcrd2hpdGVzcGFjZS9lbmRfb2ZfbGluZSddKQorICAgICAgICAgICAgY3BwX3N0
eWxlLl9jcHBfc3R5bGVfc3RhdGUuc2V0X2ZpbHRlcihDYXRlZ29yeUZpbHRlcihbJy13aGl0ZXNw
YWNlJywgJyt3aGl0ZXNwYWNlL2VuZF9vZl9saW5lJ10pKQogICAgICAgICAgICAgc2VsZi5hc3Nl
cnRfbGludCgKICAgICAgICAgICAgICAgICAnLy8gSGVsbG8gdGhlcmUgJywKICAgICAgICAgICAg
ICAgICAnTGluZSBlbmRzIGluIHdoaXRlc3BhY2UuICBDb25zaWRlciBkZWxldGluZyB0aGVzZSBl
eHRyYSBzcGFjZXMuJwogICAgICAgICAgICAgICAgICcgIFt3aGl0ZXNwYWNlL2VuZF9vZl9saW5l
XSBbNF0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfbGludCgnIHdlaXJkIG9wZW5pbmcgc3Bh
Y2UnLCAnJykKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGNwcF9zdHlsZS5fY3BwX3N0
eWxlX3N0YXRlLmZpbHRlcnMgPSBvbGRfZmlsdGVycworICAgICAgICAgICAgY3BwX3N0eWxlLl9j
cHBfc3R5bGVfc3RhdGUuZmlsdGVyID0gb2xkX2ZpbHRlcgogCiAgICAgZGVmIHRlc3RfdW5uYW1l
ZF9uYW1lc3BhY2VzX2luX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0X2xhbmd1
YWdlX3J1bGVzX2NoZWNrKAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>