<?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>134767</bug_id>
          
          <creation_ts>2014-07-09 07:08:59 -0700</creation_ts>
          <short_desc>Add support for automated W3C test baseline computation</short_desc>
          <delta_ts>2023-12-18 06:35:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=186359</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=169538</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>134766</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>agouaillard</cc>
    
    <cc>bjonesbe</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dpranke</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>gsnedders</cc>
    
    <cc>jbedard</cc>
    
    <cc>rhauck</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1021357</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-09 07:08:59 -0700</bug_when>
    <thetext>To ease the process of importing W3C tests as WebKit layout tests, it may be convenient to provide a tool that imports W3C tests, generates expected.txt files and related TestExpectation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021359</commentid>
    <comment_count>1</comment_count>
      <attachid>234636</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-09 07:13:27 -0700</bug_when>
    <thetext>Created attachment 234636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022787</commentid>
    <comment_count>2</comment_count>
      <attachid>235013</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-07-16 11:43:52 -0700</bug_when>
    <thetext>Created attachment 235013
skipping all tests by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035434</commentid>
    <comment_count>3</comment_count>
      <attachid>238170</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-09-16 03:16:00 -0700</bug_when>
    <thetext>Created attachment 238170
add support for merge of TestExpectations</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057590</commentid>
    <comment_count>4</comment_count>
      <attachid>243676</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-23 07:27:56 -0800</bug_when>
    <thetext>Created attachment 243676
Improving test expectation merge</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1057678</commentid>
    <comment_count>5</comment_count>
      <attachid>243704</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2014-12-23 15:39:13 -0800</bug_when>
    <thetext>Created attachment 243704
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058809</commentid>
    <comment_count>6</comment_count>
      <attachid>243704</attachid>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2015-01-05 14:08:56 -0800</bug_when>
    <thetext>Comment on attachment 243704
Patch

I&apos;m not convinced that we want to be automatically adding entries to TestExpectations for imported tests, especially without bugs. Also, often multiple imported tests will fail for the same reason, so it can be good to have a human look at them and intelligently add a single bug for these TestExpectations lines. That being said, I&apos;m all for a tool that makes it easier to quickly see which imported tests have failed an in what way to make it easier to create the test expectations entries and relevant bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058821</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2015-01-05 14:55:11 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 243704 [details]
&gt; Patch
&gt; 
&gt; I&apos;m not convinced that we want to be automatically adding entries to
&gt; TestExpectations for imported tests, especially without bugs. Also, often
&gt; multiple imported tests will fail for the same reason, so it can be good to
&gt; have a human look at them and intelligently add a single bug for these
&gt; TestExpectations lines. That being said, I&apos;m all for a tool that makes it
&gt; easier to quickly see which imported tests have failed an in what way to
&gt; make it easier to create the test expectations entries and relevant bugs.

I agree. I think having a tool to help humans triage failures is good. Mindlessly adding test expectations for all failing tests is not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058935</commentid>
    <comment_count>8</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-06 01:40:14 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Comment on attachment 243704 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I&apos;m not convinced that we want to be automatically adding entries to
&gt; &gt; TestExpectations for imported tests, especially without bugs. Also, often
&gt; &gt; multiple imported tests will fail for the same reason, so it can be good to
&gt; &gt; have a human look at them and intelligently add a single bug for these
&gt; &gt; TestExpectations lines. That being said, I&apos;m all for a tool that makes it
&gt; &gt; easier to quickly see which imported tests have failed an in what way to
&gt; &gt; make it easier to create the test expectations entries and relevant bugs.
&gt; 
&gt; I agree. I think having a tool to help humans triage failures is good.
&gt; Mindlessly adding test expectations for all failing tests is not.

Right, manual inspection of the results and augmentation of the generated test expectations is needed.
The tool to ease test results study may well be w3c_conformance_results.html from bug 134766.

Automatically generating WPT test expectations has some additional benefits, like ordering of the tests, clustering of the test suites...

One important use case is resyncing with the latest version of the WPT repo.
We should strive to make that effort minimal. This patch is an initial step towards that goal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059010</commentid>
    <comment_count>9</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2015-01-06 08:26:21 -0800</bug_when>
    <thetext>(In reply to comment #8) 
&gt; Right, manual inspection of the results and augmentation of the generated
&gt; test expectations is needed.
&gt; The tool to ease test results study may well be w3c_conformance_results.html
&gt; from bug 134766.

From a quick look, that does seem like a useful tool.

&gt; Automatically generating WPT test expectations has some additional benefits,
&gt; like ordering of the tests, clustering of the test suites...

I think those are outweighed by the detriment that if no one is triaging or filing bugs, issues just won&apos;t get fixed. I&apos;m also worried that a test that didn&apos;t fail before would start failing on import and the person running the import wouldn&apos;t notice.

&gt; One important use case is resyncing with the latest version of the WPT repo.
&gt; We should strive to make that effort minimal. This patch is an initial step
&gt; towards that goal.

I don&apos;t think that updating the test expectations file is the hardest part of the import. Blink has a script that imports both the WPT tests and the CSSWG tests (based on the same import-w3c-tests infrastructure). I recently used it to import the CSS Shapes tests, and since it&apos;s all or nothing, it imported some new WPT tests as well. There were some new failures, and I don&apos;t think automatically adding expectations would have made the task any easier, since I would have had to still triage them and file bugs.

One thing to note: on the Blink side, they use a whitelist to determine what parts of the CSSWG and W3C test suites to import. Perhaps if we went that route, it wouldn&apos;t seem like we need so many expectations? We could simply not import parts of the suite for things that we don&apos;t implement yet, and also could import in parts so that each piece could be triaged separately. Dirk Pranke built a lot of that stuff over there, and may have other suggestions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059131</commentid>
    <comment_count>10</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-06 13:12:43 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8) 
&gt; &gt; Right, manual inspection of the results and augmentation of the generated
&gt; &gt; test expectations is needed.
&gt; &gt; The tool to ease test results study may well be w3c_conformance_results.html
&gt; &gt; from bug 134766.
&gt; 
&gt; From a quick look, that does seem like a useful tool.
&gt; 
&gt; &gt; Automatically generating WPT test expectations has some additional benefits,
&gt; &gt; like ordering of the tests, clustering of the test suites...
&gt; 
&gt; I think those are outweighed by the detriment that if no one is triaging or
&gt; filing bugs, issues just won&apos;t get fixed. I&apos;m also worried that a test that
&gt; didn&apos;t fail before would start failing on import and the person running the
&gt; import wouldn&apos;t notice.

Ah, maybe the term &apos;automated&apos; in the title is a bit misleading...

The purpose of this script is to help the authoring of test-import patches by developers. It is the responsibility of the developer to do the triage, augment test expectations accordingly and submit the patch. I guess the patch would be accepted if sufficient triage is done.

This patch handles the case of partially passing tests: test expectations are added so that there is an incentive to fix them but they are marked as PASS since they should comply with the provided -expected.txt file.

It also allows incremental import: (sub)folder after (sub)folder.

&gt; &gt; One important use case is resyncing with the latest version of the WPT repo.
&gt; &gt; We should strive to make that effort minimal. This patch is an initial step
&gt; &gt; towards that goal.
&gt; 
&gt; I don&apos;t think that updating the test expectations file is the hardest part
&gt; of the import. Blink has a script that imports both the WPT tests and the
&gt; CSSWG tests (based on the same import-w3c-tests infrastructure). I recently
&gt; used it to import the CSS Shapes tests, and since it&apos;s all or nothing, it
&gt; imported some new WPT tests as well. There were some new failures, and I
&gt; don&apos;t think automatically adding expectations would have made the task any
&gt; easier, since I would have had to still triage them and file bugs.

From what I saw a while ago, Blink is not importing a lot of WPT tests right now. Also Blink is not importing any expected file, which simplifies things a bit.

&gt; 
&gt; One thing to note: on the Blink side, they use a whitelist to determine what
&gt; parts of the CSSWG and W3C test suites to import. Perhaps if we went that
&gt; route, it wouldn&apos;t seem like we need so many expectations? We could simply
&gt; not import parts of the suite for things that we don&apos;t implement yet, and
&gt; also could import in parts so that each piece could be triaged separately.
&gt; Dirk Pranke built a lot of that stuff over there, and may have other
&gt; suggestions.

To limit adding a lot of test expectation lines, we may only import tests that have/had at least one passing assertion. Bug 134766 tool can be used to manage the other tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059267</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2015-01-06 18:37:34 -0800</bug_when>
    <thetext>&gt; From what I saw a while ago, Blink is not importing a lot of WPT tests right now. 

This is correct.

&gt; Also Blink is not importing any expected file, which simplifies things a bit.

I&apos;m not sure what is meant by &quot;any expected file&quot; in this context?

Blink currently imports only reftests and script-only (js) tests, not tests that require pixel tests (manual review). script-only test may still produce partial failures, which can result in -expected.txt results.

Are you referring to pixel tests not being imported?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059369</commentid>
    <comment_count>12</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-07 04:35:54 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; From what I saw a while ago, Blink is not importing a lot of WPT tests right now. 
&gt; 
&gt; This is correct.
&gt; 
&gt; &gt; Also Blink is not importing any expected file, which simplifies things a bit.
&gt; 
&gt; I&apos;m not sure what is meant by &quot;any expected file&quot; in this context?

I was meaning the -expected.txt results.

&gt; 
&gt; Blink currently imports only reftests and script-only (js) tests, not tests
&gt; that require pixel tests (manual review). script-only test may still produce
&gt; partial failures, which can result in -expected.txt results.

Oh, I was not aware of that.
That looks better this way.

When running the whole test suite, it takes a lot of time due to fully failing (probably timeouting) tests. The current patch is importing them but marking them as Skip. Another approach may be to not import them until they get fixed, either in WPT repo side or in WebKit side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059596</commentid>
    <comment_count>13</comment_count>
    <who name="Bem Jones-Bey">bjonesbe</who>
    <bug_when>2015-01-07 15:59:15 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8) 
&gt; &gt; &gt; Right, manual inspection of the results and augmentation of the generated
&gt; &gt; &gt; test expectations is needed.
&gt; &gt; &gt; The tool to ease test results study may well be w3c_conformance_results.html
&gt; &gt; &gt; from bug 134766.
&gt; &gt; 
&gt; &gt; From a quick look, that does seem like a useful tool.
&gt; &gt; 
&gt; &gt; &gt; Automatically generating WPT test expectations has some additional benefits,
&gt; &gt; &gt; like ordering of the tests, clustering of the test suites...
&gt; &gt; 
&gt; &gt; I think those are outweighed by the detriment that if no one is triaging or
&gt; &gt; filing bugs, issues just won&apos;t get fixed. I&apos;m also worried that a test that
&gt; &gt; didn&apos;t fail before would start failing on import and the person running the
&gt; &gt; import wouldn&apos;t notice.
&gt; 
&gt; Ah, maybe the term &apos;automated&apos; in the title is a bit misleading...
&gt; 
&gt; The purpose of this script is to help the authoring of test-import patches
&gt; by developers. It is the responsibility of the developer to do the triage,
&gt; augment test expectations accordingly and submit the patch. I guess the
&gt; patch would be accepted if sufficient triage is done.
&gt; 
&gt; This patch handles the case of partially passing tests: test expectations
&gt; are added so that there is an incentive to fix them but they are marked as
&gt; PASS since they should comply with the provided -expected.txt file.
&gt; 
&gt; It also allows incremental import: (sub)folder after (sub)folder.
&gt; 

I like these features. I just don&apos;t think that it should edit the test expectations files, I think it should just give the user a report (which could be as simple as listing the lines that would need to be added to the TestExpectations) so that the user can then triage and add the appropriate lines to TestExpectations. It looks like there is a lot of code in this change just to manage intelligently editing the TestExpectations files, and I don&apos;t think that&apos;s worth the maintenance burden when the user is just going to have to edit them by hand anyways.

&gt; When running the whole test suite, it takes a lot of time due to fully
&gt; failing (probably timeouting) tests. The current patch is importing them but
&gt; marking them as Skip. Another approach may be to not import them until they
&gt; get fixed, either in WPT repo side or in WebKit side.

I think we should do like Blink is doing and import one part at at time, so that those tests can be fixed and made to work before going on to the next part of the suite. I don&apos;t think we get much value from having a large number of failing or skipped tests with no obvious owner to make them work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059787</commentid>
    <comment_count>14</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-08 04:46:00 -0800</bug_when>
    <thetext>
&gt; I like these features. I just don&apos;t think that it should edit the test
&gt; expectations files, I think it should just give the user a report (which
&gt; could be as simple as listing the lines that would need to be added to the
&gt; TestExpectations) so that the user can then triage and add the appropriate

This is the default behavior of this patch (generation of a TestExpectationsWPT file in WebKitBuild folder).

&gt; lines to TestExpectations. It looks like there is a lot of code in this
&gt; change just to manage intelligently editing the TestExpectations files, and
&gt; I don&apos;t think that&apos;s worth the maintenance burden when the user is just
&gt; going to have to edit them by hand anyways.

I think that kind of functionality will be useful in the future.
But we need hands-on experience before going further.

&gt; &gt; When running the whole test suite, it takes a lot of time due to fully
&gt; &gt; failing (probably timeouting) tests. The current patch is importing them but
&gt; &gt; marking them as Skip. Another approach may be to not import them until they
&gt; &gt; get fixed, either in WPT repo side or in WebKit side.
&gt; 
&gt; I think we should do like Blink is doing and import one part at at time, so
&gt; that those tests can be fixed and made to work before going on to the next
&gt; part of the suite. I don&apos;t think we get much value from having a large
&gt; number of failing or skipped tests with no obvious owner to make them work.

Agreed, a separate whitelist file should be a better way to manage failing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060822</commentid>
    <comment_count>15</comment_count>
      <attachid>244514</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-13 07:55:01 -0800</bug_when>
    <thetext>Created attachment 244514
Adding CSS testsuite support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060861</commentid>
    <comment_count>16</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2015-01-13 11:41:00 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created attachment 244514 [details]
&gt; Adding CSS testsuite support

As part of bug 134764, a whitelist is added to identify which test suites to add, similarly to blink.
Another list identifies the infrastructure files and folders that need to be copied and skipped by run-webkit-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1191418</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-09 19:30:41 -0700</bug_when>
    <thetext>Attachment 244514 did not pass style-queue:


ERROR: Tools/Scripts/webkitpy/w3c/test_updater.py:79:  [TestUpdater.test_paths] Class &apos;TestDownloader&apos; has no &apos;CSS_NAME&apos; member  [pylint/E1101] [5]
ERROR: Tools/Scripts/webkitpy/w3c/test_updater.py:79:  [TestUpdater.test_paths] Class &apos;TestDownloader&apos; has no &apos;WPT_NAME&apos; member  [pylint/E1101] [5]
Total errors found: 2 in 6 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>1191420</commentid>
    <comment_count>18</comment_count>
      <attachid>244514</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-05-09 19:37:08 -0700</bug_when>
    <thetext>Comment on attachment 244514
Adding CSS testsuite support

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

&gt; Tools/ChangeLog:11
&gt; +        update-w3c-tests is the script to update W3C imported test suites and their baselines.
&gt; +        TestUpdater is the main class that does the work.
&gt; +        It is similar in spirit to https://codereview.chromium.org/148173016 update-w3c-deps script in Blink.
&gt; +        It uses TestImporter to import the tests and run-webkit-tests to generate the missing baselines.

Instead of adding a new script, we should just add an option to import-w3c-tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198471</commentid>
    <comment_count>19</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2016-06-02 00:00:13 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Comment on attachment 244514 [details]
&gt; Adding CSS testsuite support
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=244514&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:11
&gt; &gt; +        update-w3c-tests is the script to update W3C imported test suites and their baselines.
&gt; &gt; +        TestUpdater is the main class that does the work.
&gt; &gt; +        It is similar in spirit to https://codereview.chromium.org/148173016 update-w3c-deps script in Blink.
&gt; &gt; +        It uses TestImporter to import the tests and run-webkit-tests to generate the missing baselines.
&gt; 
&gt; Instead of adding a new script, we should just add an option to
&gt; import-w3c-tests.

