<?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>196004</bug_id>
          
          <creation_ts>2019-03-20 07:30:19 -0700</creation_ts>
          <short_desc>[ews-build] Retry API test in case of failures</short_desc>
          <delta_ts>2019-06-25 11:00:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>Other</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=199194</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="Aakash Jain">aakash_jain</reporter>
          <assigned_to name="Aakash Jain">aakash_jain</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jbedard</cc>
    
    <cc>lforschler</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1518879</commentid>
    <comment_count>0</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 07:30:19 -0700</bug_when>
    <thetext>When failures are found in run-api-tests, we should retry the API test to ensure that the failures are not because of flaky test. Further, we should run the API tests without the patch as well, to identify whether the failures are pre-existing or new failures introduced by the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518884</commentid>
    <comment_count>1</comment_count>
      <attachid>365345</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 07:47:39 -0700</bug_when>
    <thetext>Created attachment 365345
WIP

Sample runs:

Handling pre-existing failure in trunk: 
https://ews-build.webkit-uat.org/#/builders/19/builds/2259
https://ews-build.webkit-uat.org/#/builders/19/builds/2253

Handling pre-existing failure in trunk as well as flaky tests:
https://ews-build.webkit-uat.org/#/builders/19/builds/2256
https://ews-build.webkit-uat.org/#/builders/19/builds/2242

Flaky failure in first run with no failures in second run:
https://ews-build.webkit-uat.org/#/builders/20/builds/2040
https://ews-build.webkit-uat.org/#/builders/20/builds/2039

No failures: 
https://ews-build.webkit-uat.org/#/builders/20/builds/2045
https://ews-build.webkit-uat.org/#/builders/20/builds/2041</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518885</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-20 07:49:20 -0700</bug_when>
    <thetext>Attachment 365345 did not pass style-queue:


ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:708:  [RunAPITests.evaluateCommand] Use of super on an old style class  [pylint/E1002] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:834:  [AnalyzeAPITestsResults.getTestsResults] Instance of &apos;AnalyzeAPITestsResults&apos; has no &apos;master&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:841:  [AnalyzeAPITestsResults.getTestsResults] Instance of &apos;AnalyzeAPITestsResults&apos; has no &apos;master&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:846:  [AnalyzeAPITestsResults.getTestsResults] Undefined variable &apos;json&apos;  [pylint/E0602] [5]
Total errors found: 4 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1518956</commentid>
    <comment_count>3</comment_count>
      <attachid>365345</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-20 10:11:44 -0700</bug_when>
    <thetext>Comment on attachment 365345
WIP

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

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:524
&gt; +        return self.getProperty(&apos;patchFailedToBuild&apos;) or self.getProperty(&apos;patchFailedAPITests&apos;)

A bit confused why only API tests are here. Doesn&apos;t this logic apply to JSC tests too? And in the future, basically any test suite we&apos;re retrying that uses a compiled WebKit?

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:759
&gt; +        d = self.getTestsResults(RunAPITests.name)

d doesn&apos;t get used again? Should this be &apos;defer&apos;?

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:794
&gt; +        failures_with_patch = first_run_failures.intersection(second_run_failures)

Doesn&apos;t this throw out flakey failures? Do we really want to do that? It almost feels like union would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519047</commentid>
    <comment_count>4</comment_count>
      <attachid>365345</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 11:51:24 -0700</bug_when>
    <thetext>Comment on attachment 365345
WIP

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

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:524
&gt;&gt; +        return self.getProperty(&apos;patchFailedToBuild&apos;) or self.getProperty(&apos;patchFailedAPITests&apos;)
&gt; 
&gt; A bit confused why only API tests are here. Doesn&apos;t this logic apply to JSC tests too? And in the future, basically any test suite we&apos;re retrying that uses a compiled WebKit?

You are right. For now, these are the only two code paths which are using CompileWebKitToT. I haven&apos;t completed the JSC build/test retry logic.

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:759
&gt;&gt; +        d = self.getTestsResults(RunAPITests.name)
&gt; 
&gt; d doesn&apos;t get used again? Should this be &apos;defer&apos;?

it&apos;s used in all the subsequent lines below &apos;d.addCallback&apos;.

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:794
&gt;&gt; +        failures_with_patch = first_run_failures.intersection(second_run_failures)
&gt; 
&gt; Doesn&apos;t this throw out flakey failures? Do we really want to do that? It almost feels like union would be better.

Yeah, I believe that&apos;s what we would want here. If we do union, then in https://ews-build.webkit-uat.org/#/builders/19/builds/2256 EWS would claim &apos;TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses&apos; as a new failure introduced by the patch, which we don&apos;t want. (Note that NumberOfCachedProcesses is a flaky failure as noted in https://bugs.webkit.org/show_bug.cgi?id=195102)

Also, this is similar to https://trac.webkit.org/browser/webkit/trunk/Tools/Scripts/webkitpy/tool/bot/patchanalysistask.py#L281</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519049</commentid>
    <comment_count>5</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 11:53:00 -0700</bug_when>
    <thetext>Sample run for catching API test failures: https://ews-build.webkit-uat.org/#/builders/19/builds/2260</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519106</commentid>
    <comment_count>6</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2019-03-20 12:54:13 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #4)
