<?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>216403</bug_id>
          
          <creation_ts>2020-09-11 04:31:29 -0700</creation_ts>
          <short_desc>[webkitscmpy] Add Commit object</short_desc>
          <delta_ts>2020-09-30 17:46:01 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=215862</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=216404</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>kocsen_chung</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zhifei_fang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1687697</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-11 04:31:29 -0700</bug_when>
    <thetext>Add a sortable commit object that includes our the new monotonically increasing identifier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687698</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-11 04:31:47 -0700</bug_when>
    <thetext>&lt;rdar://problem/68702779&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1687702</commentid>
    <comment_count>2</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-11 04:37:35 -0700</bug_when>
    <thetext>This change is being used to support https://bugs.webkit.org/show_bug.cgi?id=216404</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688900</commentid>
    <comment_count>3</comment_count>
      <attachid>408874</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-15 16:05:17 -0700</bug_when>
    <thetext>Created attachment 408874
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1688901</commentid>
    <comment_count>4</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-15 16:07:06 -0700</bug_when>
    <thetext>This change doesn&apos;t cover actually generating the identifiers, but does cover what those identifiers would look like as strings, how we parse them out, how we determine whether a particular string is an identifier/revision/git hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1690010</commentid>
    <comment_count>5</comment_count>
      <attachid>409184</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-18 18:10:39 -0700</bug_when>
    <thetext>Created attachment 409184
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691182</commentid>
    <comment_count>6</comment_count>
      <attachid>409486</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-23 11:12:16 -0700</bug_when>
    <thetext>Created attachment 409486
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691195</commentid>
    <comment_count>7</comment_count>
      <attachid>409486</attachid>
    <who name="Dean Johnson">dean_johnson</who>
    <bug_when>2020-09-23 11:40:16 -0700</bug_when>
    <thetext>Comment on attachment 409486
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:33
&gt; +    IDENTIFIER_RE = re.compile(r&apos;^i?(?P&lt;identifier&gt;-?\d+)(?P&lt;branch&gt;@\S+)?$&apos;)

Should we be capturing &apos;@&apos; as part of the branch group? That seems like it will lead to a ton of branch.lstrip(&apos;@&apos;) in caller&apos;s code.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:37
&gt; +    def standardize_hash(cls, hash, do_assert=False):

Can we rename &quot;standardize&quot; to &quot;parse&quot; (for all standardize_* functions).

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:41
&gt; +        if not isinstance(hash, str) and not isinstance(hash, unicode):

For Py2/3 compatibility it would be better to use six.string_types:
`if not isinstance(hash, six.string_types)`

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:62
&gt; +            elif cls.NUMBER_RE.match(revision):

I think you can also call `&lt;str_object&gt;.isdigit()` instead of parsing via regex.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:79
&gt; +        return revision

I think providing a float causes this code to return what was provided.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:94
&gt; +            elif cls.NUMBER_RE.match(identifier):

I&apos;m a bit confused -- how will we know if a number is an ID, a revision, or a hash?

Also, you can &lt;str_object&gt;.isdigit().

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:106
&gt; +        return identifier, branch

The return types for `standardize_identifier` is different than `standardize_revision` and `standardize_hash`. That is prone to lead to confusion and bugs if someone uses the code.

Can we find a way to keep the return types the same? e.g. vending a new Commit object based on the parsed data.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:133
&gt; +        if branch and not isinstance(branch, str) and not isinstance(branch, unicode):

Ditto to six.string_types comment.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:136
&gt; +            raise ValueError(&quot;Caller passed both &apos;branch&apos; and &apos;identifier&apos;, but specified different branches&quot;)

Can we also include the invalid values to assist with debugging?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:139
&gt; +            raise TypeError(&quot;Expected &apos;timestamp&apos; to be of type {}&quot;.format(int))

Can we also include the invalid values to assist with debugging? Also, I don&apos;t think `int` needs to be formatted into the string.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:143
&gt; +            raise TypeError(&quot;Expected &apos;author&apos; to be of type {}&quot;.format(Contributor))

Ditto. Also, it seems like author should be able to be an email (for example) that is turned into a Contributor object.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:146
&gt; +        if message and not isinstance(message, str) and not isinstance(message, unicode):

Ditto to six.string_types comment.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:156
&gt; +            result += &apos;    SVN revision: r{}&apos;.format(self.revision)

Do we need to prefix with spaces? Since this is across multiple lines it will be messy to reformat for any caller.

Can we rename this function to &quot;pretty_print&quot; after Python&apos;s prettyprinter? to_string (to me) seems like the output you return for __repr__.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691201</commentid>
    <comment_count>8</comment_count>
      <attachid>409486</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-23 11:51:21 -0700</bug_when>
    <thetext>Comment on attachment 409486
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:33
&gt;&gt; +    IDENTIFIER_RE = re.compile(r&apos;^i?(?P&lt;identifier&gt;-?\d+)(?P&lt;branch&gt;@\S+)?$&apos;)
&gt; 
&gt; Should we be capturing &apos;@&apos; as part of the branch group? That seems like it will lead to a ton of branch.lstrip(&apos;@&apos;) in caller&apos;s code.

We don&apos;t really want to make the @ optional, though.

All the callers access this through the &quot;standardize_identifier&quot; functions anyways, so they already get a striped branch.

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:62
&gt;&gt; +            elif cls.NUMBER_RE.match(revision):
&gt; 
&gt; I think you can also call `&lt;str_object&gt;.isdigit()` instead of parsing via regex.

That doesn&apos;t support negative numbers....which is fine for svn revisions, I suppose.

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:79
&gt;&gt; +        return revision
&gt; 
&gt; I think providing a float causes this code to return what was provided.

Oops, yeah, it would

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:94
&gt;&gt; +            elif cls.NUMBER_RE.match(identifier):
&gt; 
&gt; I&apos;m a bit confused -- how will we know if a number is an ID, a revision, or a hash?
&gt; 
&gt; Also, you can &lt;str_object&gt;.isdigit().

That&apos;s handled in &quot;parse&quot;. If you provide a raw integer, we assume identifier first, then revision and lastly a hash.

Identifiers can be negative, isdigit() won&apos;t work here

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:106
&gt;&gt; +        return identifier, branch
&gt; 
&gt; The return types for `standardize_identifier` is different than `standardize_revision` and `standardize_hash`. That is prone to lead to confusion and bugs if someone uses the code.
&gt; 
&gt; Can we find a way to keep the return types the same? e.g. vending a new Commit object based on the parsed data.

We can&apos;t vend a new Commit object because these functions are really helper functions used to construct the commit. Maybe it&apos;s best to preface these functions with an _ to indicate that they really aren&apos;t meant to be API

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:156
&gt;&gt; +            result += &apos;    SVN revision: r{}&apos;.format(self.revision)
&gt; 
&gt; Do we need to prefix with spaces? Since this is across multiple lines it will be messy to reformat for any caller.
&gt; 
&gt; Can we rename this function to &quot;pretty_print&quot; after Python&apos;s prettyprinter? to_string (to me) seems like the output you return for __repr__.

If callers were going to reformat, I assume they would either split the lines or construct their own string. What would you envision a caller would do with this output? I figured most of the time it would be printed directly.

pretty_print is a better name, will rename.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692147</commentid>
    <comment_count>9</comment_count>
      <attachid>409768</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-25 21:18:13 -0700</bug_when>
    <thetext>Created attachment 409768
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692667</commentid>
    <comment_count>10</comment_count>
      <attachid>409920</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-28 14:06:28 -0700</bug_when>
    <thetext>Created attachment 409920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693189</commentid>
    <comment_count>11</comment_count>
      <attachid>410060</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-29 15:36:47 -0700</bug_when>
    <thetext>Created attachment 410060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693192</commentid>
    <comment_count>12</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-29 15:48:52 -0700</bug_when>
    <thetext>Ryosuke had an idea to embed the branch point from the default branch into the identifier. I think this improves the human readability of the identifiers, but the additional information is actually not required to define which a commit. The current patch will print the branch point, if it&apos;s provided, but an identifier without a branch point will still be parsed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693229</commentid>
    <comment_count>13</comment_count>
      <attachid>410068</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-29 16:57:02 -0700</bug_when>
    <thetext>Created attachment 410068
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693480</commentid>
    <comment_count>14</comment_count>
      <attachid>410068</attachid>
    <who name="">dewei_zhu</who>
    <bug_when>2020-09-30 12:10:07 -0700</bug_when>
    <thetext>Comment on attachment 410068
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:33
&gt; +    IDENTIFIER_RE = re.compile(r&apos;^[Ii]?((?P&lt;branch_point&gt;\d+)\.)?(?P&lt;identifier&gt;-?\d+)(@(?P&lt;branch&gt;\S+))?$&apos;)

For the identifier, will it be a string prefixed &apos;-&apos;?
m = IDENTIFIER_RE.match(&apos;123.-456@main&apos;)
m.group(&apos;identifier&apos;) will be &apos;-456&apos;, is this expected?
Do we intentionally keep a &apos;.&apos; after branch point?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:82
&gt; +    def _parse_identifier(cls, identifier, do_assert=False):

This function have inconsistent return value type,
it can be:
None,
int, string
(int, int), string.
This makes parsing the results more complicated as you did on line 134.

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/commit_unittest.py:87
&gt; +        self.assertEqual(None, Commit._parse_identifier(3.141592))

Do we have test case like `&apos;i123.-124@main` if this is supported identifier? If not, we should programmatically disable it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693489</commentid>
    <comment_count>15</comment_count>
      <attachid>410068</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-30 12:31:55 -0700</bug_when>
    <thetext>Comment on attachment 410068
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:33
&gt;&gt; +    IDENTIFIER_RE = re.compile(r&apos;^[Ii]?((?P&lt;branch_point&gt;\d+)\.)?(?P&lt;identifier&gt;-?\d+)(@(?P&lt;branch&gt;\S+))?$&apos;)
&gt; 
&gt; For the identifier, will it be a string prefixed &apos;-&apos;?
&gt; m = IDENTIFIER_RE.match(&apos;123.-456@main&apos;)
&gt; m.group(&apos;identifier&apos;) will be &apos;-456&apos;, is this expected?
&gt; Do we intentionally keep a &apos;.&apos; after branch point?

The weirdness here is because the branch point is helpful for humans, but it&apos;s not actually required to define a commit.

The example you provided is an invalid identifier, but not because of the negative value, it&apos;s because of the magnitude of the negative value (it&apos;s larger than the branch point) and the fact that &quot;main&quot; is likely the default branch. If you provide a negative identifier with a branch point (like i123.-4@branch-a), what you&apos;re really saying is &quot;I want the commit 4 before the branch point on the default branch&quot;, (i119@main, in this case). Negative identifiers are valid arguments to scripts, but they are never going to be canonical identifiers of commits. If you passed something like &quot;i123.-4@branch-a&quot; to any service, we would fetch the commit matching those arguments, recompute the identifiers and refer to the commit as &quot;i119@main&quot;. I&apos;m working on the specific rules for canonical identifiers in https://bugs.webkit.org/show_bug.cgi?id=216404, those are separate from this change because they rely on your specific repository (namely, what your default branch is)

The &quot;branch_point&quot; intentionally is grouped with the &apos;.&apos; because commits on the default branch don&apos;t have a branch point

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/commit.py:82
&gt;&gt; +    def _parse_identifier(cls, identifier, do_assert=False):
&gt; 
&gt; This function have inconsistent return value type,
&gt; it can be:
&gt; None,
&gt; int, string
&gt; (int, int), string.
&gt; This makes parsing the results more complicated as you did on line 134.

I&apos;m open to changing this, I&apos;m just not sure the right way to do so. Returning None is handy for quickly testing, we could make &quot;int, string&quot; into &quot;(None, int), string&quot; to standardize it. Although in that case, I suppose it would be better to just return &quot;int, int, string&quot; and &quot;None, int, string&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693516</commentid>
    <comment_count>16</comment_count>
      <attachid>410152</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-30 13:49:42 -0700</bug_when>
    <thetext>Created attachment 410152
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693551</commentid>
    <comment_count>17</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2020-09-30 15:48:00 -0700</bug_when>
    <thetext>r=me

Had some offline discussion with Johnathan, there will be a follow-up change to perform more comprehensive sanity check regarding negative identifier and branching points.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693588</commentid>
    <comment_count>18</comment_count>
      <attachid>410175</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-09-30 17:13:37 -0700</bug_when>
    <thetext>Created attachment 410175
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693604</commentid>
    <comment_count>19</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-30 17:46:01 -0700</bug_when>
    <thetext>Committed r267815: &lt;https://trac.webkit.org/changeset/267815&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410175.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408874</attachid>
            <date>2020-09-15 16:05:17 -0700</date>
            <delta_ts>2020-09-18 18:10:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200915160516.patch</filename>
            <type>text/plain</type>
            <size>19140</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzEwNSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuc3RhbmRhcmRpemVfaGFzaCk6IEdpdmVuIGEgaGFzaCwgdmVyaWZ5IHRoYXQgdGhl
IHByb3ZpZGVkIGFyZ3VtZW50IGlzCisgICAgICAgIEFjdHVhbGx5IGEgZ2l0IGhhc2guCisgICAg
ICAgIChDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24pOiBHaXZlbiBhIHN0cmluZyBvciBpbnRl
Z2VyLCB2ZXJpZnkgdGhlIHByb3ZpZGVkCisgICAgICAgIGFyZ3VtZW50IGlzIGEgdmFsaWQgU1ZO
IHJldmlzaW9uIGFuZCByZXR1cm4gdGhlIHJldmlzaW9uIGFzIGFuIGludGVnZXIuCisgICAgICAg
IChDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVn
ZXIsIHZlcmlmeSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVu
dGlmaWVyIGFuZCByZXR1cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENv
bW1pdC5wYXJzZSk6IEdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBz
dm4gcmV2aXNpb24gb3IKKyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVj
dC4KKyAgICAgICAgKENvbW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQudG9fc3RyaW5n
KTogUmV0dXJuIGEgbG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBj
b21taXQKKyAgICAgICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAg
ICAgICAoQ29tbWl0Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1p
dF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRl
c3RDb21taXQudGVzdF9zdGFuZGFyZGl6ZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9zdGFuZGFyZGl6ZV9yZXZpc2lvbik6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3Rfc3RhbmRh
cmRpemVfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAg
ICAgICAoVGVzdENvbW1pdC50ZXN0X3RvX3N0cmluZyk6CisKIDIwMjAtMDktMTUgIFNhbSBXZWlu
aWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBydW50aW1lIHNldHRpbmcg
Zm9yIGVuYWJsaW5nL2Rpc2FibGluZyB0aGUgZmV0Y2ggQVBJCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weQkocmV2aXNpb24gMjY3MDk2KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDEw
ICs0NiwxMiBAQCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3
ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgt
dXJsIDxwYWNrYWdlIGluZGV4IFVSTD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwg
MCwgNCkKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDAsIDUpCiAKIGZyb20gd2Via2l0c2NtcHkuY29u
dHJpYnV0b3IgaW1wb3J0IENvbnRyaWJ1dG9yCiAKK2Zyb20gd2Via2l0c2NtcHkuY29tbWl0IGlt
cG9ydCBDb21taXQKKwogZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwKIGZyb20gd2Via2l0
c2NtcHkgaW1wb3J0IG1vY2tzCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkJKG5vbmV4aXN0ZW50
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29t
bWl0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI0IEBACisjIENvcHlyaWdodCAoQykg
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCByZQorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBk
YXRldGltZQorZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IHVuaWNvZGUKK2Zyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IENvbnRyaWJ1dG9yCisKKworY2xhc3MgQ29tbWl0KG9iamVjdCk6CisgICAgSEFT
SF9SRSA9IHJlLmNvbXBpbGUocideW2EtZjAtOUEtRl0rJCcpCisgICAgUkVWSVNJT05fUkUgPSBy
ZS5jb21waWxlKHInXnIoP1A8cmV2aXNpb24+XGQrKSQnKQorICAgIElERU5USUZJRVJfUkUgPSBy
ZS5jb21waWxlKHInXmkoP1A8aWRlbnRpZmllcj5cZCspKD9QPGJyYW5jaD5AXFMrKT8kJykKKyAg
ICBOVU1CRVJfUkUgPSByZS5jb21waWxlKHInXlxkKyQnKQorCisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIHN0YW5kYXJkaXplX2hhc2goY2xzLCBoYXNoKToKKyAgICAgICAgaWYgbm90IGhhc2g6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShoYXNo
LCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShoYXNoLCB1bmljb2RlKToKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIGlmIG5vdCBjbHMuSEFTSF9SRS5tYXRjaChoYXNoKToKKyAgICAg
ICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIGxlbihoYXNoKSA+IDQwOgorICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGhhc2gubG93ZXIoKQorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIHN0YW5kYXJkaXplX3JldmlzaW9uKGNscywgcmV2aXNpb24pOgorICAg
ICAgICBpZiBub3QgcmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBp
ZiBpc2luc3RhbmNlKHJldmlzaW9uLCBzdHIpIG9yIGlzaW5zdGFuY2UocmV2aXNpb24sIHVuaWNv
ZGUpOgorICAgICAgICAgICAgbWF0Y2ggPSBjbHMuUkVWSVNJT05fUkUubWF0Y2gocmV2aXNpb24p
CisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICByZXZpc2lvbiA9IGludCht
YXRjaC5ncm91cCgncmV2aXNpb24nKSkKKyAgICAgICAgICAgIGVsaWYgY2xzLk5VTUJFUl9SRS5t
YXRjaChyZXZpc2lvbik6CisgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBpbnQocmV2aXNpb24p
CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAg
IGlmIG5vdCBpc2luc3RhbmNlKHJldmlzaW9uLCBpbnQpOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgaWYgcmV2aXNpb24gPD0gMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisg
ICAgICAgIHJldHVybiByZXZpc2lvbgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN0YW5k
YXJkaXplX2lkZW50aWZpZXIoY2xzLCBpZGVudGlmaWVyKToKKyAgICAgICAgaWYgbm90IGlkZW50
aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJyYW5jaCA9IE5vbmUK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShpZGVudGlmaWVyLCBzdHIpIG9yIGlzaW5zdGFuY2UoaWRl
bnRpZmllciwgdW5pY29kZSk6CisgICAgICAgICAgICBtYXRjaCA9IGNscy5JREVOVElGSUVSX1JF
Lm1hdGNoKGlkZW50aWZpZXIpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyID0gaW50KG1hdGNoLmdyb3VwKCdpZGVudGlmaWVyJykpCisgICAgICAgICAg
ICAgICAgYnJhbmNoID0gbWF0Y2guZ3JvdXAoJ2JyYW5jaCcpCisgICAgICAgICAgICAgICAgaWYg
YnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBicmFuY2ggPSBicmFuY2hbMTpdCisgICAgICAg
ICAgICBlbGlmIGNscy5OVU1CRVJfUkUubWF0Y2goaWRlbnRpZmllcik6CisgICAgICAgICAgICAg
ICAgaWRlbnRpZmllciA9IGludChpZGVudGlmaWVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpZGVudGlm
aWVyLCBpbnQpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgaWRlbnRpZmll
ciA8PSAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGlkZW50aWZp
ZXIsIGJyYW5jaAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBhcnNlKGNscywgYXJnKToK
KyAgICAgICAgaWYgY2xzLnN0YW5kYXJkaXplX2lkZW50aWZpZXIoYXJnKToKKyAgICAgICAgICAg
IHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcpCisKKyAgICAgICAgaWYgY2xzLnN0YW5kYXJk
aXplX3JldmlzaW9uKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gQ29tbWl0KHJldmlzaW9uPWFy
ZykKKworICAgICAgICBpZiBjbHMuc3RhbmRhcmRpemVfaGFzaChhcmcpOgorICAgICAgICAgICAg
cmV0dXJuIENvbW1pdChoYXNoPWFyZykKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30n
IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21taXQgb2JqZWN0Ii5mb3JtYXQoYXJnKSkKKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYXNoPU5vbmUsIHJldmlzaW9uPU5vbmUsIGlkZW50aWZp
ZXI9Tm9uZSwgYnJhbmNoPU5vbmUsIHRpbWVzdGFtcD1Ob25lLCBhdXRob3I9Tm9uZSwgbWVzc2Fn
ZT1Ob25lKToKKyAgICAgICAgc2VsZi5icmFuY2ggPSBicmFuY2gKKworICAgICAgICBzZWxmLmhh
c2ggPSBOb25lCisgICAgICAgIGlmIGhhc2g6CisgICAgICAgICAgICBzZWxmLmhhc2ggPSBzZWxm
LnN0YW5kYXJkaXplX2hhc2goaGFzaCkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmhhc2g6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBpcyBub3QgYSB2YWxpZCBnaXQg
aGFzaCIuZm9ybWF0KHNlbGYuaGFzaCkpCisKKyAgICAgICAgc2VsZi5yZXZpc2lvbiA9IE5vbmUK
KyAgICAgICAgaWYgcmV2aXNpb246CisgICAgICAgICAgICBzZWxmLnJldmlzaW9uID0gc2VsZi5z
dGFuZGFyZGl6ZV9yZXZpc2lvbihyZXZpc2lvbikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJl
dmlzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgaXMgbm90IGEg
dmFsaWQgU1ZOIHJldmlzaW9uIi5mb3JtYXQoc2VsZi5yZXZpc2lvbikpCisKKyAgICAgICAgc2Vs
Zi5pZGVudGlmaWVyID0gTm9uZQorICAgICAgICBpZiBpZGVudGlmaWVyOgorICAgICAgICAgICAg
cGFyc2VkX2lkZW50aWZpZXIgPSBzZWxmLnN0YW5kYXJkaXplX2lkZW50aWZpZXIoaWRlbnRpZmll
cikKKyAgICAgICAgICAgIGlmIG5vdCBwYXJzZWRfaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhIHZhbGlkIGlkZW50aWZpZXIiLmZvcm1h
dChpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpZmllciwgc2VsZi5icmFuY2gg
PSBwYXJzZWRfaWRlbnRpZmllcgorICAgICAgICAgICAgaWYgc2VsZi5icmFuY2ggYW5kIGJyYW5j
aCBhbmQgc2VsZi5icmFuY2ggIT0gYnJhbmNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoImlkZW50aWZpZXIgJ3t9JyBjb25mbGljdHMgd2l0aCBzcGVjaWZpZWQgYnJhbmNoICd7
fSciLmZvcm1hdChpZGVudGlmaWVyLCBicmFuY2gpKQorCisgICAgICAgIGlmIGJyYW5jaCBhbmQg
bm90IGlzaW5zdGFuY2UoYnJhbmNoLCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShicmFuY2gsIHVu
aWNvZGUpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2JyYW5jaCcg
dG8gYmUgYSBzdHJpbmciKQorICAgICAgICBpZiBub3Qgc2VsZi5icmFuY2g6CisgICAgICAgICAg
ICBzZWxmLmJyYW5jaCA9IGJyYW5jaAorCisgICAgICAgIGlmIHRpbWVzdGFtcCBhbmQgbm90IGlz
aW5zdGFuY2UodGltZXN0YW1wLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJF
eHBlY3RlZCAndGltZXN0YW1wJyB0byBiZSBvZiB0eXBlIHt9Ii5mb3JtYXQoaW50KSkKKyAgICAg
ICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKworICAgICAgICBpZiBhdXRob3IgYW5kIG5v
dCBpc2luc3RhbmNlKGF1dGhvciwgQ29udHJpYnV0b3IpOgorICAgICAgICAgICAgcmFpc2UgVHlw
ZUVycm9yKCJFeHBlY3RlZCAnYXV0aG9yJyB0byBiZSBvZiB0eXBlIHt9Ii5mb3JtYXQoQ29udHJp
YnV0b3IpKQorICAgICAgICBzZWxmLmF1dGhvciA9IGF1dGhvcgorCisgICAgICAgIGlmIG1lc3Nh
Z2UgYW5kIG5vdCBpc2luc3RhbmNlKG1lc3NhZ2UsIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKG1l
c3NhZ2UsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQg
J21lc3NhZ2UnIHRvIGJlIGEgc3RyaW5nIikKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2Fn
ZQorCisgICAgICAgICMgRm9yY2UgYSBjb21taXQgZm9ybWF0IGNoZWNrCisgICAgICAgIHNlbGYu
X19yZXByX18oKQorCisgICAgZGVmIHRvX3N0cmluZyhzZWxmLCBtZXNzYWdlPUZhbHNlKToKKyAg
ICAgICAgcmVzdWx0ID0gJ3t9XG4nLmZvcm1hdChzZWxmKQorICAgICAgICBpZiBzZWxmLnJldmlz
aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgU1ZOIHJldmlzaW9uOiBye30nLmZvcm1h
dChzZWxmLnJldmlzaW9uKQorICAgICAgICAgICAgaWYgc2VsZi5icmFuY2g6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJyYW5jaCkKKyAgICAgICAgICAg
IHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuaGFzaDoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSAnICAgIGdpdCBoYXNoOiB7fScuZm9ybWF0KHNlbGYuaGFzaFs6MTJdKQorICAgICAgICAg
ICAgaWYgc2VsZi5icmFuY2g6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZv
cm1hdChzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlm
IHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIGlkZW50aWZpZXI6
IGl7fScuZm9ybWF0KHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgICAgIGlmIHNlbGYuaWRlbnRp
ZmllcjoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNlbGYuYnJh
bmNoKQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAgICAgaWYgc2VsZi5hdXRob3I6
CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBieSB7fScuZm9ybWF0KHNlbGYuYXV0aG9yKQor
ICAgICAgICAgICAgaWYgc2VsZi50aW1lc3RhbXA6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9
ICcgQCB7fScuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoc2VsZi50aW1lc3RhbXAp
KQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKworICAgICAgICBpZiBzZWxmLm1lc3NhZ2Ug
YW5kIG1lc3NhZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICAgICAgcmVz
dWx0ICs9IHNlbGYubWVzc2FnZQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBf
X3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5j
aDoKKyAgICAgICAgICAgIHJldHVybiAnaXt9QHt9Jy5mb3JtYXQoc2VsZi5pZGVudGlmaWVyLCBz
ZWxmLmJyYW5jaCkKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lvbjoKKyAgICAgICAgICAgIHJldHVy
biAncnt9Jy5mb3JtYXQoc2VsZi5yZXZpc2lvbikKKyAgICAgICAgaWYgc2VsZi5oYXNoOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuaGFzaFs6MTJdCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmll
cjoKKyAgICAgICAgICAgIHJldHVybiAnaXt9Jy5mb3JtYXQoc2VsZi5pZGVudGlmaWVyKQorICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbmNvbXBsZXRlIGNvbW1pdCBmb3JtYXQnKQorCisgICAg
ZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIgYW5kIHNlbGYu
YnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5pZGVudGlmaWVyKSBeIGhhc2go
c2VsZi5icmFuY2gpCisgICAgICAgIGlmIHNlbGYucmV2aXNpb246CisgICAgICAgICAgICByZXR1
cm4gaGFzaChzZWxmLnJldmlzaW9uKQorICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAg
ICByZXR1cm4gaGFzaChzZWxmLmhhc2gpCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAg
ICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykKKworICAgIGRlZiBfX2NtcF9fKHNl
bGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvbW1pdCk6Cisg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgY29tcGFyZSBjb21taXQgYW5kIHt9
Jy5mb3JtYXQodHlwZShvdGhlcikpKQorICAgICAgICBpZiBzZWxmLnRpbWVzdGFtcCBhbmQgb3Ro
ZXIudGltZXN0YW1wIGFuZCBzZWxmLnRpbWVzdGFtcCAhPSBvdGhlci50aW1lc3RhbXA6CisgICAg
ICAgICAgICByZXR1cm4gc2VsZi50aW1lc3RhbXAgLSBvdGhlci50aW1lc3RhbXAKKyAgICAgICAg
aWYgc2VsZi5pZGVudGlmaWVyIGFuZCBvdGhlci5pZGVudGlmaWVyOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuaWRlbnRpZmllciAtIG90aGVyLmlkZW50aWZpZXIKKyAgICAgICAgaWYgc2VsZi5y
ZXZpc2lvbiBhbmQgb3RoZXIucmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXZp
c2lvbiAtIG90aGVyLnJldmlzaW9uCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBj
b21wYXJlIHt9IGFuZCB7fScuZm9ybWF0KHNlbGYsIG90aGVyKSkKKworICAgIGRlZiBfX2VxX18o
c2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmKSA9PSBoYXNoKG90aGVyKQor
CisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYp
ICE9IGhhc2gob3RoZXIpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPCAwCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90
aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPD0gMAorCisgICAgZGVm
IF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIp
ID4gMAorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxm
Ll9fY21wX18ob3RoZXIpID49IDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29t
bWl0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQor
ZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvcgorCisKK2NsYXNzIFRl
c3RDb21taXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3N0YW5kYXJkaXplX2hh
c2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnMWEyZTQx
ZTNmN2NkZjUxYjFlMWQwMjg4MGNmYjY1ZWFiOTMyN2VmMicsCisgICAgICAgICAgICBDb21taXQu
c3RhbmRhcmRpemVfaGFzaCgnMWEyZTQxZTNmN2NkZjUxYjFlMWQwMjg4MGNmYjY1ZWFiOTMyN2Vm
MicpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdj
M2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAgICAgIENv
bW1pdC5zdGFuZGFyZGl6ZV9oYXNoKCdDM0JENzg0RjhCODhCRDAzRjY0NDY3REREMzMwNEVEOEJF
MjhBQ0JFJykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29t
bWl0LnN0YW5kYXJkaXplX2hhc2goJ2ludmFsaWQgaGFzaCcpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9oYXNoKCdjM2JkNzg0ZjhiODhiZDAzZjY0
NDY3ZGRkMzMwNGVkOGJlMjhhY2JlMScpKQorCisgICAgZGVmIHRlc3Rfc3RhbmRhcmRpemVfcmV2
aXNpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuc3Rh
bmRhcmRpemVfcmV2aXNpb24oJ3IyNjY4OTYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgy
NjY4OTYsIENvbW1pdC5zdGFuZGFyZGl6ZV9yZXZpc2lvbignMjY2ODk2JykpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24oMjY2ODk2
KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9y
ZXZpc2lvbignaTEyMzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQu
c3RhbmRhcmRpemVfcmV2aXNpb24oJ2MzYmQ3ODRmOGI4OGJkMDMnKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChOb25lLCBDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24oJzAnKSkKKworICAg
IGRlZiB0ZXN0X3N0YW5kYXJkaXplX2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcignaTEy
MzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgTm9uZSksIENvbW1pdC5zdGFu
ZGFyZGl6ZV9pZGVudGlmaWVyKCcxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEy
MzQsIE5vbmUpLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcigxMjM0KSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ21haW4nKSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50
aWZpZXIoJ2kxMjM0QG1haW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ2Vu
Zy9idWcnKSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2kxMjM0QGVuZy9idWcnKSkK
KworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9pZGVu
dGlmaWVyKCdpMTIzNC1pbnZhbGlkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
Q29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ3IyNjY4OTYnKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChOb25lLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcignYzNiZDc4NGY4
Yjg4YmQwMycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFy
ZGl6ZV9pZGVudGlmaWVyKCcwJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ2kxMjNAbWFpbicpLCBDb21taXQoaWRl
bnRpZmllcj0xMjMsIGJyYW5jaD0nbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENv
bW1pdC5wYXJzZSgnaTEyMycpLCBDb21taXQoaWRlbnRpZmllcj0xMjMpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKENvbW1pdC5wYXJzZSgnMTIzJyksIENvbW1pdChpZGVudGlmaWVyPTEyMykp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ3IxMjMnKSwgQ29tbWl0
KHJldmlzaW9uPTEyMykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IENvbW1pdC5wYXJzZSgnYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScp
LAorICAgICAgICAgICAgQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0
ZWQ4YmUyOGFjYmUnKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdG9fc3RyaW5nKHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0KAorICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAbWFzdGVyJywKKyAgICAgICAgICAgICAgICBoYXNo
PSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAgICAg
ICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBs
ZS5jb20nXSksCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBSSU5URUQnLAorICAgICAg
ICAgICAgKS50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICcnJ2kxMjNAbWFzdGVyCisgICAgZ2l0
IGhhc2g6IGMzYmQ3ODRmOGI4OCBvbiBtYXN0ZXIKKyAgICBpZGVudGlmaWVyOiBpMTIzIG9uIG1h
c3RlcgorICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+CisnJycsCisg
ICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0
KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAdHJ1bmsnLAorICAgICAgICAgICAg
ICAgIHJldmlzaW9uPSdyMTIzJywKKyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3Io
J0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAgICAg
ICAgdGltZXN0YW1wPTEwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBSSU5URUQn
LAorICAgICAgICAgICAgKS50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICcnJ2kxMjNAdHJ1bmsK
KyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlmaWVyOiBpMTIzIG9u
IHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4gQCB7fQor
JycnLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDEwMDApKSwKKyAgICAgICAgKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQoCisgICAgICAg
ICAgICAgICAgaWRlbnRpZmllcj0naTEyM0B0cnVuaycsCisgICAgICAgICAgICAgICAgcmV2aXNp
b249J3IxMjMnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9uYXRoYW4g
QmVkYXJkJywgWydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICB0aW1lc3Rh
bXA9MTAwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdQUklOVEVEXG4nLAorICAgICAgICAg
ICAgKS50b19zdHJpbmcobWVzc2FnZT1UcnVlKSwKKyAgICAgICAgICAgICcnJ2kxMjNAdHJ1bmsK
KyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlmaWVyOiBpMTIzIG9u
IHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4gQCB7fQor
CitQUklOVEVECisnJycuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoMTAwMCkpLAor
ICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKHN0cihDb21taXQoaWRlbnRpZmllcj0xMjMsIGJyYW5jaD0nbWFpbicpKSwgJ2kxMjNA
bWFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChpZGVudGlmaWVyPTEy
MykpLCAnaTEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoQ29tbWl0KHJldmlz
aW9uPTEyMykpLCAncjEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoQ29tbWl0
KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnKSksICdjM2Jk
Nzg0ZjhiODgnKQorCisgICAgZGVmIHRlc3RfdGltZXN0YW1wX2NvbXBhcmUoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0TGVzcygKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVu
dGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTIs
IGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5h
c3NlcnRHcmVhdGVyKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTIsIGlkZW50aWZpZXI9
MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRp
Zmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydExl
c3MoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3Rh
bXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRp
bWVzdGFtcD0xMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcigKKyAg
ICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVzdGFtcD0xMDAp
LAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1w
PTEwMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAg
ICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisg
ICAgICAgICkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfY29tcGFyZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRMZXNzKENvbW1pdChpZGVudGlmaWVyPTEpLCBDb21taXQoaWRlbnRpZmll
cj0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKENvbW1pdChpZGVudGlmaWVyPTIpLCBD
b21taXQoaWRlbnRpZmllcj0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQoaWRl
bnRpZmllcj0xKSwgQ29tbWl0KGlkZW50aWZpZXI9MSkpCisKKyAgICBkZWYgdGVzdF9yZXZpc2lv
bl9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoQ29tbWl0KHJldmlzaW9u
PTEpLCBDb21taXQocmV2aXNpb249MikpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihDb21t
aXQocmV2aXNpb249MiksIENvbW1pdChyZXZpc2lvbj0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChDb21taXQocmV2aXNpb249MSksIENvbW1pdChyZXZpc2lvbj0xKSkKKworICAgIGRlZiB0
ZXN0X2ludmFsaWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNl
cyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xKS5fX2NtcF9fKENv
bW1pdChpZGVudGlmaWVyPTIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFs
dWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgdGltZXN0YW1wPTEwMCku
X19jbXBfXyhDb21taXQoaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409184</attachid>
            <date>2020-09-18 18:10:39 -0700</date>
            <delta_ts>2020-09-23 11:12:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200918181038.patch</filename>
            <type>text/plain</type>
            <size>19573</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzI5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTE4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuc3RhbmRhcmRpemVfaGFzaCk6IEdpdmVuIGEgaGFzaCwgdmVyaWZ5IHRoYXQgdGhl