I upgraded import-w3c-tests to support most of the functionality present in this patch.
What is missing from this patch is running tests through rwt to rebase the expectations and rerunning the tests to detect flaky tests.
I am not sure this would add much though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1436068</commentid>
    <comment_count>20</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2018-06-25 08:48:14 -0700</bug_when>
    <thetext>(In reply to youenn fablet from comment #12)
&gt; (In reply to comment #11)
&gt; &gt; &gt; From what I saw a while ago, Blink is not importing a lot of WPT tests right now. 
&gt; &gt; 
&gt; &gt; This is correct.
&gt; &gt; 
&gt; &gt; &gt; Also Blink is not importing any expected file, which simplifies things a bit.
&gt; &gt; 
&gt; &gt; I&apos;m not sure what is meant by &quot;any expected file&quot; in this context?
&gt; 
&gt; I was meaning the -expected.txt results.
&gt; 

I guess this is bug 82245</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2000387</commentid>
    <comment_count>21</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2023-12-18 06:35:59 -0800</bug_when>
    <thetext>(In reply to youenn fablet from comment #19)
&gt; I upgraded import-w3c-tests to support most of the functionality present in
&gt; this patch.
&gt; What is missing from this patch is running tests through rwt to rebase the
&gt; expectations and rerunning the tests to detect flaky tests.
&gt; I am not sure this would add much though.

IMO, we&apos;re better off moving in the direction of update-test-expectations (originally from bug 169538), given that has knowledge of more platforms than just locally. We should make that able to also take a local layout-test-results directory and update from that (bug 266575), but at that point all this does is provide a single entry-point, which is probably not too useful when we want to move all these steps into automation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234636</attachid>
            <date>2014-07-09 07:13:27 -0700</date>
            <delta_ts>2014-07-16 11:43:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134767-20140709161308.patch</filename>
            <type>text/plain</type>
            <size>13508</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwNzk5CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dl
bmVyYXRlLXczYy1iYXNlbGluZSBiL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtdzNjLWJhc2VsaW5l
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjdhYWQxZDE1MDM4MDE3NTNhOWNhNDUyYzVhYTM2MTg2ZTNkOTJlNTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZQpAQCAt
MCwwICsxLDMxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIw
MTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04g
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3Jh
cHBlciBhcm91bmQgd2Via2l0cHkvdzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5weSIiIgorZnJv
bSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG11bHRpcHJvY2Vzc2luZ19ib290c3RyYXAKKworbXVs
dGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5ydW4oJ3dlYmtpdHB5JywgJ3czYycsICdnZW5lcmF0ZV93
M2NfYmFzZWxpbmUucHknKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0
L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQppbmRleCBlOGFi
Y2M5NTQ4ZjRkZDdhOTEyYzRjZWJmYzc5ZTJkMzI2ZDcwY2ViLi5kYmY3YzljN2Q1NmQwNTZlM2Mx
NTljYmI3Y2NmZjRhYWVhODFlOGIxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3BvcnQvYmFzZS5weQpA
QCAtMTAyNCw4ICsxMDI0LDE0IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKIAogICAgICAgICByZXR1
cm4gW3NlbGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLl93ZWJraXRfYmFzZWxpbmVfcGF0aChkKSwg
J1Rlc3RFeHBlY3RhdGlvbnMnKSBmb3IgZCBpbiBzZWFyY2hfcGF0aHNdCiAKKyAgICBkZWYgcGF0
aF90b193M2NfZXhwZWN0YXRpb25zX2ZpbGUoc2VsZik6CisgICAgICAgIGZ1bGxfcG9ydF9uYW1l
ID0gc2VsZi5wb3J0X25hbWUKKyAgICAgICAgaWYgc2VsZi5nZXRfb3B0aW9uKCd3ZWJraXRfdGVz
dF9ydW5uZXInKToKKyAgICAgICAgICAgIGZ1bGxfcG9ydF9uYW1lICs9ICItd2syIgorICAgICAg
ICByZXR1cm4gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYubGF5b3V0X3Rlc3RzX2RpcigpLCAn
cGxhdGZvcm0nLCBmdWxsX3BvcnRfbmFtZSwgJ1Rlc3RFeHBlY3RhdGlvbnNXM0MnKQorCiAgICAg
ZGVmIGV4cGVjdGF0aW9uc19maWxlcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhf
dG9fZ2VuZXJpY190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCldICsgc2VsZi5fcG9ydF9zcGVjaWZp
Y19leHBlY3RhdGlvbnNfZmlsZXMoKQorICAgICAgICByZXR1cm4gW3NlbGYucGF0aF90b19nZW5l
cmljX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKV0gKyBzZWxmLl9wb3J0X3NwZWNpZmljX2V4cGVj
dGF0aW9uc19maWxlcygpICsgW3NlbGYucGF0aF90b193M2NfZXhwZWN0YXRpb25zX2ZpbGUoKV0K
IAogICAgIGRlZiByZXBvc2l0b3J5X3BhdGhzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm5zIGEg
bGlzdCBvZiAocmVwb3NpdG9yeV9uYW1lLCByZXBvc2l0b3J5X3BhdGgpIHR1cGxlcyBvZiBpdHMg
ZGVwZW5kaW5nIGNvZGUgYmFzZS4KZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
dzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNj
L2dlbmVyYXRlX3czY19iYXNlbGluZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MjNjZWZjYTI1ZmFmYTM5ZjEz
NzY5MWZmM2Q1ZjI3NjVlYjkyMWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS93M2MvZ2VuZXJhdGVfdzNjX2Jhc2VsaW5lLnB5CkBAIC0wLDAgKzEsMjA3IEBACisj
IS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2Fub24g
SW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIiBHZW5lcmF0ZSBiYXNlbGluZXMg
YW5kIFRlc3RFeHBlY3RhdGlvbnMgZmlsZSBmb3IgVzNDIHRlc3RzLiIiIgorCitpbXBvcnQgYXJn
cGFyc2UKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgb3B0cGFyc2UKK2ltcG9ydCBvcworaW1wb3J0
IHN5cworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtp
dHB5LmxheW91dF90ZXN0cy5tb2RlbHMudGVzdF9leHBlY3RhdGlvbnMgaW1wb3J0IFRlc3RFeHBl
Y3RhdGlvbkxpbmUsIFRlc3RDb25maWd1cmF0aW9uQ29udmVydGVyCitmcm9tIHdlYmtpdHB5LnBv
cnQgaW1wb3J0IHBsYXRmb3JtX29wdGlvbnMKK2Zyb20gd2Via2l0cHkudzNjLmZhY3RvcnkgaW1w
b3J0IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyCitmcm9tIHdlYmtpdHB5LnczYy5ydW5fdzNj
X2NvbmZvcm1hbmNlX3Rlc3RzIGltcG9ydCBXM0NDb25mb3JtYW5jZVJ1bm5lcgorCitfbG9nID0g
bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworY2xhc3MgVzNDQmFzZWxpbmVHZW5lcmF0
b3Iob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAg
ICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworICAg
ICAgICBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lciA9IFczQ0NvbmZvcm1hbmNlUnVubmVyKHBvcnQs
IG9wdGlvbnMpCisgICAgICAgIHNlbGYuZXhwZWN0YXRpb25zID0gTm9uZQorCisgICAgZGVmIHVw
ZGF0ZV9mbGFreV90ZXN0cyhzZWxmKToKKyAgICAgICAgIyBBbGwgdGVzdHMgcHJlc2VudCBpbiB0
aGUgdGVzdF9yZXN1bHRzIGFyZSBmYWlsaW5nIGFuZCBzbyBhcmUgbWFya2VkIGFzIGZsYWt5Cisg
ICAgICAgIGZsYWt5X3Rlc3RzID0gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucmVzdWx0c19tYW5h
Z2VyKCkudGVzdF9yZXN1bHRzKCkKKyAgICAgICAgZm9yIHRlc3QgaW4gZmxha3lfdGVzdHM6Cisg
ICAgICAgICAgICBleHBlY3RhdGlvbiA9IFRlc3RFeHBlY3RhdGlvbkxpbmUoKQorICAgICAgICAg
ICAgZXhwZWN0YXRpb24ubmFtZSA9IHRlc3QKKyAgICAgICAgICAgIGV4cGVjdGF0aW9uLm1vZGlm
aWVycyA9IFsnU0tJUCddCisgICAgICAgICAgICBleHBlY3RhdGlvbi5jb21tZW50ID0gIkZsYWt5
IGFzc2VydGlvbiIKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0YXRpb25zW3Rlc3RdID0gZXhwZWN0
YXRpb24KKworICAgIGRlZiBnZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYsIGZp
bGVuYW1lKToKKyAgICAgICAgY3VycmVudF90ZXN0X3N1aXRlID0gTm9uZQorICAgICAgICB3aXRo
IG9wZW4oZmlsZW5hbWUsICd3KycpIGFzIG91dDoKKyAgICAgICAgICAgIF9jb252ZXJ0ZXIgPSBU
ZXN0Q29uZmlndXJhdGlvbkNvbnZlcnRlcihzZWxmLnBvcnQuYWxsX3Rlc3RfY29uZmlndXJhdGlv
bnMoKSwgc2VsZi5wb3J0LmNvbmZpZ3VyYXRpb25fc3BlY2lmaWVyX21hY3JvcygpKQorICAgICAg
ICAgICAgZm9yIHRlc3QgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHM6CisgICAgICAg
ICAgICAgICAgdGVzdF9zdWl0ZSA9IHRlc3RbbGVuKHNlbGYub3B0aW9ucy5fX2RpY3RfX1snaW1w
b3J0ZGlyJ10pICsgMTpdLnNwbGl0KCcvJylbMF0KKyAgICAgICAgICAgICAgICBpZiBub3QodGVz
dF9zdWl0ZSA9PSBjdXJyZW50X3Rlc3Rfc3VpdGUpOgorICAgICAgICAgICAgICAgICAgICBpZiBj
dXJyZW50X3Rlc3Rfc3VpdGU6CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQud3JpdGUoJyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LndyaXRlKCcjIEVuZCBvZiAnICsgY3VycmVudF90ZXN0X3N1aXRlICsgJ1xuJykKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dC53cml0ZSgnIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyNcblxu
JykKKyAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjI1xuJykKKyAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcjIFN0YXJ0IG9mICcgKyB0
ZXN0X3N1aXRlICsgJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjI1xuJykKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0
X3N1aXRlID0gdGVzdF9zdWl0ZQorICAgICAgICAgICAgICAgIGlmIG5vdCh0ZXN0IGluIHNlbGYu
ZXhwZWN0YXRpb25zKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAg
ICAgICBvdXQud3JpdGUoc2VsZi5leHBlY3RhdGlvbnNbdGVzdF0udG9fc3RyaW5nKF9jb252ZXJ0
ZXIpKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnXG4nKQorICAgICAgICAgICAgaWYgY3Vy
cmVudF90ZXN0X3N1aXRlOgorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyNcbicpCisgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcjIEVuZCBvZiAn
ICsgY3VycmVudF90ZXN0X3N1aXRlICsgJ1xuJykKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUo
JyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG5cbicpCisgICAgICAgICAgICBvdXQuY2xvc2Uo
KQorCisgICAgZGVmIGdlbmVyYXRlX2luaXRpYWxfdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6Cisg
ICAgICAgIHRlc3RzID0gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMKKyAgICAgICAgY29u
Zm9ybWFuY2VfcmVzdWx0cyA9IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJlc3VsdHNfbWFuYWdl
cigpLmNvbmZvcm1hbmNlX3Jlc3VsdHMoKQorICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IHt9
CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdF9zdGF0dXMgPSBj
b25mb3JtYW5jZV9yZXN1bHRzW3Rlc3RdCisgICAgICAgICAgICBpZiB0ZXN0X3N0YXR1cyA9PSAn
UEFTUyc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxpbmUgPSBUZXN0
RXhwZWN0YXRpb25MaW5lKCkKKyAgICAgICAgICAgIGxpbmUubmFtZSA9IHRlc3QKKyAgICAgICAg
ICAgIGlmIHRlc3Rfc3RhdHVzID09ICdUSU1FT1VUJzoKKyAgICAgICAgICAgICAgICBsaW5lLm1v
ZGlmaWVycyA9IFsnU0tJUCddCisgICAgICAgICAgICAgICAgbGluZS5jb21tZW50ID0gIlRlc3Qg
dGltZW91dCIKKyAgICAgICAgICAgIGVsaWYgdGVzdF9zdGF0dXMgPT0gJ0NSQVNIJzoKKyAgICAg
ICAgICAgICAgICBsaW5lLm1vZGlmaWVycyA9IFsnU0tJUCddCisgICAgICAgICAgICAgICAgbGlu
ZS5jb21tZW50ID0gIlRlc3QgY3Jhc2hpbmciCisgICAgICAgICAgICBlbGlmIHRlc3Rfc3RhdHVz
ID09ICdGQUlMJzoKKyAgICAgICAgICAgICAgICBsaW5lLm1vZGlmaWVycyA9IFsnU0tJUCddCisg
ICAgICAgICAgICAgICAgbGluZS5jb21tZW50ID0gIkFsbCBhc3NlcnRpb25zIGZhaWxpbmciCisg
ICAgICAgICAgICBlbGlmIHRlc3Rfc3RhdHVzID09ICdFUlJPUic6CisgICAgICAgICAgICAgICAg
bGluZS5tb2RpZmllcnMgPSBbJ1NLSVAnXQorICAgICAgICAgICAgICAgIGxpbmUuY29tbWVudCA9
ICJVbmtub3duIGZhaWx1cmUgcmVhc29uIgorICAgICAgICAgICAgZWxpZiB0ZXN0X3N0YXR1cyA9
PSAnUEFSVElBTCc6CisgICAgICAgICAgICAgICAgbGluZS5leHBlY3RhdGlvbnMgPSBbJ1BBU1Mn
XQorICAgICAgICAgICAgICAgIGxpbmUuY29tbWVudCA9ICJTb21lIGFzc2VydGlvbnMgcGFzc2lu
ZyIKKyAgICAgICAgICAgIHNlbGYuZXhwZWN0YXRpb25zW3Rlc3RdID0gbGluZQorCisgICAgZGVm
IG1vdmVfdGVzdF9leHBlY3RlZF9maWxlc190b19wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgZm9y
IHRlc3QgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHM6CisgICAgICAgICAgICBmaWxl
bmFtZSA9IHNlbGYucG9ydC5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCAnLnR4dCcsIEZhbHNlKQor
ICAgICAgICAgICAgaWYgbm90KGZpbGVuYW1lIGlzIE5vbmUpOgorICAgICAgICAgICAgICAgIGZp
bGVfcGF0aCA9IHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0ZW0uam9pbihzZWxmLnBvcnQubGF5b3V0
X3Rlc3RzX2RpcigpLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IGluIHNlbGYu
ZXhwZWN0YXRpb25zIGFuZCBzZWxmLmV4cGVjdGF0aW9uc1t0ZXN0XS5tb2RpZmllcnMgPT0gWydT
S0lQJ106CisgICAgICAgICAgICAgICAgICAgIHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0ZW0ucmVt
b3ZlKGZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICAjIFRPRE86IHByb2JhYmx5IGZvciBwb3J0cyBoYXZpbmcgYm90aCB3azEgYW5kIHdrMiBzdXBw
b3J0LCB3ZSB3b3VsZCBsaWtlIHRvIHN0b3JlIGV4cGVjdGVkLnR4dCBmaWxlcyBpbiB0aGUgbW9z
dCBzcGVjaWZpYyBmb2xkZXIKKyAgICAgICAgICAgICAgICAgICAgbmV3X2ZpbGVfcGF0aCA9IGZp
bGVfcGF0aC5yZXBsYWNlKHNlbGYucG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHNlbGYucG9ydC5i
YXNlbGluZV9wbGF0Zm9ybV9kaXIoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3J0Lmhv
c3QuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLnBvcnQuaG9zdC5maWxlc3lz
dGVtLmRpcm5hbWUobmV3X2ZpbGVfcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucG9y
dC5ob3N0LmZpbGVzeXN0ZW0uY29weWZpbGUoZmlsZV9wYXRoLCBuZXdfZmlsZV9wYXRoKQorICAg
ICAgICAgICAgICAgICAgICBzZWxmLnBvcnQuaG9zdC5maWxlc3lzdGVtLnJlbW92ZShmaWxlX3Bh
dGgpCisKKyAgICBkZWYgc2F2ZV93M2NfdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKKyAg
ICAgICAgZmlsZXN5c3RlbSA9IHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgdzNj
X2V4cGVjdGF0aW9uc19maWxlID0gc2VsZi5wb3J0LnBhdGhfdG9fdzNjX2V4cGVjdGF0aW9uc19m
aWxlKCkKKyAgICAgICAgaWYgZmlsZXN5c3RlbS5leGlzdHModzNjX2V4cGVjdGF0aW9uc19maWxl
KToKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0uY29weWZpbGUodzNjX2V4cGVjdGF0aW9uc19maWxl
LCB3M2NfZXhwZWN0YXRpb25zX2ZpbGUgKyAiLm9sZCIpCisKKyAgICBkZWYgcmVzdG9yZV93M2Nf
dGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKKyAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYu
cG9ydC5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgdzNjX2V4cGVjdGF0aW9uc19maWxlID0gc2Vs
Zi5wb3J0LnBhdGhfdG9fdzNjX2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICAgICAgaWYgZmlsZXN5
c3RlbS5leGlzdHModzNjX2V4cGVjdGF0aW9uc19maWxlICsgIi5vbGQiKToKKyAgICAgICAgICAg
IGZpbGVzeXN0ZW0uY29weWZpbGUodzNjX2V4cGVjdGF0aW9uc19maWxlICsgIi5vbGQiLCB3M2Nf
ZXhwZWN0YXRpb25zX2ZpbGUpCisgICAgICAgICAgICBmaWxlc3lzdGVtLnJlbW92ZSh3M2NfZXhw
ZWN0YXRpb25zX2ZpbGUgKyAiLm9sZCIpCisKKyAgICBkZWYgZ2VuZXJhdGVfYmFzZWxpbmUoc2Vs
Zik6CisgICAgICAgICMgZ2VuZXJhdGUgYmFzZWxpbmUgZm9yIGFsbCB0ZXN0cworICAgICAgICBp
ZiBub3Qgc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucnVuX3Rlc3RzKCk6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKworICAgICAgICAjIHByb2Nlc3MgYmFzZWxpbmUgdG8gZ2F0aGVyIHRlc3Qg
ZXhwZWN0YXRpb25zCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfaW5pdGlhbF90ZXN0X2V4cGVjdGF0
aW9ucygpCisKKyAgICAgICAgIyBjb3B5IFRlc3RFeHBlY3RhdGlvbnNXM0MgdG8gYW5vdGhlciBm
aWxlLCBhcyBpdCB3aWxsIGJlIG1vZGlmaWVkCisgICAgICAgIHNlbGYuc2F2ZV93M2NfdGVzdF9l
eHBlY3RhdGlvbnNfZmlsZSgpCisKKyAgICAgICAgIyBnZW5lcmF0ZSBuZXcgdGVzdCBleHBlY3Rh
dGlvbiBmaWxlIChubyBmbGFreSB0ZXN0cyBkZXRlY3RlZCB5ZXQpLgorICAgICAgICAjIFdlIG92
ZXJ2d3JpdGUgVGVzdEV4cGVjdGF0aW9uc1czQyBzbyBhcyB0byBiZSBhYmxlIHRvIGRldGVjdCBm
bGFreSB0ZXN0cyBpbiB0aGUgbmV4dCBydW4KKyAgICAgICAgc2VsZi5nZW5lcmF0ZV90ZXN0X2V4
cGVjdGF0aW9uc19maWxlKHNlbGYucG9ydC5wYXRoX3RvX3czY19leHBlY3RhdGlvbnNfZmlsZSgp
KQorCisgICAgICAgICMgcnVuIGFnYWluIHRoZSB0ZXN0cywgZXhjZXB0IHNraXBwZWQgb25lCisg
ICAgICAgIF9sb2cuaW5mbygnUnVubmluZyB0ZXN0cyBhZ2FpbiB0byBjaGVjayBmb3IgZmxha3kg
YXNzZXJ0aW9ucy4uLicpCisgICAgICAgIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bl90ZXN0
X3N1aXRlcyhbJy1xJywgJy0tbm8tcmV0cnktZmFpbHVyZXMnLCAnLS1uby1zaG93LXJlc3VsdHMn
LCAnLS1za2lwLWZhaWxpbmctdGVzdHMnXSkKKyAgICAgICAgIyB1cGRhdGUgdGVzdCBleHBlY3Rh
dGlvbnMKKyAgICAgICAgc2VsZi51cGRhdGVfZmxha3lfdGVzdHMoKQorICAgICAgICAjIHJlc3Rv
cmUgVGVzdEV4cGVjdGF0aW9uc1czQworICAgICAgICBzZWxmLnJlc3RvcmVfdzNjX3Rlc3RfZXhw
ZWN0YXRpb25zX2ZpbGUoKQorCisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBleHBlY3RhdGlvbiBm
aWxlIHdpdGggZmxha3kgdGVzdHMKKyAgICAgICAgX2xvZy5pbmZvKCdHZW5lcmF0aW5nIHRlc3Qg
ZXhwZWN0YXRpb25zIGluIGZpbGUgXCcnICsgc2VsZi5vcHRpb25zLnczY190ZXN0X2V4cGVjdGF0
aW9ucyArICdcJycpCisgICAgICAgIHNlbGYuZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmls
ZShzZWxmLm9wdGlvbnMudzNjX3Rlc3RfZXhwZWN0YXRpb25zKQorCisgICAgICAgICNjbGVhbiB1
cCBleHBlY3RlZC50eHQgZmlsZXMgKHJlbW92ZSB0aGUgb25lcyBmcm9tIHNraXBwZWQgdGVzdHMg
YW5kIG1vdmUgdGhlIG90aGVyIHRvIHBsYXRmb3JtbSBzcGVjaWZpYyBmb2xkZXIpCisgICAgICAg
IHNlbGYubW92ZV90ZXN0X2V4cGVjdGVkX2ZpbGVzX3RvX3BsYXRmb3JtKCkKKworICAgICAgICBy
ZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9hcmd1bWVudF9w
YXJzZXIoY2xzLCBob3N0KToKKyAgICAgICAgcGFyc2VyID0gdzNjX2NyZWF0ZV9hcmd1bWVudF9w
YXJzZXIoaG9zdCwgaG9zdC5maWxlc3lzdGVtLmJhc2VuYW1lKF9fZmlsZV9fKSkKKyAgICAgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgnLXczYy10ZXN0LWV4cGVjdGF0aW9ucycsIGRlZmF1bHQ9J1Rl
c3RFeHBlY3RhdGlvbnNXM0MnLAorICAgICAgICAgICAgaGVscD0nRmlsZW5hbWUgaW4gd2hpY2gg
d2lsbCBiZSB3cml0dGVuIHRoZSBuZXcgdGVzdCBleHBlY3RhdGlvbnMuJykKKyAgICAgICAgcmV0
dXJuIHBhcnNlcgorCisKK2RlZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hh
bmRsZXIobG9nZ2luZy5TdHJlYW1IYW5kbGVyKToKKworICAgICAgICBkZWYgZm9ybWF0KHNlbGYs
IHJlY29yZCk6CisgICAgICAgICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoK
KyAgICAgICAgICAgICAgICByZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVsbmFtZSwgcmVj
b3JkLmdldE1lc3NhZ2UoKSkKKyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0TWVzc2FnZSgp
CisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVs
KGxvZ2dpbmcuSU5GTykKKyAgICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgaGFuZGxlci5z
ZXRMZXZlbChsb2dnaW5nLklORk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAg
ICByZXR1cm4gaGFuZGxlcgorCisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3RkZXJyKToKKyAg
ICBob3N0ID0gSG9zdCgpCisKKyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgcGFyc2VyID0g
VzNDQmFzZWxpbmVHZW5lcmF0b3IuY3JlYXRlX2FyZ3VtZW50X3BhcnNlcihob3N0KQorICAgIG9w
dGlvbnMsIGFyZ3MgPSBwYXJzZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQorICAgIHBvcnQgPSBo
b3N0LnBvcnRfZmFjdG9yeS5nZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0cGFyc2UuVmFsdWVzKHsn
d2Via2l0X3Rlc3RfcnVubmVyJzogb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXJ9KSkKKyAgICBn
ZW5lcmF0b3IgPSBXM0NCYXNlbGluZUdlbmVyYXRvcihwb3J0LCBvcHRpb25zKQorICAgIGdlbmVy
YXRvci5nZW5lcmF0ZV9iYXNlbGluZSgpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186Cisg
ICAgc3lzLmV4aXQobWFpbihzeXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>235013</attachid>
            <date>2014-07-16 11:43:52 -0700</date>
            <delta_ts>2014-09-16 03:15:53 -0700</delta_ts>
            <desc>skipping all tests by default</desc>
            <filename>bug-134767-20140716204334.patch</filename>
            <type>text/plain</type>
            <size>15485</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwNzk5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYWQ4MTIyY2IxM2M2YTUyOTY4ZWEwZTA5MjIxZWQ0NDQ5
YzBjMzE0My4uNDAyNzU0MzFiYTA0MDlmOGJhNjgwMGY3OWVjYjZiMGQ1M2E4ZTNlYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMx
IEBACisyMDE0LTA3LTE0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgdGVzdCBiYXNlbGlu
ZSBjb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM0NzY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZTogQWRkZWQuCisgICAgICAgICog
U2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHk6IEFkZGVkIHVzZSBvZiBwbGF0Zm9ybSBzcGVj
aWZpYyBXM0MgdGVzdCBleHBlY3RhdGlvbnMKKyAgICAgICAgKFBvcnQucGF0aF90b193M2NfZXhw
ZWN0YXRpb25zX2ZpbGUpOgorICAgICAgICAoUG9ydC5leHBlY3RhdGlvbnNfZmlsZXMpOgorICAg
ICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5weTogQWRk
ZWQuCisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvcik6IEdlbmVyYXRlcyB0ZXN0IGV4cGVj
dGF0aW9ucyBmb3IgVzNDIHRlc3Qgc3VpdGUgYmFzZWQgb24gVzNDIGNvbmZvcm1hbmNlIHRlc3Rz
CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5fX2luaXRfXyk6CisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvci51cGRhdGVfZmxha3lfdGVzdHMpOgorICAgICAgICAoVzNDQmFzZWxp
bmVHZW5lcmF0b3Iud3JpdGVfZXhwZWN0YXRpb24pOgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5l
cmF0b3IuZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmlsZSk6CisgICAgICAgIChXM0NCYXNl
bGluZUdlbmVyYXRvci5nZW5lcmF0ZV9pbml0aWFsX3Rlc3RfZXhwZWN0YXRpb25zKToKKyAgICAg
ICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLm1vdmVfdGVzdF9leHBlY3RlZF9maWxlc190b19wbGF0
Zm9ybSk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5zYXZlX3czY190ZXN0X2V4cGVj
dGF0aW9uc19maWxlKToKKyAgICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLnJlc3RvcmVfdzNj
X3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUpOgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3Iu
Z2VuZXJhdGVfYmFzZWxpbmUpOgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IuY3JlYXRl
X2FyZ3VtZW50X3BhcnNlcik6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAg
IChjb25maWd1cmVfbG9nZ2luZy5Mb2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dn
aW5nLkxvZ0hhbmRsZXIuZm9ybWF0KToKKyAgICAgICAgKG1haW4pOgorCiAyMDE0LTA3LTAzICBT
aGl2YWt1bWFyIEpNICA8c2hpdmEuam1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VGTF1bV0sy
XSBFbmhhbmNlIHRoZSBNaW5pYnJvd3NlciB0byBzaG93IHRleHQgc2VhcmNoIGNvdW50IGFuZCBj
bG9zZSBzZWFyY2ggYmFyLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS13M2Mt
YmFzZWxpbmUgYi9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZQpuZXcgZmlsZSBt
b2RlIDEwMDc1NQppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43YWFkMWQxNTAzODAxNzUzYTljYTQ1MmM1YWEzNjE4NmUzZDkyZTUxCi0tLSAvZGV2L251bGwK
KysrIGIvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS13M2MtYmFzZWxpbmUKQEAgLTAsMCArMSwzMSBA
QAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKKyMgQ29weXJpZ2h0IChjKSAyMDE0LCBDYW5vbiBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
Q2Fub24gSW5jLiBub3IgdGhlIG5hbWVzIG9mCisjICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisjICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQ0FOT04gSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENBTk9OIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyIiIldyYXBwZXIgYXJvdW5k
IHdlYmtpdHB5L3czYy9nZW5lcmF0ZV93M2NfYmFzZWxpbmUucHkiIiIKK2Zyb20gd2Via2l0cHku
Y29tbW9uIGltcG9ydCBtdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwCisKK211bHRpcHJvY2Vzc2lu
Z19ib290c3RyYXAucnVuKCd3ZWJraXRweScsICd3M2MnLCAnZ2VuZXJhdGVfdzNjX2Jhc2VsaW5l
LnB5JykKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvcG9ydC9iYXNlLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKaW5kZXggZThhYmNjOTU0OGY0ZGQ3
YTkxMmM0Y2ViZmM3OWUyZDMyNmQ3MGNlYi4uZGJmN2M5YzdkNTZkMDU2ZTNjMTU5Y2JiN2NjZmY0
YWFlYTgxZThiMSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2Uu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9wb3J0L2Jhc2UucHkKQEAgLTEwMjQsOCAr
MTAyNCwxNCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAKICAgICAgICAgcmV0dXJuIFtzZWxmLl9m
aWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgoZCksICdUZXN0RXhwZWN0
YXRpb25zJykgZm9yIGQgaW4gc2VhcmNoX3BhdGhzXQogCisgICAgZGVmIHBhdGhfdG9fdzNjX2V4
cGVjdGF0aW9uc19maWxlKHNlbGYpOgorICAgICAgICBmdWxsX3BvcnRfbmFtZSA9IHNlbGYucG9y
dF9uYW1lCisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6
CisgICAgICAgICAgICBmdWxsX3BvcnRfbmFtZSArPSAiLXdrMiIKKyAgICAgICAgcmV0dXJuIHNl
bGYuX2ZpbGVzeXN0ZW0uam9pbihzZWxmLmxheW91dF90ZXN0c19kaXIoKSwgJ3BsYXRmb3JtJywg
ZnVsbF9wb3J0X25hbWUsICdUZXN0RXhwZWN0YXRpb25zVzNDJykKKwogICAgIGRlZiBleHBlY3Rh
dGlvbnNfZmlsZXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBbc2VsZi5wYXRoX3RvX2dlbmVyaWNf
dGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpXSArIHNlbGYuX3BvcnRfc3BlY2lmaWNfZXhwZWN0YXRp
b25zX2ZpbGVzKCkKKyAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhfdG9fZ2VuZXJpY190ZXN0X2V4
cGVjdGF0aW9uc19maWxlKCldICsgc2VsZi5fcG9ydF9zcGVjaWZpY19leHBlY3RhdGlvbnNfZmls
ZXMoKSArIFtzZWxmLnBhdGhfdG9fdzNjX2V4cGVjdGF0aW9uc19maWxlKCldCiAKICAgICBkZWYg
cmVwb3NpdG9yeV9wYXRocyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyBhIGxpc3Qgb2YgKHJl
cG9zaXRvcnlfbmFtZSwgcmVwb3NpdG9yeV9wYXRoKSB0dXBsZXMgb2YgaXRzIGRlcGVuZGluZyBj
b2RlIGJhc2UuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9nZW5lcmF0
ZV93M2NfYmFzZWxpbmUucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9nZW5lcmF0ZV93
M2NfYmFzZWxpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I2MWI3MmVjODkyNmYwM2U1NGQxNjZmYzhiNzhl
ZmUxMjI4ZjU2NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdzNj
L2dlbmVyYXRlX3czY19iYXNlbGluZS5weQpAQCAtMCwwICsxLDIxNCBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIgR2VuZXJhdGUgYmFzZWxpbmVzIGFuZCBUZXN0RXhw
ZWN0YXRpb25zIGZpbGUgZm9yIFczQyB0ZXN0cy4iIiIKKworaW1wb3J0IGFyZ3BhcnNlCitpbXBv
cnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKKworZnJv
bSB3ZWJraXRweS5jb21tb24uaG9zdCBpbXBvcnQgSG9zdAorZnJvbSB3ZWJraXRweS5sYXlvdXRf
dGVzdHMubW9kZWxzLnRlc3RfZXhwZWN0YXRpb25zIGltcG9ydCBUZXN0RXhwZWN0YXRpb25MaW5l
LCBUZXN0Q29uZmlndXJhdGlvbkNvbnZlcnRlcgorZnJvbSB3ZWJraXRweS5wb3J0IGltcG9ydCBw
bGF0Zm9ybV9vcHRpb25zCitmcm9tIHdlYmtpdHB5LnczYy5mYWN0b3J5IGltcG9ydCB3M2NfY3Jl
YXRlX2FyZ3VtZW50X3BhcnNlcgorZnJvbSB3ZWJraXRweS53M2MucnVuX3czY19jb25mb3JtYW5j
ZV90ZXN0cyBpbXBvcnQgVzNDQ29uZm9ybWFuY2VSdW5uZXIKKworX2xvZyA9IGxvZ2dpbmcuZ2V0
TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFczQ0Jhc2VsaW5lR2VuZXJhdG9yKG9iamVjdCk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9wdGlvbnMpOgorICAgICAgICBzZWxmLnBv
cnQgPSBwb3J0CisgICAgICAgIHNlbGYub3B0aW9ucyA9IG9wdGlvbnMKKyAgICAgICAgc2VsZi5j
b25mb3JtYW5jZV9ydW5uZXIgPSBXM0NDb25mb3JtYW5jZVJ1bm5lcihwb3J0LCBvcHRpb25zKQor
ICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29udmVydGVy
ID0gVGVzdENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIoc2VsZi5wb3J0LmFsbF90ZXN0X2NvbmZpZ3Vy
YXRpb25zKCksIHNlbGYucG9ydC5jb25maWd1cmF0aW9uX3NwZWNpZmllcl9tYWNyb3MoKSkKKwor
ICAgIGRlZiB1cGRhdGVfZmxha3lfdGVzdHMoc2VsZik6CisgICAgICAgICMgQWxsIHRlc3RzIHBy
ZXNlbnQgaW4gdGhlIHRlc3RfcmVzdWx0cyBhcmUgZmFpbGluZyBhbmQgc28gYXJlIG1hcmtlZCBh
cyBmbGFreQorICAgICAgICBmbGFreV90ZXN0cyA9IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJl
c3VsdHNfbWFuYWdlcigpLnRlc3RfcmVzdWx0cygpCisgICAgICAgIGZvciB0ZXN0IGluIGZsYWt5
X3Rlc3RzOgorICAgICAgICAgICAgZXhwZWN0YXRpb24gPSBUZXN0RXhwZWN0YXRpb25MaW5lKCkK
KyAgICAgICAgICAgIGV4cGVjdGF0aW9uLm5hbWUgPSB0ZXN0CisgICAgICAgICAgICBleHBlY3Rh
dGlvbi5tb2RpZmllcnMgPSBbJ1NLSVAnXQorICAgICAgICAgICAgZXhwZWN0YXRpb24uY29tbWVu
dCA9ICJGbGFreSBhc3NlcnRpb24iCisgICAgICAgICAgICBzZWxmLmV4cGVjdGF0aW9uc1t0ZXN0
XSA9IGV4cGVjdGF0aW9uCisKKyAgICBkZWYgd3JpdGVfZXhwZWN0YXRpb24oc2VsZiwgb3V0LCB0
ZXN0X25hbWUsIHN0YXR1cyk6CisgICAgICAgIGxpbmUgPSBUZXN0RXhwZWN0YXRpb25MaW5lKCkK
KyAgICAgICAgbGluZS5uYW1lID0gdGVzdF9uYW1lCisgICAgICAgIGlmIHN0YXR1cyA9PSAiU0tJ
UCI6CisgICAgICAgICAgICBsaW5lLm1vZGlmaWVycyA9IFsnU0tJUCddCisgICAgICAgIGVsc2U6
CisgICAgICAgICAgICBsaW5lLmV4cGVjdGF0aW9ucyA9IFtzdGF0dXNdCisgICAgICAgIG91dC53
cml0ZShsaW5lLnRvX3N0cmluZyhzZWxmLl9jb252ZXJ0ZXIpICsgJ1xuJykKKworICAgIGRlZiBn
ZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAg
Y3VycmVudF90ZXN0X3N1aXRlID0gTm9uZQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3
KycpIGFzIG91dDoKKyAgICAgICAgICAgICMgc2tpcCBhbGwgdGVzdHMuLi4KKyAgICAgICAgICAg
IHNlbGYud3JpdGVfZXhwZWN0YXRpb24ob3V0LCBzZWxmLm9wdGlvbnMuX19kaWN0X19bJ2ltcG9y
dGRpciddLCAnU0tJUCcpCisgICAgICAgICAgICBmb3IgdGVzdF9zdWl0ZSBpbiBzZWxmLmNvbmZv
cm1hbmNlX3J1bm5lci50ZXN0X3N1aXRlcygpOgorICAgICAgICAgICAgICAgIHRlc3RfYmFzZW5h
bWUgPSBzZWxmLnBvcnQuaG9zdC5maWxlc3lzdGVtLmpvaW4oc2VsZi5vcHRpb25zLl9fZGljdF9f
WydpbXBvcnRkaXInXSwgdGVzdF9zdWl0ZSkKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4nKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgn
IyBTdGFydCBvZiAnICsgdGVzdF9zdWl0ZSArICdcbicpCisgICAgICAgICAgICAgICAgb3V0Lndy
aXRlKCcjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuJykKKyAgICAgICAgICAgICAgICAjIC4u
LiBleGNlcHQgdGhlIG9uZXMgaW4gdGVzdCBzdWl0ZSBmb2xkZXJzCisgICAgICAgICAgICAgICAg
c2VsZi53cml0ZV9leHBlY3RhdGlvbihvdXQsIHRlc3RfYmFzZW5hbWUsICdQQVNTJykKKyAgICAg
ICAgICAgICAgICBmb3IgdGVzdCBpbiBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci50ZXN0czoKKyAg
ICAgICAgICAgICAgICAgICAgaWYgbm90KHRlc3QgaW4gc2VsZi5leHBlY3RhdGlvbnMpOgorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgaWYgdGVz
dC5zdGFydHN3aXRoKHRlc3RfYmFzZW5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0
LndyaXRlKHNlbGYuZXhwZWN0YXRpb25zW3Rlc3RdLnRvX3N0cmluZyhzZWxmLl9jb252ZXJ0ZXIp
ICsgJ1xuJykKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjXG4nKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnIyBFbmQgb2YgJyArIHRlc3Rf
c3VpdGUgKyAnXG4nKQorICAgICAgICAgICAgICAgIG91dC53cml0ZSgnIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyNcbicpCisgICAgICAgICAgICBvdXQuY2xvc2UoKQorCisgICAgZGVmIGdlbmVy
YXRlX2luaXRpYWxfdGVzdF9leHBlY3RhdGlvbnMoc2VsZik6CisgICAgICAgIHRlc3RzID0gc2Vs
Zi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMKKyAgICAgICAgY29uZm9ybWFuY2VfcmVzdWx0cyA9
IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJlc3VsdHNfbWFuYWdlcigpLmNvbmZvcm1hbmNlX3Jl
c3VsdHMoKQorICAgICAgICBzZWxmLmV4cGVjdGF0aW9ucyA9IHt9CisgICAgICAgIGZvciB0ZXN0
IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdF9zdGF0dXMgPSBjb25mb3JtYW5jZV9yZXN1bHRz
W3Rlc3RdCisgICAgICAgICAgICBpZiB0ZXN0X3N0YXR1cyA9PSAnUEFTUyc6CisgICAgICAgICAg
ICAgICAgY29udGludWUKKyAgICAgICAgICAgIGxpbmUgPSBUZXN0RXhwZWN0YXRpb25MaW5lKCkK
KyAgICAgICAgICAgIGxpbmUubmFtZSA9IHRlc3QKKyAgICAgICAgICAgIGlmIHRlc3Rfc3RhdHVz
ID09ICdUSU1FT1VUJzoKKyAgICAgICAgICAgICAgICBsaW5lLm1vZGlmaWVycyA9IFsnU0tJUCdd
CisgICAgICAgICAgICAgICAgbGluZS5jb21tZW50ID0gIlRlc3QgdGltZW91dCIKKyAgICAgICAg
ICAgIGVsaWYgdGVzdF9zdGF0dXMgPT0gJ0NSQVNIJzoKKyAgICAgICAgICAgICAgICBsaW5lLm1v
ZGlmaWVycyA9IFsnU0tJUCddCisgICAgICAgICAgICAgICAgbGluZS5jb21tZW50ID0gIlRlc3Qg
Y3Jhc2hpbmciCisgICAgICAgICAgICBlbGlmIHRlc3Rfc3RhdHVzID09ICdGQUlMJzoKKyAgICAg
ICAgICAgICAgICBsaW5lLm1vZGlmaWVycyA9IFsnU0tJUCddCisgICAgICAgICAgICAgICAgbGlu
ZS5jb21tZW50ID0gIkFsbCBhc3NlcnRpb25zIGZhaWxpbmciCisgICAgICAgICAgICBlbGlmIHRl
c3Rfc3RhdHVzID09ICdFUlJPUic6CisgICAgICAgICAgICAgICAgbGluZS5tb2RpZmllcnMgPSBb
J1NLSVAnXQorICAgICAgICAgICAgICAgIGxpbmUuY29tbWVudCA9ICJVbmtub3duIGZhaWx1cmUg
cmVhc29uIgorICAgICAgICAgICAgZWxpZiB0ZXN0X3N0YXR1cyA9PSAnUEFSVElBTCc6CisgICAg
ICAgICAgICAgICAgbGluZS5leHBlY3RhdGlvbnMgPSBbJ1BBU1MnXQorICAgICAgICAgICAgICAg
IGxpbmUuY29tbWVudCA9ICJTb21lIGFzc2VydGlvbnMgcGFzc2luZyIKKyAgICAgICAgICAgIHNl
bGYuZXhwZWN0YXRpb25zW3Rlc3RdID0gbGluZQorCisgICAgZGVmIG1vdmVfdGVzdF9leHBlY3Rl
ZF9maWxlc190b19wbGF0Zm9ybShzZWxmKToKKyAgICAgICAgZm9yIHRlc3QgaW4gc2VsZi5jb25m
b3JtYW5jZV9ydW5uZXIudGVzdHM6CisgICAgICAgICAgICBmaWxlbmFtZSA9IHNlbGYucG9ydC5l
eHBlY3RlZF9maWxlbmFtZSh0ZXN0LCAnLnR4dCcsIEZhbHNlKQorICAgICAgICAgICAgaWYgbm90
KGZpbGVuYW1lIGlzIE5vbmUpOgorICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IHNlbGYucG9y
dC5ob3N0LmZpbGVzeXN0ZW0uam9pbihzZWxmLnBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBmaWxl
bmFtZSkKKyAgICAgICAgICAgICAgICBpZiB0ZXN0IGluIHNlbGYuZXhwZWN0YXRpb25zIGFuZCBz
ZWxmLmV4cGVjdGF0aW9uc1t0ZXN0XS5tb2RpZmllcnMgPT0gWydTS0lQJ106CisgICAgICAgICAg
ICAgICAgICAgIHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0ZW0ucmVtb3ZlKGZpbGVfcGF0aCkKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIFRPRE86IHByb2JhYmx5
IGZvciBwb3J0cyBoYXZpbmcgYm90aCB3azEgYW5kIHdrMiBzdXBwb3J0LCB3ZSB3b3VsZCBsaWtl
IHRvIHN0b3JlIGV4cGVjdGVkLnR4dCBmaWxlcyBpbiB0aGUgbW9zdCBzcGVjaWZpYyBmb2xkZXIK
KyAgICAgICAgICAgICAgICAgICAgbmV3X2ZpbGVfcGF0aCA9IGZpbGVfcGF0aC5yZXBsYWNlKHNl
bGYucG9ydC5sYXlvdXRfdGVzdHNfZGlyKCksIHNlbGYucG9ydC5iYXNlbGluZV9wbGF0Zm9ybV9k
aXIoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3J0Lmhvc3QuZmlsZXN5c3RlbS5tYXli
ZV9tYWtlX2RpcmVjdG9yeShzZWxmLnBvcnQuaG9zdC5maWxlc3lzdGVtLmRpcm5hbWUobmV3X2Zp
bGVfcGF0aCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0ZW0u
Y29weWZpbGUoZmlsZV9wYXRoLCBuZXdfZmlsZV9wYXRoKQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLnBvcnQuaG9zdC5maWxlc3lzdGVtLnJlbW92ZShmaWxlX3BhdGgpCisKKyAgICBkZWYgc2F2
ZV93M2NfdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmKToKKyAgICAgICAgZmlsZXN5c3RlbSA9
IHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0ZW0KKyAgICAgICAgdzNjX2V4cGVjdGF0aW9uc19maWxl
ID0gc2VsZi5wb3J0LnBhdGhfdG9fdzNjX2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICAgICAgaWYg
ZmlsZXN5c3RlbS5leGlzdHModzNjX2V4cGVjdGF0aW9uc19maWxlKToKKyAgICAgICAgICAgIGZp
bGVzeXN0ZW0uY29weWZpbGUodzNjX2V4cGVjdGF0aW9uc19maWxlLCB3M2NfZXhwZWN0YXRpb25z
X2ZpbGUgKyAiLm9sZCIpCisKKyAgICBkZWYgcmVzdG9yZV93M2NfdGVzdF9leHBlY3RhdGlvbnNf
ZmlsZShzZWxmKToKKyAgICAgICAgZmlsZXN5c3RlbSA9IHNlbGYucG9ydC5ob3N0LmZpbGVzeXN0
ZW0KKyAgICAgICAgdzNjX2V4cGVjdGF0aW9uc19maWxlID0gc2VsZi5wb3J0LnBhdGhfdG9fdzNj
X2V4cGVjdGF0aW9uc19maWxlKCkKKyAgICAgICAgaWYgZmlsZXN5c3RlbS5leGlzdHModzNjX2V4
cGVjdGF0aW9uc19maWxlICsgIi5vbGQiKToKKyAgICAgICAgICAgIGZpbGVzeXN0ZW0uY29weWZp
bGUodzNjX2V4cGVjdGF0aW9uc19maWxlICsgIi5vbGQiLCB3M2NfZXhwZWN0YXRpb25zX2ZpbGUp
CisgICAgICAgICAgICBmaWxlc3lzdGVtLnJlbW92ZSh3M2NfZXhwZWN0YXRpb25zX2ZpbGUgKyAi
Lm9sZCIpCisKKyAgICBkZWYgZ2VuZXJhdGVfYmFzZWxpbmUoc2VsZik6CisgICAgICAgICMgZ2Vu
ZXJhdGUgYmFzZWxpbmUgZm9yIGFsbCB0ZXN0cworICAgICAgICBpZiBub3Qgc2VsZi5jb25mb3Jt
YW5jZV9ydW5uZXIucnVuX3Rlc3RzKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAg
ICAgICAjIHByb2Nlc3MgYmFzZWxpbmUgdG8gZ2F0aGVyIHRlc3QgZXhwZWN0YXRpb25zCisgICAg
ICAgIHNlbGYuZ2VuZXJhdGVfaW5pdGlhbF90ZXN0X2V4cGVjdGF0aW9ucygpCisKKyAgICAgICAg
IyBjb3B5IFRlc3RFeHBlY3RhdGlvbnNXM0MgdG8gYW5vdGhlciBmaWxlLCBhcyBpdCB3aWxsIGJl
IG1vZGlmaWVkCisgICAgICAgIHNlbGYuc2F2ZV93M2NfdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgp
CisKKyAgICAgICAgIyBnZW5lcmF0ZSBuZXcgdGVzdCBleHBlY3RhdGlvbiBmaWxlIChubyBmbGFr
eSB0ZXN0cyBkZXRlY3RlZCB5ZXQpLgorICAgICAgICAjIFdlIG92ZXJ2d3JpdGUgVGVzdEV4cGVj
dGF0aW9uc1czQyBzbyBhcyB0byBiZSBhYmxlIHRvIGRldGVjdCBmbGFreSB0ZXN0cyBpbiB0aGUg
bmV4dCBydW4KKyAgICAgICAgc2VsZi5nZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNl
bGYucG9ydC5wYXRoX3RvX3czY19leHBlY3RhdGlvbnNfZmlsZSgpKQorCisgICAgICAgICMgcnVu
IGFnYWluIHRoZSB0ZXN0cywgZXhjZXB0IHNraXBwZWQgb25lCisgICAgICAgIF9sb2cuaW5mbygn
UnVubmluZyB0ZXN0cyBhZ2FpbiB0byBjaGVjayBmb3IgZmxha3kgYXNzZXJ0aW9ucy4uLicpCisg
ICAgICAgIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bl90ZXN0X3N1aXRlcyhbJy1xJywgJy0t
bm8tcmV0cnktZmFpbHVyZXMnLCAnLS1uby1zaG93LXJlc3VsdHMnLCAnLS1za2lwLWZhaWxpbmct
dGVzdHMnXSkKKyAgICAgICAgIyB1cGRhdGUgdGVzdCBleHBlY3RhdGlvbnMKKyAgICAgICAgc2Vs
Zi51cGRhdGVfZmxha3lfdGVzdHMoKQorICAgICAgICAjIHJlc3RvcmUgVGVzdEV4cGVjdGF0aW9u
c1czQworICAgICAgICBzZWxmLnJlc3RvcmVfdzNjX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKQor
CisgICAgICAgICMgZ2VuZXJhdGUgdGVzdCBleHBlY3RhdGlvbiBmaWxlIHdpdGggZmxha3kgdGVz
dHMKKyAgICAgICAgX2xvZy5pbmZvKCdHZW5lcmF0aW5nIHRlc3QgZXhwZWN0YXRpb25zIGluIGZp
bGUgXCcnICsgc2VsZi5vcHRpb25zLnczY190ZXN0X2V4cGVjdGF0aW9ucyArICdcJycpCisgICAg
ICAgIHNlbGYuZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmLm9wdGlvbnMudzNj
X3Rlc3RfZXhwZWN0YXRpb25zKQorCisgICAgICAgICNjbGVhbiB1cCBleHBlY3RlZC50eHQgZmls
ZXMgKHJlbW92ZSB0aGUgb25lcyBmcm9tIHNraXBwZWQgdGVzdHMgYW5kIG1vdmUgdGhlIG90aGVy
IHRvIHBsYXRmb3JtbSBzcGVjaWZpYyBmb2xkZXIpCisgICAgICAgIHNlbGYubW92ZV90ZXN0X2V4
cGVjdGVkX2ZpbGVzX3RvX3BsYXRmb3JtKCkKKworICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
QGNsYXNzbWV0aG9kCisgICAgZGVmIGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIoY2xzLCBob3N0KToK
KyAgICAgICAgcGFyc2VyID0gdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9zdCwgaG9zdC5m
aWxlc3lzdGVtLmJhc2VuYW1lKF9fZmlsZV9fKSkKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVu
dCgnLXczYy10ZXN0LWV4cGVjdGF0aW9ucycsIGRlZmF1bHQ9J1Rlc3RFeHBlY3RhdGlvbnNXM0Mn
LAorICAgICAgICAgICAgaGVscD0nRmlsZW5hbWUgaW4gd2hpY2ggd2lsbCBiZSB3cml0dGVuIHRo
ZSBuZXcgdGVzdCBleHBlY3RhdGlvbnMuJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisKK2Rl
ZiBjb25maWd1cmVfbG9nZ2luZygpOgorICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5TdHJl
YW1IYW5kbGVyKToKKworICAgICAgICBkZWYgZm9ybWF0KHNlbGYsIHJlY29yZCk6CisgICAgICAg
ICAgICBpZiByZWNvcmQubGV2ZWxubyA+IGxvZ2dpbmcuSU5GTzoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gIiVzOiAlcyIgJSAocmVjb3JkLmxldmVsbmFtZSwgcmVjb3JkLmdldE1lc3NhZ2UoKSkK
KyAgICAgICAgICAgIHJldHVybiByZWNvcmQuZ2V0TWVzc2FnZSgpCisKKyAgICBsb2dnZXIgPSBs
b2dnaW5nLmdldExvZ2dlcigpCisgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuSU5GTykKKyAg
ICBoYW5kbGVyID0gTG9nSGFuZGxlcigpCisgICAgaGFuZGxlci5zZXRMZXZlbChsb2dnaW5nLklO
Rk8pCisgICAgbG9nZ2VyLmFkZEhhbmRsZXIoaGFuZGxlcikKKyAgICByZXR1cm4gaGFuZGxlcgor
CisKK2RlZiBtYWluKGFyZ3YsIHN0ZG91dCwgc3RkZXJyKToKKyAgICBob3N0ID0gSG9zdCgpCisK
KyAgICBjb25maWd1cmVfbG9nZ2luZygpCisgICAgcGFyc2VyID0gVzNDQmFzZWxpbmVHZW5lcmF0
b3IuY3JlYXRlX2FyZ3VtZW50X3BhcnNlcihob3N0KQorICAgIG9wdGlvbnMsIGFyZ3MgPSBwYXJz
ZXIucGFyc2Vfa25vd25fYXJncyhhcmd2KQorICAgIHBvcnQgPSBob3N0LnBvcnRfZmFjdG9yeS5n
ZXQob3B0aW9ucy5wbGF0Zm9ybSwgb3B0cGFyc2UuVmFsdWVzKHsnd2Via2l0X3Rlc3RfcnVubmVy
Jzogb3B0aW9ucy53ZWJraXRfdGVzdF9ydW5uZXJ9KSkKKyAgICBnZW5lcmF0b3IgPSBXM0NCYXNl
bGluZUdlbmVyYXRvcihwb3J0LCBvcHRpb25zKQorICAgIGdlbmVyYXRvci5nZW5lcmF0ZV9iYXNl
bGluZSgpCisKK2lmICdfX21haW5fXycgPT0gX19uYW1lX186CisgICAgc3lzLmV4aXQobWFpbihz
eXMuYXJndlsxOl0sIHN5cy5zdGRvdXQsIHN5cy5zdGRlcnIpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238170</attachid>
            <date>2014-09-16 03:16:00 -0700</date>
            <delta_ts>2014-12-23 07:27:51 -0800</delta_ts>
            <desc>add support for merge of TestExpectations</desc>
            <filename>bug-134767-20140916121556.patch</filename>
            <type>text/plain</type>
            <size>19665</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNjE0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjAxYjEwMjM2OGU4YzVmZGE3NWZiZjI1NjQwOWYxYzJj
NjVlZmFiNy4uOWZmMzIwN2I3ODM2MjFiZTQyNGRlY2ViYWU5NmUxZjNiYzBkY2ZkYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDE0LTA5LTE2ICBZb3Vlbm4gRmFibGV0IDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5m
cj4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgYXV0b21hdGVkIFczQyB0ZXN0IGJhc2VsaW5l
IGNvbXB1dGF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzQ3NjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtdzNjLWJhc2VsaW5lOiBBZGRlZCAoTWFpbiBzY3JpcHQp
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5w
eTogQWRkZWQgKE1haW4gY2xhc3MgdG8gcnVuIHczYyBiYXNlbGluZSkuCisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5nZW5lcmF0ZV9iYXNlbGluZSk6Cisg
ICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5zdG9yZV9mYWlsZWRfdGVzdHMpOgorICAgICAg
ICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IucGFzc19vcl9wYXJ0aWFsX3Rlc3RzKToKKyAgICAgICAg
KFczQ0Jhc2VsaW5lR2VuZXJhdG9yLnVwZGF0ZV9mbGFreV90ZXN0cyk6CisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvci50ZXN0X3Jlc3VsdF90b19leHBlY3RhdGlvbl9saW5lKToKKyAgICAg
ICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLl9za2lwX3Rlc3QpOgorICAgICAgICAoVzNDQmFzZWxp
bmVHZW5lcmF0b3IuZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmlsZSk6CisgICAgICAgIChX
M0NCYXNlbGluZUdlbmVyYXRvci5jb21wdXRlX3Rlc3RfZXhwZWN0YXRpb25zX2xpbmVzKToKKyAg
ICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLm1lcmdlX3Rlc3RfZXhwZWN0YXRpb25zKToKKyAg
ICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNyZWF0ZV9uZXdfdGVzdF9leHBlY3RhdGlvbnMp
OgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IucmVtb3ZlX3ByZXZpb3VzX2Jhc2VsaW5l
KToKKyAgICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNvcHlfaW1wb3J0ZWRfdGVzdHNfdG9f
bGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5j
b3B5X3Rlc3RfZXhwZWN0ZWRfZmlsZXNfdG9fcGxhdGZvcm1fZGlyZWN0b3J5KToKKyAgICAgICAg
KFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmxheW91dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0aCk6Cisg
ICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5sYXlvdXRfcGxhdGZvcm1fdGVzdF9maWxlX3Bh
dGgpOgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IuY3JlYXRlX2FyZ3VtZW50X3BhcnNl
cik6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChjb25maWd1cmVfbG9n
Z2luZy5Mb2dIYW5kbGVyKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxvZ0hhbmRsZXIu
Zm9ybWF0KToKKyAgICAgICAgKG1haW4pOgorCiAyMDE0LTA5LTEyICBCcmlhbiBKLiBCdXJnICA8
YnVyZ0Bjcy53YXNoaW5ndG9uLmVkdT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZW1pbmQg
YWJvdXQgcmViYXNlbGluaW5nIGdlbmVyYXRvciB0ZXN0IHJlc3VsdHMKZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvZ2VuZXJhdGUtdzNjLWJhc2VsaW5lIGIvVG9vbHMvU2NyaXB0cy9nZW5lcmF0
ZS13M2MtYmFzZWxpbmUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2FhZDFkMTUwMzgwMTc1M2E5Y2E0NTJjNWFhMzYx
ODZlM2Q5MmU1MQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtdzNj
LWJhc2VsaW5lCkBAIC0wLDAgKzEsMzEgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorCisjIENv
cHlyaWdodCAoYykgMjAxNCwgQ2Fub24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIENBTk9OIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisiIiJXcmFwcGVyIGFyb3VuZCB3ZWJraXRweS93M2MvZ2VuZXJhdGVfdzNjX2Jhc2Vs
aW5lLnB5IiIiCitmcm9tIHdlYmtpdHB5LmNvbW1vbiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nX2Jv
b3RzdHJhcAorCittdWx0aXByb2Nlc3NpbmdfYm9vdHN0cmFwLnJ1bignd2Via2l0cHknLCAndzNj
JywgJ2dlbmVyYXRlX3czY19iYXNlbGluZS5weScpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3czYy9nZW5lcmF0ZV93M2NfYmFzZWxpbmUucHkgYi9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3czYy9nZW5lcmF0ZV93M2NfYmFzZWxpbmUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjEyOGU2YWEx
ZjA3YTI3MzFhNDZjZGU5NmIwNjFkNDM2ZjIwYzU1MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvdzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5weQpAQCAtMCwwICsx
LDI4OSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoYykgMjAxNCwgQ2Fu
b24gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIENhbm9uIEluYy4gbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorIyAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIENBTk9OIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQU5PTiBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisiIiIgR2VuZXJhdGUg
YmFzZWxpbmVzIGFuZCBUZXN0RXhwZWN0YXRpb25zIGZpbGUgZm9yIFczQyB0ZXN0cy4iIiIKKwor
aW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQg
c3lzCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmhvc3QgaW1wb3J0IEhvc3QKK2Zyb20gd2Via2l0
cHkubGF5b3V0X3Rlc3RzLm1vZGVscy50ZXN0X2V4cGVjdGF0aW9ucyBpbXBvcnQgVGVzdEV4cGVj
dGF0aW9uTGluZSwgVGVzdENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIKK2Zyb20gd2Via2l0cHkucG9y
dCBpbXBvcnQgcGxhdGZvcm1fb3B0aW9ucworZnJvbSB3ZWJraXRweS53M2MuZmFjdG9yeSBpbXBv
cnQgdzNjX2NyZWF0ZV9hcmd1bWVudF9wYXJzZXIKK2Zyb20gd2Via2l0cHkudzNjLnJ1bl93M2Nf
Y29uZm9ybWFuY2VfdGVzdHMgaW1wb3J0IFczQ0NvbmZvcm1hbmNlUnVubmVyCitmcm9tIHdlYmtp
dHB5LnczYy53ZWJfcGxhdGZvcm1fdGVzdF9zZXR1cCBpbXBvcnQgV2ViUGxhdGZvcm1UZXN0U2V0
dXAKKworX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQorCisKK2NsYXNzIFczQ0Jh
c2VsaW5lR2VuZXJhdG9yKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBvcnQsIG9w
dGlvbnMpOgorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CisgICAgICAgIHNlbGYub3B0aW9ucyA9
IG9wdGlvbnMKKyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gcG9ydC5ob3N0LmZpbGVzeXN0ZW0K
KyAgICAgICAgc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIgPSBXM0NDb25mb3JtYW5jZVJ1bm5lcihw
b3J0LCBvcHRpb25zKQorICAgICAgICBzZWxmLndwdF9sYXlvdXRfdGVzdF9wYXRoID0gc2VsZi5m
aWxlc3lzdGVtLmpvaW4oJ2ltcG9ydGVkJywgJ3czYycsICd3cHQnKQorICAgICAgICBzZWxmLmJs
b2NrX3N0YXJ0ID0gJyMjIyMjIFN0YXJ0IG9mICcKKyAgICAgICAgc2VsZi5ibG9ja19lbmQgPSAn
IyMjIyMgRW5kIG9mICcKKyAgICAgICAgc2VsZi5mYWlsZWRfdGVzdHMgPSBOb25lCisKKyAgICAg
ICAgc2VsZi5fY29udmVydGVyID0gVGVzdENvbmZpZ3VyYXRpb25Db252ZXJ0ZXIoc2VsZi5wb3J0
LmFsbF90ZXN0X2NvbmZpZ3VyYXRpb25zKCksIHNlbGYucG9ydC5jb25maWd1cmF0aW9uX3NwZWNp
Zmllcl9tYWNyb3MoKSkKKworICAgIGRlZiBnZW5lcmF0ZV9iYXNlbGluZShzZWxmKToKKyAgICAg
ICAgaWYgbm90IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bl90ZXN0cygpOgorICAgICAgICAg
ICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnByaW50X3Jl
c3VsdHNfdG9fY29uc29sZSgpCisKKyAgICAgICAgX2xvZy5pbmZvKCdQcm9jZXNzIGNvbmZvcm1h
bmNlIHJlc3VsdHMgdG8gZ2F0aGVyIHRlc3QgZXhwZWN0YXRpb25zLi4uJykKKyAgICAgICAgc2Vs
Zi5zdG9yZV9mYWlsZWRfdGVzdHMoKQorICAgICAgICBwYXNzaW5nX3Rlc3RzID0gc2VsZi5wYXNz
X29yX3BhcnRpYWxfdGVzdHMoKQorCisgICAgICAgIF9sb2cuaW5mbygnUnVubmluZyAnICsgc3Ry
KGxlbihwYXNzaW5nX3Rlc3RzKSkgKyAnIHBhc3Npbmcgb3IgcGFydGlhbGx5IHBhc3NpbmcgdGVz
dHMgYWdhaW4gdG8gY2hlY2sgZm9yIGZsYWtreSBhc3NlcnRpb25zL3Rlc3RzLi4uJykKKyAgICAg
ICAgdGVzdF9yZXN1bHRzID0gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucnVuX3Rlc3RfbGlzdChw
YXNzaW5nX3Rlc3RzKQorCisgICAgICAgIF9sb2cuaW5mbygnR3BkYXRpbmcgdGVzdCBleHBlY3Rh
dGlvbnMuLi4nKQorICAgICAgICBzZWxmLnVwZGF0ZV9mbGFreV90ZXN0cyh0ZXN0X3Jlc3VsdHMp
CisKKyAgICAgICAgbG9jYWxfdGVzdF9leHBlY3RhdGlvbnNfZmlsZW5hbWUgPSBzZWxmLmZpbGVz
eXN0ZW0uam9pbihzZWxmLnBvcnQudzNjX2NvbmZvcm1hbmNlX3Jlc3VsdHNfZGlyZWN0b3J5KCks
ICdUZXh0RXhwZWN0YXRpb25zVzNDJykKKyAgICAgICAgX2xvZy5pbmZvKCdHZW5lcmF0aW5nIHRl
c3QgZXhwZWN0YXRpb25zIGluIGZpbGUgXCcnICsgbG9jYWxfdGVzdF9leHBlY3RhdGlvbnNfZmls
ZW5hbWUgKyAnXCcnKQorICAgICAgICBzZWxmLmdlbmVyYXRlX3Rlc3RfZXhwZWN0YXRpb25zX2Zp
bGUobG9jYWxfdGVzdF9leHBlY3RhdGlvbnNfZmlsZW5hbWUsIEZhbHNlKQorCisgICAgICAgIGlm
IHNlbGYub3B0aW9ucy5fX2RpY3RfX1snZG9fbWVyZ2UnXToKKyAgICAgICAgICAgIF9sb2cuaW5m
bygnVXBkYXRpbmcgTGF5b3V0VGVzdHMgZm9sZGVyIHdpdGggbmV3IGJhc2VsaW5lJykKKyAgICAg
ICAgICAgIHNlbGYucmVtb3ZlX3ByZXZpb3VzX2Jhc2VsaW5lKCkKKyAgICAgICAgICAgIHNlbGYu
Y29weV90ZXN0X2V4cGVjdGVkX2ZpbGVzX3RvX3BsYXRmb3JtX2RpcmVjdG9yeSgpCisgICAgICAg
ICAgICBzZWxmLmNvcHlfaW1wb3J0ZWRfdGVzdHNfdG9fbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSgp
CisgICAgICAgICAgICBfbG9nLmluZm8oJ1VwZGF0aW5nIFczQyB0ZXN0IGV4cGVjdGF0aW9uIGZp
bGUgXCcnICsgc2VsZi5wb3J0LnBhdGhfdG9fdzNjX2V4cGVjdGF0aW9uc19maWxlKCkgKyAnXCcn
KQorICAgICAgICAgICAgc2VsZi5nZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKHNlbGYu
cG9ydC5wYXRoX3RvX3czY19leHBlY3RhdGlvbnNfZmlsZSgpLCBUcnVlKQorCisgICAgICAgICAg
ICBpZiBzZWxmLm9wdGlvbnMuX19kaWN0X19bJ2RvdWJsZV9jaGVjayddOgorICAgICAgICAgICAg
ICAgIF9sb2cuaW5mbygnRG91YmxlIGNoZWNraW5nIGludGVncmF0aW9uIFwnJyArIHNlbGYucG9y
dC5wYXRoX3RvX3czY19leHBlY3RhdGlvbnNfZmlsZSgpICsgJ1wnJykKKyAgICAgICAgICAgICAg
ICBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5fd2Via2l0X3Rlc3RzKFtzZWxmLndwdF9sYXlv
dXRfdGVzdF9wYXRoLCAnLXEnLCAnLS1uby1yZXRyeS1mYWlsdXJlcycsICctLW5vLXNob3ctcmVz
dWx0cyddKQorCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc3RvcmVfZmFpbGVkX3Rl
c3RzKHNlbGYpOgorICAgICAgICBzZWxmLmZhaWxlZF90ZXN0cyA9IHt9CisgICAgICAgIGZvciB0
ZXN0IGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3RzKCk6CisgICAgICAgICAgICB0ZXN0
X3N0YXR1cyA9IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLmNvbmZvcm1hbmNlX3Jlc3VsdCh0ZXN0
KQorICAgICAgICAgICAgaWYgbm90IHRlc3Rfc3RhdHVzID09ICdQQVNTJzoKKyAgICAgICAgICAg
ICAgICBzZWxmLmZhaWxlZF90ZXN0c1t0ZXN0XSA9IHRlc3Rfc3RhdHVzCisKKyAgICBkZWYgcGFz
c19vcl9wYXJ0aWFsX3Rlc3RzKHNlbGYpOgorICAgICAgICBwYXNzaW5nX3Rlc3RzID0gW10KKyAg
ICAgICAgZm9yIHRlc3QgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMoKToKKyAgICAg
ICAgICAgIGlmIG5vdCh0ZXN0IGluIHNlbGYuZmFpbGVkX3Rlc3RzIGFuZCBzZWxmLmZhaWxlZF90
ZXN0c1t0ZXN0XSAhPSAnUEFSVElBTCcpOgorICAgICAgICAgICAgICAgIHBhc3NpbmdfdGVzdHMu
YXBwZW5kKHRlc3QpCisgICAgICAgIHJldHVybiBwYXNzaW5nX3Rlc3RzCisKKyAgICBkZWYgdXBk
YXRlX2ZsYWt5X3Rlc3RzKHNlbGYsIHRlc3RfcmVzdWx0cyk6CisgICAgICAgICMgQWxsIHRlc3Rz
IHByZXNlbnQgaW4gdGVzdF9yZXN1bHRzIGFyZSBmYWlsaW5nLCBoZW5jZSBtYXJrZWQgYXMgZmxh
a3kKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9yZXN1bHRzOgorICAgICAgICAgICAgc2VsZi5m
YWlsZWRfdGVzdHNbdGVzdF0gPSAnRkxBS0tZJworCisgICAgZGVmIHRlc3RfcmVzdWx0X3RvX2V4
cGVjdGF0aW9uX2xpbmUoc2VsZiwgdGVzdCwgdGVzdF9yZXN1bHQpOgorICAgICAgICAjIENvbnZl
cnRpbmcgY29uZm9ybWFuY2UgcnVubmVyIHRlc3QgbmFtZSB0byBMYXlvdXRUZXN0cyBpbXBvcnRl
ZC93M2Mvd3B0IHRlc3QgbmFtZQorICAgICAgICB3a190ZXN0X25hbWUgPSB0ZXN0LnJlcGxhY2Uo
c2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgc2VsZi53cHRf
bGF5b3V0X3Rlc3RfcGF0aCwgMSkKKyAgICAgICAgIyBUT0RPOiBVc2UgVGVzdEV4cGVjdGF0aW9u
TGluZSB0byBnZW5lcmF0ZSBsaW5lcz8KKyAgICAgICAgaWYgdGVzdF9yZXN1bHQgPT0gJ1RJTUVP
VVQnOgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBTa2lwIF0gI1RpbWVv
dXQgdGVzdCcKKyAgICAgICAgZWxpZiB0ZXN0X3Jlc3VsdCA9PSAnQ1JBU0gnOgorICAgICAgICAg
ICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBDcmFzaCBdJworICAgICAgICBlbGlmIHRlc3Rf
cmVzdWx0ID09ICdGQUlMJzoKKyAgICAgICAgICAgIHJldHVybiB3a190ZXN0X25hbWUgKyAnIFsg
U2tpcCBdICNBbGwgYXNzZXJ0aW9ucyBmYWlsaW5nJworICAgICAgICBlbGlmIHRlc3RfcmVzdWx0
ID09ICdFUlJPUic6CisgICAgICAgICAgICByZXR1cm4gd2tfdGVzdF9uYW1lICsgJyBbIFNraXAg
XScKKyAgICAgICAgZWxpZiB0ZXN0X3Jlc3VsdCA9PSAnUEFSVElBTCc6CisgICAgICAgICAgICBy
ZXR1cm4gd2tfdGVzdF9uYW1lICsgJyBbIFBhc3MgXSAjU29tZSBhc3NlcnRpb25zIHBhc3Npbmcn
CisgICAgICAgIGVsaWYgdGVzdF9yZXN1bHQgPT0gJ0ZMQUtLWSc6CisgICAgICAgICAgICByZXR1
cm4gd2tfdGVzdF9uYW1lICsgJyBbIFNraXAgXSAjRmxha2t5IHRlc3QnCisgICAgICAgIGVsaWYg
dGVzdF9yZXN1bHQgPT0gJ1NLSVAnOgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSAr
ICcgWyBTa2lwIF0nCisgICAgICAgIGVsaWYgdGVzdF9yZXN1bHQgPT0gJ1BBU1MnOgorICAgICAg
ICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBQYXNzIF0nCisKKyAgICAjIFVzZWQgdG8g
Y29weSAtZXhwZWN0ZWQudHh0IGZpbGVzIGZvciB0ZXN0cyB0aGF0IGFyZSBub3Qgc2tpcHBlZAor
ICAgIGRlZiBfc2tpcF90ZXN0KHNlbGYsIHRlc3QpOgorICAgICAgICByZXR1cm4gdGVzdCBpbiBz
ZWxmLmZhaWxlZF90ZXN0cyBhbmQgc2VsZi5mYWlsZWRfdGVzdHNbdGVzdF0gIT0gJ0NSQVNIJyBh
bmQgc2VsZi5mYWlsZWRfdGVzdHNbdGVzdF0gIT0gJ1BBUlRJQUwnIGFuZCBzZWxmLmZhaWxlZF90
ZXN0c1t0ZXN0XSAhPSAnUEFTUycKKworICAgIGRlZiBnZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9u
c19maWxlKHNlbGYsIGZpbGVuYW1lLCBkb01lcmdlKToKKyAgICAgICAgdGVzdF9zdWl0ZXNfbGlu
ZXMgPSBzZWxmLmNvbXB1dGVfdGVzdF9leHBlY3RhdGlvbnNfbGluZXMoKQorICAgICAgICBsaW5l
cyA9IHNlbGYubWVyZ2VfdGVzdF9leHBlY3RhdGlvbnMoZmlsZW5hbWUsIHRlc3Rfc3VpdGVzX2xp
bmVzKSBpZiBkb01lcmdlIGVsc2Ugc2VsZi5jcmVhdGVfbmV3X3Rlc3RfZXhwZWN0YXRpb25zKHRl
c3Rfc3VpdGVzX2xpbmVzKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3KycpIGFzIG91
dDoKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIG91dC53cml0
ZShsKQorICAgICAgICAgICAgb3V0LmNsb3NlKCkKKworICAgIGRlZiBjb21wdXRlX3Rlc3RfZXhw
ZWN0YXRpb25zX2xpbmVzKHNlbGYpOgorICAgICAgICAjICdsaW5lcycgaXMgZ3JvdXBpbmcgZXhw
ZWN0YXRpb25zIGJ5IHRlc3Qgc3VpdGUgbmFtZQorICAgICAgICBsaW5lcyA9IHt9CisgICAgICAg
IGZvciB0ZXN0X3N1aXRlIGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3Rfc3VpdGVzKCk6
CisgICAgICAgICAgICBjdXJyZW50X2xpbmVzID0gW10KKyAgICAgICAgICAgIHRlc3RfYmFzZW5h
bWUgPSBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5uZWRf
dGVzdHNfZGlyZWN0b3J5LCB0ZXN0X3N1aXRlKQorICAgICAgICAgICAgIyB0ZXN0X2Jhc2VwYXRo
IGVuZHMgd2l0aCBhICcvJyBzbyB0aGF0IHRlc3Qgc3VpdGUgJ2FiYycgYW5kIHRlc3Qgc3VpdGUg
J2FiY2RlZicgYXJlIG5vdCBjb2xsYXBzZWQgaW50byAnYWJjJworICAgICAgICAgICAgdGVzdF9i
YXNlcGF0aCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHRlc3RfYmFzZW5hbWUsICIiKQorCisgICAg
ICAgICAgICAjIEJ5IGRlZmF1bHQsIGFjdGl2YXRlIGFsbCB0ZXN0cyBpbiB0aGUgdGVzdCBzdWl0
ZQorICAgICAgICAgICAgY3VycmVudF9saW5lcy5hcHBlbmQoc2VsZi50ZXN0X3Jlc3VsdF90b19l
eHBlY3RhdGlvbl9saW5lKHRlc3RfYmFzZW5hbWUsICdQQVNTJykgKyAnXG4nKQorICAgICAgICAg
ICAgZm9yIHRlc3QgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMoKToKKyAgICAgICAg
ICAgICAgICBpZiB0ZXN0IGluIHNlbGYuZmFpbGVkX3Rlc3RzIGFuZCB0ZXN0LnN0YXJ0c3dpdGgo
dGVzdF9iYXNlcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGluZXMuYXBwZW5k
KHNlbGYudGVzdF9yZXN1bHRfdG9fZXhwZWN0YXRpb25fbGluZSh0ZXN0LCBzZWxmLmZhaWxlZF90
ZXN0c1t0ZXN0XSkgKyAnXG4nKQorICAgICAgICAgICAgbGluZXNbdGVzdF9zdWl0ZV0gPSBjdXJy
ZW50X2xpbmVzCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgbWVyZ2VfdGVzdF9l
eHBlY3RhdGlvbnMoc2VsZiwgZmlsZW5hbWUsIHRlc3Rfc3VpdGVzX2xpbmVzKToKKyAgICAgICAg
dXBkYXRlZF9saW5lcyA9IFtdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYgPSBvcGVuKGZp
bGVuYW1lLCAncicpCisgICAgICAgICAgICBsaW5lcyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAg
ICAgIG5ld190ZXN0X3N1aXRlcyA9IHRlc3Rfc3VpdGVzX2xpbmVzLmNvcHkoKQorICAgICAgICAg
ICAgaXNfc2tpcHBpbmcgPSBGYWxzZQorICAgICAgICAgICAgIyBVcGRhdGUgZXhpc3RpbmcgdGVz
dCBzdWl0ZXMgYW5kIGNvcHkgdGVzdCBzdWl0ZXMgdGhhdCB3ZXJlIG5vdCB1cGRhdGVkCisgICAg
ICAgICAgICBmb3IgbCBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBpZiBsLnN0YXJ0c3dpdGgo
c2VsZi5ibG9ja19zdGFydCk6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRfbGluZXMuYXBw
ZW5kKGwpCisgICAgICAgICAgICAgICAgICAgICMgSXMgaXQgYSB0ZXN0IHN1aXRlIHRoYXQgbmVl
ZHMgdG8gYmUgdXBkYXRlZD8KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90ZXN0X3N1aXRl
ID0gbFtsZW4oc2VsZi5ibG9ja19zdGFydCk6bGVuKGwpIC0gMV0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgY3VycmVudF90ZXN0X3N1aXRlIGluIHRlc3Rfc3VpdGVzX2xpbmVzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgIyBBZGQgbmV3IHRlc3Qgc3VpdGUgcmVzdWx0cworICAgICAgICAgICAg
ICAgICAgICAgICAgdXBkYXRlZF9saW5lcy5leHRlbmQodGVzdF9zdWl0ZXNfbGluZXNbY3VycmVu
dF90ZXN0X3N1aXRlXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU2tpcCBvbGQgdGVzdCBz
dWl0ZSByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICBpc19za2lwcGluZyA9IFRydWUK
KyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHRlc3Qgc3VpdGUgZnJvbSB0aGUgbGlz
dCBvZiBuZXcgdGVzdCBzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld190ZXN0X3N1
aXRlcy5wb3AoY3VycmVudF90ZXN0X3N1aXRlLCBOb25lKQorICAgICAgICAgICAgICAgIGVsaWYg
bC5zdGFydHN3aXRoKHNlbGYuYmxvY2tfZW5kKToKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRl
ZF9saW5lcy5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAgICAgaXNfc2tpcHBpbmcgPSBGYWxz
ZQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzX3NraXBwaW5nOgorICAgICAgICAgICAgICAg
ICAgICB1cGRhdGVkX2xpbmVzLmFwcGVuZChsKQorICAgICAgICAgICAgIyBBcHBlbmQgbmV3IHRl
c3Qgc3VpdGVzCisgICAgICAgICAgICBmb3IgdGVzdF9zdWl0ZSBpbiBuZXdfdGVzdF9zdWl0ZXM6
CisgICAgICAgICAgICAgICAgdXBkYXRlZF9saW5lcy5hcHBlbmQoc2VsZi5ibG9ja19zdGFydCAr
IHRlc3Rfc3VpdGUgKyAnXG4nKQorICAgICAgICAgICAgICAgIHVwZGF0ZWRfbGluZXMuZXh0ZW5k
KG5ld190ZXN0X3N1aXRlc1t0ZXN0X3N1aXRlXSkKKyAgICAgICAgICAgICAgICB1cGRhdGVkX2xp
bmVzLmFwcGVuZChzZWxmLmJsb2NrX2VuZCArIHRlc3Rfc3VpdGUgKyAnXG4nKQorICAgICAgICBl
eGNlcHQ6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoIkNhbm5vdCBtZXJnZSByZXN1bHRzLCBj
cmVhdGluZyB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUgZnJvbSBzY3JhdGNoLi4uIikKKyAgICAgICAg
ICAgIHVwZGF0ZWRfbGluZXMgPSBzZWxmLmNyZWF0ZV9uZXdfdGVzdF9leHBlY3RhdGlvbnModGVz
dF9zdWl0ZXNfbGluZXMpCisgICAgICAgIHJldHVybiB1cGRhdGVkX2xpbmVzCisKKyAgICBkZWYg
Y3JlYXRlX25ld190ZXN0X2V4cGVjdGF0aW9ucyhzZWxmLCB0ZXN0X3N1aXRlc19saW5lcyk6Cisg
ICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgIyBCeSBkZWZhdWx0LCBza2lwIGV2ZXJ5dGhpbmcK
KyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYudGVzdF9yZXN1bHRfdG9fZXhwZWN0YXRpb25fbGlu
ZShzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCAnU0tJUCcp
ICsgJ1xuJykKKyAgICAgICAgZm9yIGtleSBpbiB0ZXN0X3N1aXRlc19saW5lczoKKyAgICAgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLmJsb2NrX3N0YXJ0ICsga2V5ICsgJ1xuJykKKyAgICAgICAg
ICAgIGxpbmVzLmV4dGVuZCh0ZXN0X3N1aXRlc19saW5lc1trZXldKQorICAgICAgICAgICAgbGlu
ZXMuYXBwZW5kKHNlbGYuYmxvY2tfZW5kICsga2V5ICsgJ1xuJykKKyAgICAgICAgcmV0dXJuIGxp
bmVzCisKKyAgICBkZWYgcmVtb3ZlX3ByZXZpb3VzX2Jhc2VsaW5lKHNlbGYpOgorICAgICAgICBm
aWxlc19vcl9mb2xkZXJzID0gW10KKyAgICAgICAgIyBSZW1vdmUgaW5mcmFzdHJ1Y3R1cmUgZmls
ZXMgYW5kIGZvbGRlcnMKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIHNlbGYuY29uZm9ybWFuY2Vf
cnVubmVyLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLmFsd2F5c19pbXBvcnRlZF9maWxlcygp
OgorICAgICAgICAgICAgZmlsZXNfb3JfZm9sZGVycy5hcHBlbmQoc2VsZi5sYXlvdXRfaW1wb3J0
ZWRfdGVzdF9maWxlX3BhdGgoZmlsZW5hbWUpKQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2Vs
Zi5jb25mb3JtYW5jZV9ydW5uZXIud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIuYWx3YXlzX2lt
cG9ydGVkX2RpcmVjdG9yaWVzKCk6CisgICAgICAgICAgICBmaWxlc19vcl9mb2xkZXJzLmFwcGVu
ZChzZWxmLmxheW91dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0aChmaWxlbmFtZSkpCisgICAgICAg
ICMgUmVtb3ZlIHRlc3Qgc3VpdGUgZGlyZWN0b3JpZXMgaW4gaW1wb3J0ZWQgYW5kIHBsYXRmb3Jt
IGZvbGRlcnMKKyAgICAgICAgZm9yIHRlc3RzdWl0ZSBpbiBzZWxmLmNvbmZvcm1hbmNlX3J1bm5l
ci50ZXN0X3N1aXRlcygpOgorICAgICAgICAgICAgZmlsZXNfb3JfZm9sZGVycy5hcHBlbmQoc2Vs
Zi5sYXlvdXRfaW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgodGVzdHN1aXRlKSkKKyAgICAgICAgICAg
IGZpbGVzX29yX2ZvbGRlcnMuYXBwZW5kKHNlbGYubGF5b3V0X3BsYXRmb3JtX3Rlc3RfZmlsZV9w
YXRoKHRlc3RzdWl0ZSkpCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlc19vcl9mb2xkZXJz
OgorICAgICAgICAgICAgaWYgc2VsZi5maWxlc3lzdGVtLmlzZGlyKGZpbGVuYW1lKToKKyAgICAg
ICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0ucm10cmVlKGZpbGVuYW1lKQorICAgICAgICAgICAg
ZWxpZiBzZWxmLmZpbGVzeXN0ZW0uaXNmaWxlKGZpbGVuYW1lKToKKyAgICAgICAgICAgICAgICBz
ZWxmLmZpbGVzeXN0ZW0ucmVtb3ZlKGZpbGVuYW1lKQorCisgICAgZGVmIGNvcHlfaW1wb3J0ZWRf
dGVzdHNfdG9fbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgIyBDb3B5IGlu
ZnJhc3RydWN0dXJlIGZpbGVzIGFuZCBmb2xkZXJzCisgICAgICAgIGRpcmVjdG9yaWVzX3RvX2lt
cG9ydCA9IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVy
LmFsd2F5c19pbXBvcnRlZF9kaXJlY3RvcmllcygpCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBk
aXJlY3Rvcmllc190b19pbXBvcnQ6CisgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0uY29weXRy
ZWUoc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIuaW1wb3J0ZWRf
dGVzdHNfZGlyZWN0b3J5LCBmaWxlbmFtZSksIHNlbGYubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmls
ZV9wYXRoKGZpbGVuYW1lKSkKKyAgICAgICAgZmlsZXNfdG9faW1wb3J0ID0gc2VsZi5jb25mb3Jt
YW5jZV9ydW5uZXIud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIuYWx3YXlzX2ltcG9ydGVkX2Zp
bGVzKCkKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzX3RvX2ltcG9ydDoKKyAgICAgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLmNv
bmZvcm1hbmNlX3J1bm5lci5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksIGZpbGVuYW1lKSwgc2Vs
Zi5sYXlvdXRfaW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgoZmlsZW5hbWUpKQorICAgICAgICAjIENv
cHkgY29uZmlnLmpzb24KKyAgICAgICAgV2ViUGxhdGZvcm1UZXN0U2V0dXAoc2VsZi5wb3J0Lmhv
c3QsIHNlbGYubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKCcnKSkuY29weV93cHRfanNv
bl9jb25maWcoKQorICAgICAgICAjIENvcHkgdGVzdCBzdWl0ZSBkaXJlY3RvcmllcworICAgICAg
ICBmb3IgdGVzdHN1aXRlIGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3Rfc3VpdGVzKCk6
CisgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0uY29weXRyZWUoc2VsZi5maWxlc3lzdGVtLmpv
aW4oc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5LCB0ZXN0
c3VpdGUpLCBzZWxmLmxheW91dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0aCh0ZXN0c3VpdGUpKQor
CisgICAgZGVmIGNvcHlfdGVzdF9leHBlY3RlZF9maWxlc190b19wbGF0Zm9ybV9kaXJlY3Rvcnko
c2VsZik6CisgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3Rz
KCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fc2tpcF90ZXN0KHRlc3QpOgorICAgICAgICAg
ICAgICAgIGZpbGVfcGF0aCA9IHNlbGYucG9ydC5leHBlY3RlZF9maWxlbmFtZSh0ZXN0LCAnLnR4
dCcsIEZhbHNlKQorICAgICAgICAgICAgICAgIGlmIG5vdCBmaWxlX3BhdGggaXMgTm9uZToKKyAg
ICAgICAgICAgICAgICAgICAgIyBUT0RPOiBGb3IgcG9ydHMgaGF2aW5nIGJvdGggd2sxIGFuZCB3
azIgc3VwcG9ydCwgc3RvcmUgLWV4cGVjdGVkLnR4dCBmaWxlcyBpbiB0aGUgbW9zdCBzcGVjaWZp
YyBmb2xkZXI/CisgICAgICAgICAgICAgICAgICAgIG5ld19maWxlX3BhdGggPSBmaWxlX3BhdGgu
cmVwbGFjZShzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBz
ZWxmLmxheW91dF9wbGF0Zm9ybV90ZXN0X2ZpbGVfcGF0aCgnJykpCisgICAgICAgICAgICAgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbS5tYXliZV9tYWtlX2RpcmVjdG9yeShzZWxmLmZpbGVzeXN0ZW0u
ZGlybmFtZShuZXdfZmlsZV9wYXRoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlc3lz
dGVtLmNvcHlmaWxlKGZpbGVfcGF0aCwgbmV3X2ZpbGVfcGF0aCkKKworICAgIGRlZiBsYXlvdXRf
aW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgoc2VsZiwgZik6CisgICAgICAgIHJldHVybiBzZWxmLmZp
bGVzeXN0ZW0uam9pbihzZWxmLnBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBzZWxmLndwdF9sYXlv
dXRfdGVzdF9wYXRoLCBmKQorCisgICAgZGVmIGxheW91dF9wbGF0Zm9ybV90ZXN0X2ZpbGVfcGF0
aChzZWxmLCBmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYucG9y
dC5iYXNlbGluZV9wbGF0Zm9ybV9kaXIoKSwgc2VsZi53cHRfbGF5b3V0X3Rlc3RfcGF0aCwgZikK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjcmVhdGVfYXJndW1lbnRfcGFyc2VyKGNscywg
aG9zdCk6CisgICAgICAgIHBhcnNlciA9IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3Qs
IGhvc3QuZmlsZXN5c3RlbS5iYXNlbmFtZShfX2ZpbGVfXykpCisgICAgICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy13M2MtdScsICctLXczYy11cGRhdGUtbGF5b3V0LXRlc3RzLWZvbGRlcicsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RvX21lcmdlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAg
ICAgICAgIGhlbHA9J1VwZGF0ZSB0aGUgTGF5b3V0VGVzdHMgZm9sZGVyIHdpdGggdGhlIG5ldyBi
YXNlbGluZS4gQnkgZGVmYXVsdCwgbm8gdXBkYXRlIGlzIGRvbmUuJykKKyAgICAgICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgnLXczYy1uJywgJy0tdzNjLW5vLWRvdWJsZS1jaGVjay1vZi1iYXNlbGlu
ZScsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdkb3VibGVfY2hlY2snLCBkZWZhdWx0PVRy
dWUsCisgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRlc3Rpbmcgb2YgdGhlIG5ldyBiYXNlbGlu
ZS4gVGVzdGluZyBvZiB0aGUgbmV3IGJhc2VsaW5lIGlzIGRvbmUgYnkgZGVmYXVsdCB3aGVuIExh
eW91dFRlc3RzIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGJhc2VsaW5lLicpCisgICAgICAgIHJl
dHVybiBwYXJzZXIKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICBjbGFzcyBMb2dI
YW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisKKyAgICAgICAgZGVmIGZvcm1hdChzZWxm
LCByZWNvcmQpOgorICAgICAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk86
CisgICAgICAgICAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHJlY29yZC5sZXZlbG5hbWUsIHJl
Y29yZC5nZXRNZXNzYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVjb3JkLmdldE1lc3NhZ2Uo
KQorCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZl
bChsb2dnaW5nLklORk8pCisgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgIGhhbmRsZXIu
c2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisg
ICAgcmV0dXJuIGhhbmRsZXIKKworCitkZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6Cisg
ICAgaG9zdCA9IEhvc3QoKQorCisgICAgY29uZmlndXJlX2xvZ2dpbmcoKQorICAgIHBhcnNlciA9
IFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9zdCkKKyAgICBv
cHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKKyAgICBwb3J0ID0g
aG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdHBhcnNlLlZhbHVlcyh7
J3dlYmtpdF90ZXN0X3J1bm5lcic6IG9wdGlvbnMud2Via2l0X3Rlc3RfcnVubmVyfSkpCisgICAg
Z2VuZXJhdG9yID0gVzNDQmFzZWxpbmVHZW5lcmF0b3IocG9ydCwgb3B0aW9ucykKKyAgICBnZW5l
cmF0b3IuZ2VuZXJhdGVfYmFzZWxpbmUoKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgor
ICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243676</attachid>
            <date>2014-12-23 07:27:56 -0800</date>
            <delta_ts>2014-12-23 15:39:07 -0800</delta_ts>
            <desc>Improving test expectation merge</desc>
            <filename>bug-134767-20141223162756.patch</filename>
            <type>text/plain</type>
            <size>23194</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGM2N2ZmOWVjZDIxOWYwYjhjOGEyZDcwNmY1MWQ2Yjgx
NjU3Y2UxYS4uMTAzZDlmM2VmMzA1Y2U2ZWExMjFhM2E2N2ZjMzFmN2I4NTQ0ODE5NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQy
IEBACisyMDE0LTEyLTIzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgdGVzdCBiYXNlbGlu
ZSBjb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM0NzY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgZ2VuZXJhdGUtdzNjLWJhc2VsaW5lIGlzIHRoZSBzY3JpcHQgdG8gZ2VuZXJhdGUgYmFz
ZWxpbmVzIGZvciBXZWIgUGxhdGZvcm0gVGVzdCBzdWl0ZXMuCisgICAgICAgIGdlbmVyYXRlX3cz
Y19iYXNlbGluZS5weSBpcyB0aGUgbWFpbiBjbGFzcyB0aGF0IGRvZXMgdGhlIHdvcmsuCisgICAg
ICAgIEl0IHVzZXMgcnVuX3czY19jb25mb3JtYW5jZSB0byBpbXBvcnQgdGhlIHRlc3RzIGFuZCBn
ZXQgdGhlIGNvbmZvcm1hbmNlIHN0YXR1cy4KKyAgICAgICAgRnJvbSB0aGUgY29uZm9ybWFuY2Ug
c3RhdHVzLCBpdCB1cGRhdGVzIHRoZSBMYXlvdXRUZXN0cyBmb2xkZXIgYnkgY29weWluZyB0ZXN0
cyBhbmQgZXhwZWN0ZWQgZmlsZXMuCisgICAgICAgIFRlc3QgZXhwZWN0YXRpb25zIGFyZSBhZGRl
ZCBpbiB0aGUgcmVsZXZhbnQgdGVzdCBleHBlY3RhdGlvbiBmaWxlLgorCisgICAgICAgICogU2Ny
aXB0cy9nZW5lcmF0ZS13M2MtYmFzZWxpbmU6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5weTogQWRkZWQuCisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5nZW5lcmF0ZV9iYXNlbGluZSk6Cisg
ICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5zdG9yZV9mYWlsZWRfdGVzdHMpOgorICAgICAg
ICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IucGFzc19vcl9wYXJ0aWFsX3Rlc3RzKToKKyAgICAgICAg
KFczQ0Jhc2VsaW5lR2VuZXJhdG9yLnVwZGF0ZV9mbGFreV90ZXN0cyk6CisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvci50ZXN0X3Jlc3VsdF90b19leHBlY3RhdGlvbl9saW5lKToKKyAgICAg
ICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLl9zaG91bGRfc2tpcF90ZXN0KToKKyAgICAgICAgKFcz
Q0Jhc2VsaW5lR2VuZXJhdG9yLmdlbmVyYXRlX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUpOgorICAg
ICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IuY29tcHV0ZV90ZXN0X2V4cGVjdGF0aW9uc19saW5l
cyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5tZXJnZV90ZXN0X2V4cGVjdGF0aW9u
cyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5pc19pbl9nZW5lcmljX3Rlc3RfZXhw
ZWN0YXRpb25zKToKKyAgICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNyZWF0ZV9uZXdfdGVz
dF9leHBlY3RhdGlvbnMpOgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IucmVtb3ZlX3By
ZXZpb3VzX2Jhc2VsaW5lKToKKyAgICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNvcHlfaW1w
b3J0ZWRfdGVzdHNfdG9fbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSk6CisgICAgICAgIChXM0NCYXNl
bGluZUdlbmVyYXRvci5jb3B5X3Rlc3RfZXhwZWN0ZWRfZmlsZXMpOgorICAgICAgICAoVzNDQmFz
ZWxpbmVHZW5lcmF0b3IubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKToKKyAgICAgICAg
KFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmxheW91dF9wbGF0Zm9ybV90ZXN0X2ZpbGVfcGF0aCk6Cisg
ICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5jcmVhdGVfYXJndW1lbnRfcGFyc2VyKToKKyAg
ICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxv
Z0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcuTG9nSGFuZGxlci5mb3JtYXQp
OgorICAgICAgICAobWFpbik6CisKIDIwMTQtMTItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gUmV2aXNlIERSVCBsb2dpYyB0byBtYXRjaCBN
YWMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZSBiL1Rv
b2xzL1NjcmlwdHMvZ2VuZXJhdGUtdzNjLWJhc2VsaW5lCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhYWQxZDE1MDM4
MDE3NTNhOWNhNDUyYzVhYTM2MTg2ZTNkOTJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3JhcHBlciBhcm91bmQgd2Via2l0cHkvdzNj
L2dlbmVyYXRlX3czY19iYXNlbGluZS5weSIiIgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0
IG11bHRpcHJvY2Vzc2luZ19ib290c3RyYXAKKworbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5y
dW4oJ3dlYmtpdHB5JywgJ3czYycsICdnZW5lcmF0ZV93M2NfYmFzZWxpbmUucHknKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvZ2VuZXJhdGVfdzNjX2Jhc2VsaW5lLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvZ2VuZXJhdGVfdzNjX2Jhc2VsaW5lLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjliZWY3YjczMmJlYmM3MGVlYWM1MDMyNTNlMTZlMTczMmM5MjU1MDYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9nZW5lcmF0ZV93M2NfYmFz
ZWxpbmUucHkKQEAgLTAsMCArMSwzMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiIEdlbmVyYXRlIGJhc2VsaW5lcyBhbmQgVGVzdEV4cGVjdGF0aW9ucyBmaWxlIGZv
ciBXM0MgdGVzdHMuIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBvcHRwYXJzZQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9y
dCBIb3N0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBsYXRmb3JtX29wdGlvbnMKK2Zyb20g
d2Via2l0cHkudzNjLnJ1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMgaW1wb3J0IHczY19jcmVhdGVf
YXJndW1lbnRfcGFyc2VyCitmcm9tIHdlYmtpdHB5LnczYy5ydW5fdzNjX2NvbmZvcm1hbmNlX3Rl
c3RzIGltcG9ydCBXM0NDb25mb3JtYW5jZVJ1bm5lcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCisKKworY2xhc3MgVzNDQmFzZWxpbmVHZW5lcmF0b3Iob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYucG9ydCA9
IHBvcnQKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLmZpbGVz
eXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLmNvbmZvcm1hbmNlX3J1
bm5lciA9IFczQ0NvbmZvcm1hbmNlUnVubmVyKHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHNlbGYu
d3B0X2xheW91dF90ZXN0X3BhdGggPSBzZWxmLmZpbGVzeXN0ZW0uam9pbignaW1wb3J0ZWQnLCAn
dzNjJywgJ3dwdCcpCisgICAgICAgIHNlbGYuc2VjdGlvbl9zdGFydCA9ICcjIyMjIyBTdGFydCBv
ZiBXZWIgUGxhdGZvcm0gVGVzdCBFeHBlY3RhdGlvbnMnCisgICAgICAgIHNlbGYuc2VjdGlvbl9l
bmQgPSAnIyMjIyMgRW5kIG9mIFdlYiBQbGF0Zm9ybSBUZXN0IEV4cGVjdGF0aW9ucycKKyAgICAg
ICAgc2VsZi5ibG9ja19zdGFydCA9ICcjIyMjIyBTdGFydCBvZiAnCisgICAgICAgIHNlbGYuYmxv
Y2tfZW5kID0gJyMjIyMjIEVuZCBvZiAnCisgICAgICAgIHNlbGYuZmFpbGVkX3Rlc3RzID0gTm9u
ZQorCisgICAgICAgIHNlbGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMgPSBOb25lCisKKyAg
ICBkZWYgZ2VuZXJhdGVfYmFzZWxpbmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZv
cm1hbmNlX3J1bm5lci5ydW5fdGVzdHMoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5wcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQor
CisgICAgICAgIF9sb2cuaW5mbygnUHJvY2VzcyBjb25mb3JtYW5jZSByZXN1bHRzIHRvIGdhdGhl
ciB0ZXN0IGV4cGVjdGF0aW9ucy4uLicpCisgICAgICAgIHNlbGYuc3RvcmVfZmFpbGVkX3Rlc3Rz
KCkKKyAgICAgICAgcGFzc2luZ190ZXN0cyA9IHNlbGYucGFzc19vcl9wYXJ0aWFsX3Rlc3RzKCkK
KworICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmcgJyArIHN0cihsZW4ocGFzc2luZ190ZXN0cykp
ICsgJyBwYXNzaW5nIG9yIHBhcnRpYWxseSBwYXNzaW5nIHRlc3RzIGFnYWluIHRvIGNoZWNrIGZv
ciBmbGFra3kgYXNzZXJ0aW9ucy90ZXN0cy4uLicpCisgICAgICAgIHRlc3RfcmVzdWx0cyA9IHNl
bGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bl90ZXN0X2xpc3QocGFzc2luZ190ZXN0cykKKworICAg
ICAgICBfbG9nLmluZm8oJ1VwZGF0aW5nIHRlc3QgZXhwZWN0YXRpb25zLi4uJykKKyAgICAgICAg
c2VsZi51cGRhdGVfZmxha3lfdGVzdHModGVzdF9yZXN1bHRzKQorCisgICAgICAgIGxvY2FsX3Rl
c3RfZXhwZWN0YXRpb25zX2ZpbGVuYW1lID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5wb3J0
LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpLCAnVGVzdEV4cGVjdGF0aW9uc1dQ
VCcpCisgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGluZyB0ZXN0IGV4cGVjdGF0aW9ucyBpbiBm
aWxlIFwnJyArIGxvY2FsX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGVuYW1lICsgJ1wnJykKKyAgICAg
ICAgc2VsZi5nZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKGxvY2FsX3Rlc3RfZXhwZWN0
YXRpb25zX2ZpbGVuYW1lLCBGYWxzZSwgRmFsc2UpCisKKyAgICAgICAgaWYgc2VsZi5vcHRpb25z
Ll9fZGljdF9fWydkb19tZXJnZSddOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGluZyBM
YXlvdXRUZXN0cyBmb2xkZXIgd2l0aCBuZXcgYmFzZWxpbmUnKQorICAgICAgICAgICAgc2VsZi5y
ZW1vdmVfcHJldmlvdXNfYmFzZWxpbmUoKQorICAgICAgICAgICAgc2VsZi5jb3B5X2ltcG9ydGVk
X3Rlc3RzX3RvX2xheW91dF90ZXN0c19kaXJlY3RvcnkoKQorICAgICAgICAgICAgc2VsZi5jb3B5
X3Rlc3RfZXhwZWN0ZWRfZmlsZXMoc2VsZi5sYXlvdXRfaW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgo
JycpKQorICAgICAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGluZyBXM0MgdGVzdCBleHBlY3RhdGlv
biBmaWxlIFwnJyArIHNlbGYucG9ydC5wYXRoX3RvX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnNf
ZmlsZSgpICsgJ1wnJykKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlv
bnNfZmlsZShzZWxmLnBvcnQucGF0aF90b19nZW5lcmljX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUo
KSwgVHJ1ZSwgRmFsc2UpCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLl9fZGljdF9fWydkb19t
ZXJnZV9wbGF0Zm9ybSddOgorICAgICAgICAgICAgc2VsZi5jb3B5X3Rlc3RfZXhwZWN0ZWRfZmls
ZXMoc2VsZi5sYXlvdXRfcGxhdGZvcm1fdGVzdF9maWxlX3BhdGgoJycpLCBzZWxmLmxheW91dF9p
bXBvcnRlZF90ZXN0X2ZpbGVfcGF0aCgnJykpCisgICAgICAgICAgICBwbGF0Zm9ybV90ZXN0X2V4
cGVjdGF0aW9uc19maWxlbmFtZSA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYucG9ydC5iYXNl
bGluZV92ZXJzaW9uX2RpcigpLCAnVGVzdEV4cGVjdGF0aW9ucycpCisgICAgICAgICAgICBfbG9n
LmluZm8oJ1VwZGF0aW5nIFczQyB0ZXN0IGV4cGVjdGF0aW9uIGZpbGUgXCcnICsgcGxhdGZvcm1f
dGVzdF9leHBlY3RhdGlvbnNfZmlsZW5hbWUgKyAnXCcnKQorICAgICAgICAgICAgc2VsZi5nZW5l
cmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKHBsYXRmb3JtX3Rlc3RfZXhwZWN0YXRpb25zX2Zp
bGVuYW1lLCBUcnVlLCBUcnVlKQorCisgICAgICAgIGlmIHNlbGYub3B0aW9ucy5fX2RpY3RfX1sn
ZG91YmxlX2NoZWNrJ10gYW5kIChzZWxmLm9wdGlvbnMuX19kaWN0X19bJ2RvX21lcmdlJ10gb3Ig
c2VsZi5vcHRpb25zLl9fZGljdF9fWydkb19tZXJnZV9wbGF0Zm9ybSddKToKKyAgICAgICAgICAg
IF9sb2cuaW5mbygnRG91YmxlIGNoZWNraW5nIGludGVncmF0aW9uJykKKyAgICAgICAgICAgIHNl
bGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bl93ZWJraXRfdGVzdHMoW3NlbGYud3B0X2xheW91dF90
ZXN0X3BhdGgsICctcScsICctLW5vLXJldHJ5LWZhaWx1cmVzJywgJy0tbm8tc2hvdy1yZXN1bHRz
J10pCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdG9yZV9mYWlsZWRfdGVzdHMo
c2VsZik6CisgICAgICAgIHNlbGYuZmFpbGVkX3Rlc3RzID0ge30KKyAgICAgICAgZm9yIHRlc3Qg
aW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMoKToKKyAgICAgICAgICAgIHRlc3Rfc3Rh
dHVzID0gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIuY29uZm9ybWFuY2VfcmVzdWx0KHRlc3QpCisg
ICAgICAgICAgICBpZiBub3QgdGVzdF9zdGF0dXMgPT0gJ1BBU1MnOgorICAgICAgICAgICAgICAg
IHNlbGYuZmFpbGVkX3Rlc3RzW3Rlc3RdID0gdGVzdF9zdGF0dXMKKworICAgIGRlZiBwYXNzX29y
X3BhcnRpYWxfdGVzdHMoc2VsZik6CisgICAgICAgIHBhc3NpbmdfdGVzdHMgPSBbXQorICAgICAg
ICBmb3IgdGVzdCBpbiBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci50ZXN0cygpOgorICAgICAgICAg
ICAgaWYgbm90KHRlc3QgaW4gc2VsZi5mYWlsZWRfdGVzdHMgYW5kIHNlbGYuZmFpbGVkX3Rlc3Rz
W3Rlc3RdICE9ICdQQVJUSUFMJyk6CisgICAgICAgICAgICAgICAgcGFzc2luZ190ZXN0cy5hcHBl
bmQodGVzdCkKKyAgICAgICAgcmV0dXJuIHBhc3NpbmdfdGVzdHMKKworICAgIGRlZiB1cGRhdGVf
Zmxha3lfdGVzdHMoc2VsZiwgdGVzdF9yZXN1bHRzKToKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVz
dF9yZXN1bHRzOgorICAgICAgICAgICAgc2VsZi5mYWlsZWRfdGVzdHNbdGVzdF0gPSAnRkxBS0tZ
JworCisgICAgZGVmIHRlc3RfcmVzdWx0X3RvX2V4cGVjdGF0aW9uX2xpbmUoc2VsZiwgdGVzdCwg
dGVzdF9yZXN1bHQpOgorICAgICAgICAjIENvbnZlcnRpbmcgY29uZm9ybWFuY2UgcnVubmVyIHRl
c3QgbmFtZSB0byBMYXlvdXRUZXN0cyBpbXBvcnRlZC93M2Mvd3B0IHRlc3QgbmFtZQorICAgICAg
ICB3a190ZXN0X25hbWUgPSB0ZXN0LnJlcGxhY2Uoc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucnVu
bmVkX3Rlc3RzX2RpcmVjdG9yeSwgc2VsZi53cHRfbGF5b3V0X3Rlc3RfcGF0aCwgMSkKKyAgICAg
ICAgaWYgdGVzdF9yZXN1bHQgPT0gJ1RJTUVPVVQnOgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rl
c3RfbmFtZSArICcgWyBTa2lwIF0gI1RpbWVvdXQgdGVzdCcKKyAgICAgICAgZWxpZiB0ZXN0X3Jl
c3VsdCA9PSAnQ1JBU0gnOgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBT
a2lwIF0gI0NyYXNoaW5nIHRlc3QnCisgICAgICAgIGVsaWYgdGVzdF9yZXN1bHQgPT0gJ0ZBSUwn
OgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBTa2lwIF0gI0FsbCBhc3Nl
cnRpb25zIGZhaWxpbmcnCisgICAgICAgIGVsaWYgdGVzdF9yZXN1bHQgPT0gJ0VSUk9SJzoKKyAg
ICAgICAgICAgIHJldHVybiB3a190ZXN0X25hbWUgKyAnIFsgU2tpcCBdJworICAgICAgICBlbGlm
IHRlc3RfcmVzdWx0ID09ICdQQVJUSUFMJzoKKyAgICAgICAgICAgIHJldHVybiB3a190ZXN0X25h
bWUgKyAnIFsgUGFzcyBdICNTb21lIGFzc2VydGlvbnMgcGFzc2luZycKKyAgICAgICAgZWxpZiB0
ZXN0X3Jlc3VsdCA9PSAnRkxBS0tZJzoKKyAgICAgICAgICAgIHJldHVybiB3a190ZXN0X25hbWUg
KyAnIFsgU2tpcCBdICNGbGFra3kgdGVzdCcKKyAgICAgICAgZWxpZiB0ZXN0X3Jlc3VsdCA9PSAn
U0tJUCc6CisgICAgICAgICAgICByZXR1cm4gd2tfdGVzdF9uYW1lICsgJyBbIFNraXAgXScKKyAg
ICAgICAgZWxpZiB0ZXN0X3Jlc3VsdCA9PSAnUEFTUyc6CisgICAgICAgICAgICByZXR1cm4gd2tf
dGVzdF9uYW1lICsgJyBbIFBhc3MgXScKKworICAgIGRlZiBfc2hvdWxkX3NraXBfdGVzdChzZWxm
LCB0ZXN0KToKKyAgICAgICAgcmV0dXJuIHRlc3QgaW4gc2VsZi5mYWlsZWRfdGVzdHMgYW5kIHNl
bGYuZmFpbGVkX3Rlc3RzW3Rlc3RdICE9ICdDUkFTSCcgYW5kIHNlbGYuZmFpbGVkX3Rlc3RzW3Rl
c3RdICE9ICdQQVJUSUFMJyBhbmQgc2VsZi5mYWlsZWRfdGVzdHNbdGVzdF0gIT0gJ1BBU1MnCisK
KyAgICBkZWYgZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmLCBmaWxlbmFtZSwg
ZG9fbWVyZ2UsIGlzX3BsYXRmb3JtX2V4cGVjdGF0aW9ucyk6CisgICAgICAgIHRlc3Rfc3VpdGVz
X2xpbmVzID0gc2VsZi5jb21wdXRlX3Rlc3RfZXhwZWN0YXRpb25zX2xpbmVzKCkKKyAgICAgICAg
bGluZXMgPSBzZWxmLm1lcmdlX3Rlc3RfZXhwZWN0YXRpb25zKGZpbGVuYW1lLCB0ZXN0X3N1aXRl
c19saW5lcywgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25zKSBpZiBkb19tZXJnZSBlbHNlIHNlbGYu
Y3JlYXRlX25ld190ZXN0X2V4cGVjdGF0aW9ucyh0ZXN0X3N1aXRlc19saW5lcywgaXNfcGxhdGZv
cm1fZXhwZWN0YXRpb25zKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3KycpIGFzIG91
dDoKKyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIG91dC53cml0
ZShsKQorICAgICAgICAgICAgb3V0LmNsb3NlKCkKKworICAgIGRlZiBjb21wdXRlX3Rlc3RfZXhw
ZWN0YXRpb25zX2xpbmVzKHNlbGYpOgorICAgICAgICAjICdsaW5lcycgaXMgZ3JvdXBpbmcgZXhw
ZWN0YXRpb25zIGJ5IHRlc3Qgc3VpdGUgbmFtZQorICAgICAgICBsaW5lcyA9IHt9CisgICAgICAg
IGZvciB0ZXN0X3N1aXRlIGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3Rfc3VpdGVzKCk6
CisgICAgICAgICAgICBjdXJyZW50X2xpbmVzID0gW10KKyAgICAgICAgICAgIHRlc3RfYmFzZW5h
bWUgPSBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5uZWRf
dGVzdHNfZGlyZWN0b3J5LCB0ZXN0X3N1aXRlKQorICAgICAgICAgICAgIyB0ZXN0X2Jhc2VwYXRo
IGVuZHMgd2l0aCBhICcvJyBzbyB0aGF0IHRlc3Qgc3VpdGUgJ2FiYycgYW5kIHRlc3Qgc3VpdGUg
J2FiY2RlZicgYXJlIG5vdCBjb2xsYXBzZWQgaW50byAnYWJjJworICAgICAgICAgICAgdGVzdF9i
YXNlcGF0aCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHRlc3RfYmFzZW5hbWUsICIiKQorCisgICAg
ICAgICAgICAjIEJ5IGRlZmF1bHQsIGFjdGl2YXRlIGFsbCB0ZXN0cyBpbiB0aGUgdGVzdCBzdWl0
ZQorICAgICAgICAgICAgY3VycmVudF9saW5lcy5hcHBlbmQoc2VsZi50ZXN0X3Jlc3VsdF90b19l
eHBlY3RhdGlvbl9saW5lKHRlc3RfYmFzZW5hbWUsICdQQVNTJykgKyAnXG4nKQorICAgICAgICAg
ICAgZm9yIHRlc3QgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMoKToKKyAgICAgICAg
ICAgICAgICBpZiB0ZXN0IGluIHNlbGYuZmFpbGVkX3Rlc3RzIGFuZCB0ZXN0LnN0YXJ0c3dpdGgo
dGVzdF9iYXNlcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGluZXMuYXBwZW5k
KHNlbGYudGVzdF9yZXN1bHRfdG9fZXhwZWN0YXRpb25fbGluZSh0ZXN0LCBzZWxmLmZhaWxlZF90
ZXN0c1t0ZXN0XSkgKyAnXG4nKQorICAgICAgICAgICAgbGluZXNbdGVzdF9zdWl0ZV0gPSBjdXJy
ZW50X2xpbmVzCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgbWVyZ2VfdGVzdF9l
eHBlY3RhdGlvbnMoc2VsZiwgZmlsZW5hbWUsIHRlc3Rfc3VpdGVzX2xpbmVzLCBpc19wbGF0Zm9y
bV9leHBlY3RhdGlvbnMpOgorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIGtlZXAg
aW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgdGVzdCBleHBlY3RhdGlvbiBmaWxlIChjb21t
ZW50cywgYnVnIGlkcy4uLikKKyAgICAgICAgdXBkYXRlZF9saW5lcyA9IFtdCisgICAgICAgIHRy
eToKKyAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCisgICAgICAgICAgICBsaW5l
cyA9IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIG5ld190ZXN0X3N1aXRlcyA9IHRlc3Rfc3Vp
dGVzX2xpbmVzLmNvcHkoKQorICAgICAgICAgICAgaXNfc2tpcHBpbmcgPSBGYWxzZQorICAgICAg
ICAgICAgaXNfaW5fc2VjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICBmb3VuZF9zZWN0aW9uID0g
RmFsc2UKKyAgICAgICAgICAgICMgVXBkYXRlIGV4aXN0aW5nIHRlc3Qgc3VpdGVzIGFuZCBjb3B5
IHRlc3Qgc3VpdGVzIHRoYXQgd2VyZSBub3QgdXBkYXRlZAorICAgICAgICAgICAgZm9yIGwgaW4g
bGluZXM6CisgICAgICAgICAgICAgICAgaWYgbC5zdGFydHN3aXRoKHNlbGYuc2VjdGlvbl9zdGFy
dCk6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRfbGluZXMuYXBwZW5kKGwpCisgICAgICAg
ICAgICAgICAgICAgIGlzX2luX3NlY3Rpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGZv
dW5kX3NlY3Rpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBsLnN0YXJ0c3dpdGgoc2Vs
Zi5zZWN0aW9uX2VuZCk6CisgICAgICAgICAgICAgICAgICAgIGlzX2luX3NlY3Rpb24gPSBGYWxz
ZQorICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBuZXcgdGVzdCBzdWl0ZXMKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIHRlc3Rfc3VpdGUgaW4gbmV3X3Rlc3Rfc3VpdGVzOgorICAgICAgICAg
ICAgICAgICAgICAgICAgbGluZXNfdG9fYWRkID0gW2xpbmUgZm9yIGxpbmUgaW4gbmV3X3Rlc3Rf
c3VpdGVzW3Rlc3Rfc3VpdGVdIGlmIG5vdCBzZWxmLmlzX2luX2dlbmVyaWNfdGVzdF9leHBlY3Rh
dGlvbnMobGluZSldIGlmIGlzX3BsYXRmb3JtX2V4cGVjdGF0aW9ucyBlbHNlIG5ld190ZXN0X3N1
aXRlc1t0ZXN0X3N1aXRlXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzX3Rv
X2FkZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF9saW5lcy5hcHBlbmQo
c2VsZi5ibG9ja19zdGFydCArIHRlc3Rfc3VpdGUgKyAnXG4nKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZWRfbGluZXMuZXh0ZW5kKGxpbmVzX3RvX2FkZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1cGRhdGVkX2xpbmVzLmFwcGVuZChzZWxmLmJsb2NrX2VuZCArIHRl
c3Rfc3VpdGUgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVkX2xpbmVzLmFwcGVu
ZChsKQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzX2luX3NlY3Rpb246CisgICAgICAgICAg
ICAgICAgICAgIHVwZGF0ZWRfbGluZXMuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgZWxpZiBs
LnN0YXJ0c3dpdGgoc2VsZi5ibG9ja19zdGFydCk6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0
ZWRfbGluZXMuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgICAgICMgSXMgaXQgYSB0ZXN0IHN1
aXRlIHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZD8KKyAgICAgICAgICAgICAgICAgICAgY3VycmVu
dF90ZXN0X3N1aXRlID0gbFtsZW4oc2VsZi5ibG9ja19zdGFydCk6bGVuKGwpIC0gMV0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgY3VycmVudF90ZXN0X3N1aXRlIGluIHRlc3Rfc3VpdGVzX2xpbmVz
OgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbmV3IHRlc3Qgc3VpdGUgcmVzdWx0cwor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdF9zdWl0ZXNfbGluZXNbY3Vy
cmVudF90ZXN0X3N1aXRlXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGlz
X3BsYXRmb3JtX2V4cGVjdGF0aW9ucyBhbmQgc2VsZi5pc19pbl9nZW5lcmljX3Rlc3RfZXhwZWN0
YXRpb25zKGxpbmUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF9s
aW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU2tpcCBvbGQgdGVz
dCBzdWl0ZSByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICBpc19za2lwcGluZyA9IFRy
dWUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHRlc3Qgc3VpdGUgZnJvbSB0aGUg
bGlzdCBvZiBuZXcgdGVzdCBzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld190ZXN0
X3N1aXRlcy5wb3AoY3VycmVudF90ZXN0X3N1aXRlLCBOb25lKQorICAgICAgICAgICAgICAgIGVs
aWYgbC5zdGFydHN3aXRoKHNlbGYuYmxvY2tfZW5kKToKKyAgICAgICAgICAgICAgICAgICAgdXBk
YXRlZF9saW5lcy5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAgICAgaXNfc2tpcHBpbmcgPSBG
YWxzZQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzX3NraXBwaW5nOgorICAgICAgICAgICAg
ICAgICAgICB1cGRhdGVkX2xpbmVzLmFwcGVuZChsKQorCisgICAgICAgICAgICBpZiBub3QgZm91
bmRfc2VjdGlvbjoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoIldQVCBzZWN0aW9uIG5v
dCBmb3VuZCwgYXBwZW5kaW5nIHRvIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuLi4iKQorICAgICAg
ICAgICAgICAgIG5ld19saW5lcyA9IHNlbGYuY3JlYXRlX25ld190ZXN0X2V4cGVjdGF0aW9ucyh0
ZXN0X3N1aXRlc19saW5lcywgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25zKQorICAgICAgICAgICAg
ICAgIHVwZGF0ZWRfbGluZXMuZXh0ZW5kKG5ld19saW5lcykKKworICAgICAgICBleGNlcHQgRXhj
ZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoZSkKKyAgICAgICAgICAgIF9s
b2cud2FybmluZygiQ2Fubm90IG1lcmdlIHJlc3VsdHMsIGFwcGVuZGluZyB0byB0ZXN0IGV4cGVj
dGF0aW9uIGZpbGUuLi4iKQorICAgICAgICAgICAgdXBkYXRlZF9saW5lcy5leHRlbmQoc2VsZi5j
cmVhdGVfbmV3X3Rlc3RfZXhwZWN0YXRpb25zKHRlc3Rfc3VpdGVzX2xpbmVzLCBpc19wbGF0Zm9y
bV9leHBlY3RhdGlvbnMpKQorICAgICAgICByZXR1cm4gdXBkYXRlZF9saW5lcworCisgICAgZGVm
IGlzX2luX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMoc2VsZiwgbGluZSk6CisgICAgICAgIGlm
IHNlbGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHNl
bGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMgPSBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0
X2ZpbGUoc2VsZi5wb3J0LnBhdGhfdG9fZ2VuZXJpY190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkp
CisgICAgICAgIHJldHVybiBsaW5lIGluIHNlbGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMK
KworICAgIGRlZiBjcmVhdGVfbmV3X3Rlc3RfZXhwZWN0YXRpb25zKHNlbGYsIHRlc3Rfc3VpdGVz
X2xpbmVzLCBpc19wbGF0Zm9ybV9leHBlY3RhdGlvbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisg
ICAgICAgIGxpbmVzLmFwcGVuZChzZWxmLnNlY3Rpb25fc3RhcnQgKyAnXG4nKQorICAgICAgICBp
ZiBub3QgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgbGluZXMuYXBwZW5k
KHNlbGYudGVzdF9yZXN1bHRfdG9fZXhwZWN0YXRpb25fbGluZShzZWxmLmNvbmZvcm1hbmNlX3J1
bm5lci5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCAnU0tJUCcpICsgJ1xuJykKKyAgICAgICAgZm9y
IGtleSBpbiB0ZXN0X3N1aXRlc19saW5lczoKKyAgICAgICAgICAgIGxpbmVzX3RvX2FkZCA9IFts
aW5lIGZvciBsaW5lIGluIHRlc3Rfc3VpdGVzX2xpbmVzW2tleV0gaWYgbm90IHNlbGYuaXNfaW5f
Z2VuZXJpY190ZXN0X2V4cGVjdGF0aW9ucyhsaW5lKV0gaWYgaXNfcGxhdGZvcm1fZXhwZWN0YXRp
b25zIGVsc2UgdGVzdF9zdWl0ZXNfbGluZXNba2V5XQorICAgICAgICAgICAgaWYgbGVuKGxpbmVz
X3RvX2FkZCk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuYmxvY2tfc3RhcnQg
KyBrZXkgKyAnXG4nKQorICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChsaW5lc190b19hZGQp
CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuYmxvY2tfZW5kICsga2V5ICsgJ1xu
JykKKyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuc2VjdGlvbl9lbmQpCisgICAgICAgIHJldHVy
biBsaW5lcworCisgICAgZGVmIHJlbW92ZV9wcmV2aW91c19iYXNlbGluZShzZWxmKToKKyAgICAg
ICAgZmlsZXNfb3JfZm9sZGVycyA9IFtdCisgICAgICAgICMgUmVtb3ZlIGluZnJhc3RydWN0dXJl
IGZpbGVzIGFuZCBmb2xkZXJzCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmNvbmZvcm1h
bmNlX3J1bm5lci53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci5hbHdheXNfaW1wb3J0ZWRfZmls
ZXMoKToKKyAgICAgICAgICAgIGZpbGVzX29yX2ZvbGRlcnMuYXBwZW5kKHNlbGYubGF5b3V0X2lt
cG9ydGVkX3Rlc3RfZmlsZV9wYXRoKGZpbGVuYW1lKSkKKyAgICAgICAgZm9yIGZpbGVuYW1lIGlu
IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLmFsd2F5
c19pbXBvcnRlZF9kaXJlY3RvcmllcygpOgorICAgICAgICAgICAgZmlsZXNfb3JfZm9sZGVycy5h
cHBlbmQoc2VsZi5sYXlvdXRfaW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgoZmlsZW5hbWUpKQorICAg
ICAgICAjIFJlbW92ZSB0ZXN0IHN1aXRlIGRpcmVjdG9yaWVzIGluIGltcG9ydGVkIGFuZCBwbGF0
Zm9ybSBmb2xkZXJzCisgICAgICAgIGZvciB0ZXN0c3VpdGUgaW4gc2VsZi5jb25mb3JtYW5jZV9y
dW5uZXIudGVzdF9zdWl0ZXMoKToKKyAgICAgICAgICAgIGZpbGVzX29yX2ZvbGRlcnMuYXBwZW5k
KHNlbGYubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKHRlc3RzdWl0ZSkpCisgICAgICAg
ICAgICBmaWxlc19vcl9mb2xkZXJzLmFwcGVuZChzZWxmLmxheW91dF9wbGF0Zm9ybV90ZXN0X2Zp
bGVfcGF0aCh0ZXN0c3VpdGUpKQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXNfb3JfZm9s
ZGVyczoKKyAgICAgICAgICAgIGlmIHNlbGYuZmlsZXN5c3RlbS5pc2RpcihmaWxlbmFtZSk6Cisg
ICAgICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLnJtdHJlZShmaWxlbmFtZSkKKyAgICAgICAg
ICAgIGVsaWYgc2VsZi5maWxlc3lzdGVtLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgICAgICAg
ICAgc2VsZi5maWxlc3lzdGVtLnJlbW92ZShmaWxlbmFtZSkKKworICAgIGRlZiBjb3B5X2ltcG9y
dGVkX3Rlc3RzX3RvX2xheW91dF90ZXN0c19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgICMgQ29w
eSBpbmZyYXN0cnVjdHVyZSBmaWxlcyBhbmQgZm9sZGVycworICAgICAgICBkaXJlY3Rvcmllc190
b19pbXBvcnQgPSBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci53ZWJfcGxhdGZvcm1fdGVzdF9pbXBv
cnRlci5hbHdheXNfaW1wb3J0ZWRfZGlyZWN0b3JpZXMoKQorICAgICAgICBmb3IgZmlsZW5hbWUg
aW4gZGlyZWN0b3JpZXNfdG9faW1wb3J0OgorICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLmNv
cHl0cmVlKHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLmltcG9y
dGVkX3Rlc3RzX2RpcmVjdG9yeSwgZmlsZW5hbWUpLCBzZWxmLmxheW91dF9pbXBvcnRlZF90ZXN0
X2ZpbGVfcGF0aChmaWxlbmFtZSkpCisgICAgICAgIGZpbGVzX3RvX2ltcG9ydCA9IHNlbGYuY29u
Zm9ybWFuY2VfcnVubmVyLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLmFsd2F5c19pbXBvcnRl
ZF9maWxlcygpCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBmaWxlc190b19pbXBvcnQ6CisgICAg
ICAgICAgICBzZWxmLmZpbGVzeXN0ZW0uY29weWZpbGUoc2VsZi5maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5jb25mb3JtYW5jZV9ydW5uZXIuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5LCBmaWxlbmFtZSks
IHNlbGYubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKGZpbGVuYW1lKSkKKworICAgICAg
ICAjIENvcHkgdGVzdCBzdWl0ZSBkaXJlY3RvcmllcworICAgICAgICBmb3IgdGVzdHN1aXRlIGlu
IHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3Rfc3VpdGVzKCk6CisgICAgICAgICAgICBzZWxm
LmZpbGVzeXN0ZW0uY29weXRyZWUoc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5jb25mb3JtYW5j
ZV9ydW5uZXIuaW1wb3J0ZWRfdGVzdHNfZGlyZWN0b3J5LCB0ZXN0c3VpdGUpLCBzZWxmLmxheW91
dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0aCh0ZXN0c3VpdGUpKQorCisgICAgIyByb290X2ZvbGRl
ciBpcyB0aGUgZm9sZGVyIHdoZXJlIHdpbGwgYmUgaW1wb3J0ZWQgdGhlIGV4cGVjdGVkLnR4dCBm
aWxlcworICAgICMgYmFzZV9mb2xkZXIsIGlmIGFueSwgaXMgdGhlIGZvbGRlciBjb250YWluaW5n
IHRoZSBnZW5lcmljIGV4cGVjdGVkLnR4dCBmaWxlcworICAgIGRlZiBjb3B5X3Rlc3RfZXhwZWN0
ZWRfZmlsZXMoc2VsZiwgcm9vdF9mb2xkZXIsIGJhc2VfZm9sZGVyPU5vbmUpOgorICAgICAgICBm
b3IgdGVzdCBpbiBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci50ZXN0cygpOgorICAgICAgICAgICAg
aWYgbm90IHNlbGYuX3Nob3VsZF9za2lwX3Rlc3QodGVzdCk6CisgICAgICAgICAgICAgICAgZmls
ZV9wYXRoID0gc2VsZi5wb3J0LmV4cGVjdGVkX2ZpbGVuYW1lKHRlc3QsICcudHh0JywgRmFsc2Up
CisgICAgICAgICAgICAgICAgbmV3X2ZpbGVfcGF0aCA9IGZpbGVfcGF0aC5yZXBsYWNlKHNlbGYu
Y29uZm9ybWFuY2VfcnVubmVyLnJ1bm5lZF90ZXN0c19kaXJlY3RvcnksIHJvb3RfZm9sZGVyKSBp
ZiBmaWxlX3BhdGggZWxzZSBOb25lCisgICAgICAgICAgICAgICAgY29weV9maWxlID0gbm90IGZp
bGVfcGF0aCBpcyBOb25lCisgICAgICAgICAgICAgICAgaWYgY29weV9maWxlIGFuZCBiYXNlX2Zv
bGRlcjoKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJpY19maWxlX3BhdGggPSBmaWxlX3BhdGgu
cmVwbGFjZShzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCBi
YXNlX2ZvbGRlcikKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5maWxlc3lzdGVtLmlzZmls
ZShnZW5lcmljX2ZpbGVfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X2ZpbGUg
PSBzZWxmLmZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShnZW5lcmljX2ZpbGVfcGF0aCkgPT0g
c2VsZi5maWxlc3lzdGVtLnJlYWRfYmluYXJ5X2ZpbGUoZmlsZV9wYXRoKQorICAgICAgICAgICAg
ICAgIGlmIGNvcHlfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVtLm1h
eWJlX21ha2VfZGlyZWN0b3J5KHNlbGYuZmlsZXN5c3RlbS5kaXJuYW1lKG5ld19maWxlX3BhdGgp
KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzeXN0ZW0uY29weWZpbGUoZmlsZV9wYXRo
LCBuZXdfZmlsZV9wYXRoKQorCisgICAgZGVmIGxheW91dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0
aChzZWxmLCBmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYucG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCksIHNlbGYud3B0X2xheW91dF90ZXN0X3BhdGgsIGYpCisKKyAg
ICBkZWYgbGF5b3V0X3BsYXRmb3JtX3Rlc3RfZmlsZV9wYXRoKHNlbGYsIGYpOgorICAgICAgICBy
ZXR1cm4gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5wb3J0LmJhc2VsaW5lX3ZlcnNpb25fZGly
KCksIHNlbGYud3B0X2xheW91dF90ZXN0X3BhdGgsIGYpCisKKyAgICBAY2xhc3NtZXRob2QKKyAg
ICBkZWYgY3JlYXRlX2FyZ3VtZW50X3BhcnNlcihjbHMsIGhvc3QpOgorICAgICAgICBwYXJzZXIg
PSB3M2NfY3JlYXRlX2FyZ3VtZW50X3BhcnNlcihob3N0LCBob3N0LmZpbGVzeXN0ZW0uYmFzZW5h
bWUoX19maWxlX18pKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdzNjLXUnLCAnLS13
M2MtdXBkYXRlLWxheW91dC10ZXN0cy1mb2xkZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0
PSdkb19tZXJnZScsIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgICAgICBoZWxwPSdVcGRhdGUgdGhl
IExheW91dFRlc3RzIGZvbGRlciB3aXRoIHRoZSBuZXcgYmFzZWxpbmUvZXhwZWN0YXRpb25zLiBC
eSBkZWZhdWx0LCBubyB1cGRhdGUgaXMgZG9uZS4nKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3Vt
ZW50KCctdzNjLXAnLCAnLS13M2MtdXBkYXRlLWxheW91dC1wbGF0Zm9ybS10ZXN0cy1mb2xkZXIn
LCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdkb19tZXJnZV9wbGF0Zm9ybScsIGRlZmF1bHQ9
RmFsc2UsCisgICAgICAgICAgICBoZWxwPSdVcGRhdGUgdGhlIExheW91dFRlc3RzL3BsYXRmb3Jt
IGZvbGRlciB3aXRoIHRoZSBuZXcgYmFzZWxpbmVzL2V4cGVjdGF0aW9ucyBpZiB0aGV5IGRpZmZl
ciBmcm9tIHRoZSBnZW5lcmljIGJhc2VsaW5lLiBObyB1cGRhdGUgb2YgdGhlIHRlc3RzIGlzIGRv
bmUuIEJ5IGRlZmF1bHQsIG5vIHVwZGF0ZSBpcyBkb25lLicpCisgICAgICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy13M2MtbicsICctLXczYy1uby1kb3VibGUtY2hlY2stb2YtYmFzZWxpbmUnLCBh
Y3Rpb249J3N0b3JlX2ZhbHNlJywgZGVzdD0nZG91YmxlX2NoZWNrJywgZGVmYXVsdD1UcnVlLAor
ICAgICAgICAgICAgaGVscD0nRGlzYWJsZSB0ZXN0aW5nIG9mIHRoZSBuZXcgYmFzZWxpbmUuIFRl
c3Rpbmcgb2YgdGhlIG5ldyBiYXNlbGluZSBpcyBkb25lIGJ5IGRlZmF1bHQgd2hlbiBMYXlvdXRU
ZXN0cyBpcyB1cGRhdGVkIHdpdGggdGhlIG5ldyBiYXNlbGluZS4nKQorICAgICAgICByZXR1cm4g
cGFyc2VyCisKKworZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAgY2xhc3MgTG9nSGFuZGxl
cihsb2dnaW5nLlN0cmVhbUhhbmRsZXIpOgorCisgICAgICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVj
b3JkKToKKyAgICAgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID4gbG9nZ2luZy5JTkZPOgorICAg
ICAgICAgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChyZWNvcmQubGV2ZWxuYW1lLCByZWNvcmQu
Z2V0TWVzc2FnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5nZXRNZXNzYWdlKCkKKwor
ICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9n
Z2luZy5JTkZPKQorICAgIGhhbmRsZXIgPSBMb2dIYW5kbGVyKCkKKyAgICBoYW5kbGVyLnNldExl
dmVsKGxvZ2dpbmcuSU5GTykKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorICAgIHJl
dHVybiBoYW5kbGVyCisKKworZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgIGhv
c3QgPSBIb3N0KCkKKworICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKyAgICBwYXJzZXIgPSBXM0NC
YXNlbGluZUdlbmVyYXRvci5jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3QpCisgICAgb3B0aW9u
cywgYXJncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3Qu
cG9ydF9mYWN0b3J5LmdldChvcHRpb25zLnBsYXRmb3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJr
aXRfdGVzdF9ydW5uZXInOiBvcHRpb25zLndlYmtpdF90ZXN0X3J1bm5lcn0pKQorICAgIGdlbmVy
YXRvciA9IFczQ0Jhc2VsaW5lR2VuZXJhdG9yKHBvcnQsIG9wdGlvbnMpCisgICAgZ2VuZXJhdG9y
LmdlbmVyYXRlX2Jhc2VsaW5lKCkKKworaWYgJ19fbWFpbl9fJyA9PSBfX25hbWVfXzoKKyAgICBz
eXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lzLnN0ZGVycikpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243704</attachid>
            <date>2014-12-23 15:39:13 -0800</date>
            <delta_ts>2015-01-13 07:54:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134767-20141224003913.patch</filename>
            <type>text/plain</type>
            <size>23142</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3NjIwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGM2N2ZmOWVjZDIxOWYwYjhjOGEyZDcwNmY1MWQ2Yjgx
NjU3Y2UxYS4uMTAzZDlmM2VmMzA1Y2U2ZWExMjFhM2E2N2ZjMzFmN2I4NTQ0ODE5NyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQy
IEBACisyMDE0LTEyLTIzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgdGVzdCBiYXNlbGlu
ZSBjb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM0NzY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgZ2VuZXJhdGUtdzNjLWJhc2VsaW5lIGlzIHRoZSBzY3JpcHQgdG8gZ2VuZXJhdGUgYmFz
ZWxpbmVzIGZvciBXZWIgUGxhdGZvcm0gVGVzdCBzdWl0ZXMuCisgICAgICAgIGdlbmVyYXRlX3cz
Y19iYXNlbGluZS5weSBpcyB0aGUgbWFpbiBjbGFzcyB0aGF0IGRvZXMgdGhlIHdvcmsuCisgICAg
ICAgIEl0IHVzZXMgcnVuX3czY19jb25mb3JtYW5jZSB0byBpbXBvcnQgdGhlIHRlc3RzIGFuZCBn
ZXQgdGhlIGNvbmZvcm1hbmNlIHN0YXR1cy4KKyAgICAgICAgRnJvbSB0aGUgY29uZm9ybWFuY2Ug
c3RhdHVzLCBpdCB1cGRhdGVzIHRoZSBMYXlvdXRUZXN0cyBmb2xkZXIgYnkgY29weWluZyB0ZXN0
cyBhbmQgZXhwZWN0ZWQgZmlsZXMuCisgICAgICAgIFRlc3QgZXhwZWN0YXRpb25zIGFyZSBhZGRl
ZCBpbiB0aGUgcmVsZXZhbnQgdGVzdCBleHBlY3RhdGlvbiBmaWxlLgorCisgICAgICAgICogU2Ny
aXB0cy9nZW5lcmF0ZS13M2MtYmFzZWxpbmU6IEFkZGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Vi
a2l0cHkvdzNjL2dlbmVyYXRlX3czY19iYXNlbGluZS5weTogQWRkZWQuCisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvcik6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5fX2luaXRf
Xyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5nZW5lcmF0ZV9iYXNlbGluZSk6Cisg
ICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5zdG9yZV9mYWlsZWRfdGVzdHMpOgorICAgICAg
ICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IucGFzc19vcl9wYXJ0aWFsX3Rlc3RzKToKKyAgICAgICAg
KFczQ0Jhc2VsaW5lR2VuZXJhdG9yLnVwZGF0ZV9mbGFreV90ZXN0cyk6CisgICAgICAgIChXM0NC
YXNlbGluZUdlbmVyYXRvci50ZXN0X3Jlc3VsdF90b19leHBlY3RhdGlvbl9saW5lKToKKyAgICAg
ICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLl9zaG91bGRfc2tpcF90ZXN0KToKKyAgICAgICAgKFcz
Q0Jhc2VsaW5lR2VuZXJhdG9yLmdlbmVyYXRlX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUpOgorICAg
ICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IuY29tcHV0ZV90ZXN0X2V4cGVjdGF0aW9uc19saW5l
cyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5tZXJnZV90ZXN0X2V4cGVjdGF0aW9u
cyk6CisgICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5pc19pbl9nZW5lcmljX3Rlc3RfZXhw
ZWN0YXRpb25zKToKKyAgICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNyZWF0ZV9uZXdfdGVz
dF9leHBlY3RhdGlvbnMpOgorICAgICAgICAoVzNDQmFzZWxpbmVHZW5lcmF0b3IucmVtb3ZlX3By
ZXZpb3VzX2Jhc2VsaW5lKToKKyAgICAgICAgKFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNvcHlfaW1w
b3J0ZWRfdGVzdHNfdG9fbGF5b3V0X3Rlc3RzX2RpcmVjdG9yeSk6CisgICAgICAgIChXM0NCYXNl
bGluZUdlbmVyYXRvci5jb3B5X3Rlc3RfZXhwZWN0ZWRfZmlsZXMpOgorICAgICAgICAoVzNDQmFz
ZWxpbmVHZW5lcmF0b3IubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKToKKyAgICAgICAg
KFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmxheW91dF9wbGF0Zm9ybV90ZXN0X2ZpbGVfcGF0aCk6Cisg
ICAgICAgIChXM0NCYXNlbGluZUdlbmVyYXRvci5jcmVhdGVfYXJndW1lbnRfcGFyc2VyKToKKyAg
ICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nKToKKyAgICAgICAgKGNvbmZpZ3VyZV9sb2dnaW5nLkxv
Z0hhbmRsZXIpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcuTG9nSGFuZGxlci5mb3JtYXQp
OgorICAgICAgICAobWFpbik6CisKIDIwMTQtMTItMTkgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl0gUmV2aXNlIERSVCBsb2dpYyB0byBtYXRjaCBN
YWMuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZSBiL1Rv
b2xzL1NjcmlwdHMvZ2VuZXJhdGUtdzNjLWJhc2VsaW5lCm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhYWQxZDE1MDM4
MDE3NTNhOWNhNDUyYzVhYTM2MTg2ZTNkOTJlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL2dlbmVyYXRlLXczYy1iYXNlbGluZQpAQCAtMCwwICsxLDMxIEBACisjIS91c3IvYmlu
L2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMg
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3JhcHBlciBhcm91bmQgd2Via2l0cHkvdzNj
L2dlbmVyYXRlX3czY19iYXNlbGluZS5weSIiIgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0
IG11bHRpcHJvY2Vzc2luZ19ib290c3RyYXAKKworbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5y
dW4oJ3dlYmtpdHB5JywgJ3czYycsICdnZW5lcmF0ZV93M2NfYmFzZWxpbmUucHknKQpkaWZmIC0t
Z2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvZ2VuZXJhdGVfdzNjX2Jhc2VsaW5lLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS93M2MvZ2VuZXJhdGVfdzNjX2Jhc2VsaW5lLnB5Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjAxODNhMjk3ZTdkYTc2ZGFkMTQ4NzczZDIwYzkwZjMzNzRlMWNlMjMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3czYy9nZW5lcmF0ZV93M2NfYmFz
ZWxpbmUucHkKQEAgLTAsMCArMSwzMzAgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5
cmlnaHQgKGMpIDIwMTQsIENhbm9uIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyMgICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorIyBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIiIiIEdlbmVyYXRlIGJhc2VsaW5lcyBhbmQgVGVzdEV4cGVjdGF0aW9ucyBmaWxlIGZv
ciBXM0MgdGVzdHMuIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9y
dCBvcHRwYXJzZQoraW1wb3J0IHN5cworCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5ob3N0IGltcG9y
dCBIb3N0Citmcm9tIHdlYmtpdHB5LnBvcnQgaW1wb3J0IHBsYXRmb3JtX29wdGlvbnMKK2Zyb20g
d2Via2l0cHkudzNjLnJ1bl93M2NfY29uZm9ybWFuY2VfdGVzdHMgaW1wb3J0IHczY19jcmVhdGVf
YXJndW1lbnRfcGFyc2VyCitmcm9tIHdlYmtpdHB5LnczYy5ydW5fdzNjX2NvbmZvcm1hbmNlX3Rl
c3RzIGltcG9ydCBXM0NDb25mb3JtYW5jZVJ1bm5lcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dn
ZXIoX19uYW1lX18pCisKKworY2xhc3MgVzNDQmFzZWxpbmVHZW5lcmF0b3Iob2JqZWN0KToKKyAg
ICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAgIHNlbGYucG9ydCA9
IHBvcnQKKyAgICAgICAgc2VsZi5vcHRpb25zID0gb3B0aW9ucworICAgICAgICBzZWxmLmZpbGVz
eXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorICAgICAgICBzZWxmLmNvbmZvcm1hbmNlX3J1
bm5lciA9IFczQ0NvbmZvcm1hbmNlUnVubmVyKHBvcnQsIG9wdGlvbnMpCisgICAgICAgIHNlbGYu
d3B0X2xheW91dF90ZXN0X3BhdGggPSBzZWxmLmZpbGVzeXN0ZW0uam9pbignaW1wb3J0ZWQnLCAn
dzNjJywgJ3dwdCcpCisgICAgICAgIHNlbGYuc2VjdGlvbl9zdGFydCA9ICcjIyMjIyBTdGFydCBv
ZiBXZWIgUGxhdGZvcm0gVGVzdCBFeHBlY3RhdGlvbnMnCisgICAgICAgIHNlbGYuc2VjdGlvbl9l
bmQgPSAnIyMjIyMgRW5kIG9mIFdlYiBQbGF0Zm9ybSBUZXN0IEV4cGVjdGF0aW9ucycKKyAgICAg
ICAgc2VsZi5ibG9ja19zdGFydCA9ICcjIyMjIyBTdGFydCBvZiAnCisgICAgICAgIHNlbGYuYmxv
Y2tfZW5kID0gJyMjIyMjIEVuZCBvZiAnCisgICAgICAgIHNlbGYuZmFpbGVkX3Rlc3RzID0gTm9u
ZQorCisgICAgICAgIHNlbGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMgPSBOb25lCisKKyAg
ICBkZWYgZ2VuZXJhdGVfYmFzZWxpbmUoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmNvbmZv
cm1hbmNlX3J1bm5lci5ydW5fdGVzdHMoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAg
ICAgICBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5wcmludF9yZXN1bHRzX3RvX2NvbnNvbGUoKQor
CisgICAgICAgIF9sb2cuaW5mbygnUHJvY2VzcyBjb25mb3JtYW5jZSByZXN1bHRzIHRvIGdhdGhl
ciB0ZXN0IGV4cGVjdGF0aW9ucy4uLicpCisgICAgICAgIHNlbGYuc3RvcmVfZmFpbGVkX3Rlc3Rz
KCkKKyAgICAgICAgcGFzc2luZ190ZXN0cyA9IHNlbGYucGFzc19vcl9wYXJ0aWFsX3Rlc3RzKCkK
KworICAgICAgICBfbG9nLmluZm8oJ1J1bm5pbmcgJyArIHN0cihsZW4ocGFzc2luZ190ZXN0cykp
ICsgJyBwYXNzaW5nIG9yIHBhcnRpYWxseSBwYXNzaW5nIHRlc3RzIGFnYWluIHRvIGNoZWNrIGZv
ciBmbGFra3kgYXNzZXJ0aW9ucy90ZXN0cy4uLicpCisgICAgICAgIHRlc3RfcmVzdWx0cyA9IHNl
bGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bl90ZXN0X2xpc3QocGFzc2luZ190ZXN0cykKKworICAg
ICAgICBfbG9nLmluZm8oJ1VwZGF0aW5nIHRlc3QgZXhwZWN0YXRpb25zLi4uJykKKyAgICAgICAg
c2VsZi51cGRhdGVfZmxha3lfdGVzdHModGVzdF9yZXN1bHRzKQorCisgICAgICAgIGxvY2FsX3Rl
c3RfZXhwZWN0YXRpb25zX2ZpbGVuYW1lID0gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2VsZi5wb3J0
LnczY19jb25mb3JtYW5jZV9yZXN1bHRzX2RpcmVjdG9yeSgpLCAnVGVzdEV4cGVjdGF0aW9uc1dQ
VCcpCisgICAgICAgIF9sb2cuaW5mbygnR2VuZXJhdGluZyB0ZXN0IGV4cGVjdGF0aW9ucyBpbiBm
aWxlIFwnJyArIGxvY2FsX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGVuYW1lICsgJ1wnJykKKyAgICAg
ICAgc2VsZi5nZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19maWxlKGxvY2FsX3Rlc3RfZXhwZWN0
YXRpb25zX2ZpbGVuYW1lLCBGYWxzZSwgRmFsc2UpCisKKyAgICAgICAgaWYgc2VsZi5vcHRpb25z
LmRvX21lcmdlOgorICAgICAgICAgICAgX2xvZy5pbmZvKCdVcGRhdGluZyBMYXlvdXRUZXN0cyBm
b2xkZXIgd2l0aCBuZXcgYmFzZWxpbmUnKQorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcHJldmlv
dXNfYmFzZWxpbmUoKQorICAgICAgICAgICAgc2VsZi5jb3B5X2ltcG9ydGVkX3Rlc3RzX3RvX2xh
eW91dF90ZXN0c19kaXJlY3RvcnkoKQorICAgICAgICAgICAgc2VsZi5jb3B5X3Rlc3RfZXhwZWN0
ZWRfZmlsZXMoc2VsZi5sYXlvdXRfaW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgoJycpKQorICAgICAg
ICAgICAgX2xvZy5pbmZvKCdVcGRhdGluZyBXM0MgdGVzdCBleHBlY3RhdGlvbiBmaWxlIFwnJyAr
IHNlbGYucG9ydC5wYXRoX3RvX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnNfZmlsZSgpICsgJ1wn
JykKKyAgICAgICAgICAgIHNlbGYuZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxm
LnBvcnQucGF0aF90b19nZW5lcmljX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGUoKSwgVHJ1ZSwgRmFs
c2UpCisgICAgICAgIGVsaWYgc2VsZi5vcHRpb25zLmRvX21lcmdlX3BsYXRmb3JtOgorICAgICAg
ICAgICAgc2VsZi5jb3B5X3Rlc3RfZXhwZWN0ZWRfZmlsZXMoc2VsZi5sYXlvdXRfcGxhdGZvcm1f
dGVzdF9maWxlX3BhdGgoJycpLCBzZWxmLmxheW91dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0aCgn
JykpCisgICAgICAgICAgICBwbGF0Zm9ybV90ZXN0X2V4cGVjdGF0aW9uc19maWxlbmFtZSA9IHNl
bGYuZmlsZXN5c3RlbS5qb2luKHNlbGYucG9ydC5iYXNlbGluZV92ZXJzaW9uX2RpcigpLCAnVGVz
dEV4cGVjdGF0aW9ucycpCisgICAgICAgICAgICBfbG9nLmluZm8oJ1VwZGF0aW5nIFczQyB0ZXN0
IGV4cGVjdGF0aW9uIGZpbGUgXCcnICsgcGxhdGZvcm1fdGVzdF9leHBlY3RhdGlvbnNfZmlsZW5h
bWUgKyAnXCcnKQorICAgICAgICAgICAgc2VsZi5nZW5lcmF0ZV90ZXN0X2V4cGVjdGF0aW9uc19m
aWxlKHBsYXRmb3JtX3Rlc3RfZXhwZWN0YXRpb25zX2ZpbGVuYW1lLCBUcnVlLCBUcnVlKQorCisg
ICAgICAgIGlmIHNlbGYub3B0aW9ucy5kb3VibGVfY2hlY2sgYW5kIChzZWxmLm9wdGlvbnMuZG9f
bWVyZ2Ugb3Igc2VsZi5vcHRpb25zLmRvX21lcmdlX3BsYXRmb3JtKToKKyAgICAgICAgICAgIF9s
b2cuaW5mbygnRG91YmxlIGNoZWNraW5nIGludGVncmF0aW9uJykKKyAgICAgICAgICAgIHNlbGYu
Y29uZm9ybWFuY2VfcnVubmVyLnJ1bl93ZWJraXRfdGVzdHMoW3NlbGYud3B0X2xheW91dF90ZXN0
X3BhdGgsICctcScsICctLW5vLXJldHJ5LWZhaWx1cmVzJywgJy0tbm8tc2hvdy1yZXN1bHRzJ10p
CisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBzdG9yZV9mYWlsZWRfdGVzdHMoc2Vs
Zik6CisgICAgICAgIHNlbGYuZmFpbGVkX3Rlc3RzID0ge30KKyAgICAgICAgZm9yIHRlc3QgaW4g
c2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMoKToKKyAgICAgICAgICAgIHRlc3Rfc3RhdHVz
ID0gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIuY29uZm9ybWFuY2VfcmVzdWx0KHRlc3QpCisgICAg
ICAgICAgICBpZiBub3QgdGVzdF9zdGF0dXMgPT0gJ1BBU1MnOgorICAgICAgICAgICAgICAgIHNl
bGYuZmFpbGVkX3Rlc3RzW3Rlc3RdID0gdGVzdF9zdGF0dXMKKworICAgIGRlZiBwYXNzX29yX3Bh
cnRpYWxfdGVzdHMoc2VsZik6CisgICAgICAgIHBhc3NpbmdfdGVzdHMgPSBbXQorICAgICAgICBm
b3IgdGVzdCBpbiBzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci50ZXN0cygpOgorICAgICAgICAgICAg
aWYgbm90KHRlc3QgaW4gc2VsZi5mYWlsZWRfdGVzdHMgYW5kIHNlbGYuZmFpbGVkX3Rlc3RzW3Rl
c3RdICE9ICdQQVJUSUFMJyk6CisgICAgICAgICAgICAgICAgcGFzc2luZ190ZXN0cy5hcHBlbmQo
dGVzdCkKKyAgICAgICAgcmV0dXJuIHBhc3NpbmdfdGVzdHMKKworICAgIGRlZiB1cGRhdGVfZmxh
a3lfdGVzdHMoc2VsZiwgdGVzdF9yZXN1bHRzKToKKyAgICAgICAgZm9yIHRlc3QgaW4gdGVzdF9y
ZXN1bHRzOgorICAgICAgICAgICAgc2VsZi5mYWlsZWRfdGVzdHNbdGVzdF0gPSAnRkxBS0tZJwor
CisgICAgZGVmIHRlc3RfcmVzdWx0X3RvX2V4cGVjdGF0aW9uX2xpbmUoc2VsZiwgdGVzdCwgdGVz
dF9yZXN1bHQpOgorICAgICAgICAjIENvbnZlcnRpbmcgY29uZm9ybWFuY2UgcnVubmVyIHRlc3Qg
bmFtZSB0byBMYXlvdXRUZXN0cyBpbXBvcnRlZC93M2Mvd3B0IHRlc3QgbmFtZQorICAgICAgICB3
a190ZXN0X25hbWUgPSB0ZXN0LnJlcGxhY2Uoc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucnVubmVk
X3Rlc3RzX2RpcmVjdG9yeSwgc2VsZi53cHRfbGF5b3V0X3Rlc3RfcGF0aCwgMSkKKyAgICAgICAg
aWYgdGVzdF9yZXN1bHQgPT0gJ1RJTUVPVVQnOgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3Rf
bmFtZSArICcgWyBTa2lwIF0gI1RpbWVvdXQgdGVzdCcKKyAgICAgICAgZWxpZiB0ZXN0X3Jlc3Vs
dCA9PSAnQ1JBU0gnOgorICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBTa2lw
IF0gI0NyYXNoaW5nIHRlc3QnCisgICAgICAgIGVsaWYgdGVzdF9yZXN1bHQgPT0gJ0ZBSUwnOgor
ICAgICAgICAgICAgcmV0dXJuIHdrX3Rlc3RfbmFtZSArICcgWyBTa2lwIF0gI0FsbCBhc3NlcnRp
b25zIGZhaWxpbmcnCisgICAgICAgIGVsaWYgdGVzdF9yZXN1bHQgPT0gJ0VSUk9SJzoKKyAgICAg
ICAgICAgIHJldHVybiB3a190ZXN0X25hbWUgKyAnIFsgU2tpcCBdJworICAgICAgICBlbGlmIHRl
c3RfcmVzdWx0ID09ICdQQVJUSUFMJzoKKyAgICAgICAgICAgIHJldHVybiB3a190ZXN0X25hbWUg
KyAnIFsgUGFzcyBdICNTb21lIGFzc2VydGlvbnMgcGFzc2luZycKKyAgICAgICAgZWxpZiB0ZXN0
X3Jlc3VsdCA9PSAnRkxBS0tZJzoKKyAgICAgICAgICAgIHJldHVybiB3a190ZXN0X25hbWUgKyAn
IFsgU2tpcCBdICNGbGFra3kgdGVzdCcKKyAgICAgICAgZWxpZiB0ZXN0X3Jlc3VsdCA9PSAnU0tJ
UCc6CisgICAgICAgICAgICByZXR1cm4gd2tfdGVzdF9uYW1lICsgJyBbIFNraXAgXScKKyAgICAg
ICAgZWxpZiB0ZXN0X3Jlc3VsdCA9PSAnUEFTUyc6CisgICAgICAgICAgICByZXR1cm4gd2tfdGVz
dF9uYW1lICsgJyBbIFBhc3MgXScKKworICAgIGRlZiBfc2hvdWxkX3NraXBfdGVzdChzZWxmLCB0
ZXN0KToKKyAgICAgICAgcmV0dXJuIHRlc3QgaW4gc2VsZi5mYWlsZWRfdGVzdHMgYW5kIHNlbGYu
ZmFpbGVkX3Rlc3RzW3Rlc3RdICE9ICdDUkFTSCcgYW5kIHNlbGYuZmFpbGVkX3Rlc3RzW3Rlc3Rd
ICE9ICdQQVJUSUFMJyBhbmQgc2VsZi5mYWlsZWRfdGVzdHNbdGVzdF0gIT0gJ1BBU1MnCisKKyAg
ICBkZWYgZ2VuZXJhdGVfdGVzdF9leHBlY3RhdGlvbnNfZmlsZShzZWxmLCBmaWxlbmFtZSwgZG9f
bWVyZ2UsIGlzX3BsYXRmb3JtX2V4cGVjdGF0aW9ucyk6CisgICAgICAgIHRlc3Rfc3VpdGVzX2xp
bmVzID0gc2VsZi5jb21wdXRlX3Rlc3RfZXhwZWN0YXRpb25zX2xpbmVzKCkKKyAgICAgICAgbGlu
ZXMgPSBzZWxmLm1lcmdlX3Rlc3RfZXhwZWN0YXRpb25zKGZpbGVuYW1lLCB0ZXN0X3N1aXRlc19s
aW5lcywgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25zKSBpZiBkb19tZXJnZSBlbHNlIHNlbGYuY3Jl
YXRlX25ld190ZXN0X2V4cGVjdGF0aW9ucyh0ZXN0X3N1aXRlc19saW5lcywgaXNfcGxhdGZvcm1f
ZXhwZWN0YXRpb25zKQorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3KycpIGFzIG91dDoK
KyAgICAgICAgICAgIGZvciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIG91dC53cml0ZShs
KQorICAgICAgICAgICAgb3V0LmNsb3NlKCkKKworICAgIGRlZiBjb21wdXRlX3Rlc3RfZXhwZWN0
YXRpb25zX2xpbmVzKHNlbGYpOgorICAgICAgICAjICdsaW5lcycgaXMgZ3JvdXBpbmcgZXhwZWN0
YXRpb25zIGJ5IHRlc3Qgc3VpdGUgbmFtZQorICAgICAgICBsaW5lcyA9IHt9CisgICAgICAgIGZv
ciB0ZXN0X3N1aXRlIGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3Rfc3VpdGVzKCk6Cisg
ICAgICAgICAgICBjdXJyZW50X2xpbmVzID0gW10KKyAgICAgICAgICAgIHRlc3RfYmFzZW5hbWUg
PSBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5ydW5uZWRfdGVz
dHNfZGlyZWN0b3J5LCB0ZXN0X3N1aXRlKQorICAgICAgICAgICAgIyB0ZXN0X2Jhc2VwYXRoIGVu
ZHMgd2l0aCBhICcvJyBzbyB0aGF0IHRlc3Qgc3VpdGUgJ2FiYycgYW5kIHRlc3Qgc3VpdGUgJ2Fi
Y2RlZicgYXJlIG5vdCBjb2xsYXBzZWQgaW50byAnYWJjJworICAgICAgICAgICAgdGVzdF9iYXNl
cGF0aCA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHRlc3RfYmFzZW5hbWUsICIiKQorCisgICAgICAg
ICAgICAjIEJ5IGRlZmF1bHQsIGFjdGl2YXRlIGFsbCB0ZXN0cyBpbiB0aGUgdGVzdCBzdWl0ZQor
ICAgICAgICAgICAgY3VycmVudF9saW5lcy5hcHBlbmQoc2VsZi50ZXN0X3Jlc3VsdF90b19leHBl
Y3RhdGlvbl9saW5lKHRlc3RfYmFzZW5hbWUsICdQQVNTJykgKyAnXG4nKQorICAgICAgICAgICAg
Zm9yIHRlc3QgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdHMoKToKKyAgICAgICAgICAg
ICAgICBpZiB0ZXN0IGluIHNlbGYuZmFpbGVkX3Rlc3RzIGFuZCB0ZXN0LnN0YXJ0c3dpdGgodGVz
dF9iYXNlcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfbGluZXMuYXBwZW5kKHNl
bGYudGVzdF9yZXN1bHRfdG9fZXhwZWN0YXRpb25fbGluZSh0ZXN0LCBzZWxmLmZhaWxlZF90ZXN0
c1t0ZXN0XSkgKyAnXG4nKQorICAgICAgICAgICAgbGluZXNbdGVzdF9zdWl0ZV0gPSBjdXJyZW50
X2xpbmVzCisKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgbWVyZ2VfdGVzdF9leHBl
Y3RhdGlvbnMoc2VsZiwgZmlsZW5hbWUsIHRlc3Rfc3VpdGVzX2xpbmVzLCBpc19wbGF0Zm9ybV9l
eHBlY3RhdGlvbnMpOgorICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgdHJ5IHRvIGtlZXAgaW5m
b3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgdGVzdCBleHBlY3RhdGlvbiBmaWxlIChjb21tZW50
cywgYnVnIGlkcy4uLikKKyAgICAgICAgdXBkYXRlZF9saW5lcyA9IFtdCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAncicpCisgICAgICAgICAgICBsaW5lcyA9
IGYucmVhZGxpbmVzKCkKKyAgICAgICAgICAgIG5ld190ZXN0X3N1aXRlcyA9IHRlc3Rfc3VpdGVz
X2xpbmVzLmNvcHkoKQorICAgICAgICAgICAgaXNfc2tpcHBpbmcgPSBGYWxzZQorICAgICAgICAg
ICAgaXNfaW5fc2VjdGlvbiA9IEZhbHNlCisgICAgICAgICAgICBmb3VuZF9zZWN0aW9uID0gRmFs
c2UKKyAgICAgICAgICAgICMgVXBkYXRlIGV4aXN0aW5nIHRlc3Qgc3VpdGVzIGFuZCBjb3B5IHRl
c3Qgc3VpdGVzIHRoYXQgd2VyZSBub3QgdXBkYXRlZAorICAgICAgICAgICAgZm9yIGwgaW4gbGlu
ZXM6CisgICAgICAgICAgICAgICAgaWYgbC5zdGFydHN3aXRoKHNlbGYuc2VjdGlvbl9zdGFydCk6
CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRfbGluZXMuYXBwZW5kKGwpCisgICAgICAgICAg
ICAgICAgICAgIGlzX2luX3NlY3Rpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGZvdW5k
X3NlY3Rpb24gPSBUcnVlCisgICAgICAgICAgICAgICAgZWxpZiBsLnN0YXJ0c3dpdGgoc2VsZi5z
ZWN0aW9uX2VuZCk6CisgICAgICAgICAgICAgICAgICAgIGlzX2luX3NlY3Rpb24gPSBGYWxzZQor
ICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBuZXcgdGVzdCBzdWl0ZXMKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIHRlc3Rfc3VpdGUgaW4gbmV3X3Rlc3Rfc3VpdGVzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZXNfdG9fYWRkID0gW2xpbmUgZm9yIGxpbmUgaW4gbmV3X3Rlc3Rfc3Vp
dGVzW3Rlc3Rfc3VpdGVdIGlmIG5vdCBzZWxmLmlzX2luX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlv
bnMobGluZSldIGlmIGlzX3BsYXRmb3JtX2V4cGVjdGF0aW9ucyBlbHNlIG5ld190ZXN0X3N1aXRl
c1t0ZXN0X3N1aXRlXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmVzX3RvX2Fk
ZCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF9saW5lcy5hcHBlbmQoc2Vs
Zi5ibG9ja19zdGFydCArIHRlc3Rfc3VpdGUgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZWRfbGluZXMuZXh0ZW5kKGxpbmVzX3RvX2FkZCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1cGRhdGVkX2xpbmVzLmFwcGVuZChzZWxmLmJsb2NrX2VuZCArIHRlc3Rf
c3VpdGUgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICB1cGRhdGVkX2xpbmVzLmFwcGVuZChs
KQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzX2luX3NlY3Rpb246CisgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZWRfbGluZXMuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgZWxpZiBsLnN0
YXJ0c3dpdGgoc2VsZi5ibG9ja19zdGFydCk6CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRf
bGluZXMuYXBwZW5kKGwpCisgICAgICAgICAgICAgICAgICAgICMgSXMgaXQgYSB0ZXN0IHN1aXRl
IHRoYXQgbmVlZHMgdG8gYmUgdXBkYXRlZD8KKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF90
ZXN0X3N1aXRlID0gbFtsZW4oc2VsZi5ibG9ja19zdGFydCk6bGVuKGwpIC0gMV0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgY3VycmVudF90ZXN0X3N1aXRlIGluIHRlc3Rfc3VpdGVzX2xpbmVzOgor
ICAgICAgICAgICAgICAgICAgICAgICAgIyBBZGQgbmV3IHRlc3Qgc3VpdGUgcmVzdWx0cworICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gdGVzdF9zdWl0ZXNfbGluZXNbY3VycmVu
dF90ZXN0X3N1aXRlXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGlzX3Bs
YXRmb3JtX2V4cGVjdGF0aW9ucyBhbmQgc2VsZi5pc19pbl9nZW5lcmljX3Rlc3RfZXhwZWN0YXRp
b25zKGxpbmUpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZF9saW5l
cy5hcHBlbmQobGluZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU2tpcCBvbGQgdGVzdCBz
dWl0ZSByZXN1bHRzCisgICAgICAgICAgICAgICAgICAgICAgICBpc19za2lwcGluZyA9IFRydWUK
KyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHRlc3Qgc3VpdGUgZnJvbSB0aGUgbGlz
dCBvZiBuZXcgdGVzdCBzdWl0ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld190ZXN0X3N1
aXRlcy5wb3AoY3VycmVudF90ZXN0X3N1aXRlLCBOb25lKQorICAgICAgICAgICAgICAgIGVsaWYg
bC5zdGFydHN3aXRoKHNlbGYuYmxvY2tfZW5kKToKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRl
ZF9saW5lcy5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAgICAgaXNfc2tpcHBpbmcgPSBGYWxz
ZQorICAgICAgICAgICAgICAgIGVsaWYgbm90IGlzX3NraXBwaW5nOgorICAgICAgICAgICAgICAg
ICAgICB1cGRhdGVkX2xpbmVzLmFwcGVuZChsKQorCisgICAgICAgICAgICBpZiBub3QgZm91bmRf
c2VjdGlvbjoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoIldQVCBzZWN0aW9uIG5vdCBm
b3VuZCwgYXBwZW5kaW5nIHRvIHRlc3QgZXhwZWN0YXRpb25zIGZpbGUuLi4iKQorICAgICAgICAg
ICAgICAgIG5ld19saW5lcyA9IHNlbGYuY3JlYXRlX25ld190ZXN0X2V4cGVjdGF0aW9ucyh0ZXN0
X3N1aXRlc19saW5lcywgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25zKQorICAgICAgICAgICAgICAg
IHVwZGF0ZWRfbGluZXMuZXh0ZW5kKG5ld19saW5lcykKKworICAgICAgICBleGNlcHQgRXhjZXB0
aW9uIGFzIGU6CisgICAgICAgICAgICBfbG9nLndhcm5pbmcoZSkKKyAgICAgICAgICAgIF9sb2cu
d2FybmluZygiQ2Fubm90IG1lcmdlIHJlc3VsdHMsIGFwcGVuZGluZyB0byB0ZXN0IGV4cGVjdGF0
aW9uIGZpbGUuLi4iKQorICAgICAgICAgICAgdXBkYXRlZF9saW5lcy5leHRlbmQoc2VsZi5jcmVh
dGVfbmV3X3Rlc3RfZXhwZWN0YXRpb25zKHRlc3Rfc3VpdGVzX2xpbmVzLCBpc19wbGF0Zm9ybV9l
eHBlY3RhdGlvbnMpKQorICAgICAgICByZXR1cm4gdXBkYXRlZF9saW5lcworCisgICAgZGVmIGlz
X2luX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNl
bGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYu
X2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMgPSBzZWxmLmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2Zp
bGUoc2VsZi5wb3J0LnBhdGhfdG9fZ2VuZXJpY190ZXN0X2V4cGVjdGF0aW9uc19maWxlKCkpCisg
ICAgICAgIHJldHVybiBsaW5lIGluIHNlbGYuX2dlbmVyaWNfdGVzdF9leHBlY3RhdGlvbnMKKwor
ICAgIGRlZiBjcmVhdGVfbmV3X3Rlc3RfZXhwZWN0YXRpb25zKHNlbGYsIHRlc3Rfc3VpdGVzX2xp
bmVzLCBpc19wbGF0Zm9ybV9leHBlY3RhdGlvbnMpOgorICAgICAgICBsaW5lcyA9IFtdCisgICAg
ICAgIGxpbmVzLmFwcGVuZChzZWxmLnNlY3Rpb25fc3RhcnQgKyAnXG4nKQorICAgICAgICBpZiBu
b3QgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25zOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNl
bGYudGVzdF9yZXN1bHRfdG9fZXhwZWN0YXRpb25fbGluZShzZWxmLmNvbmZvcm1hbmNlX3J1bm5l
ci5ydW5uZWRfdGVzdHNfZGlyZWN0b3J5LCAnU0tJUCcpICsgJ1xuJykKKyAgICAgICAgZm9yIGtl
eSBpbiB0ZXN0X3N1aXRlc19saW5lczoKKyAgICAgICAgICAgIGxpbmVzX3RvX2FkZCA9IFtsaW5l
IGZvciBsaW5lIGluIHRlc3Rfc3VpdGVzX2xpbmVzW2tleV0gaWYgbm90IHNlbGYuaXNfaW5fZ2Vu
ZXJpY190ZXN0X2V4cGVjdGF0aW9ucyhsaW5lKV0gaWYgaXNfcGxhdGZvcm1fZXhwZWN0YXRpb25z
IGVsc2UgdGVzdF9zdWl0ZXNfbGluZXNba2V5XQorICAgICAgICAgICAgaWYgbGVuKGxpbmVzX3Rv
X2FkZCk6CisgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuYmxvY2tfc3RhcnQgKyBr
ZXkgKyAnXG4nKQorICAgICAgICAgICAgICAgIGxpbmVzLmV4dGVuZChsaW5lc190b19hZGQpCisg
ICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuYmxvY2tfZW5kICsga2V5ICsgJ1xuJykK
KyAgICAgICAgbGluZXMuYXBwZW5kKHNlbGYuc2VjdGlvbl9lbmQpCisgICAgICAgIHJldHVybiBs
aW5lcworCisgICAgZGVmIHJlbW92ZV9wcmV2aW91c19iYXNlbGluZShzZWxmKToKKyAgICAgICAg
ZmlsZXNfb3JfZm9sZGVycyA9IFtdCisgICAgICAgICMgUmVtb3ZlIGluZnJhc3RydWN0dXJlIGZp
bGVzIGFuZCBmb2xkZXJzCisgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLmNvbmZvcm1hbmNl
X3J1bm5lci53ZWJfcGxhdGZvcm1fdGVzdF9pbXBvcnRlci50ZXN0X2luZnJhc3RydWN0dXJlX2Zp
bGVzOgorICAgICAgICAgICAgZmlsZXNfb3JfZm9sZGVycy5hcHBlbmQoc2VsZi5sYXlvdXRfaW1w
b3J0ZWRfdGVzdF9maWxlX3BhdGgoZmlsZW5hbWUpKQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4g
c2VsZi5jb25mb3JtYW5jZV9ydW5uZXIud2ViX3BsYXRmb3JtX3Rlc3RfaW1wb3J0ZXIudGVzdF9p
bmZyYXN0cnVjdHVyZV9kaXJlY3RvcmllczoKKyAgICAgICAgICAgIGZpbGVzX29yX2ZvbGRlcnMu
YXBwZW5kKHNlbGYubGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKGZpbGVuYW1lKSkKKyAg
ICAgICAgIyBSZW1vdmUgdGVzdCBzdWl0ZSBkaXJlY3RvcmllcyBpbiBpbXBvcnRlZCBhbmQgcGxh
dGZvcm0gZm9sZGVycworICAgICAgICBmb3IgdGVzdHN1aXRlIGluIHNlbGYuY29uZm9ybWFuY2Vf
cnVubmVyLnRlc3Rfc3VpdGVzKCk6CisgICAgICAgICAgICBmaWxlc19vcl9mb2xkZXJzLmFwcGVu
ZChzZWxmLmxheW91dF9pbXBvcnRlZF90ZXN0X2ZpbGVfcGF0aCh0ZXN0c3VpdGUpKQorICAgICAg
ICAgICAgZmlsZXNfb3JfZm9sZGVycy5hcHBlbmQoc2VsZi5sYXlvdXRfcGxhdGZvcm1fdGVzdF9m
aWxlX3BhdGgodGVzdHN1aXRlKSkKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzX29yX2Zv
bGRlcnM6CisgICAgICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0uaXNkaXIoZmlsZW5hbWUpOgor
ICAgICAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbS5ybXRyZWUoZmlsZW5hbWUpCisgICAgICAg
ICAgICBlbGlmIHNlbGYuZmlsZXN5c3RlbS5pc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbS5yZW1vdmUoZmlsZW5hbWUpCisKKyAgICBkZWYgY29weV9pbXBv
cnRlZF90ZXN0c190b19sYXlvdXRfdGVzdHNfZGlyZWN0b3J5KHNlbGYpOgorICAgICAgICAjIENv
cHkgaW5mcmFzdHJ1Y3R1cmUgZmlsZXMgYW5kIGZvbGRlcnMKKyAgICAgICAgZGlyZWN0b3JpZXNf
dG9faW1wb3J0ID0gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIud2ViX3BsYXRmb3JtX3Rlc3RfaW1w
b3J0ZXIudGVzdF9pbmZyYXN0cnVjdHVyZV9kaXJlY3RvcmllcworICAgICAgICBmb3IgZmlsZW5h
bWUgaW4gZGlyZWN0b3JpZXNfdG9faW1wb3J0OgorICAgICAgICAgICAgc2VsZi5maWxlc3lzdGVt
LmNvcHl0cmVlKHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLmlt
cG9ydGVkX3Rlc3RzX2RpcmVjdG9yeSwgZmlsZW5hbWUpLCBzZWxmLmxheW91dF9pbXBvcnRlZF90
ZXN0X2ZpbGVfcGF0aChmaWxlbmFtZSkpCisgICAgICAgIGZpbGVzX3RvX2ltcG9ydCA9IHNlbGYu
Y29uZm9ybWFuY2VfcnVubmVyLndlYl9wbGF0Zm9ybV90ZXN0X2ltcG9ydGVyLnRlc3RfaW5mcmFz
dHJ1Y3R1cmVfZmlsZXMKKyAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzX3RvX2ltcG9ydDoK
KyAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShzZWxmLmZpbGVzeXN0ZW0uam9p
bihzZWxmLmNvbmZvcm1hbmNlX3J1bm5lci5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksIGZpbGVu
YW1lKSwgc2VsZi5sYXlvdXRfaW1wb3J0ZWRfdGVzdF9maWxlX3BhdGgoZmlsZW5hbWUpKQorCisg
ICAgICAgICMgQ29weSB0ZXN0IHN1aXRlIGRpcmVjdG9yaWVzCisgICAgICAgIGZvciB0ZXN0c3Vp
dGUgaW4gc2VsZi5jb25mb3JtYW5jZV9ydW5uZXIudGVzdF9zdWl0ZXMoKToKKyAgICAgICAgICAg
IHNlbGYuZmlsZXN5c3RlbS5jb3B5dHJlZShzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLmNvbmZv
cm1hbmNlX3J1bm5lci5pbXBvcnRlZF90ZXN0c19kaXJlY3RvcnksIHRlc3RzdWl0ZSksIHNlbGYu
bGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmlsZV9wYXRoKHRlc3RzdWl0ZSkpCisKKyAgICAjIHJvb3Rf
Zm9sZGVyIGlzIHRoZSBmb2xkZXIgd2hlcmUgd2lsbCBiZSBpbXBvcnRlZCB0aGUgZXhwZWN0ZWQu
dHh0IGZpbGVzCisgICAgIyBiYXNlX2ZvbGRlciwgaWYgYW55LCBpcyB0aGUgZm9sZGVyIGNvbnRh
aW5pbmcgdGhlIGdlbmVyaWMgZXhwZWN0ZWQudHh0IGZpbGVzCisgICAgZGVmIGNvcHlfdGVzdF9l
eHBlY3RlZF9maWxlcyhzZWxmLCByb290X2ZvbGRlciwgYmFzZV9mb2xkZXI9Tm9uZSk6CisgICAg
ICAgIGZvciB0ZXN0IGluIHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnRlc3RzKCk6CisgICAgICAg
ICAgICBpZiBub3Qgc2VsZi5fc2hvdWxkX3NraXBfdGVzdCh0ZXN0KToKKyAgICAgICAgICAgICAg
ICBmaWxlX3BhdGggPSBzZWxmLnBvcnQuZXhwZWN0ZWRfZmlsZW5hbWUodGVzdCwgJy50eHQnLCBG
YWxzZSkKKyAgICAgICAgICAgICAgICBuZXdfZmlsZV9wYXRoID0gZmlsZV9wYXRoLnJlcGxhY2Uo
c2VsZi5jb25mb3JtYW5jZV9ydW5uZXIucnVubmVkX3Rlc3RzX2RpcmVjdG9yeSwgcm9vdF9mb2xk
ZXIpIGlmIGZpbGVfcGF0aCBlbHNlIE5vbmUKKyAgICAgICAgICAgICAgICBjb3B5X2ZpbGUgPSBu
b3QgZmlsZV9wYXRoIGlzIE5vbmUKKyAgICAgICAgICAgICAgICBpZiBjb3B5X2ZpbGUgYW5kIGJh
c2VfZm9sZGVyOgorICAgICAgICAgICAgICAgICAgICBnZW5lcmljX2ZpbGVfcGF0aCA9IGZpbGVf
cGF0aC5yZXBsYWNlKHNlbGYuY29uZm9ybWFuY2VfcnVubmVyLnJ1bm5lZF90ZXN0c19kaXJlY3Rv
cnksIGJhc2VfZm9sZGVyKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0u
aXNmaWxlKGdlbmVyaWNfZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlf
ZmlsZSA9IHNlbGYuZmlsZXN5c3RlbS5yZWFkX2JpbmFyeV9maWxlKGdlbmVyaWNfZmlsZV9wYXRo
KSA9PSBzZWxmLmZpbGVzeXN0ZW0ucmVhZF9iaW5hcnlfZmlsZShmaWxlX3BhdGgpCisgICAgICAg
ICAgICAgICAgaWYgY29weV9maWxlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGVzeXN0
ZW0ubWF5YmVfbWFrZV9kaXJlY3Rvcnkoc2VsZi5maWxlc3lzdGVtLmRpcm5hbWUobmV3X2ZpbGVf
cGF0aCkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZXN5c3RlbS5jb3B5ZmlsZShmaWxl
X3BhdGgsIG5ld19maWxlX3BhdGgpCisKKyAgICBkZWYgbGF5b3V0X2ltcG9ydGVkX3Rlc3RfZmls
ZV9wYXRoKHNlbGYsIGYpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5wb3J0LmxheW91dF90ZXN0c19kaXIoKSwgc2VsZi53cHRfbGF5b3V0X3Rlc3RfcGF0aCwgZikK
KworICAgIGRlZiBsYXlvdXRfcGxhdGZvcm1fdGVzdF9maWxlX3BhdGgoc2VsZiwgZik6CisgICAg
ICAgIHJldHVybiBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLnBvcnQuYmFzZWxpbmVfdmVyc2lv
bl9kaXIoKSwgc2VsZi53cHRfbGF5b3V0X3Rlc3RfcGF0aCwgZikKKworICAgIEBjbGFzc21ldGhv
ZAorICAgIGRlZiBjcmVhdGVfYXJndW1lbnRfcGFyc2VyKGNscywgaG9zdCk6CisgICAgICAgIHBh
cnNlciA9IHczY19jcmVhdGVfYXJndW1lbnRfcGFyc2VyKGhvc3QsIGhvc3QuZmlsZXN5c3RlbS5i
YXNlbmFtZShfX2ZpbGVfXykpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy13M2MtdScs
ICctLXczYy11cGRhdGUtbGF5b3V0LXRlc3RzLWZvbGRlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScs
IGRlc3Q9J2RvX21lcmdlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgIGhlbHA9J1VwZGF0
ZSB0aGUgTGF5b3V0VGVzdHMgZm9sZGVyIHdpdGggdGhlIG5ldyBiYXNlbGluZS9leHBlY3RhdGlv
bnMuIEJ5IGRlZmF1bHQsIG5vIHVwZGF0ZSBpcyBkb25lLicpCisgICAgICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy13M2MtcCcsICctLXczYy11cGRhdGUtbGF5b3V0LXBsYXRmb3JtLXRlc3RzLWZv
bGRlcicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J2RvX21lcmdlX3BsYXRmb3JtJywgZGVm
YXVsdD1GYWxzZSwKKyAgICAgICAgICAgIGhlbHA9J1VwZGF0ZSB0aGUgTGF5b3V0VGVzdHMvcGxh
dGZvcm0gZm9sZGVyIHdpdGggdGhlIG5ldyBiYXNlbGluZXMvZXhwZWN0YXRpb25zIGlmIHRoZXkg
ZGlmZmVyIGZyb20gdGhlIGdlbmVyaWMgYmFzZWxpbmUuIE5vIHVwZGF0ZSBvZiB0aGUgdGVzdHMg
aXMgZG9uZS4gQnkgZGVmYXVsdCwgbm8gdXBkYXRlIGlzIGRvbmUuJykKKyAgICAgICAgcGFyc2Vy
LmFkZF9hcmd1bWVudCgnLXczYy1uJywgJy0tdzNjLW5vLWRvdWJsZS1jaGVjay1vZi1iYXNlbGlu
ZScsIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdkb3VibGVfY2hlY2snLCBkZWZhdWx0PVRy
dWUsCisgICAgICAgICAgICBoZWxwPSdEaXNhYmxlIHRlc3Rpbmcgb2YgdGhlIG5ldyBiYXNlbGlu
ZS4gVGVzdGluZyBvZiB0aGUgbmV3IGJhc2VsaW5lIGlzIGRvbmUgYnkgZGVmYXVsdCB3aGVuIExh
eW91dFRlc3RzIGlzIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGJhc2VsaW5lLicpCisgICAgICAgIHJl
dHVybiBwYXJzZXIKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICBjbGFzcyBMb2dI
YW5kbGVyKGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisKKyAgICAgICAgZGVmIGZvcm1hdChzZWxm
LCByZWNvcmQpOgorICAgICAgICAgICAgaWYgcmVjb3JkLmxldmVsbm8gPiBsb2dnaW5nLklORk86
CisgICAgICAgICAgICAgICAgcmV0dXJuICIlczogJXMiICUgKHJlY29yZC5sZXZlbG5hbWUsIHJl
Y29yZC5nZXRNZXNzYWdlKCkpCisgICAgICAgICAgICByZXR1cm4gcmVjb3JkLmdldE1lc3NhZ2Uo
KQorCisgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgIGxvZ2dlci5zZXRMZXZl
bChsb2dnaW5nLklORk8pCisgICAgaGFuZGxlciA9IExvZ0hhbmRsZXIoKQorICAgIGhhbmRsZXIu
c2V0TGV2ZWwobG9nZ2luZy5JTkZPKQorICAgIGxvZ2dlci5hZGRIYW5kbGVyKGhhbmRsZXIpCisg
ICAgcmV0dXJuIGhhbmRsZXIKKworCitkZWYgbWFpbihhcmd2LCBzdGRvdXQsIHN0ZGVycik6Cisg
ICAgaG9zdCA9IEhvc3QoKQorCisgICAgY29uZmlndXJlX2xvZ2dpbmcoKQorICAgIHBhcnNlciA9
IFczQ0Jhc2VsaW5lR2VuZXJhdG9yLmNyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9zdCkKKyAgICBv
cHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJndikKKyAgICBwb3J0ID0g
aG9zdC5wb3J0X2ZhY3RvcnkuZ2V0KG9wdGlvbnMucGxhdGZvcm0sIG9wdHBhcnNlLlZhbHVlcyh7
J3dlYmtpdF90ZXN0X3J1bm5lcic6IG9wdGlvbnMud2Via2l0X3Rlc3RfcnVubmVyfSkpCisgICAg
Z2VuZXJhdG9yID0gVzNDQmFzZWxpbmVHZW5lcmF0b3IocG9ydCwgb3B0aW9ucykKKyAgICBnZW5l
cmF0b3IuZ2VuZXJhdGVfYmFzZWxpbmUoKQorCitpZiAnX19tYWluX18nID09IF9fbmFtZV9fOgor
ICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdLCBzeXMuc3Rkb3V0LCBzeXMuc3RkZXJyKSkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244514</attachid>
            <date>2015-01-13 07:55:01 -0800</date>
            <delta_ts>2015-01-13 07:55:01 -0800</delta_ts>
            <desc>Adding CSS testsuite support</desc>
            <filename>bug-134767-20150113165506.patch</filename>
            <type>text/plain</type>
            <size>12974</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc4MjU1CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmVjY2Q3OTg5N2VjMTU5NDA2YTk3ZmYyNDBhNGYwMzA3
NzBmNmFjYS4uZjdlZjc3MTQ4ZGU0OGM5NzY4YWQ3NjJiZDE0NWIyMjg1NzZjZmRhNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1
IEBACisyMDE1LTAxLTEzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24u
ZnI+CisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGF1dG9tYXRlZCBXM0MgdGVzdCBiYXNlbGlu
ZSBjb21wdXRhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTM0NzY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgdXBkYXRlLXczYy10ZXN0cyBpcyB0aGUgc2NyaXB0IHRvIHVwZGF0ZSBXM0MgaW1wb3J0
ZWQgdGVzdCBzdWl0ZXMgYW5kIHRoZWlyIGJhc2VsaW5lcy4KKyAgICAgICAgVGVzdFVwZGF0ZXIg
aXMgdGhlIG1haW4gY2xhc3MgdGhhdCBkb2VzIHRoZSB3b3JrLgorICAgICAgICBJdCBpcyBzaW1p
bGFyIGluIHNwaXJpdCB0byBodHRwczovL2NvZGVyZXZpZXcuY2hyb21pdW0ub3JnLzE0ODE3MzAx
NiB1cGRhdGUtdzNjLWRlcHMgc2NyaXB0IGluIEJsaW5rLgorICAgICAgICBJdCB1c2VzIFRlc3RJ
bXBvcnRlciB0byBpbXBvcnQgdGhlIHRlc3RzIGFuZCBydW4td2Via2l0LXRlc3RzIHRvIGdlbmVy
YXRlIHRoZSBtaXNzaW5nIGJhc2VsaW5lcy4KKworICAgICAgICAqIFNjcmlwdHMvdXBkYXRlLXcz
Yy10ZXN0czogQWRkZWQuCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS93M2MvdGVzdF91cGRh
dGVyLnB5OiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIpOgorICAgICAg
ICAoVGVzdFVwZGF0ZXIpOgorICAgICAgICAoVGVzdFVwZGF0ZXIuX19pbml0X18pOgorICAgICAg
ICAoVGVzdFVwZGF0ZXIuaW1wb3J0X3Rlc3RzKToKKyAgICAgICAgKFRlc3RVcGRhdGVyLmlzX2Jh
c2VsaW5lKToKKyAgICAgICAgKFRlc3RVcGRhdGVyLmlzX25vdF9iYXNlbGluZSk6CisgICAgICAg
IChUZXN0VXBkYXRlci50ZXN0X3BhdGhzKToKKyAgICAgICAgKFRlc3RVcGRhdGVyLmNsZWFuX3Rl
c3RfZGlyZWN0b3JpZXMpOgorICAgICAgICAoVGVzdFVwZGF0ZXIucmVtb3ZlX2RhbmdsaW5nX2V4
cGVjdGVkX2ZpbGVzKToKKyAgICAgICAgKFRlc3RVcGRhdGVyLl9wcmludF9yd3RfZXJyb3IpOgor
ICAgICAgICAoVGVzdFVwZGF0ZXIuY2hlY2tfbmV3X2V4cGVjdGVkX2ZpbGVzKToKKyAgICAgICAg
KFRlc3RVcGRhdGVyLnJ1bl90ZXN0cyk6CisgICAgICAgIChUZXN0VXBkYXRlci51cGRhdGVfdGVz
dHMpOgorICAgICAgICAoY29uZmlndXJlX2xvZ2dpbmcpOgorICAgICAgICAoY29uZmlndXJlX2xv
Z2dpbmcuTG9nSGFuZGxlcik6CisgICAgICAgIChjb25maWd1cmVfbG9nZ2luZy5Mb2dIYW5kbGVy
LmZvcm1hdCk6CisgICAgICAgIChtYWluKToKKwogMjAxNS0wMS0xMCAgTWljaGFlbCBDYXRhbnph
cm8gIDxtY2F0YW56YXJvQGlnYWxpYS5jb20+CiAKICAgICAgICAgYnVpbGQtd2Via2l0OiBzaWxl
bmNlIG91dHB1dCBvZiAnd2hpY2gnCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3VwZGF0ZS13
M2MtdGVzdHMgYi9Ub29scy9TY3JpcHRzL3VwZGF0ZS13M2MtdGVzdHMKbmV3IGZpbGUgbW9kZSAx
MDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTYz
MGI0ZmNjZGM1OGY5MjkzNWRiYjVlODAyZjI0Y2ViYWRmNzM2ZAotLS0gL2Rldi9udWxsCisrKyBi
L1Rvb2xzL1NjcmlwdHMvdXBkYXRlLXczYy10ZXN0cwpAQCAtMCwwICsxLDMxIEBACisjIS91c3Iv
YmluL2VudiBweXRob24KKworIyBDb3B5cmlnaHQgKGMpIDIwMTUsIENhbm9uIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBDYW5vbiBJbmMu
IG5vciB0aGUgbmFtZXMgb2YKKyMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyMgICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBDQU5PTiBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQ0FOT04gSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IK
KyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIiIiV3JhcHBlciBhcm91bmQgd2Via2l0cHkv
dzNjL3Rlc3RfdXBkYXRlci5weSIiIgorZnJvbSB3ZWJraXRweS5jb21tb24gaW1wb3J0IG11bHRp
cHJvY2Vzc2luZ19ib290c3RyYXAKKworbXVsdGlwcm9jZXNzaW5nX2Jvb3RzdHJhcC5ydW4oJ3dl
YmtpdHB5JywgJ3czYycsICd0ZXN0X3VwZGF0ZXIucHknKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS93M2MvdGVzdF91cGRhdGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS93M2MvdGVzdF91cGRhdGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MDRhNWI5NzdmOTE0NjQyMmE1ZDcx
OTMxOGMxNTY5YmIwNGRiODUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3czYy90ZXN0X3VwZGF0ZXIucHkKQEAgLTAsMCArMSwxNjkgQEAKK2ltcG9ydCBhcmdwYXJz
ZQoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcHRwYXJzZQoraW1wb3J0IHN5cworCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5ob3N0IGltcG9ydCBIb3N0Citmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0
ZW0uZXhlY3V0aXZlIGltcG9ydCBFeGVjdXRpdmUKK2Zyb20gd2Via2l0cHkucG9ydCBpbXBvcnQg
cGxhdGZvcm1fb3B0aW9ucworaW1wb3J0IHdlYmtpdHB5LnczYy50ZXN0X2ltcG9ydGVyIGFzIHRl
c3RfaW1wb3J0ZXIKK2Zyb20gd2Via2l0cHkudzNjLnRlc3RfZG93bmxvYWRlciBpbXBvcnQgVGVz
dERvd25sb2FkZXIKK2Zyb20gd2Via2l0cHkuY29tbW9uLndlYmtpdF9maW5kZXIgaW1wb3J0IFdl
YktpdEZpbmRlcgorCitfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVm
IGNyZWF0ZV9hcmd1bWVudF9wYXJzZXIoaG9zdCk6CisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJn
dW1lbnRQYXJzZXIoKQorCisgICAgZm9yIG9wdCBpbiBwbGF0Zm9ybV9vcHRpb25zKHVzZV9nbG9i
cz1GYWxzZSk6CisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQob3B0LmdldF9vcHRfc3RyaW5n
KCksIGFjdGlvbj1vcHQuYWN0aW9uLCBkZXN0PW9wdC5kZXN0LCBjb25zdD1nZXRhdHRyKG9wdCwg
J2NvbnN0JyksIGhlbHA9Z2V0YXR0cihvcHQsICdoZWxwJykpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLS13ZWJraXQtdGVzdC1ydW5uZXInLCAnLTInLCBhY3Rpb249J3N0b3JlX3RydWUnLCBk
ZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSdTZXQgV2ViS2l0IGFyY2hpdGVjdHVyZSBXZWJL
aXQxIG9yIFdlYktpdDIgKGRlZmF1bHQgV0sxKS4nKQorCisgICAgcGFyc2VyLmFkZF9hcmd1bWVu
dCgnLXEnLCBkZXN0PSdxdWlldCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2Us
CisgICAgICAgIGhlbHA9J1ByaW50IG1pbmltYWwgbG9nLicpCisgICAgcGFyc2VyLmFkZF9hcmd1
bWVudCgnLXYnLCBkZXN0PSd2ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1G
YWxzZSwKKyAgICAgICAgaGVscD0nUHJpbnQgbWF4aW1hbCBsb2cuJykKKyAgICBwYXJzZXIuYWRk
X2FyZ3VtZW50KCctdCcsICctLXRlc3QtcGF0aCcsIGFjdGlvbj0nYXBwZW5kJywgZGVzdD0ndGVz
dF9wYXRocycsIGRlZmF1bHQ9W10sCisgICAgICAgIGhlbHA9J0ltcG9ydCBhbmQgcnVuIG9ubHkg
dGVzdHMgaW4gdGhlIHN1cHBsaWVkIHN1YmRpcmVjdG9yeSBvZiB0aGUgTGF5b3V0VGVzdHMvaW1w
b3J0ZWQvdzNjIGRpcmVjdG9yeS4gSXQgY2FuIGJlIHN1cHBsaWVkIG11bHRpcGxlIHRpbWVzIHRv
IGdpdmUgbXVsdGlwbGUgcGF0aHMnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm8tZmV0
Y2gnLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVzdD0nZmV0Y2gnLCBkZWZhdWx0PVRydWUsCisg
ICAgICAgIGhlbHA9J0RvIG5vdCBmZXRjaCB0aGUgQ1NTL1dQVCByZXBvc2l0b3JpZXMuIEJ5IGRl
ZmF1bHQsIHJlcG9zaXRvcmllcyBhcmUgZmV0Y2hlZCcpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVu
dCgnLS1uby1ydW4nLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywgZGVzdD0ncnVuJywgZGVmYXVsdD1U
cnVlLAorICAgICAgICBoZWxwPSdEbyBub3QgcnVuIHJ1bi13ZWJraXQtdGVzdHMgYWZ0ZXIgdXBk
YXRpbmcgdGhlIFczQyB0ZXN0cy4gQnkgZGVmYXVsdCwgcnVuLXdlYmtpdC10ZXN0cyBpcyBydW4g
dG8gZ2VuZXJhdGUgbWlzc2luZyBleHBlY3RlZCBmaWxlcyBhbmQgY2hlY2sgdmFsaWRpdHkgb2Yg
dGhlIHRlc3RzLicpCisKKyAgICByZXR1cm4gcGFyc2VyCisKKworY2xhc3MgVGVzdFVwZGF0ZXIo
b2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcG9ydCwgb3B0aW9ucyk6CisgICAgICAg
IHNlbGYuX3BvcnQgPSBwb3J0CisgICAgICAgIHNlbGYuX29wdGlvbnMgPSBvcHRpb25zCisgICAg
ICAgIHNlbGYuX2ZpbGVzeXN0ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQorCisgICAgICAgIHdl
YmtpdF9maW5kZXIgPSBXZWJLaXRGaW5kZXIoc2VsZi5fZmlsZXN5c3RlbSkKKyAgICAgICAgc2Vs
Zi5fcmVsYXRpdmVfYmFzZV9kaXJlY3RvcnkgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oJ0xheW91
dFRlc3RzJywgJ2ltcG9ydGVkJywgJ3czYycpCisgICAgICAgIHNlbGYuX2xheW91dF90ZXN0c19k
aXJlY3RvcnkgPSB3ZWJraXRfZmluZGVyLnBhdGhfZnJvbV93ZWJraXRfYmFzZSgnTGF5b3V0VGVz
dHMnKQorICAgICAgICBzZWxmLl9sYXlvdXRfdGVzdHNfdzNjX2RpcmVjdG9yeSA9IHdlYmtpdF9m
aW5kZXIucGF0aF9mcm9tX3dlYmtpdF9iYXNlKHNlbGYuX3JlbGF0aXZlX2Jhc2VfZGlyZWN0b3J5
KQorICAgICAgICBzZWxmLl9idWlsZF9kaXJlY3RvcnkgPSBwb3J0Ll9idWlsZF9wYXRoKCkKKyAg
ICAgICAgc2VsZi5fbmV3X2V4cGVjdGVkX2ZpbGVzID0gW10KKworICAgIGRlZiBpbXBvcnRfdGVz
dHMoc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJy1kJywgc2VsZi5fbGF5b3V0X3Rlc3RzX3czY19k
aXJlY3RvcnldCisKKyAgICAgICAgZm9yIHRlc3RfcGF0aCBpbiBzZWxmLl9vcHRpb25zLnRlc3Rf
cGF0aHM6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgnLXQnKQorICAgICAgICAgICAgYXJncy5h
cHBlbmQodGVzdF9wYXRoKQorCisgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmZldGNoOgor
ICAgICAgICAgICAgYXJncy5hcHBlbmQoJy0tbm8tZmV0Y2gnKQorCisgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMudmVyYm9zZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCctdicpCisgICAgICAg
IGVsaWYgc2VsZi5fb3B0aW9ucy5xdWlldDoKKyAgICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCd3ZWJraXRweS53M2MudGVzdF9pbXBvcnRlcicpLnNldExldmVsKGxvZ2dpbmcuV0FSTikKKyAg
ICAgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd3ZWJraXRweS53M2MudGVzdF9jb252ZXJ0ZXIn
KS5zZXRMZXZlbChsb2dnaW5nLldBUk4pCisgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcign
d2Via2l0cHkudzNjLnRlc3RfZG93bmxvYWRlcicpLnNldExldmVsKGxvZ2dpbmcuV0FSTikKKwor
ICAgICAgICBvcHRpb25zLCBhcmdzID0gdGVzdF9pbXBvcnRlci5wYXJzZV9hcmdzKGFyZ3MpCisg
ICAgICAgIHNlbGYudGVzdF9pbXBvcnRlciA9IHRlc3RfaW1wb3J0ZXIuVGVzdEltcG9ydGVyKHNl
bGYuX3BvcnQuaG9zdCwgTm9uZSwgb3B0aW9ucykKKyAgICAgICAgc2VsZi50ZXN0X2ltcG9ydGVy
LmRvX2ltcG9ydCgpCisKKyAgICBkZWYgaXNfYmFzZWxpbmUoc2VsZiwgZmlsZXN5c3RlbSwgZGly
bmFtZSwgZmlsZW5hbWUpOgorICAgICAgICByZXR1cm4gZmlsZW5hbWUuZW5kc3dpdGgoJy1leHBl
Y3RlZC50eHQnKQorCisgICAgZGVmIGlzX25vdF9iYXNlbGluZShzZWxmLCBmaWxlc3lzdGVtLCBk
aXJuYW1lLCBmaWxlbmFtZSk6CisgICAgICAgIHJldHVybiBub3QgZmlsZW5hbWUuZW5kc3dpdGgo
Jy1leHBlY3RlZC50eHQnKQorCisgICAgZGVmIHRlc3RfcGF0aHMoc2VsZik6CisgICAgICAgIHJl
dHVybiBzZWxmLl9vcHRpb25zLnRlc3RfcGF0aHMgaWYgbGVuKHNlbGYuX29wdGlvbnMudGVzdF9w
YXRocykgIT0gMCBlbHNlIFtUZXN0RG93bmxvYWRlci5DU1NfTkFNRSwgVGVzdERvd25sb2FkZXIu
V1BUX05BTUVdCisKKyAgICBkZWYgY2xlYW5fdGVzdF9kaXJlY3RvcmllcyhzZWxmKToKKyAgICAg
ICAgZm9yIHBhdGggaW4gc2VsZi50ZXN0X3BhdGhzKCk6CisgICAgICAgICAgICBkaXJlY3Rvcnkg
PSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Rlc3RzX3czY19kaXJlY3Rvcnks
IHBhdGgpCisgICAgICAgICAgICBmb3IgcmVsYXRpdmVfcGF0aCBpbiBzZWxmLl9maWxlc3lzdGVt
LmZpbGVzX3VuZGVyKGRpcmVjdG9yeSwgZmlsZV9maWx0ZXI9c2VsZi5pc19ub3RfYmFzZWxpbmUp
OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKHNlbGYuX2ZpbGVzeXN0
ZW0uam9pbihkaXJlY3RvcnksIHJlbGF0aXZlX3BhdGgpKQorCisgICAgZGVmIHJlbW92ZV9kYW5n
bGluZ19leHBlY3RlZF9maWxlcyhzZWxmKToKKyAgICAgICAgI0ZJWE1FOiBDbGVhbiBhbHNvIHRo
ZSBleHBlY3RlZCBmaWxlcyBzdG9yZWQgaW4gYWxsIHBsYXRmb3JtIHNwZWNpZmljIGZvbGRlcnMu
CisgICAgICAgIGZvciBwYXRoIGluIHNlbGYudGVzdF9wYXRocygpOgorICAgICAgICAgICAgZGly
ZWN0b3J5ID0gc2VsZi5fZmlsZXN5c3RlbS5qb2luKHNlbGYuX2xheW91dF90ZXN0c193M2NfZGly
ZWN0b3J5LCBwYXRoKQorICAgICAgICAgICAgZm9yIHJlbGF0aXZlX3BhdGggaW4gc2VsZi5fZmls
ZXN5c3RlbS5maWxlc191bmRlcihkaXJlY3RvcnksIGZpbGVfZmlsdGVyPXNlbGYuaXNfYmFzZWxp
bmUpOgorICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IHNlbGYuX2ZpbGVzeXN0ZW0uam9pbihk
aXJlY3RvcnksIHJlbGF0aXZlX3BhdGgpCisgICAgICAgICAgICAgICAgaWYgc2VsZi5fZmlsZXN5
c3RlbS5nbG9iKGZ1bGxfcGF0aC5yZXBsYWNlKCctZXhwZWN0ZWQudHh0JywgJyonKSkgPT0gW2Z1
bGxfcGF0aF06CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ucmVtb3ZlKGZ1
bGxfcGF0aCkKKworICAgIGRlZiBfcHJpbnRfcnd0X2Vycm9yKHNlbGYsIGVycm9yKToKKyAgICAg
ICAgX2xvZy53YXJuaW5nKGVycm9yKQorCisgICAgZGVmIGNoZWNrX25ld19leHBlY3RlZF9maWxl
cyhzZWxmKToKKyAgICAgICAgZm9yIHJlbGF0aXZlX2ZpbGVfcGF0aCBpbiBzZWxmLl9uZXdfZXhw
ZWN0ZWRfZmlsZXM6CisgICAgICAgICAgICBjb250ZW50ID0gc2VsZi5fZmlsZXN5c3RlbS5yZWFk
X3RleHRfZmlsZShzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fbGF5b3V0X3Rlc3RzX2RpcmVj
dG9yeSwgcmVsYXRpdmVfZmlsZV9wYXRoKSkKKyAgICAgICAgICAgIGlmIG5vdCAnUEFTUycgaW4g
Y29udGVudDoKKyAgICAgICAgICAgICAgICBfbG9nLndhcm5pbmcoJyVzIGRvZXMgbm90IGNvbnRh
aW4gYW55IFBBU1MgYXNzZXJ0aW9uJyAlIHJlbGF0aXZlX2ZpbGVfcGF0aCkKKworICAgIGRlZiBy
dW5fdGVzdHMoc2VsZik6CisgICAgICAgIHJ1bl93ZWJraXRfYXJncyA9IFtzZWxmLl9wb3J0LnBh
dGhfdG9fc2NyaXB0KCdydW4td2Via2l0LXRlc3RzJyksICctLW5vLXJldHJ5LWZhaWx1cmVzJywg
Jy0tbm8tc2hvdy1yZXN1bHRzJ10KKworICAgICAgICB0ZXN0X3BhdGhzID0gW3NlbGYuX2ZpbGVz
eXN0ZW0uam9pbihzZWxmLl9yZWxhdGl2ZV9iYXNlX2RpcmVjdG9yeSwgdGVzdF9wYXRoKSBmb3Ig
dGVzdF9wYXRoIGluIHNlbGYudGVzdF9wYXRocygpXQorICAgICAgICB0ZXN0X2xpc3RfZmlsZW5h
bWUgPSBzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2VsZi5fYnVpbGRfZGlyZWN0b3J5LCAndzNjX3Vw
ZGF0ZXJfdGVzdF9saXN0LnR4dCcpCisgICAgICAgIHNlbGYuX2ZpbGVzeXN0ZW0ud3JpdGVfdGV4
dF9maWxlKHRlc3RfbGlzdF9maWxlbmFtZSwgJ1xuJy5qb2luKHRlc3RfcGF0aHMpKQorICAgICAg
ICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctLXRlc3QtbGlzdD0nICsgdGVzdF9saXN0X2ZpbGVu
YW1lKQorCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGxhdGZvcm06CisgICAgICAgICAgICBy
dW5fd2Via2l0X2FyZ3MuYXBwZW5kKCctLScgKyBzZWxmLl9vcHRpb25zLnBsYXRmb3JtKQorICAg
ICAgICBpZiBzZWxmLl9vcHRpb25zLndlYmtpdF90ZXN0X3J1bm5lciBpcyBUcnVlOgorICAgICAg
ICAgICAgcnVuX3dlYmtpdF9hcmdzLmFwcGVuZCgnLTInKQorCisgICAgICAgIGlmIG5vdCBzZWxm
Ll9vcHRpb25zLnZlcmJvc2U6CisgICAgICAgICAgICBydW5fd2Via2l0X2FyZ3MuYXBwZW5kKCct
cScpCisKKyAgICAgICAgZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKKyAgICAgICAgcHJvY2VzcyA9
IGV4ZWN1dGl2ZS5wb3BlbihydW5fd2Via2l0X2FyZ3MsIHN0ZG91dD1FeGVjdXRpdmUuUElQRSwg
c3RkZXJyPUV4ZWN1dGl2ZS5TVERPVVQpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAg
ICBsaW5lID0gcHJvY2Vzcy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICAgICAgc3lzLnN0ZG91
dC53cml0ZShsaW5lKQorICAgICAgICAgICAgaWYgbGluZSA9PSAnJzoKKyAgICAgICAgICAgICAg
ICBicmVhaworICAgICAgICAgICAgaWYgbGluZS5zdGFydHN3aXRoKCdXcml0aW5nIG5ldyBleHBl
Y3RlZCByZXN1bHQgJyk6CisgICAgICAgICAgICAgICAgdG9rZW5zID0gbGluZS5zcGxpdCgnICcp
CisgICAgICAgICAgICAgICAgc2VsZi5fbmV3X2V4cGVjdGVkX2ZpbGVzLmFwcGVuZCh0b2tlbnNb
NF0uc3RyaXAoKS5yZXBsYWNlKCciJywgJycpKQorICAgICAgICBwcm9jZXNzLndhaXQoKQorCisg
ICAgZGVmIHVwZGF0ZV90ZXN0cyhzZWxmKToKKyAgICAgICAgIyBGSVhNRTogUmVtb3ZlIGVtcHR5
IGRpcmVjdG9yaWVzCisgICAgICAgIHNlbGYuY2xlYW5fdGVzdF9kaXJlY3RvcmllcygpCisgICAg
ICAgIHNlbGYuaW1wb3J0X3Rlc3RzKCkKKyAgICAgICAgc2VsZi5yZW1vdmVfZGFuZ2xpbmdfZXhw
ZWN0ZWRfZmlsZXMoKQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnJ1bjoKKyAgICAgICAgICAg
IHNlbGYucnVuX3Rlc3RzKCkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbmV3X2V4cGVjdGVkX2Zp
bGVzKCkKKworCitkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICBjbGFzcyBMb2dIYW5kbGVy
KGxvZ2dpbmcuU3RyZWFtSGFuZGxlcik6CisgICAgICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3Jk
KToKKyAgICAgICAgICAgIGlmIHJlY29yZC5sZXZlbG5vID4gbG9nZ2luZy5JTkZPOgorICAgICAg
ICAgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChyZWNvcmQubGV2ZWxuYW1lLCByZWNvcmQuZ2V0
TWVzc2FnZSgpKQorICAgICAgICAgICAgcmV0dXJuIHJlY29yZC5nZXRNZXNzYWdlKCkKKworICAg
IGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2lu
Zy5JTkZPKQorICAgIGhhbmRsZXIgPSBMb2dIYW5kbGVyKCkKKyAgICBoYW5kbGVyLnNldExldmVs
KGxvZ2dpbmcuSU5GTykKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorICAgIHJldHVy
biBoYW5kbGVyCisKKworZGVmIG1haW4oYXJndiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgIGhvc3Qg
PSBIb3N0KCkKKworICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKyAgICBwYXJzZXIgPSBjcmVhdGVf
YXJndW1lbnRfcGFyc2VyKGhvc3QpCisgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9r
bm93bl9hcmdzKGFyZ3YpCisgICAgcG9ydCA9IGhvc3QucG9ydF9mYWN0b3J5LmdldChvcHRpb25z
LnBsYXRmb3JtLCBvcHRwYXJzZS5WYWx1ZXMoeyd3ZWJraXRfdGVzdF9ydW5uZXInOiBvcHRpb25z
LndlYmtpdF90ZXN0X3J1bm5lcn0pKQorICAgIHVwZGF0ZXIgPSBUZXN0VXBkYXRlcihwb3J0LCBv
cHRpb25zKQorICAgIHVwZGF0ZXIudXBkYXRlX3Rlc3RzKCkKKworaWYgJ19fbWFpbl9fJyA9PSBf
X25hbWVfXzoKKyAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2WzE6XSwgc3lzLnN0ZG91dCwgc3lz
LnN0ZGVycikpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCA1ZjU0MTI3ZTMxZjA5
ODc0ZGNkOTA0OTdhNDRhMTkwOWQ0NTgxNGU3Li4yZDVhMWQzYjdkNGRkOTE0MDk2MGU3ZTVhNTky
ZjcyZjUwNzhkYTAzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NSBAQAorMjAxNS0wMS0xMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubi5mYWJsZXRAY3JmLmNhbm9u
LmZyPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBhdXRvbWF0ZWQgVzNDIHRlc3QgYmFzZWxp
bmUgY29tcHV0YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEzNDc2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoZSB2ZXJzaW9uIG9mIENTUyBhbmQgV1BUIHJlcG9zaXRvcmllcyB0byBpbXBvcnQg
dXNpbmcgaW1wb3J0LXczYy10ZXN0cyBvciB1cGRhdGUtdzNjLXRlc3RzCisKKyAgICAgICAgKiBy
ZXNvdXJjZXMvQ1NTVmVyc2lvbjogQWRkZWQuCisgICAgICAgICogcmVzb3VyY2VzL1dQVFZlcnNp
b246IEFkZGVkLgorCiAyMDE0LTExLTE0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3
YUBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wb3J0IHczYyB0ZXN0cyBmb3IgY2FudmFzCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL0NTU1ZlcnNpb24gYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvcmVzb3VyY2VzL0NTU1ZlcnNpb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MWY3MzkxZjkyYjZhMzc5MjIwNGUwN2U5OWY3MWY2NDNjYzM1ZTdlMQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvQ1NTVmVyc2lvbgpAQCAtMCww
ICsxIEBACittYXN0ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNv
dXJjZXMvV1BUVmVyc2lvbiBiL0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9yZXNvdXJjZXMvV1BU
VmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xZjczOTFmOTJiNmEzNzkyMjA0ZTA3ZTk5ZjcxZjY0M2NjMzVl
N2UxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3Jlc291cmNl
cy9XUFRWZXJzaW9uCkBAIC0wLDAgKzEgQEAKK21hc3Rlcgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>