&gt; ...
&gt; 
&gt; &gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:794
&gt; &gt;&gt; +        failures_with_patch = first_run_failures.intersection(second_run_failures)
&gt; &gt; 
&gt; &gt; Doesn&apos;t this throw out flakey failures? Do we really want to do that? It almost feels like union would be better.
&gt; 
&gt; Yeah, I believe that&apos;s what we would want here. If we do union, then in
&gt; https://ews-build.webkit-uat.org/#/builders/19/builds/2256 EWS would claim
&gt; &apos;TestWebKitAPI.ProcessSwap.NumberOfCachedProcesses&apos; as a new failure
&gt; introduced by the patch, which we don&apos;t want. (Note that
&gt; NumberOfCachedProcesses is a flaky failure as noted in
&gt; https://bugs.webkit.org/show_bug.cgi?id=195102)
&gt; 
&gt; Also, this is similar to
&gt; https://trac.webkit.org/browser/webkit/trunk/Tools/Scripts/webkitpy/tool/bot/
&gt; patchanalysistask.py#L281

But what about the case were the patch introduces a NEW flakey failure? We would pass EWS, in that case.

Maybe the answer is that we don&apos;t have a good way to catch this without talking to a results database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519123</commentid>
    <comment_count>7</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 13:19:33 -0700</bug_when>
    <thetext>&gt; But what about the case were the patch introduces a NEW flakey failure? We
&gt; would pass EWS, in that case.
&gt; 
&gt; Maybe the answer is that we don&apos;t have a good way to catch this without
&gt; talking to a results database.
Agreed. It&apos;s hard to conclusively detect a flaky test added by the patch (unless we run API test on that patch lot of times). Results database (about API tests history) would be a good way to catch flaky failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519127</commentid>
    <comment_count>8</comment_count>
      <attachid>365387</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 13:21:48 -0700</bug_when>
    <thetext>Created attachment 365387
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519133</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-20 13:24:55 -0700</bug_when>
    <thetext>Attachment 365387 did not pass style-queue:


ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:714:  [RunAPITests.evaluateCommand] Use of super on an old style class  [pylint/E1002] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:839:  [AnalyzeAPITestsResults.getTestsResults] Instance of &apos;AnalyzeAPITestsResults&apos; has no &apos;master&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:846:  [AnalyzeAPITestsResults.getTestsResults] Instance of &apos;AnalyzeAPITestsResults&apos; has no &apos;master&apos; member  [pylint/E1101] [5]
Total errors found: 3 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519187</commentid>
    <comment_count>10</comment_count>
      <attachid>365387</attachid>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2019-03-20 14:35:07 -0700</bug_when>
    <thetext>Comment on attachment 365387
Proposed patch

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

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:741
&gt; +        return rc

you have a space on line 723 before the return. but omit it here. either is fine, just make them the same.

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:751
&gt; +        return not self.doStepIf(step)

I find this confusing.  do we really need the doStepIf /hideStepIf function if we are just returning a property?

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:780
&gt; +

will we always have first/second/clean run results? (do we have to run the second/clean set if everything in the first run passes?)

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:788
&gt; +            return set([failure.get(&apos;name&apos;) for failure in result.get(&quot;Timedout&quot;, [])] +

discuss: Timedout vs TimedOut vs TimeOut?

do we use &quot;Timedout&quot; anywhere else? I think a simple case change is better for this string.

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:836
&gt; +            self._addToLog(&apos;stderr&apos;, &quot;ERROR: step not found: {}&quot;.format(step))

we are mixing single quotes and double quotes in this function... is that on purpose?
looks like this is common across all the addToLog calls.

&gt; Tools/BuildSlaveSupport/ews-build/steps.py:847
&gt; +        if log[&apos;type&apos;] == &apos;s&apos;:

can you remind me what the possible values are for &apos;type&apos; ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519207</commentid>
    <comment_count>11</comment_count>
      <attachid>365387</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-20 14:53:16 -0700</bug_when>
    <thetext>Comment on attachment 365387
Proposed patch

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

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:741
&gt;&gt; +        return rc
&gt; 
&gt; you have a space on line 723 before the return. but omit it here. either is fine, just make them the same.

Will fix it.

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:751
&gt;&gt; +        return not self.doStepIf(step)
&gt; 
&gt; I find this confusing.  do we really need the doStepIf /hideStepIf function if we are just returning a property?

This class runs api tests (without patch), it is skipped if that property is not set.

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:780
&gt;&gt; +
&gt; 
&gt; will we always have first/second/clean run results? (do we have to run the second/clean set if everything in the first run passes?)

Yes we will always have all three results, because this class AnalyzeAPITestsResults is called only if there was a API test retry and there were failures in the retry. Notice &quot;addStepsAfterCurrentStep&quot; in ReRunAPITests.

If everything in first run passes, we do not retry, we do not use &apos;addStepsAfterCurrentStep&apos; and this class is never invoked.

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:788
&gt;&gt; +            return set([failure.get(&apos;name&apos;) for failure in result.get(&quot;Timedout&quot;, [])] +
&gt; 
&gt; discuss: Timedout vs TimedOut vs TimeOut?
&gt; 
&gt; do we use &quot;Timedout&quot; anywhere else? I think a simple case change is better for this string.

&apos;Timedout&apos; is outputted by run-api-tests itself https://trac.webkit.org/browser/webkit/trunk/Tools/Scripts/webkitpy/api_tests/manager.py#L196

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:836
&gt;&gt; +            self._addToLog(&apos;stderr&apos;, &quot;ERROR: step not found: {}&quot;.format(step))
&gt; 
&gt; we are mixing single quotes and double quotes in this function... is that on purpose?
&gt; looks like this is common across all the addToLog calls.

Will fix the quotes.

&gt;&gt; Tools/BuildSlaveSupport/ews-build/steps.py:847
&gt;&gt; +        if log[&apos;type&apos;] == &apos;s&apos;:
&gt; 
&gt; can you remind me what the possible values are for &apos;type&apos; ?

# &apos;s&apos; = stdio, &apos;t&apos; = text, &apos;h&apos; = html, &apos;d&apos; = deleted
From https://github.com/buildbot/buildbot/blob/master/master/buildbot/db/model.py#L196</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519843</commentid>
    <comment_count>12</comment_count>
      <attachid>365597</attachid>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2019-03-21 12:51:17 -0700</bug_when>
    <thetext>Created attachment 365597
Updated patch

Incorporated review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1519847</commentid>
    <comment_count>13</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-03-21 12:53:34 -0700</bug_when>
    <thetext>Attachment 365597 did not pass style-queue:


ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:714:  [RunAPITests.evaluateCommand] Use of super on an old style class  [pylint/E1002] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:831:  [AnalyzeAPITestsResults.getTestsResults] Instance of &apos;AnalyzeAPITestsResults&apos; has no &apos;master&apos; member  [pylint/E1101] [5]
ERROR: Tools/BuildSlaveSupport/ews-build/steps.py:838:  [AnalyzeAPITestsResults.getTestsResults] Instance of &apos;AnalyzeAPITestsResults&apos; has no &apos;master&apos; member  [pylint/E1101] [5]
Total errors found: 3 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520002</commentid>
    <comment_count>14</comment_count>
      <attachid>365597</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-21 16:12:04 -0700</bug_when>
    <thetext>Comment on attachment 365597
Updated patch

Clearing flags on attachment: 365597

Committed r243342: &lt;https://trac.webkit.org/changeset/243342&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520003</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-03-21 16:12:06 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1520004</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-03-21 16:14:03 -0700</bug_when>
    <thetext>&lt;rdar://problem/49129320&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365345</attachid>
            <date>2019-03-20 07:47:39 -0700</date>
            <delta_ts>2019-03-20 13:21:48 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>retry-api-tests.patch</filename>
            <type>text/plain</type>
            <size>8715</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzIwMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI4IEBACisyMDE5LTAzLTIwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbZXdzLWJ1aWxkXSBSZXRyeSBBUEkgdGVzdCBpbiBjYXNlIG9mIGZhaWx1
cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYw
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1
aWxkU2xhdmVTdXBwb3J0L2V3cy1idWlsZC9zdGVwcy5weToKKyAgICAgICAgKFVuQXBwbHlQYXRj
aElmUmVxdWlyZWQuZG9TdGVwSWYpOgorICAgICAgICAoQ29tcGlsZVdlYktpdFRvVC5kb1N0ZXBJ
Zik6CisgICAgICAgIChSdW5BUElUZXN0cy5ldmFsdWF0ZUNvbW1hbmQpOgorICAgICAgICAoUmVS
dW5BUElUZXN0cyk6CisgICAgICAgIChSZVJ1bkFQSVRlc3RzLmV2YWx1YXRlQ29tbWFuZCk6Cisg
ICAgICAgIChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaCk6CisgICAgICAgIChSdW5BUElUZXN0c1dp
dGhvdXRQYXRjaC5kb1N0ZXBJZik6CisgICAgICAgIChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaC5o
aWRlU3RlcElmKToKKyAgICAgICAgKFJ1bkFQSVRlc3RzV2l0aG91dFBhdGNoLmV2YWx1YXRlQ29t
bWFuZCk6CisgICAgICAgIChBbmFseXplQVBJVGVzdHNSZXN1bHRzKToKKyAgICAgICAgKEFuYWx5
emVBUElUZXN0c1Jlc3VsdHMuc3RhcnQpOgorICAgICAgICAoQW5hbHl6ZUFQSVRlc3RzUmVzdWx0
cy5hbmFseXplUmVzdWx0cyk6CisgICAgICAgIChBbmFseXplQVBJVGVzdHNSZXN1bHRzLmFuYWx5
emVSZXN1bHRzLmdldEFQSVRlc3RGYWlsdXJlcyk6CisgICAgICAgIChBbmFseXplQVBJVGVzdHNS
ZXN1bHRzLl9hZGRUb0xvZyk6CisgICAgICAgIChBbmFseXplQVBJVGVzdHNSZXN1bHRzLmdldEJ1
aWxkU3RlcEJ5TmFtZSk6CisgICAgICAgIChBbmFseXplQVBJVGVzdHNSZXN1bHRzLmdldFRlc3Rz
UmVzdWx0cyk6CisKIDIwMTktMDMtMjAgIEpvYW5tYXJpZSBEaWdncyAgPGpkaWdnc0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIEFYOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgbmV3IG1ldGVyIEFSSUEg
cm9sZQpJbmRleDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1idWlsZC9zdGVwcy5weQko
cmV2aXNpb24gMjQzMjAwKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWJ1aWxkL3N0
ZXBzLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNzEsNyArMzcxLDcgQEAgY2xhc3MgVW5BcHBseVBh
dGNoSWZSZXF1aXJlZChDbGVhbldvcmtpbgogICAgIGRlc2NyaXB0aW9uRG9uZSA9IFsnVW5hcHBs
aWVkIHBhdGNoJ10KIAogICAgIGRlZiBkb1N0ZXBJZihzZWxmLCBzdGVwKToKLSAgICAgICAgcmV0
dXJuIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkVG9CdWlsZCcpIG9yIHNlbGYuZ2V0UHJv
cGVydHkoJ3BhdGNoRmFpbGVkSlNDVGVzdHMnKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRQcm9w
ZXJ0eSgncGF0Y2hGYWlsZWRUb0J1aWxkJykgb3Igc2VsZi5nZXRQcm9wZXJ0eSgncGF0Y2hGYWls
ZWRKU0NUZXN0cycpIG9yIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkQVBJVGVzdHMnKQog
CiAgICAgZGVmIGhpZGVTdGVwSWYoc2VsZiwgcmVzdWx0cywgc3RlcCk6CiAgICAgICAgIHJldHVy
biBub3Qgc2VsZi5kb1N0ZXBJZihzdGVwKQpAQCAtNTIxLDcgKzUyMSw3IEBAIGNsYXNzIENvbXBp
bGVXZWJLaXRUb1QoQ29tcGlsZVdlYktpdCk6CiAgICAgaGFsdE9uRmFpbHVyZSA9IFRydWUKIAog
ICAgIGRlZiBkb1N0ZXBJZihzZWxmLCBzdGVwKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0UHJv
cGVydHkoJ3BhdGNoRmFpbGVkVG9CdWlsZCcpCisgICAgICAgIHJldHVybiBzZWxmLmdldFByb3Bl
cnR5KCdwYXRjaEZhaWxlZFRvQnVpbGQnKSBvciBzZWxmLmdldFByb3BlcnR5KCdwYXRjaEZhaWxl
ZEFQSVRlc3RzJykKIAogICAgIGRlZiBoaWRlU3RlcElmKHNlbGYsIHJlc3VsdHMsIHN0ZXApOgog
ICAgICAgICByZXR1cm4gbm90IHNlbGYuZG9TdGVwSWYoc3RlcCkKQEAgLTcwNSw2ICs3MDUsMTQ4
IEBAIGNsYXNzIFJ1bkFQSVRlc3RzKFRlc3RXaXRoRmFpbHVyZUNvdW50KToKICAgICAgICAgICAg
IHJldHVybiAwCiAgICAgICAgIHJldHVybiBpbnQobWF0Y2guZ3JvdXAoJ3JhbicpKSAtIGludCht
YXRjaC5ncm91cCgncGFzc2VkJykpCiAKKyAgICBkZWYgZXZhbHVhdGVDb21tYW5kKHNlbGYsIGNt
ZCk6CisgICAgICAgIHJjID0gc3VwZXIoUnVuQVBJVGVzdHMsIHNlbGYpLmV2YWx1YXRlQ29tbWFu
ZChjbWQpCisgICAgICAgIGlmIHJjID09IFNVQ0NFU1M6CisgICAgICAgICAgICBzZWxmLmZpbmlz
aGVkKFNVQ0NFU1MpCisgICAgICAgICAgICBtZXNzYWdlID0gJ1Bhc3NlZCBBUEkgdGVzdHMnCisg
ICAgICAgICAgICBzZWxmLmRlc2NyaXB0aW9uRG9uZSA9IG1lc3NhZ2UKKyAgICAgICAgICAgIHNl
bGYuYnVpbGQucmVzdWx0cyA9IFNVQ0NFU1MKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRG
aW5pc2hlZChbbWVzc2FnZV0sIFNVQ0NFU1MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBz
ZWxmLmJ1aWxkLmFkZFN0ZXBzQWZ0ZXJDdXJyZW50U3RlcChbUmVSdW5BUElUZXN0cygpXSkKKwor
ICAgICAgICByZXR1cm4gcmMKKworCitjbGFzcyBSZVJ1bkFQSVRlc3RzKFJ1bkFQSVRlc3RzKToK
KyAgICBuYW1lID0gJ3JlLXJ1bi1hcGktdGVzdHMnCisKKyAgICBkZWYgZXZhbHVhdGVDb21tYW5k
KHNlbGYsIGNtZCk6CisgICAgICAgIHJjID0gVGVzdFdpdGhGYWlsdXJlQ291bnQuZXZhbHVhdGVD
b21tYW5kKHNlbGYsIGNtZCkKKyAgICAgICAgaWYgcmMgPT0gU1VDQ0VTUzoKKyAgICAgICAgICAg
IHNlbGYuZmluaXNoZWQoU1VDQ0VTUykKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAnUGFzc2VkIEFQ
SSB0ZXN0cycKKyAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb25Eb25lID0gbWVzc2FnZQorICAg
ICAgICAgICAgc2VsZi5idWlsZC5yZXN1bHRzID0gU1VDQ0VTUworICAgICAgICAgICAgc2VsZi5i
dWlsZC5idWlsZEZpbmlzaGVkKFttZXNzYWdlXSwgU1VDQ0VTUykKKyAgICAgICAgZWxzZToKKyAg
ICAgICAgICAgIHNlbGYuc2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkQVBJVGVzdHMnLCBUcnVlKQor
ICAgICAgICAgICAgc2VsZi5idWlsZC5hZGRTdGVwc0FmdGVyQ3VycmVudFN0ZXAoW1VuQXBwbHlQ
YXRjaElmUmVxdWlyZWQoKSwgQ29tcGlsZVdlYktpdFRvVCgpLCBSdW5BUElUZXN0c1dpdGhvdXRQ
YXRjaCgpLCBBbmFseXplQVBJVGVzdHNSZXN1bHRzKCldKQorICAgICAgICByZXR1cm4gcmMKKwor
CitjbGFzcyBSdW5BUElUZXN0c1dpdGhvdXRQYXRjaChSdW5BUElUZXN0cyk6CisgICAgbmFtZSA9
ICdydW4tYXBpLXRlc3RzLXdpdGhvdXQtcGF0Y2gnCisKKyAgICBkZWYgZG9TdGVwSWYoc2VsZiwg
c3RlcCk6CisgICAgICAgIHJldHVybiBzZWxmLmdldFByb3BlcnR5KCdwYXRjaEZhaWxlZEFQSVRl
c3RzJykKKworICAgIGRlZiBoaWRlU3RlcElmKHNlbGYsIHJlc3VsdHMsIHN0ZXApOgorICAgICAg
ICByZXR1cm4gbm90IHNlbGYuZG9TdGVwSWYoc3RlcCkKKworICAgIGRlZiBldmFsdWF0ZUNvbW1h
bmQoc2VsZiwgY21kKToKKyAgICAgICAgcmV0dXJuIFRlc3RXaXRoRmFpbHVyZUNvdW50LmV2YWx1
YXRlQ29tbWFuZChzZWxmLCBjbWQpCisKKworY2xhc3MgQW5hbHl6ZUFQSVRlc3RzUmVzdWx0cyhi
dWlsZHN0ZXAuQnVpbGRTdGVwKToKKyAgICBuYW1lID0gJ2FuYWx5emUtYXBpLXRlc3RzLXJlc3Vs
dHMnCisgICAgZGVzY3JpcHRpb24gPSBbJ2FuYWx5emUtYXBpLXRlc3QtcmVzdWx0cyddCisgICAg
ZGVzY3JpcHRpb25Eb25lID0gWydhbmFseXplLWFwaS10ZXN0cy1yZXN1bHRzJ10KKworICAgIGRl
ZiBzdGFydChzZWxmKToKKyAgICAgICAgc2VsZi5yZXN1bHRzID0ge30KKyAgICAgICAgZCA9IHNl
bGYuZ2V0VGVzdHNSZXN1bHRzKFJ1bkFQSVRlc3RzLm5hbWUpCisgICAgICAgIGQuYWRkQ2FsbGJh
Y2sobGFtYmRhIHJlczogc2VsZi5nZXRUZXN0c1Jlc3VsdHMoUmVSdW5BUElUZXN0cy5uYW1lKSkK
KyAgICAgICAgZC5hZGRDYWxsYmFjayhsYW1iZGEgcmVzOiBzZWxmLmdldFRlc3RzUmVzdWx0cyhS
dW5BUElUZXN0c1dpdGhvdXRQYXRjaC5uYW1lKSkKKyAgICAgICAgZC5hZGRDYWxsYmFjayhsYW1i
ZGEgcmVzOiBzZWxmLmFuYWx5emVSZXN1bHRzKCkpCisgICAgICAgIHJldHVybiBkZWZlci5zdWNj
ZWVkKE5vbmUpCisKKyAgICBkZWYgYW5hbHl6ZVJlc3VsdHMoc2VsZik6CisgICAgICAgIGlmIG5v
dCBzZWxmLnJlc3VsdHMgb3IgbGVuKHNlbGYucmVzdWx0cykgPT0gMDoKKyAgICAgICAgICAgIHNl
bGYuX2FkZFRvTG9nKCdzdGRlcnInLCAiVW5hYmxlIHRvIHBhcnNlIEFQSSB0ZXN0IHJlc3VsdHM6
IHt9Ii5mb3JtYXQoc2VsZi5yZXN1bHRzKSkKKyAgICAgICAgICAgIHNlbGYuZmluaXNoZWQoUkVU
UlkpCisgICAgICAgICAgICBzZWxmLmJ1aWxkLmJ1aWxkRmluaXNoZWQoWyJVbmFibGUgdG8gcGFy
c2UgQVBJIHRlc3QgcmVzdWx0cyJdLCBSRVRSWSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisg
ICAgICAgIGZpcnN0X3J1bl9yZXN1bHRzID0gc2VsZi5yZXN1bHRzLmdldChSdW5BUElUZXN0cy5u
YW1lKQorICAgICAgICBzZWNvbmRfcnVuX3Jlc3VsdHMgPSBzZWxmLnJlc3VsdHMuZ2V0KFJlUnVu
QVBJVGVzdHMubmFtZSkKKyAgICAgICAgY2xlYW5fdHJlZV9yZXN1bHRzID0gc2VsZi5yZXN1bHRz
LmdldChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaC5uYW1lKQorCisgICAgICAgIGlmIG5vdCAoZmly
c3RfcnVuX3Jlc3VsdHMgYW5kIHNlY29uZF9ydW5fcmVzdWx0cyBhbmQgY2xlYW5fdHJlZV9yZXN1
bHRzKToKKyAgICAgICAgICAgIHNlbGYuZmluaXNoZWQoUkVUUlkpCisgICAgICAgICAgICBzZWxm
LmJ1aWxkLmJ1aWxkRmluaXNoZWQoWyJVbmFibGUgdG8gcGFyc2UgQVBJIHRlc3QgcmVzdWx0cyJd
LCBSRVRSWSkKKyAgICAgICAgICAgIHJldHVybiAtMQorCisgICAgICAgIGRlZiBnZXRBUElUZXN0
RmFpbHVyZXMocmVzdWx0KToKKyAgICAgICAgICAgICMgVE9ETzogQW5hbHl6ZSBUaW1lLW91dCwg
Q3Jhc2ggYW5kIEZhaWx1cmUgaW5kZXBlbmRlbnRseQorICAgICAgICAgICAgcmV0dXJuIHNldChb
ZmFpbHVyZS5nZXQoJ25hbWUnKSBmb3IgZmFpbHVyZSBpbiByZXN1bHQuZ2V0KCJUaW1lZG91dCIs
IFtdKV0gKworICAgICAgICAgICAgICAgIFtmYWlsdXJlLmdldCgnbmFtZScpIGZvciBmYWlsdXJl
IGluIHJlc3VsdC5nZXQoIkNyYXNoZWQiLCBbXSldICsKKyAgICAgICAgICAgICAgICBbZmFpbHVy
ZS5nZXQoJ25hbWUnKSBmb3IgZmFpbHVyZSBpbiByZXN1bHQuZ2V0KCJGYWlsZWQiLCBbXSldKQor
CisgICAgICAgIGZpcnN0X3J1bl9mYWlsdXJlcyA9IGdldEFQSVRlc3RGYWlsdXJlcyhmaXJzdF9y
dW5fcmVzdWx0cykKKyAgICAgICAgc2Vjb25kX3J1bl9mYWlsdXJlcyA9IGdldEFQSVRlc3RGYWls
dXJlcyhzZWNvbmRfcnVuX3Jlc3VsdHMpCisgICAgICAgIGNsZWFuX3RyZWVfZmFpbHVyZXMgPSBn
ZXRBUElUZXN0RmFpbHVyZXMoY2xlYW5fdHJlZV9yZXN1bHRzKQorCisgICAgICAgIHNlbGYuX2Fk
ZFRvTG9nKCdzdGRlcnInLCAiXG5GYWlsdXJlcyBpbiBBUEkgVGVzdCBmaXJzdCBydW46IHt9Ii5m
b3JtYXQoZmlyc3RfcnVuX2ZhaWx1cmVzKSkKKyAgICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVy
cicsICJcbkZhaWx1cmVzIGluIEFQSSBUZXN0IHNlY29uZCBydW46IHt9Ii5mb3JtYXQoZmlyc3Rf
cnVuX2ZhaWx1cmVzKSkKKyAgICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICJcbkZhaWx1
cmVzIGluIEFQSSBUZXN0IG9uIGNsZWFuIHRyZWU6IHt9Ii5mb3JtYXQoY2xlYW5fdHJlZV9mYWls
dXJlcykpCisgICAgICAgIGZhaWx1cmVzX3dpdGhfcGF0Y2ggPSBmaXJzdF9ydW5fZmFpbHVyZXMu
aW50ZXJzZWN0aW9uKHNlY29uZF9ydW5fZmFpbHVyZXMpCisgICAgICAgIG5ld19mYWlsdXJlcyA9
IGZhaWx1cmVzX3dpdGhfcGF0Y2ggLSBjbGVhbl90cmVlX2ZhaWx1cmVzCisgICAgICAgIG5ld19m
YWlsdXJlc19zdHJpbmcgPSAnLCAnLmpvaW4oW2ZhaWx1cmVfbmFtZS5yZXBsYWNlKCdUZXN0V2Vi
S2l0QVBJLicsICcnKSBmb3IgZmFpbHVyZV9uYW1lIGluIG5ld19mYWlsdXJlc10pCisKKyAgICAg
ICAgaWYgbmV3X2ZhaWx1cmVzOgorICAgICAgICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycics
ICJcbk5ldyBmYWlsdXJlczoge31cbiIuZm9ybWF0KG5ld19mYWlsdXJlcykpCisgICAgICAgICAg
ICBzZWxmLmZpbmlzaGVkKEZBSUxVUkUpCisgICAgICAgICAgICBzZWxmLmJ1aWxkLnJlc3VsdHMg
PSBGQUlMVVJFCisgICAgICAgICAgICBtZXNzYWdlID0gJ0ZvdW5kIHt9IG5ldyBBUEkgVGVzdHMg
ZmFpbHVyZXM6IHt9Jy5mb3JtYXQobGVuKG5ld19mYWlsdXJlcyksIG5ld19mYWlsdXJlc19zdHJp
bmcpCisgICAgICAgICAgICBzZWxmLmRlc2NyaXB0aW9uRG9uZSA9IG1lc3NhZ2UKKyAgICAgICAg
ICAgIHNlbGYuYnVpbGQuYnVpbGRGaW5pc2hlZChbbWVzc2FnZV0sIEZBSUxVUkUpCisgICAgICAg
IGVsc2U6CisgICAgICAgICAgICBzZWxmLl9hZGRUb0xvZygnc3RkZXJyJywgIlxuTm8gbmV3IGZh
aWx1cmVzXG4iKQorICAgICAgICAgICAgc2VsZi5maW5pc2hlZChTVUNDRVNTKQorICAgICAgICAg
ICAgc2VsZi5idWlsZC5yZXN1bHRzID0gU1VDQ0VTUworICAgICAgICAgICAgc2VsZi5kZXNjcmlw
dGlvbkRvbmUgPSAiUGFzc2VkIEFQSSB0ZXN0cyIKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRm91
bmQge30gcHJlLWV4aXN0aW5nIEFQSSB0ZXN0cyBmYWlsdXJlcyIuZm9ybWF0KGxlbihjbGVhbl90
cmVlX2ZhaWx1cmVzKSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRGaW5pc2hlZChbbWVz
c2FnZV0sIFNVQ0NFU1MpCisKKyAgICBAZGVmZXIuaW5saW5lQ2FsbGJhY2tzCisgICAgZGVmIF9h
ZGRUb0xvZyhzZWxmLCBsb2dOYW1lLCBtZXNzYWdlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgbG9nID0gc2VsZi5nZXRMb2cobG9nTmFtZSkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgor
ICAgICAgICAgICAgbG9nID0geWllbGQgc2VsZi5hZGRMb2cobG9nTmFtZSkKKyAgICAgICAgbG9n
LmFkZFN0ZG91dChtZXNzYWdlKQorCisgICAgZGVmIGdldEJ1aWxkU3RlcEJ5TmFtZShzZWxmLCBu
YW1lKToKKyAgICAgICAgZm9yIHN0ZXAgaW4gc2VsZi5idWlsZC5leGVjdXRlZFN0ZXBzOgorICAg
ICAgICAgICAgaWYgc3RlcC5uYW1lID09IG5hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZXAKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBkZWZlci5pbmxpbmVDYWxsYmFja3MKKyAg
ICBkZWYgZ2V0VGVzdHNSZXN1bHRzKHNlbGYsIG5hbWUpOgorICAgICAgICBzdGVwID0gc2VsZi5n
ZXRCdWlsZFN0ZXBCeU5hbWUobmFtZSkKKyAgICAgICAgaWYgbm90IHN0ZXA6CisgICAgICAgICAg
ICBzZWxmLl9hZGRUb0xvZygnc3RkZXJyJywgIkVSUk9SOiBzdGVwIG5vdCBmb3VuZDoge30iLmZv
cm1hdChzdGVwKSkKKyAgICAgICAgICAgIGRlZmVyLnJldHVyblZhbHVlKE5vbmUpCisKKyAgICAg
ICAgbG9ncyA9IHlpZWxkIHNlbGYubWFzdGVyLmRiLmxvZ3MuZ2V0TG9ncyhzdGVwLnN0ZXBpZCkK
KyAgICAgICAgbG9nID0gbmV4dCgobG9nIGZvciBsb2cgaW4gbG9ncyBpZiBsb2dbJ25hbWUnXSA9
PSB1J2pzb24nKSwgTm9uZSkKKyAgICAgICAgaWYgbm90IGxvZzoKKyAgICAgICAgICAgIHNlbGYu
X2FkZFRvTG9nKCdzdGRlcnInLCAiRVJST1I6IGxvZyBmb3Igc3RlcCBub3QgZm91bmQ6IHt9Ii5m
b3JtYXQoc3RlcCkpCisgICAgICAgICAgICBkZWZlci5yZXR1cm5WYWx1ZShOb25lKQorCisgICAg
ICAgIGxhc3RsaW5lID0gaW50KG1heCgwLCBsb2dbJ251bV9saW5lcyddIC0gMSkpCisgICAgICAg
IGxvZ0xpbmVzID0geWllbGQgc2VsZi5tYXN0ZXIuZGIubG9ncy5nZXRMb2dMaW5lcyhsb2dbJ2lk
J10sIDAsIGxhc3RsaW5lKQorICAgICAgICBpZiBsb2dbJ3R5cGUnXSA9PSAncyc6CisgICAgICAg
ICAgICBsb2dMaW5lcyA9ICIiLmpvaW4oW2xpbmVbMTpdIGZvciBsaW5lIGluIGxvZ0xpbmVzLnNw
bGl0bGluZXMoKV0pCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yZXN1bHRzW25h
bWVdID0ganNvbi5sb2Fkcyhsb2dMaW5lcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBl
eDoKKyAgICAgICAgICAgIHNlbGYuX2FkZFRvTG9nKCdzdGRlcnInLCAiRVJST1I6IHVuYWJsZSB0
byBwYXJzZSBkYXRhLCBleGNlcHRpb246IHt9Ii5mb3JtYXQoZXgpKQorCiAKIGNsYXNzIEFyY2hp
dmVUZXN0UmVzdWx0cyhzaGVsbC5TaGVsbENvbW1hbmQpOgogICAgIGNvbW1hbmQgPSBbJ3B5dGhv
bicsICdUb29scy9CdWlsZFNsYXZlU3VwcG9ydC90ZXN0LXJlc3VsdC1hcmNoaXZlJywK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365387</attachid>
            <date>2019-03-20 13:21:48 -0700</date>
            <delta_ts>2019-03-21 12:51:17 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>retry-api-tests-v2.patch</filename>
            <type>text/plain</type>
            <size>9886</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzIzMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3IEBACisyMDE5LTAzLTIwICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbZXdzLWJ1aWxkXSBSZXRyeSBBUEkgdGVzdCBpbiBjYXNlIG9mIGZhaWx1
cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYw
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1
aWxkU2xhdmVTdXBwb3J0L2V3cy1idWlsZC9zdGVwcy5weToKKyAgICAgICAgKFVuQXBwbHlQYXRj
aElmUmVxdWlyZWQuZG9TdGVwSWYpOiBVcGRhdGVkIGRvU3RlcElmIHRvIGluY2x1ZGUgcGF0Y2hG
YWlsZWRBUElUZXN0cy4KKyAgICAgICAgKENvbXBpbGVXZWJLaXRUb1QuZG9TdGVwSWYpOiBEaXR0
by4KKyAgICAgICAgKFJ1bkFQSVRlc3RzLmV2YWx1YXRlQ29tbWFuZCk6IENoZWNrIGlmIHRlc3Rz
IGZhaWxlZCBhbmQgcmV0cnkgdGhlbSBpZiByZXF1aXJlZC4KKyAgICAgICAgKFJlUnVuQVBJVGVz
dHMpOiBSZS1ydW4gQVBJIHRlc3RzLgorICAgICAgICAoUmVSdW5BUElUZXN0cy5ldmFsdWF0ZUNv
bW1hbmQpOiBDaGVjayBpZiB0ZXN0cyBmYWlsZWQgYW5kIHJldHJ5IG9uIGNsZWFuIGJ1aWxkIGlm
IHJlcXVpcmVkLgorICAgICAgICAoUnVuQVBJVGVzdHNXaXRob3V0UGF0Y2gpOiBSdW4gQVBJIHRl
c3RzIHdpdGhvdXQgcGF0Y2guCisgICAgICAgIChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaC5kb1N0
ZXBJZik6CisgICAgICAgIChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaC5oaWRlU3RlcElmKToKKyAg
ICAgICAgKFJ1bkFQSVRlc3RzV2l0aG91dFBhdGNoLmV2YWx1YXRlQ29tbWFuZCk6CisgICAgICAg
IChBbmFseXplQVBJVGVzdHNSZXN1bHRzKTogQW5hbHl6ZSBBUEkgdGVzdCByZXN1bHRzIGZyb20g
cHJldmlvdXMgcnVucy4KKyAgICAgICAgKEFuYWx5emVBUElUZXN0c1Jlc3VsdHMuc3RhcnQpOgor
ICAgICAgICAoQW5hbHl6ZUFQSVRlc3RzUmVzdWx0cy5hbmFseXplUmVzdWx0cyk6IEFuYWx5emUg
QVBJIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgKEFuYWx5emVBUElUZXN0c1Jlc3VsdHMuZ2V0QnVp
bGRTdGVwQnlOYW1lKTogU2VhcmNoIGZvciBhIGJ1aWxkIHN0ZXAgYnkgbmFtZS4KKyAgICAgICAg
KEFuYWx5emVBUElUZXN0c1Jlc3VsdHMuZ2V0VGVzdHNSZXN1bHRzKTogR2V0IHRoZSB0ZXN0IHJl
c3VsdHMgZnJvbSBwcmV2aW91cyBBUEkgdGVzc3Qgc3RlcHMuCisgICAgICAgICogQnVpbGRTbGF2
ZVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzX3VuaXR0ZXN0LnB5OiBNb25rZXkgcGF0Y2hlZCBGYWtl
QnVpbGQuCisKIDIwMTktMDMtMjAgIEFha2FzaCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtld3MtYnVpbGRdIEltcHJvdmUgZmFpbHVyZSBzdW1tYXJ5IHN0cmluZyBm
b3IgQXBwbHlQYXRjaCBzdGVwCkluZGV4OiBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYnVp
bGQvc3RlcHMucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWJ1
aWxkL3N0ZXBzLnB5CShyZXZpc2lvbiAyNDMyMzApCisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9y
dC9ld3MtYnVpbGQvc3RlcHMucHkJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAgZnJv
bSBidWlsZGJvdC5zdGVwcy5zb3VyY2UgaW1wb3J0IGdpdAogZnJvbSBidWlsZGJvdC5zdGVwcy53
b3JrZXIgaW1wb3J0IENvbXBvc2l0ZVN0ZXBNaXhpbgogZnJvbSB0d2lzdGVkLmludGVybmV0IGlt
cG9ydCBkZWZlcgogCitpbXBvcnQganNvbgogaW1wb3J0IHJlCiBpbXBvcnQgcmVxdWVzdHMKIApA
QCAtMzc2LDcgKzM3Nyw3IEBAIGNsYXNzIFVuQXBwbHlQYXRjaElmUmVxdWlyZWQoQ2xlYW5Xb3Jr
aW4KICAgICBkZXNjcmlwdGlvbkRvbmUgPSBbJ1VuYXBwbGllZCBwYXRjaCddCiAKICAgICBkZWYg
ZG9TdGVwSWYoc2VsZiwgc3RlcCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldFByb3BlcnR5KCdw
YXRjaEZhaWxlZFRvQnVpbGQnKSBvciBzZWxmLmdldFByb3BlcnR5KCdwYXRjaEZhaWxlZEpTQ1Rl
c3RzJykKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkVG9CdWls
ZCcpIG9yIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkSlNDVGVzdHMnKSBvciBzZWxmLmdl
dFByb3BlcnR5KCdwYXRjaEZhaWxlZEFQSVRlc3RzJykKIAogICAgIGRlZiBoaWRlU3RlcElmKHNl
bGYsIHJlc3VsdHMsIHN0ZXApOgogICAgICAgICByZXR1cm4gbm90IHNlbGYuZG9TdGVwSWYoc3Rl
cCkKQEAgLTUyNiw3ICs1MjcsNyBAQCBjbGFzcyBDb21waWxlV2ViS2l0VG9UKENvbXBpbGVXZWJL
aXQpOgogICAgIGhhbHRPbkZhaWx1cmUgPSBUcnVlCiAKICAgICBkZWYgZG9TdGVwSWYoc2VsZiwg
c3RlcCk6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldFByb3BlcnR5KCdwYXRjaEZhaWxlZFRvQnVp
bGQnKQorICAgICAgICByZXR1cm4gc2VsZi5nZXRQcm9wZXJ0eSgncGF0Y2hGYWlsZWRUb0J1aWxk
Jykgb3Igc2VsZi5nZXRQcm9wZXJ0eSgncGF0Y2hGYWlsZWRBUElUZXN0cycpCiAKICAgICBkZWYg
aGlkZVN0ZXBJZihzZWxmLCByZXN1bHRzLCBzdGVwKToKICAgICAgICAgcmV0dXJuIG5vdCBzZWxm
LmRvU3RlcElmKHN0ZXApCkBAIC03MTAsNiArNzExLDE0NyBAQCBjbGFzcyBSdW5BUElUZXN0cyhU
ZXN0V2l0aEZhaWx1cmVDb3VudCk6CiAgICAgICAgICAgICByZXR1cm4gMAogICAgICAgICByZXR1
cm4gaW50KG1hdGNoLmdyb3VwKCdyYW4nKSkgLSBpbnQobWF0Y2guZ3JvdXAoJ3Bhc3NlZCcpKQog
CisgICAgZGVmIGV2YWx1YXRlQ29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICByYyA9IHN1cGVy
KFJ1bkFQSVRlc3RzLCBzZWxmKS5ldmFsdWF0ZUNvbW1hbmQoY21kKQorICAgICAgICBpZiByYyA9
PSBTVUNDRVNTOgorICAgICAgICAgICAgbWVzc2FnZSA9ICdQYXNzZWQgQVBJIHRlc3RzJworICAg
ICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbkRvbmUgPSBtZXNzYWdlCisgICAgICAgICAgICBzZWxm
LmJ1aWxkLnJlc3VsdHMgPSBTVUNDRVNTCisgICAgICAgICAgICBzZWxmLmJ1aWxkLmJ1aWxkRmlu
aXNoZWQoW21lc3NhZ2VdLCBTVUNDRVNTKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Vs
Zi5idWlsZC5hZGRTdGVwc0FmdGVyQ3VycmVudFN0ZXAoW1JlUnVuQVBJVGVzdHMoKV0pCisKKyAg
ICAgICAgcmV0dXJuIHJjCisKKworY2xhc3MgUmVSdW5BUElUZXN0cyhSdW5BUElUZXN0cyk6Cisg
ICAgbmFtZSA9ICdyZS1ydW4tYXBpLXRlc3RzJworCisgICAgZGVmIGV2YWx1YXRlQ29tbWFuZChz
ZWxmLCBjbWQpOgorICAgICAgICByYyA9IFRlc3RXaXRoRmFpbHVyZUNvdW50LmV2YWx1YXRlQ29t
bWFuZChzZWxmLCBjbWQpCisgICAgICAgIGlmIHJjID09IFNVQ0NFU1M6CisgICAgICAgICAgICBz
ZWxmLmZpbmlzaGVkKFNVQ0NFU1MpCisgICAgICAgICAgICBtZXNzYWdlID0gJ1Bhc3NlZCBBUEkg
dGVzdHMnCisgICAgICAgICAgICBzZWxmLmRlc2NyaXB0aW9uRG9uZSA9IG1lc3NhZ2UKKyAgICAg
ICAgICAgIHNlbGYuYnVpbGQucmVzdWx0cyA9IFNVQ0NFU1MKKyAgICAgICAgICAgIHNlbGYuYnVp
bGQuYnVpbGRGaW5pc2hlZChbbWVzc2FnZV0sIFNVQ0NFU1MpCisgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdwYXRjaEZhaWxlZEFQSVRlc3RzJywgVHJ1ZSkKKyAg
ICAgICAgICAgIHNlbGYuYnVpbGQuYWRkU3RlcHNBZnRlckN1cnJlbnRTdGVwKFtVbkFwcGx5UGF0
Y2hJZlJlcXVpcmVkKCksIENvbXBpbGVXZWJLaXRUb1QoKSwgUnVuQVBJVGVzdHNXaXRob3V0UGF0
Y2goKSwgQW5hbHl6ZUFQSVRlc3RzUmVzdWx0cygpXSkKKyAgICAgICAgcmV0dXJuIHJjCisKKwor
Y2xhc3MgUnVuQVBJVGVzdHNXaXRob3V0UGF0Y2goUnVuQVBJVGVzdHMpOgorICAgIG5hbWUgPSAn
cnVuLWFwaS10ZXN0cy13aXRob3V0LXBhdGNoJworCisgICAgZGVmIGRvU3RlcElmKHNlbGYsIHN0
ZXApOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRQcm9wZXJ0eSgncGF0Y2hGYWlsZWRBUElUZXN0
cycpCisKKyAgICBkZWYgaGlkZVN0ZXBJZihzZWxmLCByZXN1bHRzLCBzdGVwKToKKyAgICAgICAg
cmV0dXJuIG5vdCBzZWxmLmRvU3RlcElmKHN0ZXApCisKKyAgICBkZWYgZXZhbHVhdGVDb21tYW5k
KHNlbGYsIGNtZCk6CisgICAgICAgIHJldHVybiBUZXN0V2l0aEZhaWx1cmVDb3VudC5ldmFsdWF0
ZUNvbW1hbmQoc2VsZiwgY21kKQorCisKK2NsYXNzIEFuYWx5emVBUElUZXN0c1Jlc3VsdHMoYnVp
bGRzdGVwLkJ1aWxkU3RlcCk6CisgICAgbmFtZSA9ICdhbmFseXplLWFwaS10ZXN0cy1yZXN1bHRz
JworICAgIGRlc2NyaXB0aW9uID0gWydhbmFseXplLWFwaS10ZXN0LXJlc3VsdHMnXQorICAgIGRl
c2NyaXB0aW9uRG9uZSA9IFsnYW5hbHl6ZS1hcGktdGVzdHMtcmVzdWx0cyddCisKKyAgICBkZWYg
c3RhcnQoc2VsZik6CisgICAgICAgIHNlbGYucmVzdWx0cyA9IHt9CisgICAgICAgIGQgPSBzZWxm
LmdldFRlc3RzUmVzdWx0cyhSdW5BUElUZXN0cy5uYW1lKQorICAgICAgICBkLmFkZENhbGxiYWNr
KGxhbWJkYSByZXM6IHNlbGYuZ2V0VGVzdHNSZXN1bHRzKFJlUnVuQVBJVGVzdHMubmFtZSkpCisg
ICAgICAgIGQuYWRkQ2FsbGJhY2sobGFtYmRhIHJlczogc2VsZi5nZXRUZXN0c1Jlc3VsdHMoUnVu
QVBJVGVzdHNXaXRob3V0UGF0Y2gubmFtZSkpCisgICAgICAgIGQuYWRkQ2FsbGJhY2sobGFtYmRh
IHJlczogc2VsZi5hbmFseXplUmVzdWx0cygpKQorICAgICAgICByZXR1cm4gZGVmZXIuc3VjY2Vl
ZChOb25lKQorCisgICAgZGVmIGFuYWx5emVSZXN1bHRzKHNlbGYpOgorICAgICAgICBpZiBub3Qg
c2VsZi5yZXN1bHRzIG9yIGxlbihzZWxmLnJlc3VsdHMpID09IDA6CisgICAgICAgICAgICBzZWxm
Ll9hZGRUb0xvZygnc3RkZXJyJywgIlVuYWJsZSB0byBwYXJzZSBBUEkgdGVzdCByZXN1bHRzOiB7
fSIuZm9ybWF0KHNlbGYucmVzdWx0cykpCisgICAgICAgICAgICBzZWxmLmZpbmlzaGVkKFJFVFJZ
KQorICAgICAgICAgICAgc2VsZi5idWlsZC5idWlsZEZpbmlzaGVkKFsiVW5hYmxlIHRvIHBhcnNl
IEFQSSB0ZXN0IHJlc3VsdHMiXSwgUkVUUlkpCisgICAgICAgICAgICByZXR1cm4gLTEKKworICAg
ICAgICBmaXJzdF9ydW5fcmVzdWx0cyA9IHNlbGYucmVzdWx0cy5nZXQoUnVuQVBJVGVzdHMubmFt
ZSkKKyAgICAgICAgc2Vjb25kX3J1bl9yZXN1bHRzID0gc2VsZi5yZXN1bHRzLmdldChSZVJ1bkFQ
SVRlc3RzLm5hbWUpCisgICAgICAgIGNsZWFuX3RyZWVfcmVzdWx0cyA9IHNlbGYucmVzdWx0cy5n
ZXQoUnVuQVBJVGVzdHNXaXRob3V0UGF0Y2gubmFtZSkKKworICAgICAgICBpZiBub3QgKGZpcnN0
X3J1bl9yZXN1bHRzIGFuZCBzZWNvbmRfcnVuX3Jlc3VsdHMgYW5kIGNsZWFuX3RyZWVfcmVzdWx0
cyk6CisgICAgICAgICAgICBzZWxmLmZpbmlzaGVkKFJFVFJZKQorICAgICAgICAgICAgc2VsZi5i
dWlsZC5idWlsZEZpbmlzaGVkKFsiVW5hYmxlIHRvIHBhcnNlIEFQSSB0ZXN0IHJlc3VsdHMiXSwg
UkVUUlkpCisgICAgICAgICAgICByZXR1cm4gLTEKKworICAgICAgICBkZWYgZ2V0QVBJVGVzdEZh
aWx1cmVzKHJlc3VsdCk6CisgICAgICAgICAgICAjIFRPRE86IEFuYWx5emUgVGltZS1vdXQsIENy
YXNoIGFuZCBGYWlsdXJlIGluZGVwZW5kZW50bHkKKyAgICAgICAgICAgIHJldHVybiBzZXQoW2Zh
aWx1cmUuZ2V0KCduYW1lJykgZm9yIGZhaWx1cmUgaW4gcmVzdWx0LmdldCgiVGltZWRvdXQiLCBb
XSldICsKKyAgICAgICAgICAgICAgICBbZmFpbHVyZS5nZXQoJ25hbWUnKSBmb3IgZmFpbHVyZSBp
biByZXN1bHQuZ2V0KCJDcmFzaGVkIiwgW10pXSArCisgICAgICAgICAgICAgICAgW2ZhaWx1cmUu
Z2V0KCduYW1lJykgZm9yIGZhaWx1cmUgaW4gcmVzdWx0LmdldCgiRmFpbGVkIiwgW10pXSkKKwor
ICAgICAgICBmaXJzdF9ydW5fZmFpbHVyZXMgPSBnZXRBUElUZXN0RmFpbHVyZXMoZmlyc3RfcnVu
X3Jlc3VsdHMpCisgICAgICAgIHNlY29uZF9ydW5fZmFpbHVyZXMgPSBnZXRBUElUZXN0RmFpbHVy
ZXMoc2Vjb25kX3J1bl9yZXN1bHRzKQorICAgICAgICBjbGVhbl90cmVlX2ZhaWx1cmVzID0gZ2V0
QVBJVGVzdEZhaWx1cmVzKGNsZWFuX3RyZWVfcmVzdWx0cykKKworICAgICAgICBzZWxmLl9hZGRU
b0xvZygnc3RkZXJyJywgIlxuRmFpbHVyZXMgaW4gQVBJIFRlc3QgZmlyc3QgcnVuOiB7fSIuZm9y
bWF0KGZpcnN0X3J1bl9mYWlsdXJlcykpCisgICAgICAgIHNlbGYuX2FkZFRvTG9nKCdzdGRlcnIn
LCAiXG5GYWlsdXJlcyBpbiBBUEkgVGVzdCBzZWNvbmQgcnVuOiB7fSIuZm9ybWF0KGZpcnN0X3J1
bl9mYWlsdXJlcykpCisgICAgICAgIHNlbGYuX2FkZFRvTG9nKCdzdGRlcnInLCAiXG5GYWlsdXJl
cyBpbiBBUEkgVGVzdCBvbiBjbGVhbiB0cmVlOiB7fSIuZm9ybWF0KGNsZWFuX3RyZWVfZmFpbHVy
ZXMpKQorICAgICAgICBmYWlsdXJlc193aXRoX3BhdGNoID0gZmlyc3RfcnVuX2ZhaWx1cmVzLmlu
dGVyc2VjdGlvbihzZWNvbmRfcnVuX2ZhaWx1cmVzKQorICAgICAgICBuZXdfZmFpbHVyZXMgPSBm
YWlsdXJlc193aXRoX3BhdGNoIC0gY2xlYW5fdHJlZV9mYWlsdXJlcworICAgICAgICBuZXdfZmFp
bHVyZXNfc3RyaW5nID0gJywgJy5qb2luKFtmYWlsdXJlX25hbWUucmVwbGFjZSgnVGVzdFdlYktp
dEFQSS4nLCAnJykgZm9yIGZhaWx1cmVfbmFtZSBpbiBuZXdfZmFpbHVyZXNdKQorCisgICAgICAg
IGlmIG5ld19mYWlsdXJlczoKKyAgICAgICAgICAgIHNlbGYuX2FkZFRvTG9nKCdzdGRlcnInLCAi
XG5OZXcgZmFpbHVyZXM6IHt9XG4iLmZvcm1hdChuZXdfZmFpbHVyZXMpKQorICAgICAgICAgICAg
c2VsZi5maW5pc2hlZChGQUlMVVJFKQorICAgICAgICAgICAgc2VsZi5idWlsZC5yZXN1bHRzID0g
RkFJTFVSRQorICAgICAgICAgICAgbWVzc2FnZSA9ICdGb3VuZCB7fSBuZXcgQVBJIFRlc3RzIGZh
aWx1cmVzOiB7fScuZm9ybWF0KGxlbihuZXdfZmFpbHVyZXMpLCBuZXdfZmFpbHVyZXNfc3RyaW5n
KQorICAgICAgICAgICAgc2VsZi5kZXNjcmlwdGlvbkRvbmUgPSBtZXNzYWdlCisgICAgICAgICAg
ICBzZWxmLmJ1aWxkLmJ1aWxkRmluaXNoZWQoW21lc3NhZ2VdLCBGQUlMVVJFKQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICJcbk5vIG5ldyBmYWls
dXJlc1xuIikKKyAgICAgICAgICAgIHNlbGYuZmluaXNoZWQoU1VDQ0VTUykKKyAgICAgICAgICAg
IHNlbGYuYnVpbGQucmVzdWx0cyA9IFNVQ0NFU1MKKyAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRp
b25Eb25lID0gIlBhc3NlZCBBUEkgdGVzdHMiCisgICAgICAgICAgICBtZXNzYWdlID0gIkZvdW5k
IHt9IHByZS1leGlzdGluZyBBUEkgdGVzdHMgZmFpbHVyZXMiLmZvcm1hdChsZW4oY2xlYW5fdHJl
ZV9mYWlsdXJlcykpCisgICAgICAgICAgICBzZWxmLmJ1aWxkLmJ1aWxkRmluaXNoZWQoW21lc3Nh
Z2VdLCBTVUNDRVNTKQorCisgICAgQGRlZmVyLmlubGluZUNhbGxiYWNrcworICAgIGRlZiBfYWRk
VG9Mb2coc2VsZiwgbG9nTmFtZSwgbWVzc2FnZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAg
IGxvZyA9IHNlbGYuZ2V0TG9nKGxvZ05hbWUpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAg
ICAgICAgICAgIGxvZyA9IHlpZWxkIHNlbGYuYWRkTG9nKGxvZ05hbWUpCisgICAgICAgIGxvZy5h
ZGRTdGRvdXQobWVzc2FnZSkKKworICAgIGRlZiBnZXRCdWlsZFN0ZXBCeU5hbWUoc2VsZiwgbmFt
ZSk6CisgICAgICAgIGZvciBzdGVwIGluIHNlbGYuYnVpbGQuZXhlY3V0ZWRTdGVwczoKKyAgICAg
ICAgICAgIGlmIHN0ZXAubmFtZSA9PSBuYW1lOgorICAgICAgICAgICAgICAgIHJldHVybiBzdGVw
CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBAZGVmZXIuaW5saW5lQ2FsbGJhY2tzCisgICAg
ZGVmIGdldFRlc3RzUmVzdWx0cyhzZWxmLCBuYW1lKToKKyAgICAgICAgc3RlcCA9IHNlbGYuZ2V0
QnVpbGRTdGVwQnlOYW1lKG5hbWUpCisgICAgICAgIGlmIG5vdCBzdGVwOgorICAgICAgICAgICAg
c2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICJFUlJPUjogc3RlcCBub3QgZm91bmQ6IHt9Ii5mb3Jt
YXQoc3RlcCkpCisgICAgICAgICAgICBkZWZlci5yZXR1cm5WYWx1ZShOb25lKQorCisgICAgICAg
IGxvZ3MgPSB5aWVsZCBzZWxmLm1hc3Rlci5kYi5sb2dzLmdldExvZ3Moc3RlcC5zdGVwaWQpCisg
ICAgICAgIGxvZyA9IG5leHQoKGxvZyBmb3IgbG9nIGluIGxvZ3MgaWYgbG9nWyduYW1lJ10gPT0g
dSdqc29uJyksIE5vbmUpCisgICAgICAgIGlmIG5vdCBsb2c6CisgICAgICAgICAgICBzZWxmLl9h
ZGRUb0xvZygnc3RkZXJyJywgIkVSUk9SOiBsb2cgZm9yIHN0ZXAgbm90IGZvdW5kOiB7fSIuZm9y
bWF0KHN0ZXApKQorICAgICAgICAgICAgZGVmZXIucmV0dXJuVmFsdWUoTm9uZSkKKworICAgICAg
ICBsYXN0bGluZSA9IGludChtYXgoMCwgbG9nWydudW1fbGluZXMnXSAtIDEpKQorICAgICAgICBs
b2dMaW5lcyA9IHlpZWxkIHNlbGYubWFzdGVyLmRiLmxvZ3MuZ2V0TG9nTGluZXMobG9nWydpZCdd
LCAwLCBsYXN0bGluZSkKKyAgICAgICAgaWYgbG9nWyd0eXBlJ10gPT0gJ3MnOgorICAgICAgICAg
ICAgbG9nTGluZXMgPSAiIi5qb2luKFtsaW5lWzE6XSBmb3IgbGluZSBpbiBsb2dMaW5lcy5zcGxp
dGxpbmVzKCldKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmVzdWx0c1tuYW1l
XSA9IGpzb24ubG9hZHMobG9nTGluZXMpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6
CisgICAgICAgICAgICBzZWxmLl9hZGRUb0xvZygnc3RkZXJyJywgIkVSUk9SOiB1bmFibGUgdG8g
cGFyc2UgZGF0YSwgZXhjZXB0aW9uOiB7fSIuZm9ybWF0KGV4KSkKKwogCiBjbGFzcyBBcmNoaXZl
VGVzdFJlc3VsdHMoc2hlbGwuU2hlbGxDb21tYW5kKToKICAgICBjb21tYW5kID0gWydweXRob24n
LCAnVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvdGVzdC1yZXN1bHQtYXJjaGl2ZScsCkluZGV4OiBU
b29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYnVpbGQvc3RlcHNfdW5pdHRlc3QucHkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzX3VuaXR0ZXN0
LnB5CShyZXZpc2lvbiAyNDMyMzApCisrKyBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYnVp
bGQvc3RlcHNfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDEwIEBAIGZy
b20gdHdpc3RlZC50cmlhbCBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBzdGVwcyBpbXBvcnQgKgog
CisjIFdvcmthcm91bmQgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9idWlsZGJvdC9idWlsZGJvdC9p
c3N1ZXMvNDY2OQorZnJvbSBidWlsZGJvdC50ZXN0LmZha2UuZmFrZWJ1aWxkIGltcG9ydCBGYWtl
QnVpbGQKK0Zha2VCdWlsZC5hZGRTdGVwc0FmdGVyQ3VycmVudFN0ZXAgPSBsYW1iZGEgRmFrZUJ1
aWxkLCBzdGVwX2ZhY3RvcmllczogTm9uZQorCiAKIGNsYXNzIEV4cGVjdE1hc3RlclNoZWxsQ29t
bWFuZChvYmplY3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tYW5kLCB3b3JrZGlyPU5v
bmUsIGVudj1Ob25lLCB1c2VQVFk9MCk6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>365597</attachid>
            <date>2019-03-21 12:51:17 -0700</date>
            <delta_ts>2019-03-21 16:12:04 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>retry-api-tests-v3.patch</filename>
            <type>text/plain</type>
            <size>9671</size>
            <attacher name="Aakash Jain">aakash_jain</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI0MzMwMikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3IEBACisyMDE5LTAzLTIxICBBYWthc2ggSmFpbiAgPGFha2FzaF9qYWluQGFwcGxlLmNv
bT4KKworICAgICAgICBbZXdzLWJ1aWxkXSBSZXRyeSBBUEkgdGVzdCBpbiBjYXNlIG9mIGZhaWx1
cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTYw
MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEJ1
aWxkU2xhdmVTdXBwb3J0L2V3cy1idWlsZC9zdGVwcy5weToKKyAgICAgICAgKFVuQXBwbHlQYXRj
aElmUmVxdWlyZWQuZG9TdGVwSWYpOiBVcGRhdGVkIGRvU3RlcElmIHRvIGluY2x1ZGUgcGF0Y2hG
YWlsZWRBUElUZXN0cy4KKyAgICAgICAgKENvbXBpbGVXZWJLaXRUb1QuZG9TdGVwSWYpOiBEaXR0
by4KKyAgICAgICAgKFJ1bkFQSVRlc3RzLmV2YWx1YXRlQ29tbWFuZCk6IENoZWNrIGlmIHRlc3Rz
IGZhaWxlZCBhbmQgcmV0cnkgdGhlbSBpZiByZXF1aXJlZC4KKyAgICAgICAgKFJlUnVuQVBJVGVz
dHMpOiBSZS1ydW4gQVBJIHRlc3RzLgorICAgICAgICAoUmVSdW5BUElUZXN0cy5ldmFsdWF0ZUNv
bW1hbmQpOiBDaGVjayBpZiB0ZXN0cyBmYWlsZWQgYW5kIHJldHJ5IG9uIGNsZWFuIGJ1aWxkIGlm
IHJlcXVpcmVkLgorICAgICAgICAoUnVuQVBJVGVzdHNXaXRob3V0UGF0Y2gpOiBSdW4gQVBJIHRl
c3RzIHdpdGhvdXQgcGF0Y2guCisgICAgICAgIChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaC5kb1N0
ZXBJZik6CisgICAgICAgIChSdW5BUElUZXN0c1dpdGhvdXRQYXRjaC5oaWRlU3RlcElmKToKKyAg
ICAgICAgKFJ1bkFQSVRlc3RzV2l0aG91dFBhdGNoLmV2YWx1YXRlQ29tbWFuZCk6CisgICAgICAg
IChBbmFseXplQVBJVGVzdHNSZXN1bHRzKTogQW5hbHl6ZSBBUEkgdGVzdCByZXN1bHRzIGZyb20g
cHJldmlvdXMgcnVucy4KKyAgICAgICAgKEFuYWx5emVBUElUZXN0c1Jlc3VsdHMuc3RhcnQpOgor
ICAgICAgICAoQW5hbHl6ZUFQSVRlc3RzUmVzdWx0cy5hbmFseXplUmVzdWx0cyk6IEFuYWx5emUg
QVBJIHRlc3QgcmVzdWx0cy4KKyAgICAgICAgKEFuYWx5emVBUElUZXN0c1Jlc3VsdHMuZ2V0QnVp
bGRTdGVwQnlOYW1lKTogU2VhcmNoIGZvciBhIGJ1aWxkIHN0ZXAgYnkgbmFtZS4KKyAgICAgICAg
KEFuYWx5emVBUElUZXN0c1Jlc3VsdHMuZ2V0VGVzdHNSZXN1bHRzKTogR2V0IHRoZSB0ZXN0IHJl
c3VsdHMgZnJvbSBwcmV2aW91cyBBUEkgdGVzc3Qgc3RlcHMuCisgICAgICAgICogQnVpbGRTbGF2
ZVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzX3VuaXR0ZXN0LnB5OiBNb25rZXkgcGF0Y2hlZCBGYWtl
QnVpbGQuCisKIDIwMTktMDMtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgVXBkYXRlIHN0YXR1cyBpbmFjdGl2ZSBjb21taXR0ZXJzJyBzdGF0dXMgdG8g
J2NvbnRyaWJ1dG9yJy4KSW5kZXg6IFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1idWlsZC9z
dGVwcy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9CdWlsZFNsYXZlU3VwcG9ydC9ld3MtYnVpbGQv
c3RlcHMucHkJKHJldmlzaW9uIDI0MzMwMikKKysrIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3
cy1idWlsZC9zdGVwcy5weQkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQCBmcm9tIGJ1
aWxkYm90LnN0ZXBzLnNvdXJjZSBpbXBvcnQgZ2l0CiBmcm9tIGJ1aWxkYm90LnN0ZXBzLndvcmtl
ciBpbXBvcnQgQ29tcG9zaXRlU3RlcE1peGluCiBmcm9tIHR3aXN0ZWQuaW50ZXJuZXQgaW1wb3J0
IGRlZmVyCiAKK2ltcG9ydCBqc29uCiBpbXBvcnQgcmUKIGltcG9ydCByZXF1ZXN0cwogCkBAIC0z
NzYsNyArMzc3LDcgQEAgY2xhc3MgVW5BcHBseVBhdGNoSWZSZXF1aXJlZChDbGVhbldvcmtpbgog
ICAgIGRlc2NyaXB0aW9uRG9uZSA9IFsnVW5hcHBsaWVkIHBhdGNoJ10KIAogICAgIGRlZiBkb1N0
ZXBJZihzZWxmLCBzdGVwKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNo
RmFpbGVkVG9CdWlsZCcpIG9yIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkSlNDVGVzdHMn
KQorICAgICAgICByZXR1cm4gc2VsZi5nZXRQcm9wZXJ0eSgncGF0Y2hGYWlsZWRUb0J1aWxkJykg
b3Igc2VsZi5nZXRQcm9wZXJ0eSgncGF0Y2hGYWlsZWRKU0NUZXN0cycpIG9yIHNlbGYuZ2V0UHJv
cGVydHkoJ3BhdGNoRmFpbGVkQVBJVGVzdHMnKQogCiAgICAgZGVmIGhpZGVTdGVwSWYoc2VsZiwg
cmVzdWx0cywgc3RlcCk6CiAgICAgICAgIHJldHVybiBub3Qgc2VsZi5kb1N0ZXBJZihzdGVwKQpA
QCAtNTI2LDcgKzUyNyw3IEBAIGNsYXNzIENvbXBpbGVXZWJLaXRUb1QoQ29tcGlsZVdlYktpdCk6
CiAgICAgaGFsdE9uRmFpbHVyZSA9IFRydWUKIAogICAgIGRlZiBkb1N0ZXBJZihzZWxmLCBzdGVw
KToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0UHJvcGVydHkoJ3BhdGNoRmFpbGVkVG9CdWlsZCcp
CisgICAgICAgIHJldHVybiBzZWxmLmdldFByb3BlcnR5KCdwYXRjaEZhaWxlZFRvQnVpbGQnKSBv
ciBzZWxmLmdldFByb3BlcnR5KCdwYXRjaEZhaWxlZEFQSVRlc3RzJykKIAogICAgIGRlZiBoaWRl
U3RlcElmKHNlbGYsIHJlc3VsdHMsIHN0ZXApOgogICAgICAgICByZXR1cm4gbm90IHNlbGYuZG9T
dGVwSWYoc3RlcCkKQEAgLTcxMCw2ICs3MTEsMTM5IEBAIGNsYXNzIFJ1bkFQSVRlc3RzKFRlc3RX
aXRoRmFpbHVyZUNvdW50KToKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIHJldHVybiBp
bnQobWF0Y2guZ3JvdXAoJ3JhbicpKSAtIGludChtYXRjaC5ncm91cCgncGFzc2VkJykpCiAKKyAg
ICBkZWYgZXZhbHVhdGVDb21tYW5kKHNlbGYsIGNtZCk6CisgICAgICAgIHJjID0gc3VwZXIoUnVu
QVBJVGVzdHMsIHNlbGYpLmV2YWx1YXRlQ29tbWFuZChjbWQpCisgICAgICAgIGlmIHJjID09IFNV
Q0NFU1M6CisgICAgICAgICAgICBtZXNzYWdlID0gJ1Bhc3NlZCBBUEkgdGVzdHMnCisgICAgICAg
ICAgICBzZWxmLmRlc2NyaXB0aW9uRG9uZSA9IG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuYnVp
bGQucmVzdWx0cyA9IFNVQ0NFU1MKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRGaW5pc2hl
ZChbbWVzc2FnZV0sIFNVQ0NFU1MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmJ1
aWxkLmFkZFN0ZXBzQWZ0ZXJDdXJyZW50U3RlcChbUmVSdW5BUElUZXN0cygpXSkKKyAgICAgICAg
cmV0dXJuIHJjCisKKworY2xhc3MgUmVSdW5BUElUZXN0cyhSdW5BUElUZXN0cyk6CisgICAgbmFt
ZSA9ICdyZS1ydW4tYXBpLXRlc3RzJworCisgICAgZGVmIGV2YWx1YXRlQ29tbWFuZChzZWxmLCBj
bWQpOgorICAgICAgICByYyA9IFRlc3RXaXRoRmFpbHVyZUNvdW50LmV2YWx1YXRlQ29tbWFuZChz
ZWxmLCBjbWQpCisgICAgICAgIGlmIHJjID09IFNVQ0NFU1M6CisgICAgICAgICAgICBtZXNzYWdl
ID0gJ1Bhc3NlZCBBUEkgdGVzdHMnCisgICAgICAgICAgICBzZWxmLmRlc2NyaXB0aW9uRG9uZSA9
IG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYuYnVpbGQucmVzdWx0cyA9IFNVQ0NFU1MKKyAgICAg
ICAgICAgIHNlbGYuYnVpbGQuYnVpbGRGaW5pc2hlZChbbWVzc2FnZV0sIFNVQ0NFU1MpCisgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNldFByb3BlcnR5KCdwYXRjaEZhaWxlZEFQSVRl
c3RzJywgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuYWRkU3RlcHNBZnRlckN1cnJlbnRT
dGVwKFtVbkFwcGx5UGF0Y2hJZlJlcXVpcmVkKCksIENvbXBpbGVXZWJLaXRUb1QoKSwgUnVuQVBJ
VGVzdHNXaXRob3V0UGF0Y2goKSwgQW5hbHl6ZUFQSVRlc3RzUmVzdWx0cygpXSkKKyAgICAgICAg
cmV0dXJuIHJjCisKKworY2xhc3MgUnVuQVBJVGVzdHNXaXRob3V0UGF0Y2goUnVuQVBJVGVzdHMp
OgorICAgIG5hbWUgPSAncnVuLWFwaS10ZXN0cy13aXRob3V0LXBhdGNoJworCisgICAgZGVmIGV2
YWx1YXRlQ29tbWFuZChzZWxmLCBjbWQpOgorICAgICAgICByZXR1cm4gVGVzdFdpdGhGYWlsdXJl
Q291bnQuZXZhbHVhdGVDb21tYW5kKHNlbGYsIGNtZCkKKworCitjbGFzcyBBbmFseXplQVBJVGVz
dHNSZXN1bHRzKGJ1aWxkc3RlcC5CdWlsZFN0ZXApOgorICAgIG5hbWUgPSAnYW5hbHl6ZS1hcGkt
dGVzdHMtcmVzdWx0cycKKyAgICBkZXNjcmlwdGlvbiA9IFsnYW5hbHl6ZS1hcGktdGVzdC1yZXN1
bHRzJ10KKyAgICBkZXNjcmlwdGlvbkRvbmUgPSBbJ2FuYWx5emUtYXBpLXRlc3RzLXJlc3VsdHMn
XQorCisgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICBzZWxmLnJlc3VsdHMgPSB7fQorICAg
ICAgICBkID0gc2VsZi5nZXRUZXN0c1Jlc3VsdHMoUnVuQVBJVGVzdHMubmFtZSkKKyAgICAgICAg
ZC5hZGRDYWxsYmFjayhsYW1iZGEgcmVzOiBzZWxmLmdldFRlc3RzUmVzdWx0cyhSZVJ1bkFQSVRl
c3RzLm5hbWUpKQorICAgICAgICBkLmFkZENhbGxiYWNrKGxhbWJkYSByZXM6IHNlbGYuZ2V0VGVz
dHNSZXN1bHRzKFJ1bkFQSVRlc3RzV2l0aG91dFBhdGNoLm5hbWUpKQorICAgICAgICBkLmFkZENh
bGxiYWNrKGxhbWJkYSByZXM6IHNlbGYuYW5hbHl6ZVJlc3VsdHMoKSkKKyAgICAgICAgcmV0dXJu
IGRlZmVyLnN1Y2NlZWQoTm9uZSkKKworICAgIGRlZiBhbmFseXplUmVzdWx0cyhzZWxmKToKKyAg
ICAgICAgaWYgbm90IHNlbGYucmVzdWx0cyBvciBsZW4oc2VsZi5yZXN1bHRzKSA9PSAwOgorICAg
ICAgICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICdVbmFibGUgdG8gcGFyc2UgQVBJIHRl
c3QgcmVzdWx0czoge30nLmZvcm1hdChzZWxmLnJlc3VsdHMpKQorICAgICAgICAgICAgc2VsZi5m
aW5pc2hlZChSRVRSWSkKKyAgICAgICAgICAgIHNlbGYuYnVpbGQuYnVpbGRGaW5pc2hlZChbJ1Vu
YWJsZSB0byBwYXJzZSBBUEkgdGVzdCByZXN1bHRzJ10sIFJFVFJZKQorICAgICAgICAgICAgcmV0
dXJuIC0xCisKKyAgICAgICAgZmlyc3RfcnVuX3Jlc3VsdHMgPSBzZWxmLnJlc3VsdHMuZ2V0KFJ1
bkFQSVRlc3RzLm5hbWUpCisgICAgICAgIHNlY29uZF9ydW5fcmVzdWx0cyA9IHNlbGYucmVzdWx0
cy5nZXQoUmVSdW5BUElUZXN0cy5uYW1lKQorICAgICAgICBjbGVhbl90cmVlX3Jlc3VsdHMgPSBz
ZWxmLnJlc3VsdHMuZ2V0KFJ1bkFQSVRlc3RzV2l0aG91dFBhdGNoLm5hbWUpCisKKyAgICAgICAg
aWYgbm90IChmaXJzdF9ydW5fcmVzdWx0cyBhbmQgc2Vjb25kX3J1bl9yZXN1bHRzIGFuZCBjbGVh
bl90cmVlX3Jlc3VsdHMpOgorICAgICAgICAgICAgc2VsZi5maW5pc2hlZChSRVRSWSkKKyAgICAg
ICAgICAgIHNlbGYuYnVpbGQuYnVpbGRGaW5pc2hlZChbJ1VuYWJsZSB0byBwYXJzZSBBUEkgdGVz
dCByZXN1bHRzJ10sIFJFVFJZKQorICAgICAgICAgICAgcmV0dXJuIC0xCisKKyAgICAgICAgZGVm
IGdldEFQSVRlc3RGYWlsdXJlcyhyZXN1bHQpOgorICAgICAgICAgICAgIyBUT0RPOiBBbmFseXpl
IFRpbWUtb3V0LCBDcmFzaCBhbmQgRmFpbHVyZSBpbmRlcGVuZGVudGx5CisgICAgICAgICAgICBy
ZXR1cm4gc2V0KFtmYWlsdXJlLmdldCgnbmFtZScpIGZvciBmYWlsdXJlIGluIHJlc3VsdC5nZXQo
J1RpbWVkb3V0JywgW10pXSArCisgICAgICAgICAgICAgICAgW2ZhaWx1cmUuZ2V0KCduYW1lJykg
Zm9yIGZhaWx1cmUgaW4gcmVzdWx0LmdldCgnQ3Jhc2hlZCcsIFtdKV0gKworICAgICAgICAgICAg
ICAgIFtmYWlsdXJlLmdldCgnbmFtZScpIGZvciBmYWlsdXJlIGluIHJlc3VsdC5nZXQoJ0ZhaWxl
ZCcsIFtdKV0pCisKKyAgICAgICAgZmlyc3RfcnVuX2ZhaWx1cmVzID0gZ2V0QVBJVGVzdEZhaWx1
cmVzKGZpcnN0X3J1bl9yZXN1bHRzKQorICAgICAgICBzZWNvbmRfcnVuX2ZhaWx1cmVzID0gZ2V0
QVBJVGVzdEZhaWx1cmVzKHNlY29uZF9ydW5fcmVzdWx0cykKKyAgICAgICAgY2xlYW5fdHJlZV9m
YWlsdXJlcyA9IGdldEFQSVRlc3RGYWlsdXJlcyhjbGVhbl90cmVlX3Jlc3VsdHMpCisKKyAgICAg
ICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICdcbkZhaWx1cmVzIGluIEFQSSBUZXN0IGZpcnN0
IHJ1bjoge30nLmZvcm1hdChmaXJzdF9ydW5fZmFpbHVyZXMpKQorICAgICAgICBzZWxmLl9hZGRU
b0xvZygnc3RkZXJyJywgJ1xuRmFpbHVyZXMgaW4gQVBJIFRlc3Qgc2Vjb25kIHJ1bjoge30nLmZv
cm1hdChmaXJzdF9ydW5fZmFpbHVyZXMpKQorICAgICAgICBzZWxmLl9hZGRUb0xvZygnc3RkZXJy
JywgJ1xuRmFpbHVyZXMgaW4gQVBJIFRlc3Qgb24gY2xlYW4gdHJlZToge30nLmZvcm1hdChjbGVh
bl90cmVlX2ZhaWx1cmVzKSkKKyAgICAgICAgZmFpbHVyZXNfd2l0aF9wYXRjaCA9IGZpcnN0X3J1
bl9mYWlsdXJlcy5pbnRlcnNlY3Rpb24oc2Vjb25kX3J1bl9mYWlsdXJlcykKKyAgICAgICAgbmV3
X2ZhaWx1cmVzID0gZmFpbHVyZXNfd2l0aF9wYXRjaCAtIGNsZWFuX3RyZWVfZmFpbHVyZXMKKyAg
ICAgICAgbmV3X2ZhaWx1cmVzX3N0cmluZyA9ICcsICcuam9pbihbZmFpbHVyZV9uYW1lLnJlcGxh
Y2UoJ1Rlc3RXZWJLaXRBUEkuJywgJycpIGZvciBmYWlsdXJlX25hbWUgaW4gbmV3X2ZhaWx1cmVz
XSkKKworICAgICAgICBpZiBuZXdfZmFpbHVyZXM6CisgICAgICAgICAgICBzZWxmLl9hZGRUb0xv
Zygnc3RkZXJyJywgJ1xuTmV3IGZhaWx1cmVzOiB7fVxuJy5mb3JtYXQobmV3X2ZhaWx1cmVzKSkK
KyAgICAgICAgICAgIHNlbGYuZmluaXNoZWQoRkFJTFVSRSkKKyAgICAgICAgICAgIHNlbGYuYnVp
bGQucmVzdWx0cyA9IEZBSUxVUkUKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAnRm91bmQge30gbmV3
IEFQSSBUZXN0cyBmYWlsdXJlczoge30nLmZvcm1hdChsZW4obmV3X2ZhaWx1cmVzKSwgbmV3X2Zh
aWx1cmVzX3N0cmluZykKKyAgICAgICAgICAgIHNlbGYuZGVzY3JpcHRpb25Eb25lID0gbWVzc2Fn
ZQorICAgICAgICAgICAgc2VsZi5idWlsZC5idWlsZEZpbmlzaGVkKFttZXNzYWdlXSwgRkFJTFVS
RSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FkZFRvTG9nKCdzdGRlcnInLCAn
XG5ObyBuZXcgZmFpbHVyZXNcbicpCisgICAgICAgICAgICBzZWxmLmZpbmlzaGVkKFNVQ0NFU1Mp
CisgICAgICAgICAgICBzZWxmLmJ1aWxkLnJlc3VsdHMgPSBTVUNDRVNTCisgICAgICAgICAgICBz
ZWxmLmRlc2NyaXB0aW9uRG9uZSA9ICdQYXNzZWQgQVBJIHRlc3RzJworICAgICAgICAgICAgbWVz
c2FnZSA9ICdGb3VuZCB7fSBwcmUtZXhpc3RpbmcgQVBJIHRlc3RzIGZhaWx1cmVzJy5mb3JtYXQo
bGVuKGNsZWFuX3RyZWVfZmFpbHVyZXMpKQorICAgICAgICAgICAgc2VsZi5idWlsZC5idWlsZEZp
bmlzaGVkKFttZXNzYWdlXSwgU1VDQ0VTUykKKworICAgIEBkZWZlci5pbmxpbmVDYWxsYmFja3MK
KyAgICBkZWYgX2FkZFRvTG9nKHNlbGYsIGxvZ05hbWUsIG1lc3NhZ2UpOgorICAgICAgICB0cnk6
CisgICAgICAgICAgICBsb2cgPSBzZWxmLmdldExvZyhsb2dOYW1lKQorICAgICAgICBleGNlcHQg
S2V5RXJyb3I6CisgICAgICAgICAgICBsb2cgPSB5aWVsZCBzZWxmLmFkZExvZyhsb2dOYW1lKQor
ICAgICAgICBsb2cuYWRkU3Rkb3V0KG1lc3NhZ2UpCisKKyAgICBkZWYgZ2V0QnVpbGRTdGVwQnlO
YW1lKHNlbGYsIG5hbWUpOgorICAgICAgICBmb3Igc3RlcCBpbiBzZWxmLmJ1aWxkLmV4ZWN1dGVk
U3RlcHM6CisgICAgICAgICAgICBpZiBzdGVwLm5hbWUgPT0gbmFtZToKKyAgICAgICAgICAgICAg
ICByZXR1cm4gc3RlcAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgQGRlZmVyLmlubGluZUNh
bGxiYWNrcworICAgIGRlZiBnZXRUZXN0c1Jlc3VsdHMoc2VsZiwgbmFtZSk6CisgICAgICAgIHN0
ZXAgPSBzZWxmLmdldEJ1aWxkU3RlcEJ5TmFtZShuYW1lKQorICAgICAgICBpZiBub3Qgc3RlcDoK
KyAgICAgICAgICAgIHNlbGYuX2FkZFRvTG9nKCdzdGRlcnInLCAnRVJST1I6IHN0ZXAgbm90IGZv
dW5kOiB7fScuZm9ybWF0KHN0ZXApKQorICAgICAgICAgICAgZGVmZXIucmV0dXJuVmFsdWUoTm9u
ZSkKKworICAgICAgICBsb2dzID0geWllbGQgc2VsZi5tYXN0ZXIuZGIubG9ncy5nZXRMb2dzKHN0
ZXAuc3RlcGlkKQorICAgICAgICBsb2cgPSBuZXh0KChsb2cgZm9yIGxvZyBpbiBsb2dzIGlmIGxv
Z1snbmFtZSddID09IHUnanNvbicpLCBOb25lKQorICAgICAgICBpZiBub3QgbG9nOgorICAgICAg
ICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICdFUlJPUjogbG9nIGZvciBzdGVwIG5vdCBm
b3VuZDoge30nLmZvcm1hdChzdGVwKSkKKyAgICAgICAgICAgIGRlZmVyLnJldHVyblZhbHVlKE5v
bmUpCisKKyAgICAgICAgbGFzdGxpbmUgPSBpbnQobWF4KDAsIGxvZ1snbnVtX2xpbmVzJ10gLSAx
KSkKKyAgICAgICAgbG9nTGluZXMgPSB5aWVsZCBzZWxmLm1hc3Rlci5kYi5sb2dzLmdldExvZ0xp
bmVzKGxvZ1snaWQnXSwgMCwgbGFzdGxpbmUpCisgICAgICAgIGlmIGxvZ1sndHlwZSddID09ICdz
JzoKKyAgICAgICAgICAgIGxvZ0xpbmVzID0gJycuam9pbihbbGluZVsxOl0gZm9yIGxpbmUgaW4g
bG9nTGluZXMuc3BsaXRsaW5lcygpXSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxm
LnJlc3VsdHNbbmFtZV0gPSBqc29uLmxvYWRzKGxvZ0xpbmVzKQorICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgc2VsZi5fYWRkVG9Mb2coJ3N0ZGVycicsICdFUlJP
UjogdW5hYmxlIHRvIHBhcnNlIGRhdGEsIGV4Y2VwdGlvbjoge30nLmZvcm1hdChleCkpCisKIAog
Y2xhc3MgQXJjaGl2ZVRlc3RSZXN1bHRzKHNoZWxsLlNoZWxsQ29tbWFuZCk6CiAgICAgY29tbWFu
ZCA9IFsncHl0aG9uJywgJ1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L3Rlc3QtcmVzdWx0LWFyY2hp
dmUnLApJbmRleDogVG9vbHMvQnVpbGRTbGF2ZVN1cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzX3VuaXR0
ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2V3cy1idWlsZC9z
dGVwc191bml0dGVzdC5weQkocmV2aXNpb24gMjQzMzAyKQorKysgVG9vbHMvQnVpbGRTbGF2ZVN1
cHBvcnQvZXdzLWJ1aWxkL3N0ZXBzX3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiwxMCBAQCBmcm9tIHR3aXN0ZWQudHJpYWwgaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gc3Rl
cHMgaW1wb3J0ICoKIAorIyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vYnVpbGRi
b3QvYnVpbGRib3QvaXNzdWVzLzQ2NjkKK2Zyb20gYnVpbGRib3QudGVzdC5mYWtlLmZha2VidWls
ZCBpbXBvcnQgRmFrZUJ1aWxkCitGYWtlQnVpbGQuYWRkU3RlcHNBZnRlckN1cnJlbnRTdGVwID0g
bGFtYmRhIEZha2VCdWlsZCwgc3RlcF9mYWN0b3JpZXM6IE5vbmUKKwogCiBjbGFzcyBFeHBlY3RN
YXN0ZXJTaGVsbENvbW1hbmQob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgY29tbWFu
ZCwgd29ya2Rpcj1Ob25lLCBlbnY9Tm9uZSwgdXNlUFRZPTApOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>