IHByb3ZpZGVkIGFyZ3VtZW50IGlzCisgICAgICAgIEFjdHVhbGx5IGEgZ2l0IGhhc2guCisgICAg
ICAgIChDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24pOiBHaXZlbiBhIHN0cmluZyBvciBpbnRl
Z2VyLCB2ZXJpZnkgdGhlIHByb3ZpZGVkCisgICAgICAgIGFyZ3VtZW50IGlzIGEgdmFsaWQgU1ZO
IHJldmlzaW9uIGFuZCByZXR1cm4gdGhlIHJldmlzaW9uIGFzIGFuIGludGVnZXIuCisgICAgICAg
IChDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVn
ZXIsIHZlcmlmeSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVu
dGlmaWVyIGFuZCByZXR1cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENv
bW1pdC5wYXJzZSk6IEdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBz
dm4gcmV2aXNpb24gb3IKKyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVj
dC4KKyAgICAgICAgKENvbW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQudG9fc3RyaW5n
KTogUmV0dXJuIGEgbG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBj
b21taXQKKyAgICAgICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAg
ICAgICAoQ29tbWl0Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1p
dF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRl
c3RDb21taXQudGVzdF9zdGFuZGFyZGl6ZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9zdGFuZGFyZGl6ZV9yZXZpc2lvbik6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3Rfc3RhbmRh
cmRpemVfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAg
ICAgICAoVGVzdENvbW1pdC50ZXN0X3RvX3N0cmluZyk6CisKIDIwMjAtMDktMTggIFNpaHVpIExp
dSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjI2NjYzNCk6
IGZhc3Qvc2VsZWN0b3JzL3RleHQtZmllbGQtc2VsZWN0aW9uLXN0cm9rZS1jb2xvci5odG1sIGFu
ZCBmYXN0L3NlbGVjdG9ycy90ZXh0LWZpZWxkLXNlbGVjdGlvbi13aW5kb3ctaW5hY3RpdmUtc3Ry
b2tlLWNvbG9yLmh0bWwgYXJlIGZsYWt5IGZhaWx1cmVzIHdpdGggcGl4ZWwgbm9pc2UKSW5kZXg6
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9f
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjcyOTkpCisrKyBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2luZyBj
b3B5KQpAQCAtNDYsMTAgKzQ2LDEyIEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBs
ZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkg
LS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9u
ID0gVmVyc2lvbigwLCAwLCA0KQordmVyc2lvbiA9IFZlcnNpb24oMCwgMCwgNSkKIAogZnJvbSB3
ZWJraXRzY21weS5jb250cmlidXRvciBpbXBvcnQgQ29udHJpYnV0b3IKIAorZnJvbSB3ZWJraXRz
Y21weS5jb21taXQgaW1wb3J0IENvbW1pdAorCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2Nh
bAogZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbW9ja3MKIApJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9jb21taXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHJlCisKK2Zyb20gZGF0
ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgdW5pY29kZQor
ZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29udHJpYnV0b3IKKworCitjbGFzcyBDb21taXQob2Jq
ZWN0KToKKyAgICBIQVNIX1JFID0gcmUuY29tcGlsZShyJ15bYS1mMC05QS1GXSskJykKKyAgICBS
RVZJU0lPTl9SRSA9IHJlLmNvbXBpbGUocidecig/UDxyZXZpc2lvbj5cZCspJCcpCisgICAgSURF
TlRJRklFUl9SRSA9IHJlLmNvbXBpbGUocideaSg/UDxpZGVudGlmaWVyPi0/XGQrKSg/UDxicmFu
Y2g+QFxTKyk/JCcpCisgICAgTlVNQkVSX1JFID0gcmUuY29tcGlsZShyJ14tP1xkKiQnKQorCisg
ICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN0YW5kYXJkaXplX2hhc2goY2xzLCBoYXNoKToKKyAg
ICAgICAgaWYgbm90IGhhc2g6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBu
b3QgaXNpbnN0YW5jZShoYXNoLCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShoYXNoLCB1bmljb2Rl
KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIG5vdCBjbHMuSEFTSF9SRS5t
YXRjaChoYXNoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIGxlbihoYXNo
KSA+IDQwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGhhc2gubG93
ZXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHN0YW5kYXJkaXplX3JldmlzaW9uKGNs
cywgcmV2aXNpb24pOgorICAgICAgICBpZiBub3QgcmV2aXNpb246CisgICAgICAgICAgICByZXR1
cm4gTm9uZQorICAgICAgICBpZiBpc2luc3RhbmNlKHJldmlzaW9uLCBzdHIpIG9yIGlzaW5zdGFu
Y2UocmV2aXNpb24sIHVuaWNvZGUpOgorICAgICAgICAgICAgbWF0Y2ggPSBjbHMuUkVWSVNJT05f
UkUubWF0Y2gocmV2aXNpb24pCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAg
ICByZXZpc2lvbiA9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkKKyAgICAgICAgICAgIGVs
aWYgY2xzLk5VTUJFUl9SRS5tYXRjaChyZXZpc2lvbik6CisgICAgICAgICAgICAgICAgcmV2aXNp
b24gPSBpbnQocmV2aXNpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJldmlzaW9uLCBpbnQpOgorICAg
ICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgcmV2aXNpb24gPD0gMDoKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiByZXZpc2lvbgorCisgICAgQGNsYXNzbWV0
aG9kCisgICAgZGVmIHN0YW5kYXJkaXplX2lkZW50aWZpZXIoY2xzLCBpZGVudGlmaWVyKToKKyAg
ICAgICAgaWYgbm90IGlkZW50aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIGJyYW5jaCA9IE5vbmUKKyAgICAgICAgaWYgaXNpbnN0YW5jZShpZGVudGlmaWVyLCBzdHIp
IG9yIGlzaW5zdGFuY2UoaWRlbnRpZmllciwgdW5pY29kZSk6CisgICAgICAgICAgICBtYXRjaCA9
IGNscy5JREVOVElGSUVSX1JFLm1hdGNoKGlkZW50aWZpZXIpCisgICAgICAgICAgICBpZiBtYXRj
aDoKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gaW50KG1hdGNoLmdyb3VwKCdpZGVudGlm
aWVyJykpCisgICAgICAgICAgICAgICAgYnJhbmNoID0gbWF0Y2guZ3JvdXAoJ2JyYW5jaCcpCisg
ICAgICAgICAgICAgICAgaWYgYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBicmFuY2ggPSBi
cmFuY2hbMTpdCisgICAgICAgICAgICBlbGlmIGNscy5OVU1CRVJfUkUubWF0Y2goaWRlbnRpZmll
cik6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGludChpZGVudGlmaWVyKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICBpZiBub3Qg
aXNpbnN0YW5jZShpZGVudGlmaWVyLCBpbnQpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAg
ICAgICAgcmV0dXJuIGlkZW50aWZpZXIsIGJyYW5jaAorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIHBhcnNlKGNscywgYXJnKToKKyAgICAgICAgaWYgY2xzLnN0YW5kYXJkaXplX2lkZW50aWZp
ZXIoYXJnKToKKyAgICAgICAgICAgIHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcpCisKKyAg
ICAgICAgaWYgY2xzLnN0YW5kYXJkaXplX3JldmlzaW9uKGFyZyk6CisgICAgICAgICAgICByZXR1
cm4gQ29tbWl0KHJldmlzaW9uPWFyZykKKworICAgICAgICBpZiBjbHMuc3RhbmRhcmRpemVfaGFz
aChhcmcpOgorICAgICAgICAgICAgcmV0dXJuIENvbW1pdChoYXNoPWFyZykKKworICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCIne30nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21taXQgb2Jq
ZWN0Ii5mb3JtYXQoYXJnKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYXNoPU5vbmUsIHJl
dmlzaW9uPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSwgYnJhbmNoPU5vbmUsIHRpbWVzdGFtcD1Ob25l
LCBhdXRob3I9Tm9uZSwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5icmFuY2ggPSBicmFu
Y2gKKworICAgICAgICBzZWxmLmhhc2ggPSBOb25lCisgICAgICAgIGlmIGhhc2g6CisgICAgICAg
ICAgICBzZWxmLmhhc2ggPSBzZWxmLnN0YW5kYXJkaXplX2hhc2goaGFzaCkKKyAgICAgICAgICAg
IGlmIG5vdCBzZWxmLmhhc2g6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9
JyBpcyBub3QgYSB2YWxpZCBnaXQgaGFzaCIuZm9ybWF0KHNlbGYuaGFzaCkpCisKKyAgICAgICAg
c2VsZi5yZXZpc2lvbiA9IE5vbmUKKyAgICAgICAgaWYgcmV2aXNpb246CisgICAgICAgICAgICBz
ZWxmLnJldmlzaW9uID0gc2VsZi5zdGFuZGFyZGl6ZV9yZXZpc2lvbihyZXZpc2lvbikKKyAgICAg
ICAgICAgIGlmIG5vdCBzZWxmLnJldmlzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIid7fScgaXMgbm90IGEgdmFsaWQgU1ZOIHJldmlzaW9uIi5mb3JtYXQoc2VsZi5yZXZp
c2lvbikpCisKKyAgICAgICAgc2VsZi5pZGVudGlmaWVyID0gTm9uZQorICAgICAgICBpZiBpZGVu
dGlmaWVyOgorICAgICAgICAgICAgcGFyc2VkX2lkZW50aWZpZXIgPSBzZWxmLnN0YW5kYXJkaXpl
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAgICAgICAgIGlmIG5vdCBwYXJzZWRfaWRlbnRp
ZmllcjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhIHZh
bGlkIGlkZW50aWZpZXIiLmZvcm1hdChpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIHNlbGYuaWRl
bnRpZmllciwgc2VsZi5icmFuY2ggPSBwYXJzZWRfaWRlbnRpZmllcgorICAgICAgICAgICAgaWYg
c2VsZi5icmFuY2ggYW5kIGJyYW5jaCBhbmQgc2VsZi5icmFuY2ggIT0gYnJhbmNoOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImlkZW50aWZpZXIgJ3t9JyBjb25mbGljdHMgd2l0
aCBzcGVjaWZpZWQgYnJhbmNoICd7fSciLmZvcm1hdChpZGVudGlmaWVyLCBicmFuY2gpKQorCisg
ICAgICAgIGlmIGJyYW5jaCBhbmQgbm90IGlzaW5zdGFuY2UoYnJhbmNoLCBzdHIpIGFuZCBub3Qg
aXNpbnN0YW5jZShicmFuY2gsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiRXhwZWN0ZWQgJ2JyYW5jaCcgdG8gYmUgYSBzdHJpbmciKQorICAgICAgICBpZiBub3Qgc2Vs
Zi5icmFuY2g6CisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5jaAorCisgICAgICAgIGlm
IHRpbWVzdGFtcCBhbmQgbm90IGlzaW5zdGFuY2UodGltZXN0YW1wLCBpbnQpOgorICAgICAgICAg
ICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RlZCAndGltZXN0YW1wJyB0byBiZSBvZiB0eXBlIHt9
Ii5mb3JtYXQoaW50KSkKKyAgICAgICAgc2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKworICAg
ICAgICBpZiBhdXRob3IgYW5kIG5vdCBpc2luc3RhbmNlKGF1dGhvciwgQ29udHJpYnV0b3IpOgor
ICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RlZCAnYXV0aG9yJyB0byBiZSBvZiB0
eXBlIHt9Ii5mb3JtYXQoQ29udHJpYnV0b3IpKQorICAgICAgICBzZWxmLmF1dGhvciA9IGF1dGhv
cgorCisgICAgICAgIGlmIG1lc3NhZ2UgYW5kIG5vdCBpc2luc3RhbmNlKG1lc3NhZ2UsIHN0cikg
YW5kIG5vdCBpc2luc3RhbmNlKG1lc3NhZ2UsIHVuaWNvZGUpOgorICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiRXhwZWN0ZWQgJ21lc3NhZ2UnIHRvIGJlIGEgc3RyaW5nIikKKyAgICAgICAg
c2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisgICAgICAgICMgRm9yY2UgYSBjb21taXQgZm9ybWF0
IGNoZWNrCisgICAgICAgIHNlbGYuX19yZXByX18oKQorCisgICAgZGVmIHRvX3N0cmluZyhzZWxm
LCBtZXNzYWdlPUZhbHNlKToKKyAgICAgICAgcmVzdWx0ID0gJ3t9XG4nLmZvcm1hdChzZWxmKQor
ICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgU1ZO
IHJldmlzaW9uOiBye30nLmZvcm1hdChzZWxmLnJldmlzaW9uKQorICAgICAgICAgICAgaWYgc2Vs
Zi5icmFuY2g6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxm
LmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuaGFz
aDoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIGdpdCBoYXNoOiB7fScuZm9ybWF0KHNlbGYu
aGFzaFs6MTJdKQorICAgICAgICAgICAgaWYgc2VsZi5icmFuY2g6CisgICAgICAgICAgICAgICAg
cmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3Vs
dCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJlc3Vs
dCArPSAnICAgIGlkZW50aWZpZXI6IGl7fScuZm9ybWF0KHNlbGYuaWRlbnRpZmllcikKKyAgICAg
ICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBv
biB7fScuZm9ybWF0KHNlbGYuYnJhbmNoKQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAg
ICAgICAgaWYgc2VsZi5hdXRob3I6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBieSB7fScu
Zm9ybWF0KHNlbGYuYXV0aG9yKQorICAgICAgICAgICAgaWYgc2VsZi50aW1lc3RhbXA6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9ICcgQCB7fScuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1l
c3RhbXAoc2VsZi50aW1lc3RhbXApKQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKworICAg
ICAgICBpZiBzZWxmLm1lc3NhZ2UgYW5kIG1lc3NhZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0g
J1xuJworICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYubWVzc2FnZQorCisgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZGVu
dGlmaWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiAnaXt9QHt9Jy5mb3Jt
YXQoc2VsZi5pZGVudGlmaWVyLCBzZWxmLmJyYW5jaCkKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lv
bjoKKyAgICAgICAgICAgIHJldHVybiAncnt9Jy5mb3JtYXQoc2VsZi5yZXZpc2lvbikKKyAgICAg
ICAgaWYgc2VsZi5oYXNoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFzaFs6MTJdCisgICAg
ICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJldHVybiAnaXt9Jy5mb3JtYXQo
c2VsZi5pZGVudGlmaWVyKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbmNvbXBsZXRlIGNv
bW1pdCBmb3JtYXQnKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxm
LmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2Vs
Zi5pZGVudGlmaWVyKSBeIGhhc2goc2VsZi5icmFuY2gpCisgICAgICAgIGlmIHNlbGYucmV2aXNp
b246CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLnJldmlzaW9uKQorICAgICAgICBpZiBz
ZWxmLmhhc2g6CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLmhhc2gpCisgICAgICAgIGlm
IHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuaWRlbnRpZmll
cikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykK
KworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2Uob3RoZXIsIENvbW1pdCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qg
Y29tcGFyZSBjb21taXQgYW5kIHt9Jy5mb3JtYXQodHlwZShvdGhlcikpKQorICAgICAgICBpZiBz
ZWxmLnRpbWVzdGFtcCBhbmQgb3RoZXIudGltZXN0YW1wIGFuZCBzZWxmLnRpbWVzdGFtcCAhPSBv
dGhlci50aW1lc3RhbXA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50aW1lc3RhbXAgLSBvdGhl
ci50aW1lc3RhbXAKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lvbiBhbmQgb3RoZXIucmV2aXNpb246
CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXZpc2lvbiAtIG90aGVyLnJldmlzaW9uCisgICAg
ICAgIGlmIHNlbGYuaWRlbnRpZmllciBhbmQgb3RoZXIuaWRlbnRpZmllciBhbmQgc2VsZi5icmFu
Y2ggPT0gb3RoZXIuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaWRlbnRpZmllciAt
IG90aGVyLmlkZW50aWZpZXIKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNvbXBh
cmUge30gYW5kIHt9Jy5mb3JtYXQoc2VsZiwgb3RoZXIpKQorCisgICAgZGVmIF9fZXFfXyhzZWxm
LCBvdGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYpID09IGhhc2gob3RoZXIpCisKKyAg
ICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZikgIT0g
aGFzaChvdGhlcikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1
cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA8IDAKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA8PSAwCisKKyAgICBkZWYgX19n
dF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPiAw
CisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19j
bXBfXyhvdGhlcikgPj0gMApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRf
dW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNzIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9t
IHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1dG9yCisKKworY2xhc3MgVGVzdENv
bW1pdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfc3RhbmRhcmRpemVfaGFzaChz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICcxYTJlNDFlM2Y3
Y2RmNTFiMWUxZDAyODgwY2ZiNjVlYWI5MzI3ZWYyJywKKyAgICAgICAgICAgIENvbW1pdC5zdGFu
ZGFyZGl6ZV9oYXNoKCcxYTJlNDFlM2Y3Y2RmNTFiMWUxZDAyODgwY2ZiNjVlYWI5MzI3ZWYyJykK
KyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2MzYmQ3
ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnLAorICAgICAgICAgICAgQ29tbWl0
LnN0YW5kYXJkaXplX2hhc2goJ0MzQkQ3ODRGOEI4OEJEMDNGNjQ0NjdEREQzMzA0RUQ4QkUyOEFD
QkUnKQorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQu
c3RhbmRhcmRpemVfaGFzaCgnaW52YWxpZCBoYXNoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgQ29tbWl0LnN0YW5kYXJkaXplX2hhc2goJ2MzYmQ3ODRmOGI4OGJkMDNmNjQ0Njdk
ZGQzMzA0ZWQ4YmUyOGFjYmUxJykpCisKKyAgICBkZWYgdGVzdF9zdGFuZGFyZGl6ZV9yZXZpc2lv
bihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNjY4OTYsIENvbW1pdC5zdGFuZGFy
ZGl6ZV9yZXZpc2lvbigncjI2Njg5NicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI2Njg5
NiwgQ29tbWl0LnN0YW5kYXJkaXplX3JldmlzaW9uKCcyNjY4OTYnKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgyNjY4OTYsIENvbW1pdC5zdGFuZGFyZGl6ZV9yZXZpc2lvbigyNjY4OTYpKQor
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0LnN0YW5kYXJkaXplX3Jldmlz
aW9uKCdpMTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFu
ZGFyZGl6ZV9yZXZpc2lvbignYzNiZDc4NGY4Yjg4YmQwMycpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9yZXZpc2lvbignMCcpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9yZXZpc2lvbignLTEnKSkK
KworICAgIGRlZiB0ZXN0X3N0YW5kYXJkaXplX2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmll
cignaTEyMzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgTm9uZSksIENvbW1p
dC5zdGFuZGFyZGl6ZV9pZGVudGlmaWVyKCcxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcigxMjM0KSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ21haW4nKSwgQ29tbWl0LnN0YW5kYXJkaXpl
X2lkZW50aWZpZXIoJ2kxMjM0QG1haW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIz
NCwgJ2VuZy9idWcnKSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2kxMjM0QGVuZy9i
dWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgTm9uZSksIENvbW1pdC5zdGFuZGFy
ZGl6ZV9pZGVudGlmaWVyKCcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCBOb25l
KSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJy0xJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKDAsICdlbmcvYnVnJyksIENvbW1pdC5zdGFuZGFyZGl6ZV9pZGVudGlmaWVyKCdp
MEBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCAnZW5nL2J1ZycpLCBD
b21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcignaS0xQGVuZy9idWcnKSkKKworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9pZGVudGlmaWVyKCdpMTIz
NC1pbnZhbGlkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0LnN0YW5k
YXJkaXplX2lkZW50aWZpZXIoJ3IyNjY4OTYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChO
b25lLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcignYzNiZDc4NGY4Yjg4YmQwMycpKQor
CisgICAgZGVmIHRlc3RfcGFyc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29t
bWl0LnBhcnNlKCdpMTIzQG1haW4nKSwgQ29tbWl0KGlkZW50aWZpZXI9MTIzLCBicmFuY2g9J21h
aW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ2kxMjMnKSwgQ29t
bWl0KGlkZW50aWZpZXI9MTIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFy
c2UoJzEyMycpLCBDb21taXQoaWRlbnRpZmllcj0xMjMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoQ29tbWl0LnBhcnNlKCdyMTIzJyksIENvbW1pdChyZXZpc2lvbj0xMjMpKQorCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQucGFyc2UoJ2MzYmQ3ODRm
OGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnKSwKKyAgICAgICAgICAgIENvbW1pdCho
YXNoPSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJyksCisgICAgICAg
ICkKKworICAgIGRlZiB0ZXN0X3RvX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgKKyAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSdp
MTIzQG1hc3RlcicsCisgICAgICAgICAgICAgICAgaGFzaD0nYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2
N2RkZDMzMDRlZDhiZTI4YWNiZScsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9y
KCdKb25hdGhhbiBCZWRhcmQnLCBbJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9J05PVCBQUklOVEVEJywKKyAgICAgICAgICAgICkudG9fc3RyaW5nKCksCisg
ICAgICAgICAgICAnJydpMTIzQG1hc3RlcgorICAgIGdpdCBoYXNoOiBjM2JkNzg0ZjhiODggb24g
bWFzdGVyCisgICAgaWRlbnRpZmllcjogaTEyMyBvbiBtYXN0ZXIKKyAgICBieSBKb25hdGhhbiBC
ZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorJycnLAorICAgICAgICApCisKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyPSdpMTIzQHRydW5rJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0ncjEyMycsCisg
ICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdKb25hdGhhbiBCZWRhcmQnLCBbJ2pi
ZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xMDAwLAorICAg
ICAgICAgICAgICAgIG1lc3NhZ2U9J05PVCBQUklOVEVEJywKKyAgICAgICAgICAgICkudG9fc3Ry
aW5nKCksCisgICAgICAgICAgICAnJydpMTIzQHRydW5rCisgICAgU1ZOIHJldmlzaW9uOiByMTIz
IG9uIHRydW5rCisgICAgaWRlbnRpZmllcjogaTEyMyBvbiB0cnVuaworICAgIGJ5IEpvbmF0aGFu
IEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+IEAge30KKycnJy5mb3JtYXQoZGF0ZXRpbWUudXRj
ZnJvbXRpbWVzdGFtcCgxMDAwKSksCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgQ29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kx
MjNAdHJ1bmsnLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPSdyMTIzJywKKyAgICAgICAgICAg
ICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBs
ZS5jb20nXSksCisgICAgICAgICAgICAgICAgdGltZXN0YW1wPTEwMDAsCisgICAgICAgICAgICAg
ICAgbWVzc2FnZT0nUFJJTlRFRFxuJywKKyAgICAgICAgICAgICkudG9fc3RyaW5nKG1lc3NhZ2U9
VHJ1ZSksCisgICAgICAgICAgICAnJydpMTIzQHRydW5rCisgICAgU1ZOIHJldmlzaW9uOiByMTIz
IG9uIHRydW5rCisgICAgaWRlbnRpZmllcjogaTEyMyBvbiB0cnVuaworICAgIGJ5IEpvbmF0aGFu
IEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+IEAge30KKworUFJJTlRFRAorJycnLmZvcm1hdChk
YXRldGltZS51dGNmcm9tdGltZXN0YW1wKDEwMDApKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRl
c3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoQ29tbWl0KGlkZW50
aWZpZXI9MTIzLCBicmFuY2g9J21haW4nKSksICdpMTIzQG1haW4nKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKHN0cihDb21taXQoaWRlbnRpZmllcj0xMjMpKSwgJ2kxMjMnKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChyZXZpc2lvbj0xMjMpKSwgJ3IxMjMnKQorCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChoYXNoPSdjM2JkNzg0ZjhiODhiZDAz
ZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJykpLCAnYzNiZDc4NGY4Yjg4JykKKworICAgIGRlZiB0
ZXN0X3RpbWVzdGFtcF9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoCisg
ICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAw
KSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVzdGFt
cD0yMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcigKKyAgICAgICAg
ICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVzdGFtcD0yMDApLAorICAg
ICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCks
CisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAorICAgICAgICAgICAgQ29tbWl0
KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICAgICBD
b21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAg
KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoCisgICAgICAgICAgICBDb21taXQocmV2aXNp
b249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChy
ZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRl
bnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0x
LCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisKKyAgICBkZWYgdGVz
dF9pZGVudGlmaWVyX2NvbXBhcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhDb21t
aXQoaWRlbnRpZmllcj0xKSwgQ29tbWl0KGlkZW50aWZpZXI9MikpCisgICAgICAgIHNlbGYuYXNz
ZXJ0R3JlYXRlcihDb21taXQoaWRlbnRpZmllcj0yKSwgQ29tbWl0KGlkZW50aWZpZXI9MSkpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0KGlkZW50aWZpZXI9MSksIENvbW1pdChpZGVu
dGlmaWVyPTEpKQorCisgICAgZGVmIHRlc3RfcmV2aXNpb25fY29tcGFyZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRMZXNzKENvbW1pdChyZXZpc2lvbj0xKSwgQ29tbWl0KHJldmlzaW9uPTIp
KQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoQ29tbWl0KHJldmlzaW9uPTIpLCBDb21taXQo
cmV2aXNpb249MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0KHJldmlzaW9uPTEp
LCBDb21taXQocmV2aXNpb249MSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2NvbXBhcmUoc2Vs
Zik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAg
ICAgICBDb21taXQocmV2aXNpb249MSkuX19jbXBfXyhDb21taXQoaWRlbnRpZmllcj0yKSkKKwor
ICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAg
Q29tbWl0KHJldmlzaW9uPTEsIHRpbWVzdGFtcD0xMDApLl9fY21wX18oQ29tbWl0KGlkZW50aWZp
ZXI9MiwgdGltZXN0YW1wPTEwMCkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409486</attachid>
            <date>2020-09-23 11:12:16 -0700</date>
            <delta_ts>2020-09-25 21:18:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200923111215.patch</filename>
            <type>text/plain</type>
            <size>20235</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzQ5MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTIzICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuc3RhbmRhcmRpemVfaGFzaCk6IEdpdmVuIGEgaGFzaCwgdmVyaWZ5IHRoYXQgdGhl
IHByb3ZpZGVkIGFyZ3VtZW50IGlzCisgICAgICAgIEFjdHVhbGx5IGEgZ2l0IGhhc2guCisgICAg
ICAgIChDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24pOiBHaXZlbiBhIHN0cmluZyBvciBpbnRl
Z2VyLCB2ZXJpZnkgdGhlIHByb3ZpZGVkCisgICAgICAgIGFyZ3VtZW50IGlzIGEgdmFsaWQgU1ZO
IHJldmlzaW9uIGFuZCByZXR1cm4gdGhlIHJldmlzaW9uIGFzIGFuIGludGVnZXIuCisgICAgICAg
IChDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVn
ZXIsIHZlcmlmeSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVu
dGlmaWVyIGFuZCByZXR1cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENv
bW1pdC5wYXJzZSk6IEdpdmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBz
dm4gcmV2aXNpb24gb3IKKyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVj
dC4KKyAgICAgICAgKENvbW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQudG9fc3RyaW5n
KTogUmV0dXJuIGEgbG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBj
b21taXQKKyAgICAgICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJl
c2VudGF0aW9uIG9mIHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAg
ICAgICAoQ29tbWl0Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1p
dF91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRl
c3RDb21taXQudGVzdF9zdGFuZGFyZGl6ZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9zdGFuZGFyZGl6ZV9yZXZpc2lvbik6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3Rfc3RhbmRh
cmRpemVfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAg
ICAgICAoVGVzdENvbW1pdC50ZXN0X3RvX3N0cmluZyk6CisKIDIwMjAtMDktMjMgIFRydWl0dCBT
YXZlbGwgIDx0c2F2ZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRp
bmcgcjI2NzQwMy4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjc0OTAp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDEyIEBAIGV4Y2VwdCBJbXBvcnRF
cnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5z
dGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAi
CiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCAwLCA0KQordmVyc2lvbiA9IFZlcnNpb24o
MCwgMCwgNSkKIAogZnJvbSB3ZWJraXRzY21weS5jb250cmlidXRvciBpbXBvcnQgQ29udHJpYnV0
b3IKIAorZnJvbSB3ZWJraXRzY21weS5jb21taXQgaW1wb3J0IENvbW1pdAorCiBmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBsb2NhbAogZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbW9ja3MKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L2NvbW1pdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMzEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1w
b3J0IHJlCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdGNvcmVw
eSBpbXBvcnQgdW5pY29kZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29udHJpYnV0b3IKKwor
CitjbGFzcyBDb21taXQob2JqZWN0KToKKyAgICBIQVNIX1JFID0gcmUuY29tcGlsZShyJ15bYS1m
MC05QS1GXSskJykKKyAgICBSRVZJU0lPTl9SRSA9IHJlLmNvbXBpbGUocidecig/UDxyZXZpc2lv
bj5cZCspJCcpCisgICAgSURFTlRJRklFUl9SRSA9IHJlLmNvbXBpbGUocideaT8oP1A8aWRlbnRp
Zmllcj4tP1xkKykoP1A8YnJhbmNoPkBcUyspPyQnKQorICAgIE5VTUJFUl9SRSA9IHJlLmNvbXBp
bGUocideLT9cZCokJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzdGFuZGFyZGl6ZV9o
YXNoKGNscywgaGFzaCwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAgICAgaWYgaGFzaCBpcyBOb25l
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSho
YXNoLCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShoYXNoLCB1bmljb2RlKToKKyAgICAgICAgICAg
IGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3Rl
ZCBzdHJpbmcgdHlwZSBmb3IgaGFzaCwgZ290IHt9Jy5mb3JtYXQodHlwZShoYXNoKSkpCisgICAg
ICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBjbHMuSEFTSF9SRS5tYXRjaCho
YXNoKSBvciBsZW4oaGFzaCkgPiA0MDoKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcm92aWRlZCBzdHJpbmcgJ3t9JyBpcyBub3Qg
YSBnaXQgaGFzaCIuZm9ybWF0KGhhc2gpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICByZXR1cm4gaGFzaC5sb3dlcigpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc3Rh
bmRhcmRpemVfcmV2aXNpb24oY2xzLCByZXZpc2lvbiwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAg
ICAgaWYgcmV2aXNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShyZXZpc2lvbiwgc3RyKSBvciBpc2luc3RhbmNlKHJldmlzaW9uLCB1
bmljb2RlKToKKyAgICAgICAgICAgIG1hdGNoID0gY2xzLlJFVklTSU9OX1JFLm1hdGNoKHJldmlz
aW9uKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgcmV2aXNpb24gPSBp
bnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpCisgICAgICAgICAgICBlbGlmIGNscy5OVU1CRVJf
UkUubWF0Y2gocmV2aXNpb24pOgorICAgICAgICAgICAgICAgIHJldmlzaW9uID0gaW50KHJldmlz
aW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBkb19hc3NlcnQ6Cisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVkIHN0cmluZyAne30n
IGlzIG5vdCBhbiBTVk4iLmZvcm1hdChyZXZpc2lvbikpCisgICAgICAgICAgICAgICAgcmV0dXJu
IE5vbmUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXZpc2lvbiwgaW50KToKKyAgICAg
ICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdF
eHBlY3RlZCBpbnQgdHlwZSBmb3IgcmV2aXNpb24sIGdvdCB7fScuZm9ybWF0KHR5cGUocmV2aXNp
b24pKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgcmV2aXNpb24gPD0g
MDoKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdTVk4gcmV2aXNpb25zIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcicpCisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiByZXZpc2lvbgorCisgICAgQGNsYXNz
bWV0aG9kCisgICAgZGVmIHN0YW5kYXJkaXplX2lkZW50aWZpZXIoY2xzLCBpZGVudGlmaWVyLCBk
b19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiBpZGVudGlmaWVyIGlzIE5vbmU6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJyYW5jaCA9IE5vbmUKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShpZGVudGlmaWVyLCBzdHIpIG9yIGlzaW5zdGFuY2UoaWRlbnRpZmllciwgdW5pY29k
ZSk6CisgICAgICAgICAgICBtYXRjaCA9IGNscy5JREVOVElGSUVSX1JFLm1hdGNoKGlkZW50aWZp
ZXIpCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0g
aW50KG1hdGNoLmdyb3VwKCdpZGVudGlmaWVyJykpCisgICAgICAgICAgICAgICAgYnJhbmNoID0g
bWF0Y2guZ3JvdXAoJ2JyYW5jaCcpCisgICAgICAgICAgICAgICAgaWYgYnJhbmNoOgorICAgICAg
ICAgICAgICAgICAgICBicmFuY2ggPSBicmFuY2hbMTpdCisgICAgICAgICAgICBlbGlmIGNscy5O
VU1CRVJfUkUubWF0Y2goaWRlbnRpZmllcik6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9
IGludChpZGVudGlmaWVyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBk
b19hc3NlcnQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVk
IHN0cmluZyAne30nIGlzIG5vdCBhbiBpZGVudGlmaWVyIi5mb3JtYXQoaWRlbnRpZmllcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShp
ZGVudGlmaWVyLCBpbnQpOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVkIGludCB0eXBlIGZvciBpZGVudGlmaWVyLCBn
b3Qge30nLmZvcm1hdCh0eXBlKGlkZW50aWZpZXIpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25l
CisKKyAgICAgICAgcmV0dXJuIGlkZW50aWZpZXIsIGJyYW5jaAorCisgICAgQGNsYXNzbWV0aG9k
CisgICAgZGVmIHBhcnNlKGNscywgYXJnKToKKyAgICAgICAgaWYgY2xzLnN0YW5kYXJkaXplX2lk
ZW50aWZpZXIoYXJnKToKKyAgICAgICAgICAgIHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcp
CisKKyAgICAgICAgaWYgY2xzLnN0YW5kYXJkaXplX3JldmlzaW9uKGFyZyk6CisgICAgICAgICAg
ICByZXR1cm4gQ29tbWl0KHJldmlzaW9uPWFyZykKKworICAgICAgICBpZiBjbHMuc3RhbmRhcmRp
emVfaGFzaChhcmcpOgorICAgICAgICAgICAgcmV0dXJuIENvbW1pdChoYXNoPWFyZykKKworICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21t
aXQgb2JqZWN0Ii5mb3JtYXQoYXJnKSkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYXNoPU5v
bmUsIHJldmlzaW9uPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSwgYnJhbmNoPU5vbmUsIHRpbWVzdGFt
cD1Ob25lLCBhdXRob3I9Tm9uZSwgbWVzc2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5oYXNoID0g
c2VsZi5zdGFuZGFyZGl6ZV9oYXNoKGhhc2gsIGRvX2Fzc2VydD1UcnVlKQorICAgICAgICBzZWxm
LnJldmlzaW9uID0gc2VsZi5zdGFuZGFyZGl6ZV9yZXZpc2lvbihyZXZpc2lvbiwgZG9fYXNzZXJ0
PVRydWUpCisKKyAgICAgICAgcGFyc2VkX2lkZW50aWZpZXIgPSBzZWxmLnN0YW5kYXJkaXplX2lk
ZW50aWZpZXIoaWRlbnRpZmllciwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgIGlmIHBhcnNlZF9p
ZGVudGlmaWVyOgorICAgICAgICAgICAgc2VsZi5pZGVudGlmaWVyLCBwYXJzZWRfYnJhbmNoID0g
cGFyc2VkX2lkZW50aWZpZXIKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gcGFyc2VkX2JyYW5j
aCBvciBicmFuY2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpZmllciA9
IE5vbmUKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gYnJhbmNoCisKKyAgICAgICAgaWYgYnJh
bmNoIGFuZCBub3QgaXNpbnN0YW5jZShicmFuY2gsIHN0cikgYW5kIG5vdCBpc2luc3RhbmNlKGJy
YW5jaCwgdW5pY29kZSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAn
YnJhbmNoJyB0byBiZSBhIHN0cmluZyIpCisgICAgICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9
IHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2FsbGVyIHBhc3Nl
ZCBib3RoICdicmFuY2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZpZWQgZGlmZmVyZW50
IGJyYW5jaGVzIikKKworICAgICAgICBpZiB0aW1lc3RhbXAgYW5kIG5vdCBpc2luc3RhbmNlKHRp
bWVzdGFtcCwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ3Rp
bWVzdGFtcCcgdG8gYmUgb2YgdHlwZSB7fSIuZm9ybWF0KGludCkpCisgICAgICAgIHNlbGYudGlt
ZXN0YW1wID0gdGltZXN0YW1wCisKKyAgICAgICAgaWYgYXV0aG9yIGFuZCBub3QgaXNpbnN0YW5j
ZShhdXRob3IsIENvbnRyaWJ1dG9yKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhw
ZWN0ZWQgJ2F1dGhvcicgdG8gYmUgb2YgdHlwZSB7fSIuZm9ybWF0KENvbnRyaWJ1dG9yKSkKKyAg
ICAgICAgc2VsZi5hdXRob3IgPSBhdXRob3IKKworICAgICAgICBpZiBtZXNzYWdlIGFuZCBub3Qg
aXNpbnN0YW5jZShtZXNzYWdlLCBzdHIpIGFuZCBub3QgaXNpbnN0YW5jZShtZXNzYWdlLCB1bmlj
b2RlKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICdtZXNzYWdlJyB0
byBiZSBhIHN0cmluZyIpCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKworICAgICAg
ICAjIEZvcmNlIGEgY29tbWl0IGZvcm1hdCBjaGVjaworICAgICAgICBzZWxmLl9fcmVwcl9fKCkK
KworICAgIGRlZiB0b19zdHJpbmcoc2VsZiwgbWVzc2FnZT1GYWxzZSk6CisgICAgICAgIHJlc3Vs
dCA9ICd7fVxuJy5mb3JtYXQoc2VsZikKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lvbjoKKyAgICAg
ICAgICAgIHJlc3VsdCArPSAnICAgIFNWTiByZXZpc2lvbjogcnt9Jy5mb3JtYXQoc2VsZi5yZXZp
c2lvbikKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAgICAgICByZXN1bHQgKz0g
J1xuJworICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBn
aXQgaGFzaDoge30nLmZvcm1hdChzZWxmLmhhc2hbOjEyXSkKKyAgICAgICAgICAgIGlmIHNlbGYu
YnJhbmNoOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5i
cmFuY2gpCisgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICBpZiBzZWxmLmlkZW50
aWZpZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBpZGVudGlmaWVyOiBpe30nLmZvcm1h
dChzZWxmLmlkZW50aWZpZXIpCisgICAgICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXI6CisgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJyYW5jaCkKKyAgICAg
ICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuYXV0aG9yOgorICAgICAgICAg
ICAgcmVzdWx0ICs9ICcgICAgYnkge30nLmZvcm1hdChzZWxmLmF1dGhvcikKKyAgICAgICAgICAg
IGlmIHNlbGYudGltZXN0YW1wOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIEAge30nLmZv
cm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHNlbGYudGltZXN0YW1wKSkKKyAgICAgICAg
ICAgIHJlc3VsdCArPSAnXG4nCisKKyAgICAgICAgaWYgc2VsZi5tZXNzYWdlIGFuZCBtZXNzYWdl
OgorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAgICAgICAgIHJlc3VsdCArPSBzZWxm
Lm1lc3NhZ2UKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19yZXByX18oc2Vs
Zik6CisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllciBhbmQgc2VsZi5icmFuY2g6CisgICAgICAg
ICAgICByZXR1cm4gJ2l7fUB7fScuZm9ybWF0KHNlbGYuaWRlbnRpZmllciwgc2VsZi5icmFuY2gp
CisgICAgICAgIGlmIHNlbGYucmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gJ3J7fScuZm9y
bWF0KHNlbGYucmV2aXNpb24pCisgICAgICAgIGlmIHNlbGYuaGFzaDoKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLmhhc2hbOjEyXQorICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAg
ICAgICByZXR1cm4gJ2l7fScuZm9ybWF0KHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykKKworICAgIGRlZiBfX2hhc2hf
XyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAg
ICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuaWRlbnRpZmllcikgXiBoYXNoKHNlbGYuYnJhbmNo
KQorICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2Vs
Zi5yZXZpc2lvbikKKyAgICAgICAgaWYgc2VsZi5oYXNoOgorICAgICAgICAgICAgcmV0dXJuIGhh
c2goc2VsZi5oYXNoKQorICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICBy
ZXR1cm4gaGFzaChzZWxmLmlkZW50aWZpZXIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lu
Y29tcGxldGUgY29tbWl0IGZvcm1hdCcpCisKKyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6
CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBDb21taXQpOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNvbXBhcmUgY29tbWl0IGFuZCB7fScuZm9ybWF0KHR5
cGUob3RoZXIpKSkKKyAgICAgICAgaWYgc2VsZi50aW1lc3RhbXAgYW5kIG90aGVyLnRpbWVzdGFt
cCBhbmQgc2VsZi50aW1lc3RhbXAgIT0gb3RoZXIudGltZXN0YW1wOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYudGltZXN0YW1wIC0gb3RoZXIudGltZXN0YW1wCisgICAgICAgIGlmIHNlbGYucmV2
aXNpb24gYW5kIG90aGVyLnJldmlzaW9uOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV2aXNp
b24gLSBvdGhlci5yZXZpc2lvbgorICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIgYW5kIG90aGVy
LmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoID09IG90aGVyLmJyYW5jaDoKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLmlkZW50aWZpZXIgLSBvdGhlci5pZGVudGlmaWVyCisgICAgICAgIHJhaXNl
IFZhbHVlRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHt9IGFuZCB7fScuZm9ybWF0KHNlbGYsIG90aGVy
KSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gaGFzaChz
ZWxmKSA9PSBoYXNoKG90aGVyKQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAg
ICAgIHJldHVybiBoYXNoKHNlbGYpICE9IGhhc2gob3RoZXIpCisKKyAgICBkZWYgX19sdF9fKHNl
bGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPCAwCisKKyAg
ICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhv
dGhlcikgPD0gMAorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVy
biBzZWxmLl9fY21wX18ob3RoZXIpID4gMAorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6
CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpID49IDAKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0
X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisjIENvcHlyaWdo
dCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRhdGV0
aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250
cmlidXRvcgorCisKK2NsYXNzIFRlc3RDb21taXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRl
ZiB0ZXN0X3N0YW5kYXJkaXplX2hhc2goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICAnMWEyZTQxZTNmN2NkZjUxYjFlMWQwMjg4MGNmYjY1ZWFiOTMyN2VmMics
CisgICAgICAgICAgICBDb21taXQuc3RhbmRhcmRpemVfaGFzaCgnMWEyZTQxZTNmN2NkZjUxYjFl
MWQwMjg4MGNmYjY1ZWFiOTMyN2VmMicpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgKKyAgICAgICAgICAgICdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhh
Y2JlJywKKyAgICAgICAgICAgIENvbW1pdC5zdGFuZGFyZGl6ZV9oYXNoKCdDM0JENzg0RjhCODhC
RDAzRjY0NDY3REREMzMwNEVEOEJFMjhBQ0JFJykKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0LnN0YW5kYXJkaXplX2hhc2goJ2ludmFsaWQgaGFzaCcp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6ZV9oYXNo
KCdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlMScpKQorCisgICAgZGVm
IHRlc3Rfc3RhbmRhcmRpemVfcmV2aXNpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoMjY2ODk2LCBDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24oJ3IyNjY4OTYnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgyNjY4OTYsIENvbW1pdC5zdGFuZGFyZGl6ZV9yZXZpc2lvbign
MjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuc3RhbmRh
cmRpemVfcmV2aXNpb24oMjY2ODk2KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUs
IENvbW1pdC5zdGFuZGFyZGl6ZV9yZXZpc2lvbignaTEyMzQnKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChOb25lLCBDb21taXQuc3RhbmRhcmRpemVfcmV2aXNpb24oJ2MzYmQ3ODRmOGI4OGJk
MDMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuc3RhbmRhcmRpemVf
cmV2aXNpb24oJzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuc3Rh
bmRhcmRpemVfcmV2aXNpb24oJy0xJykpCisKKyAgICBkZWYgdGVzdF9zdGFuZGFyZGl6ZV9pZGVu
dGlmaWVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCBOb25lKSwgQ29t
bWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2kxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcignMTIzNCcp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCBOb25lKSwgQ29tbWl0LnN0YW5kYXJk
aXplX2lkZW50aWZpZXIoMTIzNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdt
YWluJyksIENvbW1pdC5zdGFuZGFyZGl6ZV9pZGVudGlmaWVyKCdpMTIzNEBtYWluJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdtYWluJyksIENvbW1pdC5zdGFuZGFyZGl6ZV9p
ZGVudGlmaWVyKCcxMjM0QG1haW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwg
J2VuZy9idWcnKSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2kxMjM0QGVuZy9idWcn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ2VuZy9idWcnKSwgQ29tbWl0LnN0
YW5kYXJkaXplX2lkZW50aWZpZXIoJzEyMzRAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCgwLCBOb25lKSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJzAnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsIE5vbmUpLCBDb21taXQuc3RhbmRhcmRpemVfaWRl
bnRpZmllcignLTEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgJ2VuZy9idWcnKSwg
Q29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2kwQGVuZy9idWcnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgoMCwgJ2VuZy9idWcnKSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZp
ZXIoJzBAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMSwgJ2VuZy9idWcn
KSwgQ29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2ktMUBlbmcvYnVnJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCAnZW5nL2J1ZycpLCBDb21taXQuc3RhbmRhcmRpemVfaWRl
bnRpZmllcignLTFAZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
Q29tbWl0LnN0YW5kYXJkaXplX2lkZW50aWZpZXIoJ2kxMjM0LWludmFsaWQnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuc3RhbmRhcmRpemVfaWRlbnRpZmllcigncjI2
Njg5NicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5zdGFuZGFyZGl6
ZV9pZGVudGlmaWVyKCdjM2JkNzg0ZjhiODhiZDAzJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZShz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ2kxMjNAbWFpbicp
LCBDb21taXQoaWRlbnRpZmllcj0xMjMsIGJyYW5jaD0nbWFpbicpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKENvbW1pdC5wYXJzZSgnaTEyMycpLCBDb21taXQoaWRlbnRpZmllcj0xMjMpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdC5wYXJzZSgnMTIzJyksIENvbW1pdChpZGVu
dGlmaWVyPTEyMykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ3Ix
MjMnKSwgQ29tbWl0KHJldmlzaW9uPTEyMykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgK
KyAgICAgICAgICAgIENvbW1pdC5wYXJzZSgnYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRl
ZDhiZTI4YWNiZScpLAorICAgICAgICAgICAgQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNm
NjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdG9f
c3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29t
bWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAbWFzdGVyJywKKyAgICAgICAg
ICAgICAgICBoYXNoPSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywK
KyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsn
amJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBSSU5U
RUQnLAorICAgICAgICAgICAgKS50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICcnJ2kxMjNAbWFz
dGVyCisgICAgZ2l0IGhhc2g6IGMzYmQ3ODRmOGI4OCBvbiBtYXN0ZXIKKyAgICBpZGVudGlmaWVy
OiBpMTIzIG9uIG1hc3RlcgorICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5j
b20+CisnJycsCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAg
ICAgICAgQ29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAdHJ1bmsnLAor
ICAgICAgICAgICAgICAgIHJldmlzaW9uPSdyMTIzJywKKyAgICAgICAgICAgICAgICBhdXRob3I9
Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBsZS5jb20nXSksCisg
ICAgICAgICAgICAgICAgdGltZXN0YW1wPTEwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0n
Tk9UIFBSSU5URUQnLAorICAgICAgICAgICAgKS50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICcn
J2kxMjNAdHJ1bmsKKyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlm
aWVyOiBpMTIzIG9uIHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxl
LmNvbT4gQCB7fQorJycnLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDEwMDApKSwK
KyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21t
aXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0naTEyM0B0cnVuaycsCisgICAgICAgICAg
ICAgICAgcmV2aXNpb249J3IxMjMnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRv
cignSm9uYXRoYW4gQmVkYXJkJywgWydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAg
ICAgICB0aW1lc3RhbXA9MTAwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdQUklOVEVEXG4n
LAorICAgICAgICAgICAgKS50b19zdHJpbmcobWVzc2FnZT1UcnVlKSwKKyAgICAgICAgICAgICcn
J2kxMjNAdHJ1bmsKKyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlm
aWVyOiBpMTIzIG9uIHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxl
LmNvbT4gQCB7fQorCitQUklOVEVECisnJycuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3Rh
bXAoMTAwMCkpLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQoaWRlbnRpZmllcj0xMjMsIGJyYW5jaD0nbWFp
bicpKSwgJ2kxMjNAbWFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChp
ZGVudGlmaWVyPTEyMykpLCAnaTEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIo
Q29tbWl0KHJldmlzaW9uPTEyMykpLCAncjEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChzdHIoQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFj
YmUnKSksICdjM2JkNzg0ZjhiODgnKQorCisgICAgZGVmIHRlc3RfdGltZXN0YW1wX2NvbXBhcmUo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygKKyAgICAgICAgICAgIENvbW1pdChyZXZp
c2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0
KHJldmlzaW9uPTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICkKKyAg
ICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTIs
IGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNp
b249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAgICBz
ZWxmLmFzc2VydExlc3MoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmll
cj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVu
dGlmaWVyPTIsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0
R3JlYXRlcigKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRp
bWVzdGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9
MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgK
KyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0x
MDApLAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0
YW1wPTEwMCksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfY29tcGFyZShz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKENvbW1pdChpZGVudGlmaWVyPTEpLCBDb21t
aXQoaWRlbnRpZmllcj0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKENvbW1pdChpZGVu
dGlmaWVyPTIpLCBDb21taXQoaWRlbnRpZmllcj0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChDb21taXQoaWRlbnRpZmllcj0xKSwgQ29tbWl0KGlkZW50aWZpZXI9MSkpCisKKyAgICBkZWYg
dGVzdF9yZXZpc2lvbl9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoQ29t
bWl0KHJldmlzaW9uPTEpLCBDb21taXQocmV2aXNpb249MikpCisgICAgICAgIHNlbGYuYXNzZXJ0
R3JlYXRlcihDb21taXQocmV2aXNpb249MiksIENvbW1pdChyZXZpc2lvbj0xKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChDb21taXQocmV2aXNpb249MSksIENvbW1pdChyZXZpc2lvbj0xKSkK
KworICAgIGRlZiB0ZXN0X2ludmFsaWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxm
LmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0x
KS5fX2NtcF9fKENvbW1pdChpZGVudGlmaWVyPTIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3Nl
cnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgdGlt
ZXN0YW1wPTEwMCkuX19jbXBfXyhDb21taXQoaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409768</attachid>
            <date>2020-09-25 21:18:13 -0700</date>
            <delta_ts>2020-09-28 14:06:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200925211812.patch</filename>
            <type>text/plain</type>
            <size>21203</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzYxNikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTI1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuX3BhcnNlX2hhc2gpOiBHaXZlbiBhIGhhc2gsIHZlcmlmeSB0aGF0IHRoZSBwcm92
aWRlZCBhcmd1bWVudCBpcworICAgICAgICBBY3R1YWxseSBhIGdpdCBoYXNoLgorICAgICAgICAo
Q29tbWl0Ll9wYXJzZV9yZXZpc2lvbik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlm
eSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBTVk4gcmV2aXNpb24g
YW5kIHJldHVybiB0aGUgcmV2aXNpb24gYXMgYW4gaW50ZWdlci4KKyAgICAgICAgKENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlmeSB0aGUg
cHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFuZCByZXR1
cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENvbW1pdC5wYXJzZSk6IEdp
dmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBzdm4gcmV2aXNpb24gb3IK
KyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVjdC4KKyAgICAgICAgKENv
bW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQucHJldHR5X3ByaW50KTogUmV0dXJuIGEg
bG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBjb21taXQKKyAgICAg
ICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAgICAgICAoQ29tbWl0
Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5w
eTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9wYXJzZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVzdF9wYXJzZV9yZXZpc2lvbik6
CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2VfaWRlbnRpZmllcik6CisgICAgICAgIChU
ZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3ByZXR0eV9w
cmludCk6CisKIDIwMjAtMDktMjUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBNb3ZlIE5ldHdvcmtQcm9jZXNzUHJveHkgb3duZXJzaGlwIGZy
b20gV2ViUHJvY2Vzc1Bvb2wgdG8gV2Vic2l0ZURhdGFTdG9yZQpJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19p
bml0X18ucHkJKHJldmlzaW9uIDI2NzYwOCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niwx
MCArNDYsMTIgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwg
d2Via2l0Y29yZXB5IHdpdGggYHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4
LXVybCA8cGFja2FnZSBpbmRleCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAs
IDAsIDQpCit2ZXJzaW9uID0gVmVyc2lvbigwLCAwLCA1KQogCiBmcm9tIHdlYmtpdHNjbXB5LmNv
bnRyaWJ1dG9yIGltcG9ydCBDb250cmlidXRvcgogCitmcm9tIHdlYmtpdHNjbXB5LmNvbW1pdCBp
bXBvcnQgQ29tbWl0CisKIGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCiBmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBtb2NrcwogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2Nv
bW1pdC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MyBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgc2l4CitpbXBvcnQgcmUKKworZnJvbSBkYXRl
dGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbnRyaWJ1dG9y
CisKKworY2xhc3MgQ29tbWl0KG9iamVjdCk6CisgICAgSEFTSF9SRSA9IHJlLmNvbXBpbGUocide
W2EtZjAtOUEtRl0rJCcpCisgICAgUkVWSVNJT05fUkUgPSByZS5jb21waWxlKHInXnIoP1A8cmV2
aXNpb24+XGQrKSQnKQorICAgIElERU5USUZJRVJfUkUgPSByZS5jb21waWxlKHInXmk/KD9QPGlk
ZW50aWZpZXI+LT9cZCspKD9QPGJyYW5jaD5AXFMrKT8kJykKKyAgICBOVU1CRVJfUkUgPSByZS5j
b21waWxlKHInXi0/XGQqJCcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX2hh
c2goY2xzLCBoYXNoLCBkb19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiBoYXNoIGlzIE5vbmU6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGhh
c2gsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIHN0cmluZyB0eXBlIGZvciBoYXNo
LCBnb3QgJ3t9JyIuZm9ybWF0KHR5cGUoaGFzaCkpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICBpZiBub3QgY2xzLkhBU0hfUkUubWF0Y2goaGFzaCkgb3IgbGVuKGhhc2gpID4g
NDA6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiUHJvdmlkZWQgc3RyaW5nICd7fScgaXMgbm90IGEgZ2l0IGhhc2giLmZvcm1hdCho
YXNoKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIGhhc2gubG93
ZXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXJzZV9yZXZpc2lvbihjbHMsIHJl
dmlzaW9uLCBkb19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiByZXZpc2lvbiBpcyBOb25lOgor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBpc2luc3RhbmNlKHJldmlzaW9u
LCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIG1hdGNoID0gY2xzLlJFVklTSU9OX1JF
Lm1hdGNoKHJldmlzaW9uKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAg
cmV2aXNpb24gPSBpbnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpCisgICAgICAgICAgICBlbGlm
IGNscy5OVU1CRVJfUkUubWF0Y2gocmV2aXNpb24pOgorICAgICAgICAgICAgICAgIHJldmlzaW9u
ID0gaW50KHJldmlzaW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBk
b19hc3NlcnQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVk
IHN0cmluZyAne30nIGlzIG5vdCBhbiBTVk4iLmZvcm1hdChyZXZpc2lvbikpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXZpc2lvbiwg
aW50KToKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJFeHBlY3RlZCBpbnQgdHlwZSBmb3IgcmV2aXNpb24sIGdvdCAne30nIi5mb3Jt
YXQodHlwZShyZXZpc2lvbikpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBp
ZiByZXZpc2lvbiA8PSAwOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NWTiByZXZpc2lvbnMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRl
Z2VyJykKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHJldmlzaW9u
CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX2lkZW50aWZpZXIoY2xzLCBpZGVu
dGlmaWVyLCBkb19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiBpZGVudGlmaWVyIGlzIE5vbmU6
CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJyYW5jaCA9IE5vbmUKKyAgICAg
ICAgaWYgaXNpbnN0YW5jZShpZGVudGlmaWVyLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAg
ICAgIG1hdGNoID0gY2xzLklERU5USUZJRVJfUkUubWF0Y2goaWRlbnRpZmllcikKKyAgICAgICAg
ICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBpbnQobWF0Y2guZ3Jv
dXAoJ2lkZW50aWZpZXInKSkKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBtYXRjaC5ncm91cCgn
YnJhbmNoJykKKyAgICAgICAgICAgICAgICBpZiBicmFuY2g6CisgICAgICAgICAgICAgICAgICAg
IGJyYW5jaCA9IGJyYW5jaFsxOl0KKyAgICAgICAgICAgIGVsaWYgY2xzLk5VTUJFUl9SRS5tYXRj
aChpZGVudGlmaWVyKToKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gaW50KGlkZW50aWZp
ZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJvdmlkZWQgc3RyaW5nICd7fScg
aXMgbm90IGFuIGlkZW50aWZpZXIiLmZvcm1hdChpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGlkZW50aWZpZXIsIGlu
dCk6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignRXhwZWN0ZWQgaW50IHR5cGUgZm9yIGlkZW50aWZpZXIsIGdvdCB7fScuZm9ybWF0
KHR5cGUoaWRlbnRpZmllcikpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBy
ZXR1cm4gaWRlbnRpZmllciwgYnJhbmNoCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcGFy
c2UoY2xzLCBhcmcpOgorICAgICAgICBpZiBjbHMuX3BhcnNlX2lkZW50aWZpZXIoYXJnKToKKyAg
ICAgICAgICAgIHJldHVybiBDb21taXQoaWRlbnRpZmllcj1hcmcpCisKKyAgICAgICAgaWYgY2xz
Ll9wYXJzZV9yZXZpc2lvbihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIENvbW1pdChyZXZpc2lv
bj1hcmcpCisKKyAgICAgICAgaWYgY2xzLl9wYXJzZV9oYXNoKGFyZyk6CisgICAgICAgICAgICBy
ZXR1cm4gQ29tbWl0KGhhc2g9YXJnKQorCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScg
Y2Fubm90IGJlIGNvbnZlcnRlZCB0byBhIGNvbW1pdCBvYmplY3QiLmZvcm1hdChhcmcpKQorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhc2g9Tm9uZSwgcmV2aXNpb249Tm9uZSwgaWRlbnRpZmll
cj1Ob25lLCBicmFuY2g9Tm9uZSwgdGltZXN0YW1wPU5vbmUsIGF1dGhvcj1Ob25lLCBtZXNzYWdl
PU5vbmUpOgorICAgICAgICBzZWxmLmhhc2ggPSBzZWxmLl9wYXJzZV9oYXNoKGhhc2gsIGRvX2Fz
c2VydD1UcnVlKQorICAgICAgICBzZWxmLnJldmlzaW9uID0gc2VsZi5fcGFyc2VfcmV2aXNpb24o
cmV2aXNpb24sIGRvX2Fzc2VydD1UcnVlKQorCisgICAgICAgIHBhcnNlZF9pZGVudGlmaWVyID0g
c2VsZi5fcGFyc2VfaWRlbnRpZmllcihpZGVudGlmaWVyLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAg
ICAgaWYgcGFyc2VkX2lkZW50aWZpZXI6CisgICAgICAgICAgICBzZWxmLmlkZW50aWZpZXIsIHBh
cnNlZF9icmFuY2ggPSBwYXJzZWRfaWRlbnRpZmllcgorICAgICAgICAgICAgc2VsZi5icmFuY2gg
PSBwYXJzZWRfYnJhbmNoIG9yIGJyYW5jaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5pZGVudGlmaWVyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5icmFuY2ggPSBicmFuY2gKKwor
ICAgICAgICBpZiBicmFuY2ggYW5kIG5vdCBpc2luc3RhbmNlKGJyYW5jaCwgc2l4LnN0cmluZ190
eXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYnJhbmNoJyB0
byBiZSBhIHN0cmluZyIpCisgICAgICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9IHNlbGYuYnJh
bmNoOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2Fs
bGVyIHBhc3NlZCBib3RoICdicmFuY2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZpZWQg
ZGlmZmVyZW50IGJyYW5jaGVzICh7fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAg
ICAgIGJyYW5jaCwgc2VsZi5icmFuY2gsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAg
ICkKKworICAgICAgICBpZiB0aW1lc3RhbXAgYW5kIG5vdCBpc2luc3RhbmNlKHRpbWVzdGFtcCwg
aW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ3RpbWVzdGFtcCcg
dG8gYmUgb2YgdHlwZSBpbnQsIGdvdCAne30nIi5mb3JtYXQodGltZXN0YW1wKSkKKyAgICAgICAg
c2VsZi50aW1lc3RhbXAgPSB0aW1lc3RhbXAKKworICAgICAgICBpZiBhdXRob3IgYW5kIGlzaW5z
dGFuY2UoYXV0aG9yLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuYXV0aG9y
ID0gQ29udHJpYnV0b3IuYnlfZW1haWwuZ2V0KAorICAgICAgICAgICAgICAgIGF1dGhvciwKKyAg
ICAgICAgICAgICAgICBDb250cmlidXRvci5ieV9uYW1lLmdldChhdXRob3IpLAorICAgICAgICAg
ICAgKQorICAgICAgICAgICAgaWYgbm90IHNlbGYuYXV0aG9yOgorICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIid7fScgZG9lcyBub3QgbWF0Y2ggYSBrbm93biBjb250cmlidXRvciIp
CisgICAgICAgIGVsaWYgYXV0aG9yIGFuZCBub3QgaXNpbnN0YW5jZShhdXRob3IsIENvbnRyaWJ1
dG9yKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ2F1dGhvcicgdG8g
YmUgb2YgdHlwZSB7fSwgZ290ICd7fSciLmZvcm1hdChDb250cmlidXRvciwgYXV0aG9yKSkKKyAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXV0aG9yID0gYXV0aG9yCisKKyAgICAgICAg
aWYgbWVzc2FnZSBhbmQgbm90IGlzaW5zdGFuY2UobWVzc2FnZSwgc2l4LnN0cmluZ190eXBlcyk6
CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnbWVzc2FnZScgdG8gYmUg
YSBzdHJpbmcsIGdvdCAne30nIi5mb3JtYXQobWVzc2FnZSkpCisgICAgICAgIHNlbGYubWVzc2Fn
ZSA9IG1lc3NhZ2UKKworICAgICAgICAjIEZvcmNlIGEgY29tbWl0IGZvcm1hdCBjaGVjaworICAg
ICAgICBzZWxmLl9fcmVwcl9fKCkKKworICAgIGRlZiBwcmV0dHlfcHJpbnQoc2VsZiwgbWVzc2Fn
ZT1GYWxzZSk6CisgICAgICAgIHJlc3VsdCA9ICd7fVxuJy5mb3JtYXQoc2VsZikKKyAgICAgICAg
aWYgc2VsZi5yZXZpc2lvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIFNWTiByZXZpc2lv
bjogcnt9Jy5mb3JtYXQoc2VsZi5yZXZpc2lvbikKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNo
OgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gp
CisgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAg
ICAgICAgICByZXN1bHQgKz0gJyAgICBnaXQgaGFzaDoge30nLmZvcm1hdChzZWxmLmhhc2hbOjEy
XSkKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAgICAgICByZXN1bHQgKz0gJ1xu
JworICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAg
ICBpZGVudGlmaWVyOiBpe30nLmZvcm1hdChzZWxmLmlkZW50aWZpZXIpCisgICAgICAgICAgICBp
ZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZv
cm1hdChzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlm
IHNlbGYuYXV0aG9yOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgYnkge30nLmZvcm1hdChz
ZWxmLmF1dGhvcikKKyAgICAgICAgICAgIGlmIHNlbGYudGltZXN0YW1wOgorICAgICAgICAgICAg
ICAgIHJlc3VsdCArPSAnIEAge30nLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHNl
bGYudGltZXN0YW1wKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisKKyAgICAgICAgaWYg
c2VsZi5tZXNzYWdlIGFuZCBtZXNzYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAg
ICAgICAgICAgIHJlc3VsdCArPSBzZWxmLm1lc3NhZ2UKKworICAgICAgICByZXR1cm4gcmVzdWx0
CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllciBh
bmQgc2VsZi5icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gJ2l7fUB7fScuZm9ybWF0KHNlbGYu
aWRlbnRpZmllciwgc2VsZi5icmFuY2gpCisgICAgICAgIGlmIHNlbGYucmV2aXNpb246CisgICAg
ICAgICAgICByZXR1cm4gJ3J7fScuZm9ybWF0KHNlbGYucmV2aXNpb24pCisgICAgICAgIGlmIHNl
bGYuaGFzaDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhc2hbOjEyXQorICAgICAgICBpZiBz
ZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gJ2l7fScuZm9ybWF0KHNlbGYuaWRl
bnRpZmllcikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9y
bWF0JykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZGVudGlm
aWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuaWRlbnRp
ZmllcikgXiBoYXNoKHNlbGYuYnJhbmNoKQorICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgorICAg
ICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5yZXZpc2lvbikKKyAgICAgICAgaWYgc2VsZi5oYXNo
OgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5oYXNoKQorICAgICAgICBpZiBzZWxmLmlk
ZW50aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLmlkZW50aWZpZXIpCisgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0luY29tcGxldGUgY29tbWl0IGZvcm1hdCcpCisKKyAgICBk
ZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVy
LCBDb21taXQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNvbXBhcmUg
Y29tbWl0IGFuZCB7fScuZm9ybWF0KHR5cGUob3RoZXIpKSkKKyAgICAgICAgaWYgc2VsZi50aW1l
c3RhbXAgYW5kIG90aGVyLnRpbWVzdGFtcCBhbmQgc2VsZi50aW1lc3RhbXAgIT0gb3RoZXIudGlt
ZXN0YW1wOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGltZXN0YW1wIC0gb3RoZXIudGltZXN0
YW1wCisgICAgICAgIGlmIHNlbGYucmV2aXNpb24gYW5kIG90aGVyLnJldmlzaW9uOgorICAgICAg
ICAgICAgcmV0dXJuIHNlbGYucmV2aXNpb24gLSBvdGhlci5yZXZpc2lvbgorICAgICAgICBpZiBz
ZWxmLmlkZW50aWZpZXIgYW5kIG90aGVyLmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoID09IG90
aGVyLmJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZpZXIgLSBvdGhlci5p
ZGVudGlmaWVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHt9IGFu
ZCB7fScuZm9ybWF0KHNlbGYsIG90aGVyKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIp
OgorICAgICAgICByZXR1cm4gaGFzaChzZWxmKSA9PSBoYXNoKG90aGVyKQorCisgICAgZGVmIF9f
bmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYpICE9IGhhc2gob3Ro
ZXIpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYu
X19jbXBfXyhvdGhlcikgPCAwCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPD0gMAorCisgICAgZGVmIF9fZ3RfXyhzZWxm
LCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpID4gMAorCisgICAg
ZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3Ro
ZXIpID49IDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0
LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTk0IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9y
dCB1bml0dGVzdAorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSB3ZWJraXRz
Y21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvcgorCisKK2NsYXNzIFRlc3RDb21taXQodW5p
dHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3BhcnNlX2hhc2goc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnMWEyZTQxZTNmN2NkZjUxYjFlMWQwMjg4
MGNmYjY1ZWFiOTMyN2VmMicsCisgICAgICAgICAgICBDb21taXQuX3BhcnNlX2hhc2goJzFhMmU0
MWUzZjdjZGY1MWIxZTFkMDI4ODBjZmI2NWVhYjkzMjdlZjInKQorICAgICAgICApCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2Rk
ZDMzMDRlZDhiZTI4YWNiZScsCisgICAgICAgICAgICBDb21taXQuX3BhcnNlX2hhc2goJ0MzQkQ3
ODRGOEI4OEJEMDNGNjQ0NjdEREQzMzA0RUQ4QkUyOEFDQkUnKQorICAgICAgICApCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX2hhc2goJ2ludmFsaWQgaGFz
aCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfaGFzaCgn
YzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZTEnKSkKKworICAgIGRlZiB0
ZXN0X3BhcnNlX3JldmlzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI2Njg5
NiwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbigncjI2Njg5NicpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKDI2Njg5NiwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignMjY2ODk2JykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3BhcnNlX3JldmlzaW9uKDI2Njg5Nikp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX3JldmlzaW9u
KCdpMTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2Vf
cmV2aXNpb24oJ2MzYmQ3ODRmOGI4OGJkMDMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChO
b25lLCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignLTEnKSkKKworICAgIGRlZiB0ZXN0X3Bh
cnNlX2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsIE5v
bmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kxMjM0JykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzEyMzQnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRl
bnRpZmllcigxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ21haW4nKSwg
Q29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNEBtYWluJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKDEyMzQsICdtYWluJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMTIzNEBt
YWluJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdlbmcvYnVnJyksIENvbW1p
dC5fcGFyc2VfaWRlbnRpZmllcignaTEyMzRAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCgxMjM0LCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzEyMzRA
ZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBOb25lKSwgQ29tbWl0Ll9w
YXJzZV9pZGVudGlmaWVyKCcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCBOb25l
KSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCctMScpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCgwLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kwQGVuZy9idWcn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJz
ZV9pZGVudGlmaWVyKCcwQGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEs
ICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignaS0xQGVuZy9idWcnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRl
bnRpZmllcignLTFAZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
Q29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNC1pbnZhbGlkJykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdyMjY2ODk2JykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdj
M2JkNzg0ZjhiODhiZDAzJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZShzZWxmKToKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ2kxMjNAbWFpbicpLCBDb21taXQoaWRlbnRp
Zmllcj0xMjMsIGJyYW5jaD0nbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1p
dC5wYXJzZSgnaTEyMycpLCBDb21taXQoaWRlbnRpZmllcj0xMjMpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKENvbW1pdC5wYXJzZSgnMTIzJyksIENvbW1pdChpZGVudGlmaWVyPTEyMykpCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ3IxMjMnKSwgQ29tbWl0KHJl
dmlzaW9uPTEyMykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIENv
bW1pdC5wYXJzZSgnYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScpLAor
ICAgICAgICAgICAgQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4
YmUyOGFjYmUnKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcHJldHR5X3ByaW50KHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0KAorICAgICAg
ICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAbWFzdGVyJywKKyAgICAgICAgICAgICAgICBoYXNo
PSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAgICAg
ICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBs
ZS5jb20nXSksCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBSSU5URUQnLAorICAgICAg
ICAgICAgKS5wcmV0dHlfcHJpbnQoKSwKKyAgICAgICAgICAgICcnJ2kxMjNAbWFzdGVyCisgICAg
Z2l0IGhhc2g6IGMzYmQ3ODRmOGI4OCBvbiBtYXN0ZXIKKyAgICBpZGVudGlmaWVyOiBpMTIzIG9u
IG1hc3RlcgorICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+CisnJycs
CisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29t
bWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAdHJ1bmsnLAorICAgICAgICAg
ICAgICAgIHJldmlzaW9uPSdyMTIzJywKKyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0
b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAg
ICAgICAgdGltZXN0YW1wPTEwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBSSU5U
RUQnLAorICAgICAgICAgICAgKS5wcmV0dHlfcHJpbnQoKSwKKyAgICAgICAgICAgICcnJ2kxMjNA
dHJ1bmsKKyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlmaWVyOiBp
MTIzIG9uIHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4g
QCB7fQorJycnLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDEwMDApKSwKKyAgICAg
ICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQoCisg
ICAgICAgICAgICAgICAgaWRlbnRpZmllcj0naTEyM0B0cnVuaycsCisgICAgICAgICAgICAgICAg
cmV2aXNpb249J3IxMjMnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9u
YXRoYW4gQmVkYXJkJywgWydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICB0
aW1lc3RhbXA9MTAwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdQUklOVEVEXG4nLAorICAg
ICAgICAgICAgKS5wcmV0dHlfcHJpbnQobWVzc2FnZT1UcnVlKSwKKyAgICAgICAgICAgICcnJ2kx
MjNAdHJ1bmsKKyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlmaWVy
OiBpMTIzIG9uIHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNv
bT4gQCB7fQorCitQUklOVEVECisnJycuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAo
MTAwMCkpLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQoaWRlbnRpZmllcj0xMjMsIGJyYW5jaD0nbWFpbicp
KSwgJ2kxMjNAbWFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChpZGVu
dGlmaWVyPTEyMykpLCAnaTEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoQ29t
bWl0KHJldmlzaW9uPTEyMykpLCAncjEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
dHIoQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUn
KSksICdjM2JkNzg0ZjhiODgnKQorCisgICAgZGVmIHRlc3RfdGltZXN0YW1wX2NvbXBhcmUoc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lv
bj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0KHJl
dmlzaW9uPTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICkKKyAgICAg
ICAgc2VsZi5hc3NlcnRHcmVhdGVyKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTIsIGlk
ZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249
MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxm
LmFzc2VydExlc3MoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0x
LCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlm
aWVyPTIsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0R3Jl
YXRlcigKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVz
dGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwg
dGltZXN0YW1wPTEwMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDAp
LAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1w
PTEwMCksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfY29tcGFyZShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKENvbW1pdChpZGVudGlmaWVyPTEpLCBDb21taXQo
aWRlbnRpZmllcj0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKENvbW1pdChpZGVudGlm
aWVyPTIpLCBDb21taXQoaWRlbnRpZmllcj0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChD
b21taXQoaWRlbnRpZmllcj0xKSwgQ29tbWl0KGlkZW50aWZpZXI9MSkpCisKKyAgICBkZWYgdGVz
dF9yZXZpc2lvbl9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoQ29tbWl0
KHJldmlzaW9uPTEpLCBDb21taXQocmV2aXNpb249MikpCisgICAgICAgIHNlbGYuYXNzZXJ0R3Jl
YXRlcihDb21taXQocmV2aXNpb249MiksIENvbW1pdChyZXZpc2lvbj0xKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChDb21taXQocmV2aXNpb249MSksIENvbW1pdChyZXZpc2lvbj0xKSkKKwor
ICAgIGRlZiB0ZXN0X2ludmFsaWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xKS5f
X2NtcF9fKENvbW1pdChpZGVudGlmaWVyPTIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgdGltZXN0
YW1wPTEwMCkuX19jbXBfXyhDb21taXQoaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSkKKwor
ICAgIGRlZiB0ZXN0X2NvbnRyaWJ1dG9yKHNlbGYpOgorICAgICAgICBDb250cmlidXRvci5jbGVh
cigpCisgICAgICAgIGNvbnRyaWJ1dG9yID0gQ29udHJpYnV0b3IuZnJvbV9zY21fbG9nKCdBdXRo
b3I6IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+JykKKworICAgICAgICBjb21t
aXQgPSBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCBhdXRob3I9Y29udHJpYnV0b3Ip
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udHJpYnV0b3IpCisK
KyAgICAgICAgY29tbWl0ID0gQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9y
PSdKb25hdGhhbiBCZWRhcmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5hdXRo
b3IsIGNvbnRyaWJ1dG9yKQorCisgICAgICAgIGNvbW1pdCA9IENvbW1pdChyZXZpc2lvbj0xLCBp
ZGVudGlmaWVyPTEsIGF1dGhvcj0namJlZGFyZEBhcHBsZS5jb20nKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGNvbW1pdC5hdXRob3IsIGNvbnRyaWJ1dG9yKQorCisgICAgZGVmIHRlc3RfaW52
YWxpZF9jb250cmlidXRvcihzZWxmKToKKyAgICAgICAgQ29udHJpYnV0b3IuY2xlYXIoKQorICAg
ICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQ29t
bWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9yPSdKb25hdGhhbiBCZWRhcmQnKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409920</attachid>
            <date>2020-09-28 14:06:28 -0700</date>
            <delta_ts>2020-09-29 15:36:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200928140627.patch</filename>
            <type>text/plain</type>
            <size>21423</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzcxNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTI4ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuX3BhcnNlX2hhc2gpOiBHaXZlbiBhIGhhc2gsIHZlcmlmeSB0aGF0IHRoZSBwcm92
aWRlZCBhcmd1bWVudCBpcworICAgICAgICBBY3R1YWxseSBhIGdpdCBoYXNoLgorICAgICAgICAo
Q29tbWl0Ll9wYXJzZV9yZXZpc2lvbik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlm
eSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBTVk4gcmV2aXNpb24g
YW5kIHJldHVybiB0aGUgcmV2aXNpb24gYXMgYW4gaW50ZWdlci4KKyAgICAgICAgKENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlmeSB0aGUg
cHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFuZCByZXR1
cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENvbW1pdC5wYXJzZSk6IEdp
dmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBzdm4gcmV2aXNpb24gb3IK
KyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVjdC4KKyAgICAgICAgKENv
bW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQucHJldHR5X3ByaW50KTogUmV0dXJuIGEg
bG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBjb21taXQKKyAgICAg
ICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAgICAgICAoQ29tbWl0
Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5w
eTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9wYXJzZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVzdF9wYXJzZV9yZXZpc2lvbik6
CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2VfaWRlbnRpZmllcik6CisgICAgICAgIChU
ZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3ByZXR0eV9w
cmludCk6CisKIDIwMjAtMDktMjggIE1hdHQgTGV3aXMgIDxqbGV3aXMzQGFwcGxlLmNvbT4KIAog
ICAgICAgICBGaXggQnVpbGQgdHJpZ2dlcnMgZm9yIGlPUywgd2F0Y2hPUywgYW5kIHR2T1MKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNjc3MTQpCisrKyBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsMTAgKzQ2LDEyIEBAIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAg
IlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3Jl
cHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2UgaW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJz
aW9uID0gVmVyc2lvbigwLCAwLCA0KQordmVyc2lvbiA9IFZlcnNpb24oMCwgMCwgNSkKIAogZnJv
bSB3ZWJraXRzY21weS5jb250cmlidXRvciBpbXBvcnQgQ29udHJpYnV0b3IKIAorZnJvbSB3ZWJr
aXRzY21weS5jb21taXQgaW1wb3J0IENvbW1pdAorCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBs
b2NhbAogZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbW9ja3MKIApJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1p
dC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9jb21taXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDMgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHNpeAoraW1wb3J0
IHJlCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdHNjbXB5IGlt
cG9ydCBDb250cmlidXRvcgorCisKK2NsYXNzIENvbW1pdChvYmplY3QpOgorICAgIEhBU0hfUkUg
PSByZS5jb21waWxlKHInXlthLWYwLTlBLUZdKyQnKQorICAgIFJFVklTSU9OX1JFID0gcmUuY29t
cGlsZShyJ15yKD9QPHJldmlzaW9uPlxkKykkJykKKyAgICBJREVOVElGSUVSX1JFID0gcmUuY29t
cGlsZShyJ15pPyg/UDxpZGVudGlmaWVyPi0/XGQrKSg/UDxicmFuY2g+QFxTKyk/JCcpCisgICAg
TlVNQkVSX1JFID0gcmUuY29tcGlsZShyJ14tP1xkKiQnKQorCisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIF9wYXJzZV9oYXNoKGNscywgaGFzaCwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAgICAg
aWYgaGFzaCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBu
b3QgaXNpbnN0YW5jZShoYXNoLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIGlmIGRv
X2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCBzdHJp
bmcgdHlwZSBmb3IgaGFzaCwgZ290ICd7fSciLmZvcm1hdCh0eXBlKGhhc2gpKSkKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IGNscy5IQVNIX1JFLm1hdGNoKGhhc2gp
IG9yIGxlbihoYXNoKSA+IDQwOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVkIHN0cmluZyAne30nIGlzIG5vdCBhIGdp
dCBoYXNoIi5mb3JtYXQoaGFzaCkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg
IHJldHVybiBoYXNoLmxvd2VyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2Vf
cmV2aXNpb24oY2xzLCByZXZpc2lvbiwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAgICAgaWYgcmV2
aXNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShyZXZpc2lvbiwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICBtYXRjaCA9
IGNscy5SRVZJU0lPTl9SRS5tYXRjaChyZXZpc2lvbikKKyAgICAgICAgICAgIGlmIG1hdGNoOgor
ICAgICAgICAgICAgICAgIHJldmlzaW9uID0gaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKQor
ICAgICAgICAgICAgZWxpZiByZXZpc2lvbi5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV2
aXNpb24gPSBpbnQocmV2aXNpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJv
dmlkZWQgc3RyaW5nICd7fScgaXMgbm90IGFuIFNWTiIuZm9ybWF0KHJldmlzaW9uKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJldmlz
aW9uLCBpbnQpOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIGludCB0eXBlIGZvciByZXZpc2lvbiwgZ290ICd7fSci
LmZvcm1hdCh0eXBlKHJldmlzaW9uKSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIGlmIHJldmlzaW9uIDw9IDA6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1ZOIHJldmlzaW9ucyBtdXN0IGJlIHBvc2l0aXZl
IGludGVnZXInKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gcmV2
aXNpb24KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2VfaWRlbnRpZmllcihjbHMs
IGlkZW50aWZpZXIsIGRvX2Fzc2VydD1GYWxzZSk6CisgICAgICAgIGlmIGlkZW50aWZpZXIgaXMg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYnJhbmNoID0gTm9uZQor
ICAgICAgICBpZiBpc2luc3RhbmNlKGlkZW50aWZpZXIsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAg
ICAgICAgICAgbWF0Y2ggPSBjbHMuSURFTlRJRklFUl9SRS5tYXRjaChpZGVudGlmaWVyKQorICAg
ICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGludChtYXRj
aC5ncm91cCgnaWRlbnRpZmllcicpKQorICAgICAgICAgICAgICAgIGJyYW5jaCA9IG1hdGNoLmdy
b3VwKCdicmFuY2gnKQorICAgICAgICAgICAgICAgIGlmIGJyYW5jaDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJhbmNoID0gYnJhbmNoWzE6XQorICAgICAgICAgICAgZWxpZiBjbHMuTlVNQkVSX1JF
Lm1hdGNoKGlkZW50aWZpZXIpOgorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBpbnQoaWRl
bnRpZmllcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgZG9fYXNzZXJ0
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcm92aWRlZCBzdHJpbmcg
J3t9JyBpcyBub3QgYW4gaWRlbnRpZmllciIuZm9ybWF0KGlkZW50aWZpZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaWRlbnRpZmll
ciwgaW50KToKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdFeHBlY3RlZCBpbnQgdHlwZSBmb3IgaWRlbnRpZmllciwgZ290IHt9Jy5m
b3JtYXQodHlwZShpZGVudGlmaWVyKSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIHJldHVybiBpZGVudGlmaWVyLCBicmFuY2gKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRl
ZiBwYXJzZShjbHMsIGFyZyk6CisgICAgICAgIGlmIGNscy5fcGFyc2VfaWRlbnRpZmllcihhcmcp
OgorICAgICAgICAgICAgcmV0dXJuIENvbW1pdChpZGVudGlmaWVyPWFyZykKKworICAgICAgICBp
ZiBjbHMuX3BhcnNlX3JldmlzaW9uKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gQ29tbWl0KHJl
dmlzaW9uPWFyZykKKworICAgICAgICBpZiBjbHMuX3BhcnNlX2hhc2goYXJnKToKKyAgICAgICAg
ICAgIHJldHVybiBDb21taXQoaGFzaD1hcmcpCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
J3t9JyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgY29tbWl0IG9iamVjdCIuZm9ybWF0KGFyZykp
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaGFzaD1Ob25lLCByZXZpc2lvbj1Ob25lLCBpZGVu
dGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25lLCB0aW1lc3RhbXA9Tm9uZSwgYXV0aG9yPU5vbmUsIG1l
c3NhZ2U9Tm9uZSk6CisgICAgICAgIHNlbGYuaGFzaCA9IHNlbGYuX3BhcnNlX2hhc2goaGFzaCwg
ZG9fYXNzZXJ0PVRydWUpCisgICAgICAgIHNlbGYucmV2aXNpb24gPSBzZWxmLl9wYXJzZV9yZXZp
c2lvbihyZXZpc2lvbiwgZG9fYXNzZXJ0PVRydWUpCisKKyAgICAgICAgcGFyc2VkX2lkZW50aWZp
ZXIgPSBzZWxmLl9wYXJzZV9pZGVudGlmaWVyKGlkZW50aWZpZXIsIGRvX2Fzc2VydD1UcnVlKQor
ICAgICAgICBpZiBwYXJzZWRfaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHNlbGYuaWRlbnRpZmll
ciwgcGFyc2VkX2JyYW5jaCA9IHBhcnNlZF9pZGVudGlmaWVyCisgICAgICAgICAgICBzZWxmLmJy
YW5jaCA9IHBhcnNlZF9icmFuY2ggb3IgYnJhbmNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLmlkZW50aWZpZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5j
aAorCisgICAgICAgIGlmIGJyYW5jaCBhbmQgbm90IGlzaW5zdGFuY2UoYnJhbmNoLCBzaXguc3Ry
aW5nX3R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICdicmFu
Y2gnIHRvIGJlIGEgc3RyaW5nIikKKyAgICAgICAgaWYgYnJhbmNoIGFuZCBicmFuY2ggIT0gc2Vs
Zi5icmFuY2g6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAg
ICJDYWxsZXIgcGFzc2VkIGJvdGggJ2JyYW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNp
ZmllZCBkaWZmZXJlbnQgYnJhbmNoZXMgKHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAg
ICAgICAgICAgYnJhbmNoLCBzZWxmLmJyYW5jaCwKKyAgICAgICAgICAgICAgICApLAorICAgICAg
ICAgICAgKQorCisgICAgICAgIGlmIHRpbWVzdGFtcCBhbmQgbm90IGlzaW5zdGFuY2UodGltZXN0
YW1wLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RlZCAndGltZXN0
YW1wJyB0byBiZSBvZiB0eXBlIGludCwgZ290ICd7fSciLmZvcm1hdCh0aW1lc3RhbXApKQorICAg
ICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVzdGFtcAorCisgICAgICAgIGlmIGF1dGhvciBhbmQg
aXNpbnN0YW5jZShhdXRob3IsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgc2VsZi5h
dXRob3IgPSBDb250cmlidXRvci5ieV9lbWFpbC5nZXQoCisgICAgICAgICAgICAgICAgYXV0aG9y
LAorICAgICAgICAgICAgICAgIENvbnRyaWJ1dG9yLmJ5X25hbWUuZ2V0KGF1dGhvciksCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5hdXRob3I6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBkb2VzIG5vdCBtYXRjaCBhIGtub3duIGNvbnRyaWJ1
dG9yIikKKyAgICAgICAgZWxpZiBhdXRob3IgYW5kIG5vdCBpc2luc3RhbmNlKGF1dGhvciwgQ29u
dHJpYnV0b3IpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJFeHBlY3RlZCAnYXV0aG9y
JyB0byBiZSBvZiB0eXBlIHt9LCBnb3QgJ3t9JyIuZm9ybWF0KENvbnRyaWJ1dG9yLCBhdXRob3Ip
KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hdXRob3IgPSBhdXRob3IKKworICAg
ICAgICBpZiBtZXNzYWdlIGFuZCBub3QgaXNpbnN0YW5jZShtZXNzYWdlLCBzaXguc3RyaW5nX3R5
cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICdtZXNzYWdlJyB0
byBiZSBhIHN0cmluZywgZ290ICd7fSciLmZvcm1hdChtZXNzYWdlKSkKKyAgICAgICAgc2VsZi5t
ZXNzYWdlID0gbWVzc2FnZQorCisgICAgICAgICMgRm9yY2UgYSBjb21taXQgZm9ybWF0IGNoZWNr
CisgICAgICAgIHNlbGYuX19yZXByX18oKQorCisgICAgZGVmIHByZXR0eV9wcmludChzZWxmLCBt
ZXNzYWdlPUZhbHNlKToKKyAgICAgICAgcmVzdWx0ID0gJ3t9XG4nLmZvcm1hdChzZWxmKQorICAg
ICAgICBpZiBzZWxmLnJldmlzaW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgU1ZOIHJl
dmlzaW9uOiBye30nLmZvcm1hdChzZWxmLnJldmlzaW9uKQorICAgICAgICAgICAgaWYgc2VsZi5i
cmFuY2g6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJy
YW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuaGFzaDoK
KyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIGdpdCBoYXNoOiB7fScuZm9ybWF0KHNlbGYuaGFz
aFs6MTJdKQorICAgICAgICAgICAgaWYgc2VsZi5icmFuY2g6CisgICAgICAgICAgICAgICAgcmVz
dWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAnXG4nCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAnICAgIGlkZW50aWZpZXI6IGl7fScuZm9ybWF0KHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAg
ICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7
fScuZm9ybWF0KHNlbGYuYnJhbmNoKQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAg
ICAgaWYgc2VsZi5hdXRob3I6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBieSB7fScuZm9y
bWF0KHNlbGYuYXV0aG9yKQorICAgICAgICAgICAgaWYgc2VsZi50aW1lc3RhbXA6CisgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9ICcgQCB7fScuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3Rh
bXAoc2VsZi50aW1lc3RhbXApKQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKworICAgICAg
ICBpZiBzZWxmLm1lc3NhZ2UgYW5kIG1lc3NhZ2U6CisgICAgICAgICAgICByZXN1bHQgKz0gJ1xu
JworICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYubWVzc2FnZQorCisgICAgICAgIHJldHVybiBy
ZXN1bHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZGVudGlm
aWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiAnaXt9QHt9Jy5mb3JtYXQo
c2VsZi5pZGVudGlmaWVyLCBzZWxmLmJyYW5jaCkKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lvbjoK
KyAgICAgICAgICAgIHJldHVybiAncnt9Jy5mb3JtYXQoc2VsZi5yZXZpc2lvbikKKyAgICAgICAg
aWYgc2VsZi5oYXNoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFzaFs6MTJdCisgICAgICAg
IGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJldHVybiAnaXt9Jy5mb3JtYXQoc2Vs
Zi5pZGVudGlmaWVyKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbmNvbXBsZXRlIGNvbW1p
dCBmb3JtYXQnKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlk
ZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5p
ZGVudGlmaWVyKSBeIGhhc2goc2VsZi5icmFuY2gpCisgICAgICAgIGlmIHNlbGYucmV2aXNpb246
CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLnJldmlzaW9uKQorICAgICAgICBpZiBzZWxm
Lmhhc2g6CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLmhhc2gpCisgICAgICAgIGlmIHNl
bGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuaWRlbnRpZmllcikK
KyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21taXQgZm9ybWF0JykKKwor
ICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uo
b3RoZXIsIENvbW1pdCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgY29t
cGFyZSBjb21taXQgYW5kIHt9Jy5mb3JtYXQodHlwZShvdGhlcikpKQorICAgICAgICBpZiBzZWxm
LnRpbWVzdGFtcCBhbmQgb3RoZXIudGltZXN0YW1wIGFuZCBzZWxmLnRpbWVzdGFtcCAhPSBvdGhl
ci50aW1lc3RhbXA6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50aW1lc3RhbXAgLSBvdGhlci50
aW1lc3RhbXAKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lvbiBhbmQgb3RoZXIucmV2aXNpb246Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5yZXZpc2lvbiAtIG90aGVyLnJldmlzaW9uCisgICAgICAg
IGlmIHNlbGYuaWRlbnRpZmllciBhbmQgb3RoZXIuaWRlbnRpZmllciBhbmQgc2VsZi5icmFuY2gg
PT0gb3RoZXIuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaWRlbnRpZmllciAtIG90
aGVyLmlkZW50aWZpZXIKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNvbXBhcmUg
e30gYW5kIHt9Jy5mb3JtYXQoc2VsZiwgb3RoZXIpKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBv
dGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYpID09IGhhc2gob3RoZXIpCisKKyAgICBk
ZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZikgIT0gaGFz
aChvdGhlcikKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4g
c2VsZi5fX2NtcF9fKG90aGVyKSA8IDAKKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgor
ICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA8PSAwCisKKyAgICBkZWYgX19ndF9f
KHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPiAwCisK
KyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBf
XyhvdGhlcikgPj0gMApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5p
dHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
aW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdl
YmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1dG9yCisKKworY2xhc3MgVGVzdENvbW1p
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfcGFyc2VfaGFzaChzZWxmKToKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICcxYTJlNDFlM2Y3Y2RmNTFiMWUx
ZDAyODgwY2ZiNjVlYWI5MzI3ZWYyJywKKyAgICAgICAgICAgIENvbW1pdC5fcGFyc2VfaGFzaCgn
MWEyZTQxZTNmN2NkZjUxYjFlMWQwMjg4MGNmYjY1ZWFiOTMyN2VmMicpCisgICAgICAgICkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICdjM2JkNzg0ZjhiODhiZDAzZjY0
NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAgICAgIENvbW1pdC5fcGFyc2VfaGFzaCgn
QzNCRDc4NEY4Qjg4QkQwM0Y2NDQ2N0RERDMzMDRFRDhCRTI4QUNCRScpCisgICAgICAgICkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfaGFzaCgnaW52YWxp
ZCBoYXNoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9o
YXNoKCdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlMScpKQorCisgICAg
ZGVmIHRlc3RfcGFyc2VfcmV2aXNpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
MjY2ODk2LCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCdyMjY2ODk2JykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCcyNjY4OTYnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNjY4OTYsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oMjY2
ODk2KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2
aXNpb24oJ2kxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9w
YXJzZV9yZXZpc2lvbignYzNiZDc4NGY4Yjg4YmQwMycpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJzAnKSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCctMScpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJzMuMTQxNTkyJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbigzLjE0
MTU5MikpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCgxMjM0LCBOb25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdp
MTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCBOb25lKSwgQ29tbWl0Ll9w
YXJzZV9pZGVudGlmaWVyKCcxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQs
IE5vbmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoMTIzNCkpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKDEyMzQsICdtYWluJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignaTEyMzRA
bWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCAnbWFpbicpLCBDb21taXQu
X3BhcnNlX2lkZW50aWZpZXIoJzEyMzRAbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCgxMjM0LCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kxMjM0QGVuZy9i
dWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ2VuZy9idWcnKSwgQ29tbWl0
Ll9wYXJzZV9pZGVudGlmaWVyKCcxMjM0QGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoMCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMCcpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCgtMSwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignLTEn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJz
ZV9pZGVudGlmaWVyKCdpMEBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAs
ICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMEBlbmcvYnVnJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50
aWZpZXIoJ2ktMUBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0xLCAnZW5n
L2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJy0xQGVuZy9idWcnKSkKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignaTEyMzQt
aW52YWxpZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2Vf
aWRlbnRpZmllcigncjI2Njg5NicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENv
bW1pdC5fcGFyc2VfaWRlbnRpZmllcignYzNiZDc4NGY4Yjg4YmQwMycpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMy4xNDE1OTInKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIo
My4xNDE1OTIpKQorCisgICAgZGVmIHRlc3RfcGFyc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCdpMTIzQG1haW4nKSwgQ29tbWl0KGlkZW50aWZpZXI9MTIz
LCBicmFuY2g9J21haW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2Uo
J2kxMjMnKSwgQ29tbWl0KGlkZW50aWZpZXI9MTIzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChDb21taXQucGFyc2UoJzEyMycpLCBDb21taXQoaWRlbnRpZmllcj0xMjMpKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCdyMTIzJyksIENvbW1pdChyZXZpc2lvbj0x
MjMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQucGFy
c2UoJ2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnKSwKKyAgICAgICAg
ICAgIENvbW1pdChoYXNoPSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2Jl
JyksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3ByZXR0eV9wcmludChzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyPSdpMTIzQG1hc3RlcicsCisgICAgICAgICAgICAgICAgaGFzaD0nYzNiZDc4
NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScsCisgICAgICAgICAgICAgICAgYXV0
aG9yPUNvbnRyaWJ1dG9yKCdKb25hdGhhbiBCZWRhcmQnLCBbJ2piZWRhcmRAYXBwbGUuY29tJ10p
LAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05PVCBQUklOVEVEJywKKyAgICAgICAgICAgICku
cHJldHR5X3ByaW50KCksCisgICAgICAgICAgICAnJydpMTIzQG1hc3RlcgorICAgIGdpdCBoYXNo
OiBjM2JkNzg0ZjhiODggb24gbWFzdGVyCisgICAgaWRlbnRpZmllcjogaTEyMyBvbiBtYXN0ZXIK
KyAgICBieSBKb25hdGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPgorJycnLAorICAgICAg
ICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIENvbW1pdCgKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyPSdpMTIzQHRydW5rJywKKyAgICAgICAgICAgICAgICBy
ZXZpc2lvbj0ncjEyMycsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdKb25h
dGhhbiBCZWRhcmQnLCBbJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIHRp
bWVzdGFtcD0xMDAwLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05PVCBQUklOVEVEJywKKyAg
ICAgICAgICAgICkucHJldHR5X3ByaW50KCksCisgICAgICAgICAgICAnJydpMTIzQHRydW5rCisg
ICAgU1ZOIHJldmlzaW9uOiByMTIzIG9uIHRydW5rCisgICAgaWRlbnRpZmllcjogaTEyMyBvbiB0
cnVuaworICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+IEAge30KKycn
Jy5mb3JtYXQoZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgxMDAwKSksCisgICAgICAgICkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0KAorICAgICAgICAg
ICAgICAgIGlkZW50aWZpZXI9J2kxMjNAdHJ1bmsnLAorICAgICAgICAgICAgICAgIHJldmlzaW9u
PSdyMTIzJywKKyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJl
ZGFyZCcsIFsnamJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAgICAgICAgICAgdGltZXN0YW1w
PTEwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nUFJJTlRFRFxuJywKKyAgICAgICAgICAg
ICkucHJldHR5X3ByaW50KG1lc3NhZ2U9VHJ1ZSksCisgICAgICAgICAgICAnJydpMTIzQHRydW5r
CisgICAgU1ZOIHJldmlzaW9uOiByMTIzIG9uIHRydW5rCisgICAgaWRlbnRpZmllcjogaTEyMyBv
biB0cnVuaworICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+IEAge30K
KworUFJJTlRFRAorJycnLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDEwMDApKSwK
KyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzdHIoQ29tbWl0KGlkZW50aWZpZXI9MTIzLCBicmFuY2g9J21haW4nKSksICdpMTIz
QG1haW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQoaWRlbnRpZmllcj0x
MjMpKSwgJ2kxMjMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChyZXZp
c2lvbj0xMjMpKSwgJ3IxMjMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1p
dChoYXNoPSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJykpLCAnYzNi
ZDc4NGY4Yjg4JykKKworICAgIGRlZiB0ZXN0X3RpbWVzdGFtcF9jb21wYXJlKHNlbGYpOgorICAg
ICAgICBzZWxmLmFzc2VydExlc3MoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRl
bnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0y
LCBpZGVudGlmaWVyPTIsIHRpbWVzdGFtcD0yMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYu
YXNzZXJ0R3JlYXRlcigKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVy
PTIsIHRpbWVzdGFtcD0yMDApLAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50
aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRM
ZXNzKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0
YW1wPTEwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0
aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoCisg
ICAgICAgICAgICBDb21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAw
KSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFt
cD0xMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAg
ICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAg
ICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAor
ICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVyX2NvbXBhcmUoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0TGVzcyhDb21taXQoaWRlbnRpZmllcj0xKSwgQ29tbWl0KGlkZW50aWZp
ZXI9MikpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihDb21taXQoaWRlbnRpZmllcj0yKSwg
Q29tbWl0KGlkZW50aWZpZXI9MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0KGlk
ZW50aWZpZXI9MSksIENvbW1pdChpZGVudGlmaWVyPTEpKQorCisgICAgZGVmIHRlc3RfcmV2aXNp
b25fY29tcGFyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKENvbW1pdChyZXZpc2lv
bj0xKSwgQ29tbWl0KHJldmlzaW9uPTIpKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoQ29t
bWl0KHJldmlzaW9uPTIpLCBDb21taXQocmV2aXNpb249MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoQ29tbWl0KHJldmlzaW9uPTEpLCBDb21taXQocmV2aXNpb249MSkpCisKKyAgICBkZWYg
dGVzdF9pbnZhbGlkX2NvbXBhcmUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlz
ZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSkuX19jbXBfXyhD
b21taXQoaWRlbnRpZmllcj0yKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZh
bHVlRXJyb3IpOgorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIHRpbWVzdGFtcD0xMDAp
Ll9fY21wX18oQ29tbWl0KGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTEwMCkpCisKKyAgICBkZWYg
dGVzdF9jb250cmlidXRvcihzZWxmKToKKyAgICAgICAgQ29udHJpYnV0b3IuY2xlYXIoKQorICAg
ICAgICBjb250cmlidXRvciA9IENvbnRyaWJ1dG9yLmZyb21fc2NtX2xvZygnQXV0aG9yOiBKb25h
dGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPicpCisKKyAgICAgICAgY29tbWl0ID0gQ29t
bWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9yPWNvbnRyaWJ1dG9yKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5hdXRob3IsIGNvbnRyaWJ1dG9yKQorCisgICAgICAg
IGNvbW1pdCA9IENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIGF1dGhvcj0nSm9uYXRo
YW4gQmVkYXJkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQuYXV0aG9yLCBjb250
cmlidXRvcikKKworICAgICAgICBjb21taXQgPSBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmll
cj0xLCBhdXRob3I9J2piZWRhcmRAYXBwbGUuY29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjb21taXQuYXV0aG9yLCBjb250cmlidXRvcikKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfY29u
dHJpYnV0b3Ioc2VsZik6CisgICAgICAgIENvbnRyaWJ1dG9yLmNsZWFyKCkKKyAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbW1pdChyZXZp
c2lvbj0xLCBpZGVudGlmaWVyPTEsIGF1dGhvcj0nSm9uYXRoYW4gQmVkYXJkJykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410060</attachid>
            <date>2020-09-29 15:36:47 -0700</date>
            <delta_ts>2020-09-29 16:57:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200929153645.patch</filename>
            <type>text/plain</type>
            <size>23395</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzc1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuX3BhcnNlX2hhc2gpOiBHaXZlbiBhIGhhc2gsIHZlcmlmeSB0aGF0IHRoZSBwcm92
aWRlZCBhcmd1bWVudCBpcworICAgICAgICBBY3R1YWxseSBhIGdpdCBoYXNoLgorICAgICAgICAo
Q29tbWl0Ll9wYXJzZV9yZXZpc2lvbik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlm
eSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBTVk4gcmV2aXNpb24g
YW5kIHJldHVybiB0aGUgcmV2aXNpb24gYXMgYW4gaW50ZWdlci4KKyAgICAgICAgKENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlmeSB0aGUg
cHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFuZCByZXR1
cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENvbW1pdC5wYXJzZSk6IEdp
dmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBzdm4gcmV2aXNpb24gb3IK
KyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVjdC4KKyAgICAgICAgKENv
bW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQucHJldHR5X3ByaW50KTogUmV0dXJuIGEg
bG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBjb21taXQKKyAgICAg
ICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAgICAgICAoQ29tbWl0
Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5w
eTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9wYXJzZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVzdF9wYXJzZV9yZXZpc2lvbik6
CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2VfaWRlbnRpZmllcik6CisgICAgICAgIChU
ZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3ByZXR0eV9w
cmludCk6CisKIDIwMjAtMDktMjkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29t
PgogCiAgICAgICAgIFt0dk9TXSBbd2F0Y2hPU10gQWRkIHN1cHBvcnQgaW4gbGliVGVzdFdURkFs
d2F5c01pc3NpbmctaU9TLXYyLnRiZApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlz
aW9uIDI2Nzc1NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTIgQEAgZXhj
ZXB0IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdp
dGggYHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBp
bmRleCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDAsIDQpCit2ZXJzaW9u
ID0gVmVyc2lvbigwLCAwLCA1KQogCiBmcm9tIHdlYmtpdHNjbXB5LmNvbnRyaWJ1dG9yIGltcG9y
dCBDb250cmlidXRvcgogCitmcm9tIHdlYmtpdHNjbXB5LmNvbW1pdCBpbXBvcnQgQ29tbWl0CisK
IGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBt
b2NrcwogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jb21taXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI2NyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisj
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgc2l4CitpbXBvcnQgcmUKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbnRyaWJ1dG9yCisKKworY2xhc3MgQ29t
bWl0KG9iamVjdCk6CisgICAgSEFTSF9SRSA9IHJlLmNvbXBpbGUocideW2EtZjAtOUEtRl0rJCcp
CisgICAgUkVWSVNJT05fUkUgPSByZS5jb21waWxlKHInXnIoP1A8cmV2aXNpb24+XGQrKSQnKQor
ICAgIElERU5USUZJRVJfUkUgPSByZS5jb21waWxlKHInXltJaV0/KD9QPGJyYW5jaF9wb2ludD5c
ZCtcLik/KD9QPGlkZW50aWZpZXI+LT9cZCspKD9QPGJyYW5jaD5AXFMrKT8kJykKKyAgICBOVU1C
RVJfUkUgPSByZS5jb21waWxlKHInXi0/XGQqJCcpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBk
ZWYgX3BhcnNlX2hhc2goY2xzLCBoYXNoLCBkb19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiBo
YXNoIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKGhhc2gsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgaWYgZG9fYXNz
ZXJ0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIHN0cmluZyB0
eXBlIGZvciBoYXNoLCBnb3QgJ3t9JyIuZm9ybWF0KHR5cGUoaGFzaCkpKQorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgY2xzLkhBU0hfUkUubWF0Y2goaGFzaCkgb3Ig
bGVuKGhhc2gpID4gNDA6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcigiUHJvdmlkZWQgc3RyaW5nICd7fScgaXMgbm90IGEgZ2l0IGhh
c2giLmZvcm1hdChoYXNoKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0
dXJuIGhhc2gubG93ZXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXJzZV9yZXZp
c2lvbihjbHMsIHJldmlzaW9uLCBkb19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiByZXZpc2lv
biBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBpc2luc3Rh
bmNlKHJldmlzaW9uLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIG1hdGNoID0gY2xz
LlJFVklTSU9OX1JFLm1hdGNoKHJldmlzaW9uKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAg
ICAgICAgICAgICAgcmV2aXNpb24gPSBpbnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpCisgICAg
ICAgICAgICBlbGlmIHJldmlzaW9uLmlzZGlnaXQoKToKKyAgICAgICAgICAgICAgICByZXZpc2lv
biA9IGludChyZXZpc2lvbikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYg
ZG9fYXNzZXJ0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcm92aWRl
ZCBzdHJpbmcgJ3t9JyBpcyBub3QgYW4gU1ZOIi5mb3JtYXQocmV2aXNpb24pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UocmV2aXNpb24s
IGludCk6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiRXhwZWN0ZWQgaW50IHR5cGUgZm9yIHJldmlzaW9uLCBnb3QgJ3t9JyIuZm9y
bWF0KHR5cGUocmV2aXNpb24pKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
aWYgcmV2aXNpb24gPD0gMDoKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCdTVk4gcmV2aXNpb25zIG11c3QgYmUgcG9zaXRpdmUgaW50
ZWdlcicpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHJldHVybiByZXZpc2lv
bgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXJzZV9pZGVudGlmaWVyKGNscywgaWRl
bnRpZmllciwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAgICAgaWYgaWRlbnRpZmllciBpcyBOb25l
OgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBicmFuY2ggPSBOb25lCisgICAg
ICAgIGlmIGlzaW5zdGFuY2UoaWRlbnRpZmllciwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAg
ICAgICBtYXRjaCA9IGNscy5JREVOVElGSUVSX1JFLm1hdGNoKGlkZW50aWZpZXIpCisgICAgICAg
ICAgICBpZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gaW50KG1hdGNoLmdy
b3VwKCdpZGVudGlmaWVyJykpCisgICAgICAgICAgICAgICAgYnJhbmNoX3BvaW50ID0gbWF0Y2gu
Z3JvdXAoJ2JyYW5jaF9wb2ludCcpCisgICAgICAgICAgICAgICAgaWYgYnJhbmNoX3BvaW50Ogor
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gKGludChicmFuY2hfcG9pbnRbOi0xXSks
IGlkZW50aWZpZXIpCisgICAgICAgICAgICAgICAgYnJhbmNoID0gbWF0Y2guZ3JvdXAoJ2JyYW5j
aCcpCisgICAgICAgICAgICAgICAgaWYgYnJhbmNoOgorICAgICAgICAgICAgICAgICAgICBicmFu
Y2ggPSBicmFuY2hbMTpdCisgICAgICAgICAgICBlbGlmIGNscy5OVU1CRVJfUkUubWF0Y2goaWRl
bnRpZmllcik6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGludChpZGVudGlmaWVyKQor
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVkIHN0cmluZyAne30nIGlzIG5v
dCBhbiBpZGVudGlmaWVyIi5mb3JtYXQoaWRlbnRpZmllcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShpZGVudGlmaWVyLCBpbnQpIGFu
ZCBub3QgKGlzaW5zdGFuY2UoaWRlbnRpZmllciwgdHVwbGUpIGFuZCBsZW4oaWRlbnRpZmllcikg
PT0gMiBhbmQgYWxsKFtpc2luc3RhbmNlKHgsIGludCkgZm9yIHggaW4gaWRlbnRpZmllcl0pKToK
KyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdFeHBlY3RlZCBpbnQgdHlwZSAob3IgcGFpciBvZiBpbnRzKSBmb3IgaWRlbnRpZmllciwg
Z290IHt9Jy5mb3JtYXQodHlwZShpZGVudGlmaWVyKSkpCisgICAgICAgICAgICByZXR1cm4gTm9u
ZQorCisgICAgICAgIHJldHVybiBpZGVudGlmaWVyLCBicmFuY2gKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBwYXJzZShjbHMsIGFyZyk6CisgICAgICAgIGlmIGNscy5fcGFyc2VfaWRlbnRp
ZmllcihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIENvbW1pdChpZGVudGlmaWVyPWFyZykKKwor
ICAgICAgICBpZiBjbHMuX3BhcnNlX3JldmlzaW9uKGFyZyk6CisgICAgICAgICAgICByZXR1cm4g
Q29tbWl0KHJldmlzaW9uPWFyZykKKworICAgICAgICBpZiBjbHMuX3BhcnNlX2hhc2goYXJnKToK
KyAgICAgICAgICAgIHJldHVybiBDb21taXQoaGFzaD1hcmcpCisKKyAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigiJ3t9JyBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgY29tbWl0IG9iamVjdCIuZm9y
bWF0KGFyZykpCisKKyAgICBkZWYgX19pbml0X18oCisgICAgICAgIHNlbGYsCisgICAgICAgIGhh
c2g9Tm9uZSwKKyAgICAgICAgcmV2aXNpb249Tm9uZSwKKyAgICAgICAgaWRlbnRpZmllcj1Ob25l
LCBicmFuY2g9Tm9uZSwgYnJhbmNoX3BvaW50PU5vbmUsCisgICAgICAgIHRpbWVzdGFtcD1Ob25l
LCBhdXRob3I9Tm9uZSwgbWVzc2FnZT1Ob25lLAorICAgICk6CisgICAgICAgIHNlbGYuaGFzaCA9
IHNlbGYuX3BhcnNlX2hhc2goaGFzaCwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgIHNlbGYucmV2
aXNpb24gPSBzZWxmLl9wYXJzZV9yZXZpc2lvbihyZXZpc2lvbiwgZG9fYXNzZXJ0PVRydWUpCisK
KyAgICAgICAgc2VsZi5icmFuY2hfcG9pbnQgPSBicmFuY2hfcG9pbnQKKyAgICAgICAgcGFyc2Vk
X2lkZW50aWZpZXIgPSBzZWxmLl9wYXJzZV9pZGVudGlmaWVyKGlkZW50aWZpZXIsIGRvX2Fzc2Vy
dD1UcnVlKQorICAgICAgICBpZiBwYXJzZWRfaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHNlbGYu
aWRlbnRpZmllciwgcGFyc2VkX2JyYW5jaCA9IHBhcnNlZF9pZGVudGlmaWVyCisgICAgICAgICAg
ICBpZiBpc2luc3RhbmNlKHNlbGYuaWRlbnRpZmllciwgdHVwbGUpOgorICAgICAgICAgICAgICAg
IHNlbGYuYnJhbmNoX3BvaW50ID0gc2VsZi5pZGVudGlmaWVyWzBdCisgICAgICAgICAgICAgICAg
c2VsZi5pZGVudGlmaWVyID0gc2VsZi5pZGVudGlmaWVyWzFdCisgICAgICAgICAgICBzZWxmLmJy
YW5jaCA9IHBhcnNlZF9icmFuY2ggb3IgYnJhbmNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAg
ICBzZWxmLmlkZW50aWZpZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5j
aAorCisgICAgICAgIGlmIGJyYW5jaCBhbmQgbm90IGlzaW5zdGFuY2UoYnJhbmNoLCBzaXguc3Ry
aW5nX3R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICdicmFu
Y2gnIHRvIGJlIGEgc3RyaW5nIikKKyAgICAgICAgaWYgYnJhbmNoIGFuZCBicmFuY2ggIT0gc2Vs
Zi5icmFuY2g6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAg
ICJDYWxsZXIgcGFzc2VkIGJvdGggJ2JyYW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNp
ZmllZCBkaWZmZXJlbnQgYnJhbmNoZXMgKHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAg
ICAgICAgICAgYnJhbmNoLCBzZWxmLmJyYW5jaCwKKyAgICAgICAgICAgICAgICApLAorICAgICAg
ICAgICAgKQorCisgICAgICAgIGlmIGJyYW5jaF9wb2ludCBhbmQgbm90IGlzaW5zdGFuY2UoYnJh
bmNoX3BvaW50LCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQg
J2JyYW5jaF9wb2ludCcgdG8gYmUgYW4gaW50IikKKyAgICAgICAgaWYgYnJhbmNoX3BvaW50IGFu
ZCBicmFuY2hfcG9pbnQgIT0gc2VsZi5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJDYWxsZXIgcGFzc2VkIGJvdGggJ2JyYW5jaF9w
b2ludCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmllZCBkaWZmZXJlbnQgdmFsdWVzICh7
fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9wb2ludCwgc2Vs
Zi5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICkKKworICAg
ICAgICBpZiB0aW1lc3RhbXAgYW5kIG5vdCBpc2luc3RhbmNlKHRpbWVzdGFtcCwgaW50KToKKyAg
ICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ3RpbWVzdGFtcCcgdG8gYmUgb2Yg
dHlwZSBpbnQsIGdvdCAne30nIi5mb3JtYXQodGltZXN0YW1wKSkKKyAgICAgICAgc2VsZi50aW1l
c3RhbXAgPSB0aW1lc3RhbXAKKworICAgICAgICBpZiBhdXRob3IgYW5kIGlzaW5zdGFuY2UoYXV0
aG9yLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuYXV0aG9yID0gQ29udHJp
YnV0b3IuYnlfZW1haWwuZ2V0KAorICAgICAgICAgICAgICAgIGF1dGhvciwKKyAgICAgICAgICAg
ICAgICBDb250cmlidXRvci5ieV9uYW1lLmdldChhdXRob3IpLAorICAgICAgICAgICAgKQorICAg
ICAgICAgICAgaWYgbm90IHNlbGYuYXV0aG9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVl
RXJyb3IoIid7fScgZG9lcyBub3QgbWF0Y2ggYSBrbm93biBjb250cmlidXRvciIpCisgICAgICAg
IGVsaWYgYXV0aG9yIGFuZCBub3QgaXNpbnN0YW5jZShhdXRob3IsIENvbnRyaWJ1dG9yKToKKyAg
ICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ2F1dGhvcicgdG8gYmUgb2YgdHlw
ZSB7fSwgZ290ICd7fSciLmZvcm1hdChDb250cmlidXRvciwgYXV0aG9yKSkKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHNlbGYuYXV0aG9yID0gYXV0aG9yCisKKyAgICAgICAgaWYgbWVzc2Fn
ZSBhbmQgbm90IGlzaW5zdGFuY2UobWVzc2FnZSwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnbWVzc2FnZScgdG8gYmUgYSBzdHJpbmcs
IGdvdCAne30nIi5mb3JtYXQobWVzc2FnZSkpCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3Nh
Z2UKKworICAgICAgICAjIEZvcmNlIGEgY29tbWl0IGZvcm1hdCBjaGVjaworICAgICAgICBzZWxm
Ll9fcmVwcl9fKCkKKworICAgIGRlZiBwcmV0dHlfcHJpbnQoc2VsZiwgbWVzc2FnZT1GYWxzZSk6
CisgICAgICAgIHJlc3VsdCA9ICd7fVxuJy5mb3JtYXQoc2VsZikKKyAgICAgICAgaWYgc2VsZi5y
ZXZpc2lvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIFNWTiByZXZpc2lvbjogcnt9Jy5m
b3JtYXQoc2VsZi5yZXZpc2lvbikKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAg
ICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAg
ICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAgICBy
ZXN1bHQgKz0gJyAgICBnaXQgaGFzaDoge30nLmZvcm1hdChzZWxmLmhhc2hbOjEyXSkKKyAgICAg
ICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9
Jy5mb3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAg
ICBpZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBpZGVudGlm
aWVyOiBpe30nLmZvcm1hdChzZWxmLmlkZW50aWZpZXIpCisgICAgICAgICAgICBpZiBzZWxmLmlk
ZW50aWZpZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxm
LmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuYXV0
aG9yOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgYnkge30nLmZvcm1hdChzZWxmLmF1dGhv
cikKKyAgICAgICAgICAgIGlmIHNlbGYudGltZXN0YW1wOgorICAgICAgICAgICAgICAgIHJlc3Vs
dCArPSAnIEAge30nLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHNlbGYudGltZXN0
YW1wKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisKKyAgICAgICAgaWYgc2VsZi5tZXNz
YWdlIGFuZCBtZXNzYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAgICAgICAg
IHJlc3VsdCArPSBzZWxmLm1lc3NhZ2UKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBk
ZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnJhbmNoX3BvaW50IGFuZCBzZWxm
LmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuICdpe30ue31A
e30nLmZvcm1hdChzZWxmLmJyYW5jaF9wb2ludCwgc2VsZi5pZGVudGlmaWVyLCBzZWxmLmJyYW5j
aCkKKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAg
ICAgIHJldHVybiAnaXt9QHt9Jy5mb3JtYXQoc2VsZi5pZGVudGlmaWVyLCBzZWxmLmJyYW5jaCkK
KyAgICAgICAgaWYgc2VsZi5yZXZpc2lvbjoKKyAgICAgICAgICAgIHJldHVybiAncnt9Jy5mb3Jt
YXQoc2VsZi5yZXZpc2lvbikKKyAgICAgICAgaWYgc2VsZi5oYXNoOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuaGFzaFs6MTJdCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAg
ICAgIHJldHVybiAnaXt9Jy5mb3JtYXQoc2VsZi5pZGVudGlmaWVyKQorICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdJbmNvbXBsZXRlIGNvbW1pdCBmb3JtYXQnKQorCisgICAgZGVmIF9faGFzaF9f
KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAg
ICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5pZGVudGlmaWVyKSBeIGhhc2goc2VsZi5icmFuY2gp
CisgICAgICAgIGlmIHNlbGYucmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxm
LnJldmlzaW9uKQorICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAgICByZXR1cm4gaGFz
aChzZWxmLmhhc2gpCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJl
dHVybiBoYXNoKHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5j
b21wbGV0ZSBjb21taXQgZm9ybWF0JykKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToK
KyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvbW1pdCk6CisgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgY29tcGFyZSBjb21taXQgYW5kIHt9Jy5mb3JtYXQodHlw
ZShvdGhlcikpKQorICAgICAgICBpZiBzZWxmLnRpbWVzdGFtcCBhbmQgb3RoZXIudGltZXN0YW1w
IGFuZCBzZWxmLnRpbWVzdGFtcCAhPSBvdGhlci50aW1lc3RhbXA6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi50aW1lc3RhbXAgLSBvdGhlci50aW1lc3RhbXAKKyAgICAgICAgaWYgc2VsZi5yZXZp
c2lvbiBhbmQgb3RoZXIucmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXZpc2lv
biAtIG90aGVyLnJldmlzaW9uCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllciBhbmQgb3RoZXIu
aWRlbnRpZmllciBhbmQgc2VsZi5icmFuY2ggPT0gb3RoZXIuYnJhbmNoOgorICAgICAgICAgICAg
cmV0dXJuIHNlbGYuaWRlbnRpZmllciAtIG90aGVyLmlkZW50aWZpZXIKKyAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQ2Fubm90IGNvbXBhcmUge30gYW5kIHt9Jy5mb3JtYXQoc2VsZiwgb3RoZXIp
KQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNl
bGYpID09IGhhc2gob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAg
ICAgcmV0dXJuIGhhc2goc2VsZikgIT0gaGFzaChvdGhlcikKKworICAgIGRlZiBfX2x0X18oc2Vs
Ziwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA8IDAKKworICAg
IGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90
aGVyKSA8PSAwCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX19jbXBfXyhvdGhlcikgPiAwCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPj0gMApJbmRleDogVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRl
c3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRf
dW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTIgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZGF0ZXRp
bWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRy
aWJ1dG9yCisKKworY2xhc3MgVGVzdENvbW1pdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVm
IHRlc3RfcGFyc2VfaGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgICcxYTJlNDFlM2Y3Y2RmNTFiMWUxZDAyODgwY2ZiNjVlYWI5MzI3ZWYyJywKKyAgICAg
ICAgICAgIENvbW1pdC5fcGFyc2VfaGFzaCgnMWEyZTQxZTNmN2NkZjUxYjFlMWQwMjg4MGNmYjY1
ZWFiOTMyN2VmMicpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgICdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAg
ICAgICAgIENvbW1pdC5fcGFyc2VfaGFzaCgnQzNCRDc4NEY4Qjg4QkQwM0Y2NDQ2N0RERDMzMDRF
RDhCRTI4QUNCRScpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUs
IENvbW1pdC5fcGFyc2VfaGFzaCgnaW52YWxpZCBoYXNoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9oYXNoKCdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRk
MzMwNGVkOGJlMjhhY2JlMScpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcmV2aXNpb24oc2VsZik6
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3BhcnNlX3JldmlzaW9u
KCdyMjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3Bh
cnNlX3JldmlzaW9uKCcyNjY4OTYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNjY4OTYs
IENvbW1pdC5fcGFyc2VfcmV2aXNpb24oMjY2ODk2KSkKKworICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJ2kxMjM0JykpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignYzNiZDc4NGY4Yjg4YmQw
MycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2aXNp
b24oJzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX3Jl
dmlzaW9uKCctMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFy
c2VfcmV2aXNpb24oJzMuMTQxNTkyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwg
Q29tbWl0Ll9wYXJzZV9yZXZpc2lvbigzLjE0MTU5MikpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9p
ZGVudGlmaWVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCBOb25lKSwg
Q29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCgxMjM0LCBOb25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdJMTIzNCcpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCBOb25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlm
aWVyKCcxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21t
aXQuX3BhcnNlX2lkZW50aWZpZXIoMTIzNCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgo
MTIzNCwgJ21haW4nKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNEBtYWluJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdtYWluJyksIENvbW1pdC5fcGFyc2VfaWRl
bnRpZmllcignSTEyMzRAbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCAn
bWFpbicpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzEyMzRAbWFpbicpKQorCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRp
ZmllcignaTEyMzRAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCAn
ZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ0kxMjM0QGVuZy9idWcnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9p
ZGVudGlmaWVyKCcxMjM0QGVuZy9idWcnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgo
MTIzNCwgMSksICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignaTEyMzQuMUBl
bmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCgxMjM0LCAxKSwgJ2VuZy9idWcn
KSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdJMTIzNC4xQGVuZy9idWcnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgoKDEyMzQsIDEpLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lk
ZW50aWZpZXIoJzEyMzQuMUBlbmcvYnVnJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgo
MCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMCcpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCgtMSwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignLTEnKSkKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lk
ZW50aWZpZXIoJ2kwQGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgJ2Vu
Zy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdJMEBlbmcvYnVnJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoKDAsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmll
cignMEBlbmcvYnVnJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsICdlbmcvYnVn
JyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignaS0xQGVuZy9idWcnKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgoLTEsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcign
SS0xQGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoLTEsICdlbmcvYnVnJyks
IENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignLTFAZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNC1pbnZhbGlk
JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlm
aWVyKCdyMjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9w
YXJzZV9pZGVudGlmaWVyKCdjM2JkNzg0ZjhiODhiZDAzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKDMuMTQxNTkyKSkKKworICAgIGRl
ZiB0ZXN0X3BhcnNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdC5wYXJz
ZSgnaTEyM0BtYWluJyksIENvbW1pdChpZGVudGlmaWVyPTEyMywgYnJhbmNoPSdtYWluJykpCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCdpMTIzJyksIENvbW1pdChpZGVu
dGlmaWVyPTEyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCcxMjMn
KSwgQ29tbWl0KGlkZW50aWZpZXI9MTIzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENv
bW1pdC5wYXJzZSgncjEyMycpLCBDb21taXQocmV2aXNpb249MTIzKSkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0LnBhcnNlKCdjM2JkNzg0ZjhiODhiZDAz
ZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJyksCisgICAgICAgICAgICBDb21taXQoaGFzaD0nYzNi
ZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScpLAorICAgICAgICApCisKKyAg
ICBkZWYgdGVzdF9wcmV0dHlfcHJpbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0naTEyM0Bt
YXN0ZXInLAorICAgICAgICAgICAgICAgIGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQz
MzA0ZWQ4YmUyOGFjYmUnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9u
YXRoYW4gQmVkYXJkJywgWydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBt
ZXNzYWdlPSdOT1QgUFJJTlRFRCcsCisgICAgICAgICAgICApLnByZXR0eV9wcmludCgpLAorICAg
ICAgICAgICAgJycnaTEyM0BtYXN0ZXIKKyAgICBnaXQgaGFzaDogYzNiZDc4NGY4Yjg4IG9uIG1h
c3RlcgorICAgIGlkZW50aWZpZXI6IGkxMjMgb24gbWFzdGVyCisgICAgYnkgSm9uYXRoYW4gQmVk
YXJkIDxqYmVkYXJkQGFwcGxlLmNvbT4KKycnJywKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgaWRlbnRp
Zmllcj0naTEyM0B0cnVuaycsCisgICAgICAgICAgICAgICAgcmV2aXNpb249J3IxMjMnLAorICAg
ICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9uYXRoYW4gQmVkYXJkJywgWydqYmVk
YXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTAwMCwKKyAgICAg
ICAgICAgICAgICBtZXNzYWdlPSdOT1QgUFJJTlRFRCcsCisgICAgICAgICAgICApLnByZXR0eV9w
cmludCgpLAorICAgICAgICAgICAgJycnaTEyM0B0cnVuaworICAgIFNWTiByZXZpc2lvbjogcjEy
MyBvbiB0cnVuaworICAgIGlkZW50aWZpZXI6IGkxMjMgb24gdHJ1bmsKKyAgICBieSBKb25hdGhh
biBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPiBAIHt9CisnJycuZm9ybWF0KGRhdGV0aW1lLnV0
Y2Zyb210aW1lc3RhbXAoMTAwMCkpLAorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgKKyAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSdp
MTIzQHRydW5rJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0ncjEyMycsCisgICAgICAgICAg
ICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdKb25hdGhhbiBCZWRhcmQnLCBbJ2piZWRhcmRAYXBw
bGUuY29tJ10pLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xMDAwLAorICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9J1BSSU5URURcbicsCisgICAgICAgICAgICApLnByZXR0eV9wcmludChtZXNz
YWdlPVRydWUpLAorICAgICAgICAgICAgJycnaTEyM0B0cnVuaworICAgIFNWTiByZXZpc2lvbjog
cjEyMyBvbiB0cnVuaworICAgIGlkZW50aWZpZXI6IGkxMjMgb24gdHJ1bmsKKyAgICBieSBKb25h
dGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPiBAIHt9CisKK1BSSU5URUQKKycnJy5mb3Jt
YXQoZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgxMDAwKSksCisgICAgICAgICkKKworICAgIGRl
ZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChp
ZGVudGlmaWVyPTEyMywgYnJhbmNoPSdtYWluJykpLCAnaTEyM0BtYWluJykKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChzdHIoQ29tbWl0KGJyYW5jaF9wb2ludD0xMjM0LCBpZGVudGlmaWVyPTEs
IGJyYW5jaD0nZW5nLzEyMzQnKSksICdpMTIzNC4xQGVuZy8xMjM0JykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzdHIoQ29tbWl0KGlkZW50aWZpZXI9MTIzKSksICdpMTIzJykKKworICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQocmV2aXNpb249MTIzKSksICdyMTIzJykKKwor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQoaGFzaD0nYzNiZDc4NGY4Yjg4YmQw
M2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScpKSwgJ2MzYmQ3ODRmOGI4OCcpCisKKyAgICBkZWYg
dGVzdF90aW1lc3RhbXBfY29tcGFyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAor
ICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEw
MCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3Rh
bXA9MjAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoCisgICAgICAg
ICAgICBDb21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MjAwKSwKKyAg
ICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDAp
LAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygKKyAgICAgICAgICAgIENvbW1p
dChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICAgICAg
Q29tbWl0KHJldmlzaW9uPTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTEwMCksCisgICAgICAg
ICkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKAorICAgICAgICAgICAgQ29tbWl0KHJldmlz
aW9uPTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICAgICBDb21taXQo
cmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlk
ZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249
MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRl
c3RfaWRlbnRpZmllcl9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoQ29t
bWl0KGlkZW50aWZpZXI9MSksIENvbW1pdChpZGVudGlmaWVyPTIpKQorICAgICAgICBzZWxmLmFz
c2VydEdyZWF0ZXIoQ29tbWl0KGlkZW50aWZpZXI9MiksIENvbW1pdChpZGVudGlmaWVyPTEpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdChpZGVudGlmaWVyPTEpLCBDb21taXQoaWRl
bnRpZmllcj0xKSkKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX2NvbXBhcmUoc2VsZik6CisgICAg
ICAgIHNlbGYuYXNzZXJ0TGVzcyhDb21taXQocmV2aXNpb249MSksIENvbW1pdChyZXZpc2lvbj0y
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKENvbW1pdChyZXZpc2lvbj0yKSwgQ29tbWl0
KHJldmlzaW9uPTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdChyZXZpc2lvbj0x
KSwgQ29tbWl0KHJldmlzaW9uPTEpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9jb21wYXJlKHNl
bGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAg
ICAgICAgQ29tbWl0KHJldmlzaW9uPTEpLl9fY21wX18oQ29tbWl0KGlkZW50aWZpZXI9MikpCisK
KyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAg
IENvbW1pdChyZXZpc2lvbj0xLCB0aW1lc3RhbXA9MTAwKS5fX2NtcF9fKENvbW1pdChpZGVudGlm
aWVyPTIsIHRpbWVzdGFtcD0xMDApKQorCisgICAgZGVmIHRlc3RfY29udHJpYnV0b3Ioc2VsZik6
CisgICAgICAgIENvbnRyaWJ1dG9yLmNsZWFyKCkKKyAgICAgICAgY29udHJpYnV0b3IgPSBDb250
cmlidXRvci5mcm9tX3NjbV9sb2coJ0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFw
cGxlLmNvbT4nKQorCisgICAgICAgIGNvbW1pdCA9IENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlm
aWVyPTEsIGF1dGhvcj1jb250cmlidXRvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21t
aXQuYXV0aG9yLCBjb250cmlidXRvcikKKworICAgICAgICBjb21taXQgPSBDb21taXQocmV2aXNp
b249MSwgaWRlbnRpZmllcj0xLCBhdXRob3I9J0pvbmF0aGFuIEJlZGFyZCcpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udHJpYnV0b3IpCisKKyAgICAgICAgY29t
bWl0ID0gQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9yPSdqYmVkYXJkQGFw
cGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udHJp
YnV0b3IpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2NvbnRyaWJ1dG9yKHNlbGYpOgorICAgICAg
ICBDb250cmlidXRvci5jbGVhcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFs
dWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCBh
dXRob3I9J0pvbmF0aGFuIEJlZGFyZCcpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410068</attachid>
            <date>2020-09-29 16:57:02 -0700</date>
            <delta_ts>2020-09-30 13:49:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200929165701.patch</filename>
            <type>text/plain</type>
            <size>23325</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2Nzc1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTI5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuX3BhcnNlX2hhc2gpOiBHaXZlbiBhIGhhc2gsIHZlcmlmeSB0aGF0IHRoZSBwcm92
aWRlZCBhcmd1bWVudCBpcworICAgICAgICBBY3R1YWxseSBhIGdpdCBoYXNoLgorICAgICAgICAo
Q29tbWl0Ll9wYXJzZV9yZXZpc2lvbik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlm
eSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBTVk4gcmV2aXNpb24g
YW5kIHJldHVybiB0aGUgcmV2aXNpb24gYXMgYW4gaW50ZWdlci4KKyAgICAgICAgKENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlmeSB0aGUg
cHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFuZCByZXR1
cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENvbW1pdC5wYXJzZSk6IEdp
dmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBzdm4gcmV2aXNpb24gb3IK
KyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVjdC4KKyAgICAgICAgKENv
bW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQucHJldHR5X3ByaW50KTogUmV0dXJuIGEg
bG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBjb21taXQKKyAgICAg
ICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAgICAgICAoQ29tbWl0
Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5w
eTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9wYXJzZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVzdF9wYXJzZV9yZXZpc2lvbik6
CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2VfaWRlbnRpZmllcik6CisgICAgICAgIChU
ZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3ByZXR0eV9w
cmludCk6CisKIDIwMjAtMDktMjkgIEpvbmF0aGFuIEJlZGFyZCAgPGpiZWRhcmRAYXBwbGUuY29t
PgogCiAgICAgICAgIFt0dk9TXSBbd2F0Y2hPU10gQWRkIHN1cHBvcnQgaW4gbGliVGVzdFdURkFs
d2F5c01pc3NpbmctaU9TLXYyLnRiZApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlz
aW9uIDI2Nzc1NykKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTIgQEAgZXhj
ZXB0IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdp
dGggYHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBp
bmRleCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDAsIDQpCit2ZXJzaW9u
ID0gVmVyc2lvbigwLCAwLCA1KQogCiBmcm9tIHdlYmtpdHNjbXB5LmNvbnRyaWJ1dG9yIGltcG9y
dCBDb250cmlidXRvcgogCitmcm9tIHdlYmtpdHNjbXB5LmNvbW1pdCBpbXBvcnQgQ29tbWl0CisK
IGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IGxvY2FsCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBt
b2NrcwogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9jb21taXQucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI2NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisj
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgc2l4CitpbXBvcnQgcmUKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbnRyaWJ1dG9yCisKKworY2xhc3MgQ29t
bWl0KG9iamVjdCk6CisgICAgSEFTSF9SRSA9IHJlLmNvbXBpbGUocideW2EtZjAtOUEtRl0rJCcp
CisgICAgUkVWSVNJT05fUkUgPSByZS5jb21waWxlKHInXnIoP1A8cmV2aXNpb24+XGQrKSQnKQor
ICAgIElERU5USUZJRVJfUkUgPSByZS5jb21waWxlKHInXltJaV0/KCg/UDxicmFuY2hfcG9pbnQ+
XGQrKVwuKT8oP1A8aWRlbnRpZmllcj4tP1xkKykoQCg/UDxicmFuY2g+XFMrKSk/JCcpCisgICAg
TlVNQkVSX1JFID0gcmUuY29tcGlsZShyJ14tP1xkKiQnKQorCisgICAgQGNsYXNzbWV0aG9kCisg
ICAgZGVmIF9wYXJzZV9oYXNoKGNscywgaGFzaCwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAgICAg
aWYgaGFzaCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBu
b3QgaXNpbnN0YW5jZShoYXNoLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIGlmIGRv
X2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCBzdHJp
bmcgdHlwZSBmb3IgaGFzaCwgZ290ICd7fSciLmZvcm1hdCh0eXBlKGhhc2gpKSkKKyAgICAgICAg
ICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IGNscy5IQVNIX1JFLm1hdGNoKGhhc2gp
IG9yIGxlbihoYXNoKSA+IDQwOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVkIHN0cmluZyAne30nIGlzIG5vdCBhIGdp
dCBoYXNoIi5mb3JtYXQoaGFzaCkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg
IHJldHVybiBoYXNoLmxvd2VyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2Vf
cmV2aXNpb24oY2xzLCByZXZpc2lvbiwgZG9fYXNzZXJ0PUZhbHNlKToKKyAgICAgICAgaWYgcmV2
aXNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgaXNp
bnN0YW5jZShyZXZpc2lvbiwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICBtYXRjaCA9
IGNscy5SRVZJU0lPTl9SRS5tYXRjaChyZXZpc2lvbikKKyAgICAgICAgICAgIGlmIG1hdGNoOgor
ICAgICAgICAgICAgICAgIHJldmlzaW9uID0gaW50KG1hdGNoLmdyb3VwKCdyZXZpc2lvbicpKQor
ICAgICAgICAgICAgZWxpZiByZXZpc2lvbi5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV2
aXNpb24gPSBpbnQocmV2aXNpb24pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
IGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJv
dmlkZWQgc3RyaW5nICd7fScgaXMgbm90IGFuIFNWTiIuZm9ybWF0KHJldmlzaW9uKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHJldmlz
aW9uLCBpbnQpOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIGludCB0eXBlIGZvciByZXZpc2lvbiwgZ290ICd7fSci
LmZvcm1hdCh0eXBlKHJldmlzaW9uKSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAg
ICAgIGlmIHJldmlzaW9uIDw9IDA6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1ZOIHJldmlzaW9ucyBtdXN0IGJlIHBvc2l0aXZl
IGludGVnZXInKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gcmV2
aXNpb24KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2VfaWRlbnRpZmllcihjbHMs
IGlkZW50aWZpZXIsIGRvX2Fzc2VydD1GYWxzZSk6CisgICAgICAgIGlmIGlkZW50aWZpZXIgaXMg
Tm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgYnJhbmNoID0gTm9uZQor
ICAgICAgICBpZiBpc2luc3RhbmNlKGlkZW50aWZpZXIsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAg
ICAgICAgICAgbWF0Y2ggPSBjbHMuSURFTlRJRklFUl9SRS5tYXRjaChpZGVudGlmaWVyKQorICAg
ICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IGludChtYXRj
aC5ncm91cCgnaWRlbnRpZmllcicpKQorICAgICAgICAgICAgICAgIGJyYW5jaF9wb2ludCA9IG1h
dGNoLmdyb3VwKCdicmFuY2hfcG9pbnQnKQorICAgICAgICAgICAgICAgIGlmIGJyYW5jaF9wb2lu
dDoKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IChpbnQoYnJhbmNoX3BvaW50KSwg
aWRlbnRpZmllcikKKyAgICAgICAgICAgICAgICBicmFuY2ggPSBtYXRjaC5ncm91cCgnYnJhbmNo
JykKKyAgICAgICAgICAgIGVsaWYgY2xzLk5VTUJFUl9SRS5tYXRjaChpZGVudGlmaWVyKToKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyID0gaW50KGlkZW50aWZpZXIpCisgICAgICAgICAgICBl
bHNlOgorICAgICAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiUHJvdmlkZWQgc3RyaW5nICd7fScgaXMgbm90IGFuIGlkZW50aWZp
ZXIiLmZvcm1hdChpZGVudGlmaWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisg
ICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGlkZW50aWZpZXIsIGludCkgYW5kIG5vdCAoaXNpbnN0
YW5jZShpZGVudGlmaWVyLCB0dXBsZSkgYW5kIGxlbihpZGVudGlmaWVyKSA9PSAyIGFuZCBhbGwo
W2lzaW5zdGFuY2UoeCwgaW50KSBmb3IgeCBpbiBpZGVudGlmaWVyXSkpOgorICAgICAgICAgICAg
aWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0V4cGVjdGVk
IGludCB0eXBlIChvciBwYWlyIG9mIGludHMpIGZvciBpZGVudGlmaWVyLCBnb3Qge30nLmZvcm1h
dCh0eXBlKGlkZW50aWZpZXIpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
cmV0dXJuIGlkZW50aWZpZXIsIGJyYW5jaAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHBh
cnNlKGNscywgYXJnKToKKyAgICAgICAgaWYgY2xzLl9wYXJzZV9pZGVudGlmaWVyKGFyZyk6Cisg
ICAgICAgICAgICByZXR1cm4gQ29tbWl0KGlkZW50aWZpZXI9YXJnKQorCisgICAgICAgIGlmIGNs
cy5fcGFyc2VfcmV2aXNpb24oYXJnKToKKyAgICAgICAgICAgIHJldHVybiBDb21taXQocmV2aXNp
b249YXJnKQorCisgICAgICAgIGlmIGNscy5fcGFyc2VfaGFzaChhcmcpOgorICAgICAgICAgICAg
cmV0dXJuIENvbW1pdChoYXNoPWFyZykKKworICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30n
IGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21taXQgb2JqZWN0Ii5mb3JtYXQoYXJnKSkKKwor
ICAgIGRlZiBfX2luaXRfXygKKyAgICAgICAgc2VsZiwKKyAgICAgICAgaGFzaD1Ob25lLAorICAg
ICAgICByZXZpc2lvbj1Ob25lLAorICAgICAgICBpZGVudGlmaWVyPU5vbmUsIGJyYW5jaD1Ob25l
LCBicmFuY2hfcG9pbnQ9Tm9uZSwKKyAgICAgICAgdGltZXN0YW1wPU5vbmUsIGF1dGhvcj1Ob25l
LCBtZXNzYWdlPU5vbmUsCisgICAgKToKKyAgICAgICAgc2VsZi5oYXNoID0gc2VsZi5fcGFyc2Vf
aGFzaChoYXNoLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5yZXZpc2lvbiA9IHNlbGYu
X3BhcnNlX3JldmlzaW9uKHJldmlzaW9uLCBkb19hc3NlcnQ9VHJ1ZSkKKworICAgICAgICBzZWxm
LmJyYW5jaF9wb2ludCA9IGJyYW5jaF9wb2ludAorICAgICAgICBwYXJzZWRfaWRlbnRpZmllciA9
IHNlbGYuX3BhcnNlX2lkZW50aWZpZXIoaWRlbnRpZmllciwgZG9fYXNzZXJ0PVRydWUpCisgICAg
ICAgIGlmIHBhcnNlZF9pZGVudGlmaWVyOgorICAgICAgICAgICAgc2VsZi5pZGVudGlmaWVyLCBw
YXJzZWRfYnJhbmNoID0gcGFyc2VkX2lkZW50aWZpZXIKKyAgICAgICAgICAgIGlmIGlzaW5zdGFu
Y2Uoc2VsZi5pZGVudGlmaWVyLCB0dXBsZSk6CisgICAgICAgICAgICAgICAgc2VsZi5icmFuY2hf
cG9pbnQgPSBzZWxmLmlkZW50aWZpZXJbMF0KKyAgICAgICAgICAgICAgICBzZWxmLmlkZW50aWZp
ZXIgPSBzZWxmLmlkZW50aWZpZXJbMV0KKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gcGFyc2Vk
X2JyYW5jaCBvciBicmFuY2gKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuaWRlbnRp
ZmllciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuYnJhbmNoID0gYnJhbmNoCisKKyAgICAgICAg
aWYgYnJhbmNoIGFuZCBub3QgaXNpbnN0YW5jZShicmFuY2gsIHNpeC5zdHJpbmdfdHlwZXMpOgor
ICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2JyYW5jaCcgdG8gYmUgYSBz
dHJpbmciKQorICAgICAgICBpZiBicmFuY2ggYW5kIGJyYW5jaCAhPSBzZWxmLmJyYW5jaDoKKyAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgIkNhbGxlciBwYXNz
ZWQgYm90aCAnYnJhbmNoJyBhbmQgJ2lkZW50aWZpZXInLCBidXQgc3BlY2lmaWVkIGRpZmZlcmVu
dCBicmFuY2hlcyAoe30gYW5kIHt9KSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICBicmFu
Y2gsIHNlbGYuYnJhbmNoLAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICApCisKKyAg
ICAgICAgaWYgYnJhbmNoX3BvaW50IGFuZCBub3QgaXNpbnN0YW5jZShicmFuY2hfcG9pbnQsIGlu
dCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYnJhbmNoX3BvaW50
JyB0byBiZSBhbiBpbnQiKQorICAgICAgICBpZiBicmFuY2hfcG9pbnQgYW5kIGJyYW5jaF9wb2lu
dCAhPSBzZWxmLmJyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisg
ICAgICAgICAgICAgICAgIkNhbGxlciBwYXNzZWQgYm90aCAnYnJhbmNoX3BvaW50JyBhbmQgJ2lk
ZW50aWZpZXInLCBidXQgc3BlY2lmaWVkIGRpZmZlcmVudCB2YWx1ZXMgKHt9IGFuZCB7fSkiLmZv
cm1hdCgKKyAgICAgICAgICAgICAgICAgICAgYnJhbmNoX3BvaW50LCBzZWxmLmJyYW5jaF9wb2lu
dCwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIHRpbWVz
dGFtcCBhbmQgbm90IGlzaW5zdGFuY2UodGltZXN0YW1wLCBpbnQpOgorICAgICAgICAgICAgcmFp
c2UgVHlwZUVycm9yKCJFeHBlY3RlZCAndGltZXN0YW1wJyB0byBiZSBvZiB0eXBlIGludCwgZ290
ICd7fSciLmZvcm1hdCh0aW1lc3RhbXApKQorICAgICAgICBzZWxmLnRpbWVzdGFtcCA9IHRpbWVz
dGFtcAorCisgICAgICAgIGlmIGF1dGhvciBhbmQgaXNpbnN0YW5jZShhdXRob3IsIHNpeC5zdHJp
bmdfdHlwZXMpOgorICAgICAgICAgICAgc2VsZi5hdXRob3IgPSBDb250cmlidXRvci5ieV9lbWFp
bC5nZXQoCisgICAgICAgICAgICAgICAgYXV0aG9yLAorICAgICAgICAgICAgICAgIENvbnRyaWJ1
dG9yLmJ5X25hbWUuZ2V0KGF1dGhvciksCisgICAgICAgICAgICApCisgICAgICAgICAgICBpZiBu
b3Qgc2VsZi5hdXRob3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBk
b2VzIG5vdCBtYXRjaCBhIGtub3duIGNvbnRyaWJ1dG9yIikKKyAgICAgICAgZWxpZiBhdXRob3Ig
YW5kIG5vdCBpc2luc3RhbmNlKGF1dGhvciwgQ29udHJpYnV0b3IpOgorICAgICAgICAgICAgcmFp
c2UgVHlwZUVycm9yKCJFeHBlY3RlZCAnYXV0aG9yJyB0byBiZSBvZiB0eXBlIHt9LCBnb3QgJ3t9
JyIuZm9ybWF0KENvbnRyaWJ1dG9yLCBhdXRob3IpKQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgc2VsZi5hdXRob3IgPSBhdXRob3IKKworICAgICAgICBpZiBtZXNzYWdlIGFuZCBub3QgaXNp
bnN0YW5jZShtZXNzYWdlLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZh
bHVlRXJyb3IoIkV4cGVjdGVkICdtZXNzYWdlJyB0byBiZSBhIHN0cmluZywgZ290ICd7fSciLmZv
cm1hdChtZXNzYWdlKSkKKyAgICAgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQorCisgICAgICAg
ICMgRm9yY2UgYSBjb21taXQgZm9ybWF0IGNoZWNrCisgICAgICAgIHNlbGYuX19yZXByX18oKQor
CisgICAgZGVmIHByZXR0eV9wcmludChzZWxmLCBtZXNzYWdlPUZhbHNlKToKKyAgICAgICAgcmVz
dWx0ID0gJ3t9XG4nLmZvcm1hdChzZWxmKQorICAgICAgICBpZiBzZWxmLnJldmlzaW9uOgorICAg
ICAgICAgICAgcmVzdWx0ICs9ICcgICAgU1ZOIHJldmlzaW9uOiBye30nLmZvcm1hdChzZWxmLnJl
dmlzaW9uKQorICAgICAgICAgICAgaWYgc2VsZi5icmFuY2g6CisgICAgICAgICAgICAgICAgcmVz
dWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAnXG4nCisgICAgICAgIGlmIHNlbGYuaGFzaDoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAg
IGdpdCBoYXNoOiB7fScuZm9ybWF0KHNlbGYuaGFzaFs6MTJdKQorICAgICAgICAgICAgaWYgc2Vs
Zi5icmFuY2g6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxm
LmJyYW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuaWRl
bnRpZmllcjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIGlkZW50aWZpZXI6IGl7fScuZm9y
bWF0KHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNlbGYuYnJhbmNoKQorICAg
ICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAgICAgaWYgc2VsZi5hdXRob3I6CisgICAgICAg
ICAgICByZXN1bHQgKz0gJyAgICBieSB7fScuZm9ybWF0KHNlbGYuYXV0aG9yKQorICAgICAgICAg
ICAgaWYgc2VsZi50aW1lc3RhbXA6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgQCB7fScu
Zm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoc2VsZi50aW1lc3RhbXApKQorICAgICAg
ICAgICAgcmVzdWx0ICs9ICdcbicKKworICAgICAgICBpZiBzZWxmLm1lc3NhZ2UgYW5kIG1lc3Nh
Z2U6CisgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICAgICAgcmVzdWx0ICs9IHNl
bGYubWVzc2FnZQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX3JlcHJfXyhz
ZWxmKToKKyAgICAgICAgaWYgc2VsZi5icmFuY2hfcG9pbnQgYW5kIHNlbGYuaWRlbnRpZmllciBh
bmQgc2VsZi5icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gJ2l7fS57fUB7fScuZm9ybWF0KHNl
bGYuYnJhbmNoX3BvaW50LCBzZWxmLmlkZW50aWZpZXIsIHNlbGYuYnJhbmNoKQorICAgICAgICBp
ZiBzZWxmLmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuICdp
e31Ae30nLmZvcm1hdChzZWxmLmlkZW50aWZpZXIsIHNlbGYuYnJhbmNoKQorICAgICAgICBpZiBz
ZWxmLnJldmlzaW9uOgorICAgICAgICAgICAgcmV0dXJuICdye30nLmZvcm1hdChzZWxmLnJldmlz
aW9uKQorICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5oYXNo
WzoxMl0KKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyOgorICAgICAgICAgICAgcmV0dXJuICdp
e30nLmZvcm1hdChzZWxmLmlkZW50aWZpZXIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0lu
Y29tcGxldGUgY29tbWl0IGZvcm1hdCcpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAg
ICAgIGlmIHNlbGYuaWRlbnRpZmllciBhbmQgc2VsZi5icmFuY2g6CisgICAgICAgICAgICByZXR1
cm4gaGFzaChzZWxmLmlkZW50aWZpZXIpIF4gaGFzaChzZWxmLmJyYW5jaCkKKyAgICAgICAgaWYg
c2VsZi5yZXZpc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYucmV2aXNpb24pCisg
ICAgICAgIGlmIHNlbGYuaGFzaDoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuaGFzaCkK
KyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2Vs
Zi5pZGVudGlmaWVyKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbmNvbXBsZXRlIGNvbW1p
dCBmb3JtYXQnKQorCisgICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBu
b3QgaXNpbnN0YW5jZShvdGhlciwgQ29tbWl0KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0Nhbm5vdCBjb21wYXJlIGNvbW1pdCBhbmQge30nLmZvcm1hdCh0eXBlKG90aGVyKSkpCisg
ICAgICAgIGlmIHNlbGYudGltZXN0YW1wIGFuZCBvdGhlci50aW1lc3RhbXAgYW5kIHNlbGYudGlt
ZXN0YW1wICE9IG90aGVyLnRpbWVzdGFtcDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRpbWVz
dGFtcCAtIG90aGVyLnRpbWVzdGFtcAorICAgICAgICBpZiBzZWxmLnJldmlzaW9uIGFuZCBvdGhl
ci5yZXZpc2lvbjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJldmlzaW9uIC0gb3RoZXIucmV2
aXNpb24KKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyIGFuZCBvdGhlci5pZGVudGlmaWVyIGFu
ZCBzZWxmLmJyYW5jaCA9PSBvdGhlci5icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5p
ZGVudGlmaWVyIC0gb3RoZXIuaWRlbnRpZmllcgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdD
YW5ub3QgY29tcGFyZSB7fSBhbmQge30nLmZvcm1hdChzZWxmLCBvdGhlcikpCisKKyAgICBkZWYg
X19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZikgPT0gaGFzaChv
dGhlcikKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gaGFz
aChzZWxmKSAhPSBoYXNoKG90aGVyKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Cisg
ICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpIDwgMAorCisgICAgZGVmIF9fbGVfXyhz
ZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpIDw9IDAKKwor
ICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9f
KG90aGVyKSA+IDAKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1
cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA+PSAwCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90
ZXN0L2NvbW1pdF91bml0dGVzdC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgQ29udHJpYnV0b3IKKworCitj
bGFzcyBUZXN0Q29tbWl0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wYXJzZV9o
YXNoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJzFhMmU0
MWUzZjdjZGY1MWIxZTFkMDI4ODBjZmI2NWVhYjkzMjdlZjInLAorICAgICAgICAgICAgQ29tbWl0
Ll9wYXJzZV9oYXNoKCcxYTJlNDFlM2Y3Y2RmNTFiMWUxZDAyODgwY2ZiNjVlYWI5MzI3ZWYyJykK
KyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgJ2MzYmQ3
ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUnLAorICAgICAgICAgICAgQ29tbWl0
Ll9wYXJzZV9oYXNoKCdDM0JENzg0RjhCODhCRDAzRjY0NDY3REREMzMwNEVEOEJFMjhBQ0JFJykK
KyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJz
ZV9oYXNoKCdpbnZhbGlkIGhhc2gnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBD
b21taXQuX3BhcnNlX2hhc2goJ2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFj
YmUxJykpCisKKyAgICBkZWYgdGVzdF9wYXJzZV9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgyNjY4OTYsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJ3IyNjY4OTYnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyNjY4OTYsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24o
JzI2Njg5NicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI2Njg5NiwgQ29tbWl0Ll9wYXJz
ZV9yZXZpc2lvbigyNjY4OTYpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29t
bWl0Ll9wYXJzZV9yZXZpc2lvbignaTEyMzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChO
b25lLCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCdjM2JkNzg0ZjhiODhiZDAzJykpCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignMCcpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJy0xJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbign
My4xNDE1OTInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNl
X3JldmlzaW9uKDMuMTQxNTkyKSkKKworICAgIGRlZiB0ZXN0X3BhcnNlX2lkZW50aWZpZXIoc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuX3BhcnNl
X2lkZW50aWZpZXIoJ2kxMjM0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsIE5v
bmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ0kxMjM0JykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKDEyMzQsIE5vbmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzEyMzQnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRl
bnRpZmllcigxMjM0KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCAnbWFpbicp
LCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kxMjM0QG1haW4nKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgoMTIzNCwgJ21haW4nKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdJMTIz
NEBtYWluJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdtYWluJyksIENvbW1p
dC5fcGFyc2VfaWRlbnRpZmllcignMTIzNEBtYWluJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoMTIzNCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNEBl
bmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEyMzQsICdlbmcvYnVnJyksIENv
bW1pdC5fcGFyc2VfaWRlbnRpZmllcignSTEyMzRAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCgxMjM0LCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzEy
MzRAZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCgxMjM0LCAxKSwgJ2Vu
Zy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNC4xQGVuZy9idWcnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoKDEyMzQsIDEpLCAnZW5nL2J1ZycpLCBDb21taXQuX3Bh
cnNlX2lkZW50aWZpZXIoJ0kxMjM0LjFAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCgoMTIzNCwgMSksICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMTIz
NC4xQGVuZy9idWcnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBOb25lKSwgQ29t
bWl0Ll9wYXJzZV9pZGVudGlmaWVyKCcwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKC0x
LCBOb25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCctMScpKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoKDAsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignaTBA
ZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAnZW5nL2J1ZycpLCBDb21t
aXQuX3BhcnNlX2lkZW50aWZpZXIoJ0kwQGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoMCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCcwQGVuZy9idWcn
KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMSwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9w
YXJzZV9pZGVudGlmaWVyKCdpLTFAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCgtMSwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdJLTFAZW5nL2J1Zycp
KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgtMSwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJz
ZV9pZGVudGlmaWVyKCctMUBlbmcvYnVnJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChO
b25lLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kxMjM0LWludmFsaWQnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ3IyNjY4OTYn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX2lkZW50aWZp
ZXIoJ2MzYmQ3ODRmOGI4OGJkMDMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBD
b21taXQuX3BhcnNlX2lkZW50aWZpZXIoMy4xNDE1OTIpKQorCisgICAgZGVmIHRlc3RfcGFyc2Uo
c2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCdpMTIzQG1haW4n
KSwgQ29tbWl0KGlkZW50aWZpZXI9MTIzLCBicmFuY2g9J21haW4nKSkKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChDb21taXQucGFyc2UoJ2kxMjMnKSwgQ29tbWl0KGlkZW50aWZpZXI9MTIzKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJzEyMycpLCBDb21taXQoaWRl
bnRpZmllcj0xMjMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCdy
MTIzJyksIENvbW1pdChyZXZpc2lvbj0xMjMpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICBDb21taXQucGFyc2UoJ2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0
ZWQ4YmUyOGFjYmUnKSwKKyAgICAgICAgICAgIENvbW1pdChoYXNoPSdjM2JkNzg0ZjhiODhiZDAz
ZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJyksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3By
ZXR0eV9wcmludChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSdpMTIzQG1hc3RlcicsCisgICAg
ICAgICAgICAgICAgaGFzaD0nYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNi
ZScsCisgICAgICAgICAgICAgICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdKb25hdGhhbiBCZWRhcmQn
LCBbJ2piZWRhcmRAYXBwbGUuY29tJ10pLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U9J05PVCBQ
UklOVEVEJywKKyAgICAgICAgICAgICkucHJldHR5X3ByaW50KCksCisgICAgICAgICAgICAnJydp
MTIzQG1hc3RlcgorICAgIGdpdCBoYXNoOiBjM2JkNzg0ZjhiODggb24gbWFzdGVyCisgICAgaWRl
bnRpZmllcjogaTEyMyBvbiBtYXN0ZXIKKyAgICBieSBKb25hdGhhbiBCZWRhcmQgPGpiZWRhcmRA
YXBwbGUuY29tPgorJycnLAorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgK
KyAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSdpMTIzQHRy
dW5rJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0ncjEyMycsCisgICAgICAgICAgICAgICAg
YXV0aG9yPUNvbnRyaWJ1dG9yKCdKb25hdGhhbiBCZWRhcmQnLCBbJ2piZWRhcmRAYXBwbGUuY29t
J10pLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xMDAwLAorICAgICAgICAgICAgICAgIG1l
c3NhZ2U9J05PVCBQUklOVEVEJywKKyAgICAgICAgICAgICkucHJldHR5X3ByaW50KCksCisgICAg
ICAgICAgICAnJydpMTIzQHRydW5rCisgICAgU1ZOIHJldmlzaW9uOiByMTIzIG9uIHRydW5rCisg
ICAgaWRlbnRpZmllcjogaTEyMyBvbiB0cnVuaworICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJl
ZGFyZEBhcHBsZS5jb20+IEAge30KKycnJy5mb3JtYXQoZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFt
cCgxMDAwKSksCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAg
ICAgICAgQ29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAdHJ1bmsnLAor
ICAgICAgICAgICAgICAgIHJldmlzaW9uPSdyMTIzJywKKyAgICAgICAgICAgICAgICBhdXRob3I9
Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBsZS5jb20nXSksCisg
ICAgICAgICAgICAgICAgdGltZXN0YW1wPTEwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0n
UFJJTlRFRFxuJywKKyAgICAgICAgICAgICkucHJldHR5X3ByaW50KG1lc3NhZ2U9VHJ1ZSksCisg
ICAgICAgICAgICAnJydpMTIzQHRydW5rCisgICAgU1ZOIHJldmlzaW9uOiByMTIzIG9uIHRydW5r
CisgICAgaWRlbnRpZmllcjogaTEyMyBvbiB0cnVuaworICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8
amJlZGFyZEBhcHBsZS5jb20+IEAge30KKworUFJJTlRFRAorJycnLmZvcm1hdChkYXRldGltZS51
dGNmcm9tdGltZXN0YW1wKDEwMDApKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcmVwcihz
ZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoQ29tbWl0KGlkZW50aWZpZXI9MTIz
LCBicmFuY2g9J21haW4nKSksICdpMTIzQG1haW4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KHN0cihDb21taXQoYnJhbmNoX3BvaW50PTEyMzQsIGlkZW50aWZpZXI9MSwgYnJhbmNoPSdlbmcv
MTIzNCcpKSwgJ2kxMjM0LjFAZW5nLzEyMzQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0
cihDb21taXQoaWRlbnRpZmllcj0xMjMpKSwgJ2kxMjMnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoc3RyKENvbW1pdChyZXZpc2lvbj0xMjMpKSwgJ3IxMjMnKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc3RyKENvbW1pdChoYXNoPSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMw
NGVkOGJlMjhhY2JlJykpLCAnYzNiZDc4NGY4Yjg4JykKKworICAgIGRlZiB0ZXN0X3RpbWVzdGFt
cF9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoCisgICAgICAgICAgICBD
b21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAg
ICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVzdGFtcD0yMDApLAorICAg
ICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcigKKyAgICAgICAgICAgIENvbW1pdChy
ZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVzdGFtcD0yMDApLAorICAgICAgICAgICAgQ29t
bWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICkK
KyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEs
IGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNp
b249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAgICBz
ZWxmLmFzc2VydEdyZWF0ZXIoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MiwgaWRlbnRp
Zmllcj0yLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBp
ZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCB0
aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVy
PTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pZGVudGlmaWVy
X2NvbXBhcmUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhDb21taXQoaWRlbnRpZmll
cj0xKSwgQ29tbWl0KGlkZW50aWZpZXI9MikpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihD
b21taXQoaWRlbnRpZmllcj0yKSwgQ29tbWl0KGlkZW50aWZpZXI9MSkpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoQ29tbWl0KGlkZW50aWZpZXI9MSksIENvbW1pdChpZGVudGlmaWVyPTEpKQor
CisgICAgZGVmIHRlc3RfcmV2aXNpb25fY29tcGFyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3Nl
cnRMZXNzKENvbW1pdChyZXZpc2lvbj0xKSwgQ29tbWl0KHJldmlzaW9uPTIpKQorICAgICAgICBz
ZWxmLmFzc2VydEdyZWF0ZXIoQ29tbWl0KHJldmlzaW9uPTIpLCBDb21taXQocmV2aXNpb249MSkp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0KHJldmlzaW9uPTEpLCBDb21taXQocmV2
aXNpb249MSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2NvbXBhcmUoc2VsZik6CisgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQo
cmV2aXNpb249MSkuX19jbXBfXyhDb21taXQoaWRlbnRpZmllcj0yKSkKKworICAgICAgICB3aXRo
IHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQ29tbWl0KHJldmlz
aW9uPTEsIHRpbWVzdGFtcD0xMDApLl9fY21wX18oQ29tbWl0KGlkZW50aWZpZXI9MiwgdGltZXN0
YW1wPTEwMCkpCisKKyAgICBkZWYgdGVzdF9jb250cmlidXRvcihzZWxmKToKKyAgICAgICAgQ29u
dHJpYnV0b3IuY2xlYXIoKQorICAgICAgICBjb250cmlidXRvciA9IENvbnRyaWJ1dG9yLmZyb21f
c2NtX2xvZygnQXV0aG9yOiBKb25hdGhhbiBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPicpCisK
KyAgICAgICAgY29tbWl0ID0gQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9y
PWNvbnRyaWJ1dG9yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5hdXRob3IsIGNv
bnRyaWJ1dG9yKQorCisgICAgICAgIGNvbW1pdCA9IENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlm
aWVyPTEsIGF1dGhvcj0nSm9uYXRoYW4gQmVkYXJkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChjb21taXQuYXV0aG9yLCBjb250cmlidXRvcikKKworICAgICAgICBjb21taXQgPSBDb21taXQo
cmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCBhdXRob3I9J2piZWRhcmRAYXBwbGUuY29tJykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQuYXV0aG9yLCBjb250cmlidXRvcikKKworICAg
IGRlZiB0ZXN0X2ludmFsaWRfY29udHJpYnV0b3Ioc2VsZik6CisgICAgICAgIENvbnRyaWJ1dG9y
LmNsZWFyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAg
ICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIGF1dGhvcj0nSm9uYXRo
YW4gQmVkYXJkJykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410152</attachid>
            <date>2020-09-30 13:49:42 -0700</date>
            <delta_ts>2020-09-30 17:13:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200930134941.patch</filename>
            <type>text/plain</type>
            <size>23483</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzgwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvX19pbml0X18ucHk6CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkv
d2Via2l0c2NtcHkvY29tbWl0LnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1pdCk6CisgICAgICAg
IChDb21taXQuX3BhcnNlX2hhc2gpOiBHaXZlbiBhIGhhc2gsIHZlcmlmeSB0aGF0IHRoZSBwcm92
aWRlZCBhcmd1bWVudCBpcworICAgICAgICBBY3R1YWxseSBhIGdpdCBoYXNoLgorICAgICAgICAo
Q29tbWl0Ll9wYXJzZV9yZXZpc2lvbik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlm
eSB0aGUgcHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBTVk4gcmV2aXNpb24g
YW5kIHJldHVybiB0aGUgcmV2aXNpb24gYXMgYW4gaW50ZWdlci4KKyAgICAgICAgKENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcik6IEdpdmVuIGEgc3RyaW5nIG9yIGludGVnZXIsIHZlcmlmeSB0aGUg
cHJvdmlkZWQKKyAgICAgICAgYXJndW1lbnQgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFuZCByZXR1
cm4gdGhlIGlkZW50aWZpZXIgYW5kIGJyYW5jaC4KKyAgICAgICAgKENvbW1pdC5wYXJzZSk6IEdp
dmVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNvbW1pdCBoYXNoLCBzdm4gcmV2aXNpb24gb3IK
KyAgICAgICAgaWRlbnRpZmllciwgcmV0dXJuIGEgY29tbWl0IG9iamVjdC4KKyAgICAgICAgKENv
bW1pdC5fX2luaXRfXyk6CisgICAgICAgIChDb21taXQucHJldHR5X3ByaW50KTogUmV0dXJuIGEg
bG9uZyBzdHJpbmcgZGlzcGxheWluZyB0aGUgbWV0YWRhdGEgZm9yIHRoZSBjb21taXQKKyAgICAg
ICAgKENvbW1pdC5fX3JlcHJfXyk6IFJldHVybiBhIG9uZS1saW5lIHJlcHJlc2VudGF0aW9uIG9m
IHRoZSBjb21taXQuCisgICAgICAgIChDb21taXQuX19oYXNoX18pOgorICAgICAgICAoQ29tbWl0
Ll9fY21wX18pOiBDb21wYXJlIHR3byBjb21taXQgb2JqZWN0cy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2NvbW1pdF91bml0dGVzdC5w
eTogQWRkZWQuCisgICAgICAgIChUZXN0Q29tbWl0KToKKyAgICAgICAgKFRlc3RDb21taXQudGVz
dF9wYXJzZV9oYXNoKToKKyAgICAgICAgKFRlc3RDb21taXQudGVzdF9wYXJzZV9yZXZpc2lvbik6
CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3RfcGFyc2VfaWRlbnRpZmllcik6CisgICAgICAgIChU
ZXN0Q29tbWl0LnRlc3RfcGFyc2UpOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3ByZXR0eV9w
cmludCk6CisKIDIwMjAtMDktMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSBjb2RlIGJlaGluZCBFTkFCTEUoTUVESUFfU0VTU0lPTiksIG5vIHBvcnRz
IGVuYWJsZSBpdApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI2NzgwMCkK
KysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMCArNDYsMTIgQEAgZXhjZXB0IEltcG9ydEVy
cm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdpdGggYHBpcCBpbnN0
YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBpbmRleCBVUkw+YCIK
ICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDAsIDQpCit2ZXJzaW9uID0gVmVyc2lvbigw
LCAwLCA1KQogCiBmcm9tIHdlYmtpdHNjbXB5LmNvbnRyaWJ1dG9yIGltcG9ydCBDb250cmlidXRv
cgogCitmcm9tIHdlYmtpdHNjbXB5LmNvbW1pdCBpbXBvcnQgQ29tbWl0CisKIGZyb20gd2Via2l0
c2NtcHkgaW1wb3J0IGxvY2FsCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBtb2NrcwogCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvY29tbWl0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weQkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI2NSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBv
cnQgc2l4CitpbXBvcnQgcmUKKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20g
d2Via2l0c2NtcHkgaW1wb3J0IENvbnRyaWJ1dG9yCisKKworY2xhc3MgQ29tbWl0KG9iamVjdCk6
CisgICAgSEFTSF9SRSA9IHJlLmNvbXBpbGUocideW2EtZjAtOUEtRl0rJCcpCisgICAgUkVWSVNJ
T05fUkUgPSByZS5jb21waWxlKHInXltScl0/KD9QPHJldmlzaW9uPlxkKykkJykKKyAgICBJREVO
VElGSUVSX1JFID0gcmUuY29tcGlsZShyJ15bSWldPygoP1A8YnJhbmNoX3BvaW50PlxkKylcLik/
KD9QPGlkZW50aWZpZXI+LT9cZCspKEAoP1A8YnJhbmNoPlxTKykpPyQnKQorICAgIE5VTUJFUl9S
RSA9IHJlLmNvbXBpbGUocideLT9cZCokJykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBf
cGFyc2VfaGFzaChjbHMsIGhhc2gsIGRvX2Fzc2VydD1GYWxzZSk6CisgICAgICAgIGlmIGhhc2gg
aXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IGlzaW5z
dGFuY2UoaGFzaCwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6
CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgc3RyaW5nIHR5cGUg
Zm9yIGhhc2gsIGdvdCAne30nIi5mb3JtYXQodHlwZShoYXNoKSkpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBjbHMuSEFTSF9SRS5tYXRjaChoYXNoKSBvciBsZW4o
aGFzaCkgPiA0MDoKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJQcm92aWRlZCBzdHJpbmcgJ3t9JyBpcyBub3QgYSBnaXQgaGFzaCIu
Zm9ybWF0KGhhc2gpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4g
aGFzaC5sb3dlcigpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX3JldmlzaW9u
KGNscywgcmV2aXNpb24sIGRvX2Fzc2VydD1GYWxzZSk6CisgICAgICAgIGlmIHJldmlzaW9uIGlz
IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2Uo
cmV2aXNpb24sIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgbWF0Y2ggPSBjbHMuUkVW
SVNJT05fUkUubWF0Y2gocmV2aXNpb24pCisgICAgICAgICAgICBpZiBtYXRjaDoKKyAgICAgICAg
ICAgICAgICByZXZpc2lvbiA9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkKKyAgICAgICAg
ICAgIGVsaWYgcmV2aXNpb24uaXNkaWdpdCgpOgorICAgICAgICAgICAgICAgIHJldmlzaW9uID0g
aW50KHJldmlzaW9uKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBkb19h
c3NlcnQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVkIHN0
cmluZyAne30nIGlzIG5vdCBhbiBTVk4iLmZvcm1hdChyZXZpc2lvbikpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShyZXZpc2lvbiwgaW50
KToKKyAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCJFeHBlY3RlZCBpbnQgdHlwZSBmb3IgcmV2aXNpb24sIGdvdCAne30nIi5mb3JtYXQo
dHlwZShyZXZpc2lvbikpKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBpZiBy
ZXZpc2lvbiA8PSAwOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAgICAg
IHJhaXNlIFZhbHVlRXJyb3IoJ1NWTiByZXZpc2lvbnMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2Vy
JykKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuIHJldmlzaW9uCisK
KyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3BhcnNlX2lkZW50aWZpZXIoY2xzLCBpZGVudGlm
aWVyLCBkb19hc3NlcnQ9RmFsc2UpOgorICAgICAgICBpZiBpZGVudGlmaWVyIGlzIE5vbmU6Cisg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGJyYW5jaCA9IE5vbmUKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShpZGVudGlmaWVyLCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAg
IG1hdGNoID0gY2xzLklERU5USUZJRVJfUkUubWF0Y2goaWRlbnRpZmllcikKKyAgICAgICAgICAg
IGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBtYXRjaC5ncm91cCgnYnJh
bmNoX3BvaW50JyksIGludChtYXRjaC5ncm91cCgnaWRlbnRpZmllcicpKQorICAgICAgICAgICAg
ICAgIGlmIGlkZW50aWZpZXJbMF06CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBp
bnQoaWRlbnRpZmllclswXSksIGlkZW50aWZpZXJbMV0KKyAgICAgICAgICAgICAgICBicmFuY2gg
PSBtYXRjaC5ncm91cCgnYnJhbmNoJykKKyAgICAgICAgICAgIGVsaWYgY2xzLk5VTUJFUl9SRS5t
YXRjaChpZGVudGlmaWVyKToKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gTm9uZSwgaW50
KGlkZW50aWZpZXIpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGRvX2Fz
c2VydDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUHJvdmlkZWQgc3Ry
aW5nICd7fScgaXMgbm90IGFuIGlkZW50aWZpZXIiLmZvcm1hdChpZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoaWRlbnRpZmll
ciwgaW50KToKKyAgICAgICAgICAgIGlkZW50aWZpZXIgPSAoTm9uZSwgaWRlbnRpZmllcikKKwor
ICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UoaWRlbnRpZmllciwgdHVwbGUpIGFuZCBsZW4oaWRl
bnRpZmllcikgPT0gMiBhbmQgYWxsKFtpc2luc3RhbmNlKHgsIGludCkgb3IgeCBpcyBOb25lIGZv
ciB4IGluIGlkZW50aWZpZXJdKSk6CisgICAgICAgICAgICBpZiBkb19hc3NlcnQ6CisgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignRXhwZWN0ZWQgaW50IHR5cGUgKG9yIHBhaXIgb2Yg
aW50cykgZm9yIGlkZW50aWZpZXIsIGdvdCB7fScuZm9ybWF0KHR5cGUoaWRlbnRpZmllcikpKQor
ICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICByZXR1cm4gKGlkZW50aWZpZXJbMF0s
IGlkZW50aWZpZXJbMV0sIGJyYW5jaCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBwYXJz
ZShjbHMsIGFyZyk6CisgICAgICAgIGlmIGNscy5fcGFyc2VfaWRlbnRpZmllcihhcmcpOgorICAg
ICAgICAgICAgcmV0dXJuIENvbW1pdChpZGVudGlmaWVyPWFyZykKKworICAgICAgICBpZiBjbHMu
X3BhcnNlX3JldmlzaW9uKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gQ29tbWl0KHJldmlzaW9u
PWFyZykKKworICAgICAgICBpZiBjbHMuX3BhcnNlX2hhc2goYXJnKToKKyAgICAgICAgICAgIHJl
dHVybiBDb21taXQoaGFzaD1hcmcpCisKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3t9JyBj
YW5ub3QgYmUgY29udmVydGVkIHRvIGEgY29tbWl0IG9iamVjdCIuZm9ybWF0KGFyZykpCisKKyAg
ICBkZWYgX19pbml0X18oCisgICAgICAgIHNlbGYsCisgICAgICAgIGhhc2g9Tm9uZSwKKyAgICAg
ICAgcmV2aXNpb249Tm9uZSwKKyAgICAgICAgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwg
YnJhbmNoX3BvaW50PU5vbmUsCisgICAgICAgIHRpbWVzdGFtcD1Ob25lLCBhdXRob3I9Tm9uZSwg
bWVzc2FnZT1Ob25lLAorICAgICk6CisgICAgICAgIHNlbGYuaGFzaCA9IHNlbGYuX3BhcnNlX2hh
c2goaGFzaCwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgIHNlbGYucmV2aXNpb24gPSBzZWxmLl9w
YXJzZV9yZXZpc2lvbihyZXZpc2lvbiwgZG9fYXNzZXJ0PVRydWUpCisKKyAgICAgICAgcGFyc2Vk
X2lkZW50aWZpZXIgPSBzZWxmLl9wYXJzZV9pZGVudGlmaWVyKGlkZW50aWZpZXIsIGRvX2Fzc2Vy
dD1UcnVlKQorICAgICAgICBpZiBwYXJzZWRfaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHBhcnNl
ZF9icmFuY2hfcG9pbnQsIHNlbGYuaWRlbnRpZmllciwgcGFyc2VkX2JyYW5jaCA9IHBhcnNlZF9p
ZGVudGlmaWVyCisgICAgICAgICAgICBzZWxmLmJyYW5jaF9wb2ludCA9IHBhcnNlZF9icmFuY2hf
cG9pbnQgb3IgYnJhbmNoX3BvaW50CisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IHBhcnNlZF9i
cmFuY2ggb3IgYnJhbmNoCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmlkZW50aWZp
ZXIgPSBOb25lCisgICAgICAgICAgICBzZWxmLmJyYW5jaF9wb2ludCA9IGJyYW5jaF9wb2ludAor
ICAgICAgICAgICAgc2VsZi5icmFuY2ggPSBicmFuY2gKKworICAgICAgICBpZiBicmFuY2ggYW5k
IG5vdCBpc2luc3RhbmNlKGJyYW5jaCwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYnJhbmNoJyB0byBiZSBhIHN0cmluZyIpCisgICAg
ICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9IHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2FsbGVyIHBhc3NlZCBib3RoICdicmFu
Y2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZpZWQgZGlmZmVyZW50IGJyYW5jaGVzICh7
fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgc2VsZi5icmFu
Y2gsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBicmFu
Y2hfcG9pbnQgYW5kIG5vdCBpc2luc3RhbmNlKGJyYW5jaF9wb2ludCwgaW50KToKKyAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICdicmFuY2hfcG9pbnQnIHRvIGJlIGFuIGlu
dCIpCisgICAgICAgIGlmIGJyYW5jaF9wb2ludCBhbmQgYnJhbmNoX3BvaW50ICE9IHNlbGYuYnJh
bmNoX3BvaW50OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAg
ICAiQ2FsbGVyIHBhc3NlZCBib3RoICdicmFuY2hfcG9pbnQnIGFuZCAnaWRlbnRpZmllcicsIGJ1
dCBzcGVjaWZpZWQgZGlmZmVyZW50IHZhbHVlcyAoe30gYW5kIHt9KSIuZm9ybWF0KAorICAgICAg
ICAgICAgICAgICAgICBicmFuY2hfcG9pbnQsIHNlbGYuYnJhbmNoX3BvaW50LAorICAgICAgICAg
ICAgICAgICksCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgdGltZXN0YW1wIGFuZCBub3Qg
aXNpbnN0YW5jZSh0aW1lc3RhbXAsIGludCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3Io
IkV4cGVjdGVkICd0aW1lc3RhbXAnIHRvIGJlIG9mIHR5cGUgaW50LCBnb3QgJ3t9JyIuZm9ybWF0
KHRpbWVzdGFtcCkpCisgICAgICAgIHNlbGYudGltZXN0YW1wID0gdGltZXN0YW1wCisKKyAgICAg
ICAgaWYgYXV0aG9yIGFuZCBpc2luc3RhbmNlKGF1dGhvciwgc2l4LnN0cmluZ190eXBlcyk6Cisg
ICAgICAgICAgICBzZWxmLmF1dGhvciA9IENvbnRyaWJ1dG9yLmJ5X2VtYWlsLmdldCgKKyAgICAg
ICAgICAgICAgICBhdXRob3IsCisgICAgICAgICAgICAgICAgQ29udHJpYnV0b3IuYnlfbmFtZS5n
ZXQoYXV0aG9yKSwKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmF1dGhv
cjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGRvZXMgbm90IG1hdGNo
IGEga25vd24gY29udHJpYnV0b3IiKQorICAgICAgICBlbGlmIGF1dGhvciBhbmQgbm90IGlzaW5z
dGFuY2UoYXV0aG9yLCBDb250cmlidXRvcik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3Io
IkV4cGVjdGVkICdhdXRob3InIHRvIGJlIG9mIHR5cGUge30sIGdvdCAne30nIi5mb3JtYXQoQ29u
dHJpYnV0b3IsIGF1dGhvcikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmF1dGhv
ciA9IGF1dGhvcgorCisgICAgICAgIGlmIG1lc3NhZ2UgYW5kIG5vdCBpc2luc3RhbmNlKG1lc3Nh
Z2UsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhw
ZWN0ZWQgJ21lc3NhZ2UnIHRvIGJlIGEgc3RyaW5nLCBnb3QgJ3t9JyIuZm9ybWF0KG1lc3NhZ2Up
KQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisKKyAgICAgICAgIyBGb3JjZSBhIGNv
bW1pdCBmb3JtYXQgY2hlY2sKKyAgICAgICAgc2VsZi5fX3JlcHJfXygpCisKKyAgICBkZWYgcHJl
dHR5X3ByaW50KHNlbGYsIG1lc3NhZ2U9RmFsc2UpOgorICAgICAgICByZXN1bHQgPSAne31cbicu
Zm9ybWF0KHNlbGYpCisgICAgICAgIGlmIHNlbGYucmV2aXNpb246CisgICAgICAgICAgICByZXN1
bHQgKz0gJyAgICBTVk4gcmV2aXNpb246IHJ7fScuZm9ybWF0KHNlbGYucmV2aXNpb24pCisgICAg
ICAgICAgICBpZiBzZWxmLmJyYW5jaDoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7
fScuZm9ybWF0KHNlbGYuYnJhbmNoKQorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAg
ICAgaWYgc2VsZi5oYXNoOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgZ2l0IGhhc2g6IHt9
Jy5mb3JtYXQoc2VsZi5oYXNoWzoxMl0pCisgICAgICAgICAgICBpZiBzZWxmLmJyYW5jaDoKKyAg
ICAgICAgICAgICAgICByZXN1bHQgKz0gJyBvbiB7fScuZm9ybWF0KHNlbGYuYnJhbmNoKQorICAg
ICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyOgorICAg
ICAgICAgICAgcmVzdWx0ICs9ICcgICAgaWRlbnRpZmllcjogaXt9Jy5mb3JtYXQoc2VsZi5pZGVu
dGlmaWVyKQorICAgICAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyOgorICAgICAgICAgICAgICAg
IHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAgICAgICByZXN1
bHQgKz0gJ1xuJworICAgICAgICBpZiBzZWxmLmF1dGhvcjoKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAnICAgIGJ5IHt9Jy5mb3JtYXQoc2VsZi5hdXRob3IpCisgICAgICAgICAgICBpZiBzZWxmLnRp
bWVzdGFtcDoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBAIHt9Jy5mb3JtYXQoZGF0ZXRp
bWUudXRjZnJvbXRpbWVzdGFtcChzZWxmLnRpbWVzdGFtcCkpCisgICAgICAgICAgICByZXN1bHQg
Kz0gJ1xuJworCisgICAgICAgIGlmIHNlbGYubWVzc2FnZSBhbmQgbWVzc2FnZToKKyAgICAgICAg
ICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgICAgICByZXN1bHQgKz0gc2VsZi5tZXNzYWdlCisK
KyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAg
ICBpZiBzZWxmLmJyYW5jaF9wb2ludCBhbmQgc2VsZi5pZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5j
aDoKKyAgICAgICAgICAgIHJldHVybiAnaXt9Lnt9QHt9Jy5mb3JtYXQoc2VsZi5icmFuY2hfcG9p
bnQsIHNlbGYuaWRlbnRpZmllciwgc2VsZi5icmFuY2gpCisgICAgICAgIGlmIHNlbGYuaWRlbnRp
ZmllciBhbmQgc2VsZi5icmFuY2g6CisgICAgICAgICAgICByZXR1cm4gJ2l7fUB7fScuZm9ybWF0
KHNlbGYuaWRlbnRpZmllciwgc2VsZi5icmFuY2gpCisgICAgICAgIGlmIHNlbGYucmV2aXNpb246
CisgICAgICAgICAgICByZXR1cm4gJ3J7fScuZm9ybWF0KHNlbGYucmV2aXNpb24pCisgICAgICAg
IGlmIHNlbGYuaGFzaDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhc2hbOjEyXQorICAgICAg
ICBpZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gJ2l7fScuZm9ybWF0KHNl
bGYuaWRlbnRpZmllcikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21wbGV0ZSBjb21t
aXQgZm9ybWF0JykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5p
ZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiBoYXNoKHNlbGYu
aWRlbnRpZmllcikgXiBoYXNoKHNlbGYuYnJhbmNoKQorICAgICAgICBpZiBzZWxmLnJldmlzaW9u
OgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5yZXZpc2lvbikKKyAgICAgICAgaWYgc2Vs
Zi5oYXNoOgorICAgICAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5oYXNoKQorICAgICAgICBpZiBz
ZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLmlkZW50aWZpZXIp
CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0luY29tcGxldGUgY29tbWl0IGZvcm1hdCcpCisK
KyAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNl
KG90aGVyLCBDb21taXQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGNv
bXBhcmUgY29tbWl0IGFuZCB7fScuZm9ybWF0KHR5cGUob3RoZXIpKSkKKyAgICAgICAgaWYgc2Vs
Zi50aW1lc3RhbXAgYW5kIG90aGVyLnRpbWVzdGFtcCBhbmQgc2VsZi50aW1lc3RhbXAgIT0gb3Ro
ZXIudGltZXN0YW1wOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGltZXN0YW1wIC0gb3RoZXIu
dGltZXN0YW1wCisgICAgICAgIGlmIHNlbGYucmV2aXNpb24gYW5kIG90aGVyLnJldmlzaW9uOgor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYucmV2aXNpb24gLSBvdGhlci5yZXZpc2lvbgorICAgICAg
ICBpZiBzZWxmLmlkZW50aWZpZXIgYW5kIG90aGVyLmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNo
ID09IG90aGVyLmJyYW5jaDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmlkZW50aWZpZXIgLSBv
dGhlci5pZGVudGlmaWVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBjb21wYXJl
IHt9IGFuZCB7fScuZm9ybWF0KHNlbGYsIG90aGVyKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwg
b3RoZXIpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmKSA9PSBoYXNoKG90aGVyKQorCisgICAg
ZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYpICE9IGhh
c2gob3RoZXIpCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJu
IHNlbGYuX19jbXBfXyhvdGhlcikgPCAwCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToK
KyAgICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPD0gMAorCisgICAgZGVmIF9fZ3Rf
XyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21wX18ob3RoZXIpID4gMAor
CisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl9fY21w
X18ob3RoZXIpID49IDAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3Vu
aXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvY29tbWl0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjEzIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQorZnJvbSB3
ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvcgorCisKK2NsYXNzIFRlc3RDb21t
aXQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3BhcnNlX2hhc2goc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnMWEyZTQxZTNmN2NkZjUxYjFl
MWQwMjg4MGNmYjY1ZWFiOTMyN2VmMicsCisgICAgICAgICAgICBDb21taXQuX3BhcnNlX2hhc2go
JzFhMmU0MWUzZjdjZGY1MWIxZTFkMDI4ODBjZmI2NWVhYjkzMjdlZjInKQorICAgICAgICApCisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAnYzNiZDc4NGY4Yjg4YmQwM2Y2
NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScsCisgICAgICAgICAgICBDb21taXQuX3BhcnNlX2hhc2go
J0MzQkQ3ODRGOEI4OEJEMDNGNjQ0NjdEREQzMzA0RUQ4QkUyOEFDQkUnKQorICAgICAgICApCisK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX2hhc2goJ2ludmFs
aWQgaGFzaCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2Vf
aGFzaCgnYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZTEnKSkKKworICAg
IGRlZiB0ZXN0X3BhcnNlX3JldmlzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KDI2Njg5NiwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbigncjI2Njg5NicpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKDI2Njg5NiwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignUjI2Njg5NicpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDI2Njg5NiwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbign
MjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3BhcnNl
X3JldmlzaW9uKDI2Njg5NikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21t
aXQuX3BhcnNlX3JldmlzaW9uKCdpMTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5v
bmUsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJ2MzYmQ3ODRmOGI4OGJkMDMnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCcwJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignLTEnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCcz
LjE0MTU5MicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2Vf
cmV2aXNpb24oMy4xNDE1OTIpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfaWRlbnRpZmllcihzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMTIzNCwgTm9uZSksIENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcignaTEyMzQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9u
ZSwgMTIzNCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignSTEyMzQnKSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMTIzNCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRl
bnRpZmllcignMTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAxMjM0LCBO
b25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKDEyMzQpKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKE5vbmUsIDEyMzQsICdtYWluJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcign
aTEyMzRAbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAxMjM0LCAnbWFp
bicpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ0kxMjM0QG1haW4nKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgoTm9uZSwgMTIzNCwgJ21haW4nKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlm
aWVyKCcxMjM0QG1haW4nKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAxMjM0
LCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kxMjM0QGVuZy9idWcnKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMTIzNCwgJ2VuZy9idWcnKSwgQ29tbWl0
Ll9wYXJzZV9pZGVudGlmaWVyKCdJMTIzNEBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoKE5vbmUsIDEyMzQsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcign
MTIzNEBlbmcvYnVnJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgMSwgJ2Vu
Zy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNC4xQGVuZy9idWcnKSkKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTIzNCwgMSwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJz
ZV9pZGVudGlmaWVyKCdJMTIzNC4xQGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgoMTIzNCwgMSwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCcxMjM0LjFA
ZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIDAsIE5vbmUpLCBD
b21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgo
Tm9uZSwgLTEsIE5vbmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJy0xJykpCisKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9p
ZGVudGlmaWVyKCdpMEBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUs
IDAsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignSTBAZW5nL2J1ZycpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAwLCAnZW5nL2J1ZycpLCBDb21taXQuX3Bh
cnNlX2lkZW50aWZpZXIoJzBAZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
KE5vbmUsIC0xLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2ktMUBlbmcv
YnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIC0xLCAnZW5nL2J1ZycpLCBD
b21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ0ktMUBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKE5vbmUsIC0xLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIo
Jy0xQGVuZy9idWcnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5f
cGFyc2VfaWRlbnRpZmllcignaTEyMzQtaW52YWxpZCcpKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcigncjI2Njg5NicpKQorICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignYzNiZDc4NGY4
Yjg4YmQwMycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2Vf
aWRlbnRpZmllcigzLjE0MTU5MikpCisKKyAgICBkZWYgdGVzdF9wYXJzZShzZWxmKToKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ2kxMjNAbWFpbicpLCBDb21taXQoaWRl
bnRpZmllcj0xMjMsIGJyYW5jaD0nbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENv
bW1pdC5wYXJzZSgnaTEyMycpLCBDb21taXQoaWRlbnRpZmllcj0xMjMpKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKENvbW1pdC5wYXJzZSgnMTIzJyksIENvbW1pdChpZGVudGlmaWVyPTEyMykp
CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDb21taXQucGFyc2UoJ3IxMjMnKSwgQ29tbWl0
KHJldmlzaW9uPTEyMykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IENvbW1pdC5wYXJzZSgnYzNiZDc4NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScp
LAorICAgICAgICAgICAgQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0
ZWQ4YmUyOGFjYmUnKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfcHJldHR5X3ByaW50KHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0KAorICAg
ICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAbWFzdGVyJywKKyAgICAgICAgICAgICAgICBo
YXNoPSdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAg
ICAgICAgICBhdXRob3I9Q29udHJpYnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBh
cHBsZS5jb20nXSksCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBSSU5URUQnLAorICAg
ICAgICAgICAgKS5wcmV0dHlfcHJpbnQoKSwKKyAgICAgICAgICAgICcnJ2kxMjNAbWFzdGVyCisg
ICAgZ2l0IGhhc2g6IGMzYmQ3ODRmOGI4OCBvbiBtYXN0ZXIKKyAgICBpZGVudGlmaWVyOiBpMTIz
IG9uIG1hc3RlcgorICAgIGJ5IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+Cisn
JycsCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAg
Q29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9J2kxMjNAdHJ1bmsnLAorICAgICAg
ICAgICAgICAgIHJldmlzaW9uPSdyMTIzJywKKyAgICAgICAgICAgICAgICBhdXRob3I9Q29udHJp
YnV0b3IoJ0pvbmF0aGFuIEJlZGFyZCcsIFsnamJlZGFyZEBhcHBsZS5jb20nXSksCisgICAgICAg
ICAgICAgICAgdGltZXN0YW1wPTEwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nTk9UIFBS
SU5URUQnLAorICAgICAgICAgICAgKS5wcmV0dHlfcHJpbnQoKSwKKyAgICAgICAgICAgICcnJ2kx
MjNAdHJ1bmsKKyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlmaWVy
OiBpMTIzIG9uIHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxlLmNv
bT4gQCB7fQorJycnLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKDEwMDApKSwKKyAg
ICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQo
CisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0naTEyM0B0cnVuaycsCisgICAgICAgICAgICAg
ICAgcmV2aXNpb249J3IxMjMnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcign
Sm9uYXRoYW4gQmVkYXJkJywgWydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAg
ICB0aW1lc3RhbXA9MTAwMCwKKyAgICAgICAgICAgICAgICBtZXNzYWdlPSdQUklOVEVEXG4nLAor
ICAgICAgICAgICAgKS5wcmV0dHlfcHJpbnQobWVzc2FnZT1UcnVlKSwKKyAgICAgICAgICAgICcn
J2kxMjNAdHJ1bmsKKyAgICBTVk4gcmV2aXNpb246IHIxMjMgb24gdHJ1bmsKKyAgICBpZGVudGlm
aWVyOiBpMTIzIG9uIHRydW5rCisgICAgYnkgSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxl
LmNvbT4gQCB7fQorCitQUklOVEVECisnJycuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zyb210aW1lc3Rh
bXAoMTAwMCkpLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQoaWRlbnRpZmllcj0xMjMsIGJyYW5jaD0nbWFp
bicpKSwgJ2kxMjNAbWFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChi
cmFuY2hfcG9pbnQ9MTIzNCwgaWRlbnRpZmllcj0xLCBicmFuY2g9J2VuZy8xMjM0JykpLCAnaTEy
MzQuMUBlbmcvMTIzNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChpZGVu
dGlmaWVyPTEyMykpLCAnaTEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoQ29t
bWl0KHJldmlzaW9uPTEyMykpLCAncjEyMycpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChz
dHIoQ29tbWl0KGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0ZWQ4YmUyOGFjYmUn
KSksICdjM2JkNzg0ZjhiODgnKQorCisgICAgZGVmIHRlc3RfdGltZXN0YW1wX2NvbXBhcmUoc2Vs
Zik6CisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lv
bj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0KHJl
dmlzaW9uPTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICkKKyAgICAg
ICAgc2VsZi5hc3NlcnRHcmVhdGVyKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTIsIGlk
ZW50aWZpZXI9MiwgdGltZXN0YW1wPTIwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249
MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxm
LmFzc2VydExlc3MoCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0x
LCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlm
aWVyPTIsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0R3Jl
YXRlcigKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0yLCBpZGVudGlmaWVyPTIsIHRpbWVz
dGFtcD0xMDApLAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwg
dGltZXN0YW1wPTEwMCksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDAp
LAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1w
PTEwMCksCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXJfY29tcGFyZShzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKENvbW1pdChpZGVudGlmaWVyPTEpLCBDb21taXQo
aWRlbnRpZmllcj0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKENvbW1pdChpZGVudGlm
aWVyPTIpLCBDb21taXQoaWRlbnRpZmllcj0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChD
b21taXQoaWRlbnRpZmllcj0xKSwgQ29tbWl0KGlkZW50aWZpZXI9MSkpCisKKyAgICBkZWYgdGVz
dF9yZXZpc2lvbl9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoQ29tbWl0
KHJldmlzaW9uPTEpLCBDb21taXQocmV2aXNpb249MikpCisgICAgICAgIHNlbGYuYXNzZXJ0R3Jl
YXRlcihDb21taXQocmV2aXNpb249MiksIENvbW1pdChyZXZpc2lvbj0xKSkKKyAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChDb21taXQocmV2aXNpb249MSksIENvbW1pdChyZXZpc2lvbj0xKSkKKwor
ICAgIGRlZiB0ZXN0X2ludmFsaWRfY29tcGFyZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFz
c2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENvbW1pdChyZXZpc2lvbj0xKS5f
X2NtcF9fKENvbW1pdChpZGVudGlmaWVyPTIpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRS
YWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgdGltZXN0
YW1wPTEwMCkuX19jbXBfXyhDb21taXQoaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MTAwKSkKKwor
ICAgIGRlZiB0ZXN0X2NvbnRyaWJ1dG9yKHNlbGYpOgorICAgICAgICBDb250cmlidXRvci5jbGVh
cigpCisgICAgICAgIGNvbnRyaWJ1dG9yID0gQ29udHJpYnV0b3IuZnJvbV9zY21fbG9nKCdBdXRo
b3I6IEpvbmF0aGFuIEJlZGFyZCA8amJlZGFyZEBhcHBsZS5jb20+JykKKworICAgICAgICBjb21t
aXQgPSBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCBhdXRob3I9Y29udHJpYnV0b3Ip
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udHJpYnV0b3IpCisK
KyAgICAgICAgY29tbWl0ID0gQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9y
PSdKb25hdGhhbiBCZWRhcmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbW1pdC5hdXRo
b3IsIGNvbnRyaWJ1dG9yKQorCisgICAgICAgIGNvbW1pdCA9IENvbW1pdChyZXZpc2lvbj0xLCBp
ZGVudGlmaWVyPTEsIGF1dGhvcj0namJlZGFyZEBhcHBsZS5jb20nKQorICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKGNvbW1pdC5hdXRob3IsIGNvbnRyaWJ1dG9yKQorCisgICAgZGVmIHRlc3RfaW52
YWxpZF9jb250cmlidXRvcihzZWxmKToKKyAgICAgICAgQ29udHJpYnV0b3IuY2xlYXIoKQorICAg
ICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQ29t
bWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9yPSdKb25hdGhhbiBCZWRhcmQnKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410175</attachid>
            <date>2020-09-30 17:13:37 -0700</date>
            <delta_ts>2020-09-30 17:46:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216403-20200930171336.patch</filename>
            <type>text/plain</type>
            <size>23506</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI2NzgxMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDM1IEBACisyMDIwLTA5LTMwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIEFkZCBDb21taXQgb2JqZWN0CisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY0MDMKKyAgICAgICAgPHJk
YXI6Ly9wcm9ibGVtLzY4NzAyNzc5PgorCisgICAgICAgIFJldmlld2VkIGJ5IERld2VpIFpodS4K
KworICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19f
aW5pdF9fLnB5OiBCdW1wIHZlcnNpb24gbnVtYmVyLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weTogQWRkZWQuCisgICAgICAgIChD
b21taXQpOgorICAgICAgICAoQ29tbWl0Ll9wYXJzZV9oYXNoKTogR2l2ZW4gYSBoYXNoLCB2ZXJp
ZnkgdGhhdCB0aGUgcHJvdmlkZWQgYXJndW1lbnQgaXMKKyAgICAgICAgQWN0dWFsbHkgYSBnaXQg
aGFzaC4KKyAgICAgICAgKENvbW1pdC5fcGFyc2VfcmV2aXNpb24pOiBHaXZlbiBhIHN0cmluZyBv
ciBpbnRlZ2VyLCB2ZXJpZnkgdGhlIHByb3ZpZGVkCisgICAgICAgIGFyZ3VtZW50IGlzIGEgdmFs
aWQgU1ZOIHJldmlzaW9uIGFuZCByZXR1cm4gdGhlIHJldmlzaW9uIGFzIGFuIGludGVnZXIuCisg
ICAgICAgIChDb21taXQuX3BhcnNlX2lkZW50aWZpZXIpOiBHaXZlbiBhIHN0cmluZyBvciBpbnRl
Z2VyLCB2ZXJpZnkgdGhlIHByb3ZpZGVkCisgICAgICAgIGFyZ3VtZW50IGlzIGEgdmFsaWQgaWRl
bnRpZmllciBhbmQgcmV0dXJuIHRoZSBpZGVudGlmaWVyIGFuZCBicmFuY2guCisgICAgICAgIChD
b21taXQucGFyc2UpOiBHaXZlbiBhIHN0cmluZyByZXByZXNlbnRpbmcgYSBjb21taXQgaGFzaCwg
c3ZuIHJldmlzaW9uIG9yCisgICAgICAgIGlkZW50aWZpZXIsIHJldHVybiBhIGNvbW1pdCBvYmpl
Y3QuCisgICAgICAgIChDb21taXQuX19pbml0X18pOgorICAgICAgICAoQ29tbWl0LnByZXR0eV9w
cmludCk6IFJldHVybiBhIGxvbmcgc3RyaW5nIGRpc3BsYXlpbmcgdGhlIG1ldGFkYXRhIGZvciB0
aGUgY29tbWl0CisgICAgICAgIChDb21taXQuX19yZXByX18pOiBSZXR1cm4gYSBvbmUtbGluZSBy
ZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tbWl0LgorICAgICAgICAoQ29tbWl0Ll9faGFzaF9fKToK
KyAgICAgICAgKENvbW1pdC5fX2NtcF9fKTogQ29tcGFyZSB0d28gY29tbWl0IG9iamVjdHMuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9j
b21taXRfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoVGVzdENvbW1pdCk6CisgICAgICAg
IChUZXN0Q29tbWl0LnRlc3RfcGFyc2VfaGFzaCk6CisgICAgICAgIChUZXN0Q29tbWl0LnRlc3Rf
cGFyc2VfcmV2aXNpb24pOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3BhcnNlX2lkZW50aWZp
ZXIpOgorICAgICAgICAoVGVzdENvbW1pdC50ZXN0X3BhcnNlKToKKyAgICAgICAgKFRlc3RDb21t
aXQudGVzdF9wcmV0dHlfcHJpbnQpOgorCiAyMDIwLTA5LTMwICBKb25hdGhhbiBCZWRhcmQgIDxq
YmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0c2NtcHldIENoZWNrIGlmIGEgZ2l0
IGNoZWNrb3V0IGlzIGxpbmtlZCB0byBhbiBTVk4gY2hlY2tvdXQKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19f
aW5pdF9fLnB5CShyZXZpc2lvbiAyNjc4MTEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYs
OSArNDYsMTAgQEAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwg
d2Via2l0Y29yZXB5IHdpdGggYHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4
LXVybCA8cGFja2FnZSBpbmRleCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAs
IDAsIDUpCit2ZXJzaW9uID0gVmVyc2lvbigwLCAwLCA2KQogCiBmcm9tIHdlYmtpdHNjbXB5LmNv
bnRyaWJ1dG9yIGltcG9ydCBDb250cmlidXRvcgorZnJvbSB3ZWJraXRzY21weS5jb21taXQgaW1w
b3J0IENvbW1pdAogCiBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbAogZnJvbSB3ZWJraXRz
Y21weSBpbXBvcnQgbW9ja3MKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L2NvbW1pdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9jb21taXQucHkJKG5vbmV4aXN0ZW50KQor
KysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvY29tbWl0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY1IEBACisjIENvcHlyaWdodCAoQykgMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
IyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBzaXgKK2ltcG9ydCByZQorCitmcm9tIGRhdGV0aW1l
IGltcG9ydCBkYXRldGltZQorZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29udHJpYnV0b3IKKwor
CitjbGFzcyBDb21taXQob2JqZWN0KToKKyAgICBIQVNIX1JFID0gcmUuY29tcGlsZShyJ15bYS1m
MC05QS1GXSskJykKKyAgICBSRVZJU0lPTl9SRSA9IHJlLmNvbXBpbGUocideW1JyXT8oP1A8cmV2
aXNpb24+XGQrKSQnKQorICAgIElERU5USUZJRVJfUkUgPSByZS5jb21waWxlKHInXltJaV0/KCg/
UDxicmFuY2hfcG9pbnQ+XGQrKVwuKT8oP1A8aWRlbnRpZmllcj4tP1xkKykoQCg/UDxicmFuY2g+
XFMrKSk/JCcpCisgICAgTlVNQkVSX1JFID0gcmUuY29tcGlsZShyJ14tP1xkKiQnKQorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIF9wYXJzZV9oYXNoKGNscywgaGFzaCwgZG9fYXNzZXJ0PUZh
bHNlKToKKyAgICAgICAgaWYgaGFzaCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KworICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShoYXNoLCBzaXguc3RyaW5nX3R5cGVzKToKKyAg
ICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9y
KCJFeHBlY3RlZCBzdHJpbmcgdHlwZSBmb3IgaGFzaCwgZ290ICd7fSciLmZvcm1hdCh0eXBlKGhh
c2gpKSkKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgaWYgbm90IGNscy5IQVNI
X1JFLm1hdGNoKGhhc2gpIG9yIGxlbihoYXNoKSA+IDQwOgorICAgICAgICAgICAgaWYgZG9fYXNz
ZXJ0OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlByb3ZpZGVkIHN0cmluZyAn
e30nIGlzIG5vdCBhIGdpdCBoYXNoIi5mb3JtYXQoaGFzaCkpCisgICAgICAgICAgICByZXR1cm4g
Tm9uZQorCisgICAgICAgIHJldHVybiBoYXNoLmxvd2VyKCkKKworICAgIEBjbGFzc21ldGhvZAor
ICAgIGRlZiBfcGFyc2VfcmV2aXNpb24oY2xzLCByZXZpc2lvbiwgZG9fYXNzZXJ0PUZhbHNlKToK
KyAgICAgICAgaWYgcmV2aXNpb24gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisK
KyAgICAgICAgaWYgaXNpbnN0YW5jZShyZXZpc2lvbiwgc2l4LnN0cmluZ190eXBlcyk6CisgICAg
ICAgICAgICBtYXRjaCA9IGNscy5SRVZJU0lPTl9SRS5tYXRjaChyZXZpc2lvbikKKyAgICAgICAg
ICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgICAgIHJldmlzaW9uID0gaW50KG1hdGNoLmdyb3Vw
KCdyZXZpc2lvbicpKQorICAgICAgICAgICAgZWxpZiByZXZpc2lvbi5pc2RpZ2l0KCk6CisgICAg
ICAgICAgICAgICAgcmV2aXNpb24gPSBpbnQocmV2aXNpb24pCisgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgIGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcigiUHJvdmlkZWQgc3RyaW5nICd7fScgaXMgbm90IGFuIFNWTiIuZm9ybWF0KHJl
dmlzaW9uKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIGlmIG5vdCBp
c2luc3RhbmNlKHJldmlzaW9uLCBpbnQpOgorICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkIGludCB0eXBlIGZvciByZXZp
c2lvbiwgZ290ICd7fSciLmZvcm1hdCh0eXBlKHJldmlzaW9uKSkpCisgICAgICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgICAgIGlmIHJldmlzaW9uIDw9IDA6CisgICAgICAgICAgICBpZiBkb19h
c3NlcnQ6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1ZOIHJldmlzaW9ucyBt
dXN0IGJlIHBvc2l0aXZlIGludGVnZXInKQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAg
ICAgICByZXR1cm4gcmV2aXNpb24KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2Vf
aWRlbnRpZmllcihjbHMsIGlkZW50aWZpZXIsIGRvX2Fzc2VydD1GYWxzZSk6CisgICAgICAgIGlm
IGlkZW50aWZpZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
YnJhbmNoID0gTm9uZQorICAgICAgICBpZiBpc2luc3RhbmNlKGlkZW50aWZpZXIsIHNpeC5zdHJp
bmdfdHlwZXMpOgorICAgICAgICAgICAgbWF0Y2ggPSBjbHMuSURFTlRJRklFUl9SRS5tYXRjaChp
ZGVudGlmaWVyKQorICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaWRlbnRp
ZmllciA9IG1hdGNoLmdyb3VwKCdicmFuY2hfcG9pbnQnKSwgaW50KG1hdGNoLmdyb3VwKCdpZGVu
dGlmaWVyJykpCisgICAgICAgICAgICAgICAgaWYgaWRlbnRpZmllclswXToKKyAgICAgICAgICAg
ICAgICAgICAgaWRlbnRpZmllciA9IGludChpZGVudGlmaWVyWzBdKSwgaWRlbnRpZmllclsxXQor
ICAgICAgICAgICAgICAgIGJyYW5jaCA9IG1hdGNoLmdyb3VwKCdicmFuY2gnKQorICAgICAgICAg
ICAgZWxpZiBjbHMuTlVNQkVSX1JFLm1hdGNoKGlkZW50aWZpZXIpOgorICAgICAgICAgICAgICAg
IGlkZW50aWZpZXIgPSBOb25lLCBpbnQoaWRlbnRpZmllcikKKyAgICAgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICAgICAgaWYgZG9fYXNzZXJ0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJQcm92aWRlZCBzdHJpbmcgJ3t9JyBpcyBub3QgYW4gaWRlbnRpZmllciIuZm9y
bWF0KGlkZW50aWZpZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAg
aWYgaXNpbnN0YW5jZShpZGVudGlmaWVyLCBpbnQpOgorICAgICAgICAgICAgaWRlbnRpZmllciA9
IChOb25lLCBpZGVudGlmaWVyKQorCisgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShpZGVudGlm
aWVyLCB0dXBsZSkgYW5kIGxlbihpZGVudGlmaWVyKSA9PSAyIGFuZCBhbGwoW2lzaW5zdGFuY2Uo
eCwgaW50KSBvciB4IGlzIE5vbmUgZm9yIHggaW4gaWRlbnRpZmllcl0pKToKKyAgICAgICAgICAg
IGlmIGRvX2Fzc2VydDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdFeHBlY3Rl
ZCBpbnQgdHlwZSAob3IgcGFpciBvZiBpbnRzKSBmb3IgaWRlbnRpZmllciwgZ290IHt9Jy5mb3Jt
YXQodHlwZShpZGVudGlmaWVyKSkpCisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAg
IHJldHVybiAoaWRlbnRpZmllclswXSwgaWRlbnRpZmllclsxXSwgYnJhbmNoKQorCisgICAgQGNs
YXNzbWV0aG9kCisgICAgZGVmIHBhcnNlKGNscywgYXJnKToKKyAgICAgICAgaWYgY2xzLl9wYXJz
ZV9pZGVudGlmaWVyKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gQ29tbWl0KGlkZW50aWZpZXI9
YXJnKQorCisgICAgICAgIGlmIGNscy5fcGFyc2VfcmV2aXNpb24oYXJnKToKKyAgICAgICAgICAg
IHJldHVybiBDb21taXQocmV2aXNpb249YXJnKQorCisgICAgICAgIGlmIGNscy5fcGFyc2VfaGFz
aChhcmcpOgorICAgICAgICAgICAgcmV0dXJuIENvbW1pdChoYXNoPWFyZykKKworICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCIne30nIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gYSBjb21taXQgb2Jq
ZWN0Ii5mb3JtYXQoYXJnKSkKKworICAgIGRlZiBfX2luaXRfXygKKyAgICAgICAgc2VsZiwKKyAg
ICAgICAgaGFzaD1Ob25lLAorICAgICAgICByZXZpc2lvbj1Ob25lLAorICAgICAgICBpZGVudGlm
aWVyPU5vbmUsIGJyYW5jaD1Ob25lLCBicmFuY2hfcG9pbnQ9Tm9uZSwKKyAgICAgICAgdGltZXN0
YW1wPU5vbmUsIGF1dGhvcj1Ob25lLCBtZXNzYWdlPU5vbmUsCisgICAgKToKKyAgICAgICAgc2Vs
Zi5oYXNoID0gc2VsZi5fcGFyc2VfaGFzaChoYXNoLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAg
c2VsZi5yZXZpc2lvbiA9IHNlbGYuX3BhcnNlX3JldmlzaW9uKHJldmlzaW9uLCBkb19hc3NlcnQ9
VHJ1ZSkKKworICAgICAgICBwYXJzZWRfaWRlbnRpZmllciA9IHNlbGYuX3BhcnNlX2lkZW50aWZp
ZXIoaWRlbnRpZmllciwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgIGlmIHBhcnNlZF9pZGVudGlm
aWVyOgorICAgICAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCwgc2VsZi5pZGVudGlmaWVyLCBw
YXJzZWRfYnJhbmNoID0gcGFyc2VkX2lkZW50aWZpZXIKKyAgICAgICAgICAgIHNlbGYuYnJhbmNo
X3BvaW50ID0gcGFyc2VkX2JyYW5jaF9wb2ludCBvciBicmFuY2hfcG9pbnQKKyAgICAgICAgICAg
IHNlbGYuYnJhbmNoID0gcGFyc2VkX2JyYW5jaCBvciBicmFuY2gKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuaWRlbnRpZmllciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuYnJhbmNo
X3BvaW50ID0gYnJhbmNoX3BvaW50CisgICAgICAgICAgICBzZWxmLmJyYW5jaCA9IGJyYW5jaAor
CisgICAgICAgIGlmIGJyYW5jaCBhbmQgbm90IGlzaW5zdGFuY2UoYnJhbmNoLCBzaXguc3RyaW5n
X3R5cGVzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkV4cGVjdGVkICdicmFuY2gn
IHRvIGJlIGEgc3RyaW5nIikKKyAgICAgICAgaWYgYnJhbmNoIGFuZCBicmFuY2ggIT0gc2VsZi5i
cmFuY2g6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJD
YWxsZXIgcGFzc2VkIGJvdGggJ2JyYW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmll
ZCBkaWZmZXJlbnQgYnJhbmNoZXMgKHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAg
ICAgICAgYnJhbmNoLCBzZWxmLmJyYW5jaCwKKyAgICAgICAgICAgICAgICApLAorICAgICAgICAg
ICAgKQorCisgICAgICAgIGlmIGJyYW5jaF9wb2ludCBhbmQgbm90IGlzaW5zdGFuY2UoYnJhbmNo
X3BvaW50LCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2Jy
YW5jaF9wb2ludCcgdG8gYmUgYW4gaW50IikKKyAgICAgICAgaWYgYnJhbmNoX3BvaW50IGFuZCBi
cmFuY2hfcG9pbnQgIT0gc2VsZi5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKAorICAgICAgICAgICAgICAgICJDYWxsZXIgcGFzc2VkIGJvdGggJ2JyYW5jaF9wb2lu
dCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmllZCBkaWZmZXJlbnQgdmFsdWVzICh7fSBh
bmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGJyYW5jaF9wb2ludCwgc2VsZi5i
cmFuY2hfcG9pbnQsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICkKKworICAgICAg
ICBpZiB0aW1lc3RhbXAgYW5kIG5vdCBpc2luc3RhbmNlKHRpbWVzdGFtcCwgaW50KToKKyAgICAg
ICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ3RpbWVzdGFtcCcgdG8gYmUgb2YgdHlw
ZSBpbnQsIGdvdCAne30nIi5mb3JtYXQodGltZXN0YW1wKSkKKyAgICAgICAgc2VsZi50aW1lc3Rh
bXAgPSB0aW1lc3RhbXAKKworICAgICAgICBpZiBhdXRob3IgYW5kIGlzaW5zdGFuY2UoYXV0aG9y
LCBzaXguc3RyaW5nX3R5cGVzKToKKyAgICAgICAgICAgIHNlbGYuYXV0aG9yID0gQ29udHJpYnV0
b3IuYnlfZW1haWwuZ2V0KAorICAgICAgICAgICAgICAgIGF1dGhvciwKKyAgICAgICAgICAgICAg
ICBDb250cmlidXRvci5ieV9uYW1lLmdldChhdXRob3IpLAorICAgICAgICAgICAgKQorICAgICAg
ICAgICAgaWYgbm90IHNlbGYuYXV0aG9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoIid7fScgZG9lcyBub3QgbWF0Y2ggYSBrbm93biBjb250cmlidXRvciIpCisgICAgICAgIGVs
aWYgYXV0aG9yIGFuZCBub3QgaXNpbnN0YW5jZShhdXRob3IsIENvbnRyaWJ1dG9yKToKKyAgICAg
ICAgICAgIHJhaXNlIFR5cGVFcnJvcigiRXhwZWN0ZWQgJ2F1dGhvcicgdG8gYmUgb2YgdHlwZSB7
fSwgZ290ICd7fSciLmZvcm1hdChDb250cmlidXRvciwgYXV0aG9yKSkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHNlbGYuYXV0aG9yID0gYXV0aG9yCisKKyAgICAgICAgaWYgbWVzc2FnZSBh
bmQgbm90IGlzaW5zdGFuY2UobWVzc2FnZSwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAg
ICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnbWVzc2FnZScgdG8gYmUgYSBzdHJpbmcsIGdv
dCAne30nIi5mb3JtYXQobWVzc2FnZSkpCisgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UK
KworICAgICAgICAjIEZvcmNlIGEgY29tbWl0IGZvcm1hdCBjaGVjaworICAgICAgICBzZWxmLl9f
cmVwcl9fKCkKKworICAgIGRlZiBwcmV0dHlfcHJpbnQoc2VsZiwgbWVzc2FnZT1GYWxzZSk6Cisg
ICAgICAgIHJlc3VsdCA9ICd7fVxuJy5mb3JtYXQoc2VsZikKKyAgICAgICAgaWYgc2VsZi5yZXZp
c2lvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAnICAgIFNWTiByZXZpc2lvbjogcnt9Jy5mb3Jt
YXQoc2VsZi5yZXZpc2lvbikKKyAgICAgICAgICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAg
ICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5mb3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAgICAg
ICByZXN1bHQgKz0gJ1xuJworICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAgICByZXN1
bHQgKz0gJyAgICBnaXQgaGFzaDoge30nLmZvcm1hdChzZWxmLmhhc2hbOjEyXSkKKyAgICAgICAg
ICAgIGlmIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAnIG9uIHt9Jy5m
b3JtYXQoc2VsZi5icmFuY2gpCisgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICBp
ZiBzZWxmLmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXN1bHQgKz0gJyAgICBpZGVudGlmaWVy
OiBpe30nLmZvcm1hdChzZWxmLmlkZW50aWZpZXIpCisgICAgICAgICAgICBpZiBzZWxmLmlkZW50
aWZpZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgb24ge30nLmZvcm1hdChzZWxmLmJy
YW5jaCkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisgICAgICAgIGlmIHNlbGYuYXV0aG9y
OgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgICAgYnkge30nLmZvcm1hdChzZWxmLmF1dGhvcikK
KyAgICAgICAgICAgIGlmIHNlbGYudGltZXN0YW1wOgorICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSAnIEAge30nLmZvcm1hdChkYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHNlbGYudGltZXN0YW1w
KSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAnXG4nCisKKyAgICAgICAgaWYgc2VsZi5tZXNzYWdl
IGFuZCBtZXNzYWdlOgorICAgICAgICAgICAgcmVzdWx0ICs9ICdcbicKKyAgICAgICAgICAgIHJl
c3VsdCArPSBzZWxmLm1lc3NhZ2UKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYg
X19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuYnJhbmNoX3BvaW50IGFuZCBzZWxmLmlk
ZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAgICAgICAgICAgcmV0dXJuICdpe30ue31Ae30n
LmZvcm1hdChzZWxmLmJyYW5jaF9wb2ludCwgc2VsZi5pZGVudGlmaWVyLCBzZWxmLmJyYW5jaCkK
KyAgICAgICAgaWYgc2VsZi5pZGVudGlmaWVyIGFuZCBzZWxmLmJyYW5jaDoKKyAgICAgICAgICAg
IHJldHVybiAnaXt9QHt9Jy5mb3JtYXQoc2VsZi5pZGVudGlmaWVyLCBzZWxmLmJyYW5jaCkKKyAg
ICAgICAgaWYgc2VsZi5yZXZpc2lvbjoKKyAgICAgICAgICAgIHJldHVybiAncnt9Jy5mb3JtYXQo
c2VsZi5yZXZpc2lvbikKKyAgICAgICAgaWYgc2VsZi5oYXNoOgorICAgICAgICAgICAgcmV0dXJu
IHNlbGYuaGFzaFs6MTJdCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAg
IHJldHVybiAnaXt9Jy5mb3JtYXQoc2VsZi5pZGVudGlmaWVyKQorICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCdJbmNvbXBsZXRlIGNvbW1pdCBmb3JtYXQnKQorCisgICAgZGVmIF9faGFzaF9fKHNl
bGYpOgorICAgICAgICBpZiBzZWxmLmlkZW50aWZpZXIgYW5kIHNlbGYuYnJhbmNoOgorICAgICAg
ICAgICAgcmV0dXJuIGhhc2goc2VsZi5pZGVudGlmaWVyKSBeIGhhc2goc2VsZi5icmFuY2gpCisg
ICAgICAgIGlmIHNlbGYucmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gaGFzaChzZWxmLnJl
dmlzaW9uKQorICAgICAgICBpZiBzZWxmLmhhc2g6CisgICAgICAgICAgICByZXR1cm4gaGFzaChz
ZWxmLmhhc2gpCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJldHVy
biBoYXNoKHNlbGYuaWRlbnRpZmllcikKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW5jb21w
bGV0ZSBjb21taXQgZm9ybWF0JykKKworICAgIGRlZiBfX2NtcF9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIENvbW1pdCk6CisgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdDYW5ub3QgY29tcGFyZSBjb21taXQgYW5kIHt9Jy5mb3JtYXQodHlwZShv
dGhlcikpKQorICAgICAgICBpZiBzZWxmLnRpbWVzdGFtcCBhbmQgb3RoZXIudGltZXN0YW1wIGFu
ZCBzZWxmLnRpbWVzdGFtcCAhPSBvdGhlci50aW1lc3RhbXA6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi50aW1lc3RhbXAgLSBvdGhlci50aW1lc3RhbXAKKyAgICAgICAgaWYgc2VsZi5yZXZpc2lv
biBhbmQgb3RoZXIucmV2aXNpb246CisgICAgICAgICAgICByZXR1cm4gc2VsZi5yZXZpc2lvbiAt
IG90aGVyLnJldmlzaW9uCisgICAgICAgIGlmIHNlbGYuaWRlbnRpZmllciBhbmQgb3RoZXIuaWRl
bnRpZmllciBhbmQgc2VsZi5icmFuY2ggPT0gb3RoZXIuYnJhbmNoOgorICAgICAgICAgICAgcmV0
dXJuIHNlbGYuaWRlbnRpZmllciAtIG90aGVyLmlkZW50aWZpZXIKKyAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignQ2Fubm90IGNvbXBhcmUge30gYW5kIHt9Jy5mb3JtYXQoc2VsZiwgb3RoZXIpKQor
CisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYp
ID09IGhhc2gob3RoZXIpCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAg
cmV0dXJuIGhhc2goc2VsZikgIT0gaGFzaChvdGhlcikKKworICAgIGRlZiBfX2x0X18oc2VsZiwg
b3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVyKSA8IDAKKworICAgIGRl
ZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NtcF9fKG90aGVy
KSA8PSAwCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNl
bGYuX19jbXBfXyhvdGhlcikgPiAwCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX19jbXBfXyhvdGhlcikgPj0gMApJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3Qu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvdGVzdC9jb21taXRfdW5pdHRlc3QucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9jb21taXRfdW5p
dHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTMgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gZGF0ZXRpbWUg
aW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1
dG9yCisKKworY2xhc3MgVGVzdENvbW1pdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRl
c3RfcGFyc2VfaGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAg
ICAgICcxYTJlNDFlM2Y3Y2RmNTFiMWUxZDAyODgwY2ZiNjVlYWI5MzI3ZWYyJywKKyAgICAgICAg
ICAgIENvbW1pdC5fcGFyc2VfaGFzaCgnMWEyZTQxZTNmN2NkZjUxYjFlMWQwMjg4MGNmYjY1ZWFi
OTMyN2VmMicpCisgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAg
ICAgICdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJywKKyAgICAgICAg
ICAgIENvbW1pdC5fcGFyc2VfaGFzaCgnQzNCRDc4NEY4Qjg4QkQwM0Y2NDQ2N0RERDMzMDRFRDhC
RTI4QUNCRScpCisgICAgICAgICkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENv
bW1pdC5fcGFyc2VfaGFzaCgnaW52YWxpZCBoYXNoJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9oYXNoKCdjM2JkNzg0ZjhiODhiZDAzZjY0NDY3ZGRkMzMw
NGVkOGJlMjhhY2JlMScpKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcmV2aXNpb24oc2VsZik6Cisg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3BhcnNlX3JldmlzaW9uKCdy
MjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBDb21taXQuX3BhcnNl
X3JldmlzaW9uKCdSMjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMjY2ODk2LCBD
b21taXQuX3BhcnNlX3JldmlzaW9uKCcyNjY4OTYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgyNjY4OTYsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oMjY2ODk2KSkKKworICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFyc2VfcmV2aXNpb24oJ2kxMjM0JykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbignYzNiZDc4
NGY4Yjg4YmQwMycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENvbW1pdC5fcGFy
c2VfcmV2aXNpb24oJzAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBDb21taXQu
X3BhcnNlX3JldmlzaW9uKCctMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIENv
bW1pdC5fcGFyc2VfcmV2aXNpb24oJzMuMTQxNTkyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9yZXZpc2lvbigzLjE0MTU5MikpCisKKyAgICBkZWYgdGVz
dF9wYXJzZV9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25l
LCAxMjM0LCBOb25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNCcpKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAxMjM0LCBOb25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVu
dGlmaWVyKCdJMTIzNCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAxMjM0LCBO
b25lKSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCcxMjM0JykpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoKE5vbmUsIDEyMzQsIE5vbmUpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoMTIz
NCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMTIzNCwgJ21haW4nKSwgQ29t
bWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNEBtYWluJykpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoKE5vbmUsIDEyMzQsICdtYWluJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignSTEy
MzRAbWFpbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAxMjM0LCAnbWFpbicp
LCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJzEyMzRAbWFpbicpKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoKE5vbmUsIDEyMzQsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRp
ZmllcignaTEyMzRAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAx
MjM0LCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ0kxMjM0QGVuZy9idWcn
KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMTIzNCwgJ2VuZy9idWcnKSwgQ29t
bWl0Ll9wYXJzZV9pZGVudGlmaWVyKCcxMjM0QGVuZy9idWcnKSkKKworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKCgxMjM0LCAxLCAnZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIo
J2kxMjM0LjFAZW5nL2J1ZycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCAxLCAn
ZW5nL2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ0kxMjM0LjFAZW5nL2J1ZycpKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMjM0LCAxLCAnZW5nL2J1ZycpLCBDb21taXQuX3Bh
cnNlX2lkZW50aWZpZXIoJzEyMzQuMUBlbmcvYnVnJykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgoTm9uZSwgMCwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMCcpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAtMSwgTm9uZSksIENvbW1pdC5fcGFyc2VfaWRl
bnRpZmllcignLTEnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCAwLCAnZW5n
L2J1ZycpLCBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoJ2kwQGVuZy9idWcnKSkKKyAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgMCwgJ2VuZy9idWcnKSwgQ29tbWl0Ll9wYXJzZV9pZGVu
dGlmaWVyKCdJMEBlbmcvYnVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKE5vbmUsIDAs
ICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignMEBlbmcvYnVnJykpCisKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgLTEsICdlbmcvYnVnJyksIENvbW1pdC5fcGFy
c2VfaWRlbnRpZmllcignaS0xQGVuZy9idWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgo
Tm9uZSwgLTEsICdlbmcvYnVnJyksIENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcignSS0xQGVuZy9i
dWcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoTm9uZSwgLTEsICdlbmcvYnVnJyksIENv
bW1pdC5fcGFyc2VfaWRlbnRpZmllcignLTFAZW5nL2J1ZycpKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKCdpMTIzNC1pbnZhbGlkJykp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVy
KCdyMjY2ODk2JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgQ29tbWl0Ll9wYXJz
ZV9pZGVudGlmaWVyKCdjM2JkNzg0ZjhiODhiZDAzJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoTm9uZSwgQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKDMuMTQxNTkyKSkKKworICAgIGRlZiB0
ZXN0X3BhcnNlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdC5wYXJzZSgn
aTEyM0BtYWluJyksIENvbW1pdChpZGVudGlmaWVyPTEyMywgYnJhbmNoPSdtYWluJykpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCdpMTIzJyksIENvbW1pdChpZGVudGlm
aWVyPTEyMykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ29tbWl0LnBhcnNlKCcxMjMnKSwg
Q29tbWl0KGlkZW50aWZpZXI9MTIzKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1p
dC5wYXJzZSgncjEyMycpLCBDb21taXQocmV2aXNpb249MTIzKSkKKworICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0LnBhcnNlKCdjM2JkNzg0ZjhiODhiZDAzZjY0
NDY3ZGRkMzMwNGVkOGJlMjhhY2JlJyksCisgICAgICAgICAgICBDb21taXQoaGFzaD0nYzNiZDc4
NGY4Yjg4YmQwM2Y2NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScpLAorICAgICAgICApCisKKyAgICBk
ZWYgdGVzdF9wcmV0dHlfcHJpbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisg
ICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0naTEyM0BtYXN0
ZXInLAorICAgICAgICAgICAgICAgIGhhc2g9J2MzYmQ3ODRmOGI4OGJkMDNmNjQ0NjdkZGQzMzA0
ZWQ4YmUyOGFjYmUnLAorICAgICAgICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9uYXRo
YW4gQmVkYXJkJywgWydqYmVkYXJkQGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICBtZXNz
YWdlPSdOT1QgUFJJTlRFRCcsCisgICAgICAgICAgICApLnByZXR0eV9wcmludCgpLAorICAgICAg
ICAgICAgJycnaTEyM0BtYXN0ZXIKKyAgICBnaXQgaGFzaDogYzNiZDc4NGY4Yjg4IG9uIG1hc3Rl
cgorICAgIGlkZW50aWZpZXI6IGkxMjMgb24gbWFzdGVyCisgICAgYnkgSm9uYXRoYW4gQmVkYXJk
IDxqYmVkYXJkQGFwcGxlLmNvbT4KKycnJywKKyAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgaWRlbnRpZmll
cj0naTEyM0B0cnVuaycsCisgICAgICAgICAgICAgICAgcmV2aXNpb249J3IxMjMnLAorICAgICAg
ICAgICAgICAgIGF1dGhvcj1Db250cmlidXRvcignSm9uYXRoYW4gQmVkYXJkJywgWydqYmVkYXJk
QGFwcGxlLmNvbSddKSwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTAwMCwKKyAgICAgICAg
ICAgICAgICBtZXNzYWdlPSdOT1QgUFJJTlRFRCcsCisgICAgICAgICAgICApLnByZXR0eV9wcmlu
dCgpLAorICAgICAgICAgICAgJycnaTEyM0B0cnVuaworICAgIFNWTiByZXZpc2lvbjogcjEyMyBv
biB0cnVuaworICAgIGlkZW50aWZpZXI6IGkxMjMgb24gdHJ1bmsKKyAgICBieSBKb25hdGhhbiBC
ZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPiBAIHt9CisnJycuZm9ybWF0KGRhdGV0aW1lLnV0Y2Zy
b210aW1lc3RhbXAoMTAwMCkpLAorICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSdpMTIz
QHRydW5rJywKKyAgICAgICAgICAgICAgICByZXZpc2lvbj0ncjEyMycsCisgICAgICAgICAgICAg
ICAgYXV0aG9yPUNvbnRyaWJ1dG9yKCdKb25hdGhhbiBCZWRhcmQnLCBbJ2piZWRhcmRAYXBwbGUu
Y29tJ10pLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xMDAwLAorICAgICAgICAgICAgICAg
IG1lc3NhZ2U9J1BSSU5URURcbicsCisgICAgICAgICAgICApLnByZXR0eV9wcmludChtZXNzYWdl
PVRydWUpLAorICAgICAgICAgICAgJycnaTEyM0B0cnVuaworICAgIFNWTiByZXZpc2lvbjogcjEy
MyBvbiB0cnVuaworICAgIGlkZW50aWZpZXI6IGkxMjMgb24gdHJ1bmsKKyAgICBieSBKb25hdGhh
biBCZWRhcmQgPGpiZWRhcmRAYXBwbGUuY29tPiBAIHt9CisKK1BSSU5URUQKKycnJy5mb3JtYXQo
ZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgxMDAwKSksCisgICAgICAgICkKKworICAgIGRlZiB0
ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKENvbW1pdChpZGVu
dGlmaWVyPTEyMywgYnJhbmNoPSdtYWluJykpLCAnaTEyM0BtYWluJykKKyAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbChzdHIoQ29tbWl0KGJyYW5jaF9wb2ludD0xMjM0LCBpZGVudGlmaWVyPTEsIGJy
YW5jaD0nZW5nLzEyMzQnKSksICdpMTIzNC4xQGVuZy8xMjM0JykKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChzdHIoQ29tbWl0KGlkZW50aWZpZXI9MTIzKSksICdpMTIzJykKKworICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQocmV2aXNpb249MTIzKSksICdyMTIzJykKKworICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihDb21taXQoaGFzaD0nYzNiZDc4NGY4Yjg4YmQwM2Y2
NDQ2N2RkZDMzMDRlZDhiZTI4YWNiZScpKSwgJ2MzYmQ3ODRmOGI4OCcpCisKKyAgICBkZWYgdGVz
dF90aW1lc3RhbXBfY29tcGFyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKAorICAg
ICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgdGltZXN0YW1wPTEwMCks
CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9
MjAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoCisgICAgICAgICAg
ICBDb21taXQocmV2aXNpb249MiwgaWRlbnRpZmllcj0yLCB0aW1lc3RhbXA9MjAwKSwKKyAgICAg
ICAgICAgIENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAor
ICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcygKKyAgICAgICAgICAgIENvbW1pdChy
ZXZpc2lvbj0xLCBpZGVudGlmaWVyPTEsIHRpbWVzdGFtcD0xMDApLAorICAgICAgICAgICAgQ29t
bWl0KHJldmlzaW9uPTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICkK
KyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9u
PTIsIGlkZW50aWZpZXI9MiwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICAgICBDb21taXQocmV2
aXNpb249MSwgaWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50
aWZpZXI9MSwgdGltZXN0YW1wPTEwMCksCisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwg
aWRlbnRpZmllcj0xLCB0aW1lc3RhbXA9MTAwKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rf
aWRlbnRpZmllcl9jb21wYXJlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydExlc3MoQ29tbWl0
KGlkZW50aWZpZXI9MSksIENvbW1pdChpZGVudGlmaWVyPTIpKQorICAgICAgICBzZWxmLmFzc2Vy
dEdyZWF0ZXIoQ29tbWl0KGlkZW50aWZpZXI9MiksIENvbW1pdChpZGVudGlmaWVyPTEpKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdChpZGVudGlmaWVyPTEpLCBDb21taXQoaWRlbnRp
Zmllcj0xKSkKKworICAgIGRlZiB0ZXN0X3JldmlzaW9uX2NvbXBhcmUoc2VsZik6CisgICAgICAg
IHNlbGYuYXNzZXJ0TGVzcyhDb21taXQocmV2aXNpb249MSksIENvbW1pdChyZXZpc2lvbj0yKSkK
KyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKENvbW1pdChyZXZpc2lvbj0yKSwgQ29tbWl0KHJl
dmlzaW9uPTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENvbW1pdChyZXZpc2lvbj0xKSwg
Q29tbWl0KHJldmlzaW9uPTEpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9jb21wYXJlKHNlbGYp
OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAg
ICAgQ29tbWl0KHJldmlzaW9uPTEpLl9fY21wX18oQ29tbWl0KGlkZW50aWZpZXI9MikpCisKKyAg
ICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIENv
bW1pdChyZXZpc2lvbj0xLCB0aW1lc3RhbXA9MTAwKS5fX2NtcF9fKENvbW1pdChpZGVudGlmaWVy
PTIsIHRpbWVzdGFtcD0xMDApKQorCisgICAgZGVmIHRlc3RfY29udHJpYnV0b3Ioc2VsZik6Cisg
ICAgICAgIENvbnRyaWJ1dG9yLmNsZWFyKCkKKyAgICAgICAgY29udHJpYnV0b3IgPSBDb250cmli
dXRvci5mcm9tX3NjbV9sb2coJ0F1dGhvcjogSm9uYXRoYW4gQmVkYXJkIDxqYmVkYXJkQGFwcGxl
LmNvbT4nKQorCisgICAgICAgIGNvbW1pdCA9IENvbW1pdChyZXZpc2lvbj0xLCBpZGVudGlmaWVy
PTEsIGF1dGhvcj1jb250cmlidXRvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21taXQu
YXV0aG9yLCBjb250cmlidXRvcikKKworICAgICAgICBjb21taXQgPSBDb21taXQocmV2aXNpb249
MSwgaWRlbnRpZmllcj0xLCBhdXRob3I9J0pvbmF0aGFuIEJlZGFyZCcpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udHJpYnV0b3IpCisKKyAgICAgICAgY29tbWl0
ID0gQ29tbWl0KHJldmlzaW9uPTEsIGlkZW50aWZpZXI9MSwgYXV0aG9yPSdqYmVkYXJkQGFwcGxl
LmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tbWl0LmF1dGhvciwgY29udHJpYnV0
b3IpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2NvbnRyaWJ1dG9yKHNlbGYpOgorICAgICAgICBD
b250cmlidXRvci5jbGVhcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVF
cnJvcik6CisgICAgICAgICAgICBDb21taXQocmV2aXNpb249MSwgaWRlbnRpZmllcj0xLCBhdXRo
b3I9J0pvbmF0aGFuIEJlZGFyZCcpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>