<?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>91754</bug_id>
          
          <creation_ts>2012-07-19 09:24:59 -0700</creation_ts>
          <short_desc>[NRWT] should have a way to restrict pixel tests for individual directories</short_desc>
          <delta_ts>2012-07-30 04:12:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>NRWT</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>92501</dependson>
    
    <dependson>92627</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Balazs Kelemen">kbalazs</assigned_to>
          <cc>abarth</cc>
    
    <cc>dpranke</cc>
    
    <cc>galpeter</cc>
    
    <cc>noam</cc>
    
    <cc>ojan</cc>
    
    <cc>ossy</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>673578</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-19 09:24:59 -0700</bug_when>
    <thetext>Running pixel tests need too much manpower, so it&apos;s not a surprise that only chromium runs them on bots. On the other hand there is no other way to test accelerated compositing and some other graphics staff. My idea to resolve this conflict is to introduce an option to specify what directories should be enabled for pixel testing.
This could be used like:
    run-webkit-tests --pixel-tests --pixel-test-directories animations compositing

This is a current need of the Qt port but I think it can be useful in general.
I should note here that the option --skip-pixel-test-if-no-baseline has been introduced for similar reasons but it has turned out that it is not a very good solution. Normally we have some pixel results checked in for every test, otherwise gardening would be hard, but still we only want to actually run and maintain pixel tests for a subset of the tests, especially compositing and animation tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673585</commentid>
    <comment_count>1</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-19 09:36:30 -0700</bug_when>
    <thetext>I think something like this is a good idea. I don&apos;t think I&apos;d like it to be a command-line argument, though, mostly because I don&apos;t want to have to specify it every time. 

Perhaps it should be an entry in the TestExpectations file, or a separate port-specific list instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673740</commentid>
    <comment_count>2</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-19 11:45:34 -0700</bug_when>
    <thetext>Balazs, you assigned this to yourself; does that mean that you want to work on it? If not, I&apos;d be happy to work up something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>673815</commentid>
    <comment_count>3</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-19 12:49:21 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Balazs, you assigned this to yourself; does that mean that you want to work on it? If not, I&apos;d be happy to work up something.

Yes, I started implementing this. I will upload something tomorrow :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674643</commentid>
    <comment_count>4</comment_count>
      <attachid>153526</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-20 09:36:13 -0700</bug_when>
    <thetext>Created attachment 153526
first attempt - with command line argument</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674645</commentid>
    <comment_count>5</comment_count>
      <attachid>153526</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-07-20 09:39:10 -0700</bug_when>
    <thetext>Comment on attachment 153526
first attempt - with command line argument

Attachment 153526 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13303380</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674696</commentid>
    <comment_count>6</comment_count>
      <attachid>153534</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-20 10:28:41 -0700</bug_when>
    <thetext>Created attachment 153534
buildfixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674734</commentid>
    <comment_count>7</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-20 10:58:40 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; I think something like this is a good idea. I don&apos;t think I&apos;d like it to be a command-line argument, though, mostly because I don&apos;t want to have to specify it every time. 
&gt; 
&gt; Perhaps it should be an entry in the TestExpectations file, or a separate port-specific list instead.

I guess you mean developers wants to run the same set of pixel tests that are runned on the bots, right? It&apos;s a good point but still we have to allow to run all pixel tests. I can think about something like that: https://gist.github.com/3152176. So by default you run the same set of pixel tests that are defined by the platform (so executed on bots as well), but you can get the current behavior of --pixel-tests by adding &quot;--pixel-test-directories all&quot;. It could still be a bit strange for people at first, hopefully we can make it understood by discussing the change on the mail list. So, do you think this is a reasonable approach (a question for everybody who reads this)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674851</commentid>
    <comment_count>8</comment_count>
      <attachid>153534</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-20 12:39:11 -0700</bug_when>
    <thetext>Comment on attachment 153534
buildfixed

Generally this approach looks pretty good, and is more-or-less how I was thinking of implementing it as well. I&apos;m glad you&apos;re adding the per-test-arg support for pixel-tests as well (although we could theoretically split that into a second patch). 

We should add some tests for this to run_webkit_tests_integrationtest.py as well.


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

&gt; Tools/ChangeLog:43
&gt; +        and Qt DRT currently. This supposed to exist only temporary until other ports don&apos;t

nit: remove the &quot;don&apos;t&quot; at the end of the line :).

&gt; Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:746
&gt; +    m_dumpPixelsForAllTests = dump;

Do we need this flag? Maybe we should pass --pixel-test/--no-pixel-test for every test instead to be explicit, and not have a process-wide default?

Maybe we want this for compatibility w/ ORWT, but it might be better to just change ORWT instead?

&gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:101
&gt; +                       for directory in self._options.pixel_test_directories)

I think I would make this whole call a method on the port() object, so that the logic is encapsulated there. That way the list of pixel_test_directories can also be hard-coded on the port if so desired, and also, more generally, I like to push everything that is optional or port-specific behind the port() interface, so that there are fewer of these complicated rules in the non-port code.

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:616
&gt; +        return directory in test_name.split(self.TEST_PATH_SEPARATOR)

Are you sure this doesn&apos;t need to be test_name.startswith() ? For example, if you have &apos;--pixel-test-directories compositing&apos;, this&apos;ll pick up compositing/foo.html *and* platform/qt/compositing/foo.html. Perhaps that is intentional (I can see an argument for this)? However, this would also mean that if I had &apos;--pixel-test-directories qt&apos; we&apos;d run *every* platform-specific qt directory with pixel tests, which seems less good.

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:619
&gt; +        return re.sub(self.layout_tests_dir() + str(self.TEST_PATH_SEPARATOR), &apos;&apos;, test_name)

I think this is reimplementing port.relative_test_filename().

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:298
&gt; +        if pixel_tests and not self._port.supports_switching_pixel_tests_per_test():

I&apos;m not sure if this interacts correctly with the &apos;shouldDumpAllPixelTests&apos; option you&apos;ve added, which is partially why I&apos;m wondering if we should just get rid of shouldDumpAll() ...

Also, we should check that this interacts correctly with DriverProxy, so that if the port doesn&apos;t support switching per test, --pixel-test-directories will still work and we&apos;ll just switch between the two DRTs, like we do for reftests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>674853</commentid>
    <comment_count>9</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-20 12:40:08 -0700</bug_when>
    <thetext>I should have mentioned that I&apos;m not the most familiar with DRT/WTR code, so while the change looks good to me, I don&apos;t know if there&apos;s a better way to implement it so it might be nice if someone else chimed in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675627</commentid>
    <comment_count>10</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-23 04:55:56 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:746
&gt; &gt; +    m_dumpPixelsForAllTests = dump;
&gt; 
&gt; Do we need this flag? Maybe we should pass --pixel-test/--no-pixel-test for every test instead to be explicit, and not have a process-wide default?
&gt; Maybe we want this for compatibility w/ ORWT, but it might be better to just change ORWT instead?

I kept it for compatibility with orwt and also it could be useful sometimes when you have to debug something related to pixel tests. It&apos;s controversial whether it is worth to keep it, but I rather feel like we should keep it until every port can handle per test specification.
 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/controllers/worker.py:101
&gt; &gt; +                       for directory in self._options.pixel_test_directories)
&gt; 
&gt; I think I would make this whole call a method on the port() object, so that the logic is encapsulated there. That way the list of pixel_test_directories can also be hard-coded on the port if so desired, and also, more generally, I like to push everything that is optional or port-specific behind the port() interface, so that there are fewer of these complicated rules in the non-port code.

Good idea, I will consider this in the next patch.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:616
&gt; &gt; +        return directory in test_name.split(self.TEST_PATH_SEPARATOR)
&gt; 
&gt; Are you sure this doesn&apos;t need to be test_name.startswith() ? For example, if you have &apos;--pixel-test-directories compositing&apos;, this&apos;ll pick up compositing/foo.html *and* platform/qt/compositing/foo.html. Perhaps that is intentional (I can see an argument for this)? However, this would also mean that if I had &apos;--pixel-test-directories qt&apos; we&apos;d run *every* platform-specific qt directory with pixel tests, which seems less good.

It was not intentional, so I will change it.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:619
&gt; &gt; +        return re.sub(self.layout_tests_dir() + str(self.TEST_PATH_SEPARATOR), &apos;&apos;, test_name)
&gt; 
&gt; I think this is reimplementing port.relative_test_filename().
&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:298
&gt; &gt; +        if pixel_tests and not self._port.supports_switching_pixel_tests_per_test():
&gt; 
&gt; I&apos;m not sure if this interacts correctly with the &apos;shouldDumpAllPixelTests&apos; option you&apos;ve added, which is partially why I&apos;m wondering if we should just get rid of shouldDumpAll() ...

It should interact correctly. I did not add an option just renamed the variable holding whether --pixel-tests have been added, and I don&apos;t push this parameter to the driver if per test switching is supported.
 
&gt; Also, we should check that this interacts correctly with DriverProxy, so that if the port doesn&apos;t support switching per test, --pixel-test-directories will still work and we&apos;ll just switch between the two DRTs, like we do for reftests.

DriverProxy seems like a bit of a hack to me. Can&apos;t we just get rid of it after every ports support per test pixel test setting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675628</commentid>
    <comment_count>11</comment_count>
      <attachid>153534</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-23 04:56:39 -0700</bug_when>
    <thetext>Comment on attachment 153534
buildfixed

Need another round.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675637</commentid>
    <comment_count>12</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2012-07-23 05:20:02 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=153534&amp;action=review

Just a python nit:

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:192
&gt; +            sanitized = []

Why don&apos;t you use set() here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675653</commentid>
    <comment_count>13</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-23 05:46:38 -0700</bug_when>
    <thetext>One more thing.

&gt; I think I would make this whole call a method on the port() object, so that the logic is encapsulated there. That way the list of pixel_test_directories can also be hard-coded on the port if so desired, and also, more generally, I like to push everything that is optional or port-specific behind the port() interface, so that there are fewer of these complicated rules in the non-port code.
&gt;

I think we need more flexibility than just hard coding these directories in the port object. A hard coded default is reasonable, but I think it should be possible to override it with the command line arg. I will include this in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675781</commentid>
    <comment_count>14</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-23 09:54:43 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; 
&gt; &gt; &gt; Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp:746
&gt; &gt; &gt; +    m_dumpPixelsForAllTests = dump;
&gt; &gt; 
&gt; &gt; Do we need this flag? Maybe we should pass --pixel-test/--no-pixel-test for every test instead to be explicit, and not have a process-wide default?
&gt; &gt; Maybe we want this for compatibility w/ ORWT, but it might be better to just change ORWT instead?
&gt; 
&gt; I kept it for compatibility with orwt and also it could be useful sometimes when you have to debug something related to pixel tests. It&apos;s controversial whether it is worth to keep it, but I rather feel like we should keep it until every port can handle per test specification.
&gt; 

Okay. I don&apos;t feel strongly about this, I just wanted to mention the option.

&gt; &gt; Also, we should check that this interacts correctly with DriverProxy, so that if the port doesn&apos;t support switching per test, --pixel-test-directories will still work and we&apos;ll just switch between the two DRTs, like we do for reftests.
&gt; 
&gt; DriverProxy seems like a bit of a hack to me. Can&apos;t we just get rid of it after every ports support per test pixel test setting?

Yes, definitely, that&apos;s the plan. I just wanted the feature to work in the meantime.

(In reply to comment #13)
&gt; One more thing.
&gt; 
&gt; &gt; I think I would make this whole call a method on the port() object, so that the logic is encapsulated there. That way the list of pixel_test_directories can also be hard-coded on the port if so desired, and also, more generally, I like to push everything that is optional or port-specific behind the port() interface, so that there are fewer of these complicated rules in the non-port code.
&gt; &gt;
&gt; 
&gt; I think we need more flexibility than just hard coding these directories in the port object. A hard coded default is reasonable, but I think it should be possible to override it with the command line arg. I will include this in the next patch.

I agree completely; I did not mean to suggest we didn&apos;t also want the command line flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676634</commentid>
    <comment_count>15</comment_count>
      <attachid>154015</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-24 04:16:35 -0700</bug_when>
    <thetext>Created attachment 154015
wip patch, test is missing yet</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>676638</commentid>
    <comment_count>16</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-24 04:21:02 -0700</bug_when>
    <thetext>&gt; &gt; 
&gt; &gt; DriverProxy seems like a bit of a hack to me. Can&apos;t we just get rid of it after every ports support per test pixel test setting?
&gt; 
&gt; Yes, definitely, that&apos;s the plan. I just wanted the feature to work in the meantime.
&gt; 

For me it seems easier to just implement it in every DRT, so I did not tried to make it work with DriverProxy.

With the test I have some trouble, so I need some more time to find my way in integration tests and write a test for this feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677000</commentid>
    <comment_count>17</comment_count>
      <attachid>154101</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-24 10:41:59 -0700</bug_when>
    <thetext>Created attachment 154101
proposed patch, test included</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677072</commentid>
    <comment_count>18</comment_count>
      <attachid>154101</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-24 11:50:01 -0700</bug_when>
    <thetext>Comment on attachment 154101
proposed patch, test included

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

getting close ...

&gt; Tools/ChangeLog:15
&gt; +        with these drivers.

So, the idea is that if you don&apos;t pass --pixel-test-directories and the port&apos;s _in_default_pixel_test_directory() always returns false then we will run all pixel tests, right?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:755
&gt; +        return relative_path if self._filesystem.exists(self._filesystem.join(self.layout_tests_dir(), relative_path)) else None

It looks like you&apos;re adding this function so that we can support one of three ways of specifying tests ...

1) absolute paths, e.g. &apos;/checkout/LayoutTests/foo
2) paths relative to the checkout, e.g., &apos;LayoutTests/foo&apos;
3) paths relative to &apos;LayoutTests&apos;, e.g., &apos;foo&apos;

right?

I don&apos;t know that supporting (1) is worth it or needed, but maybe you have some need for it I&apos;m not aware of? Most of the other ways of specifying tests and directories don&apos;t support this method, so I would prefer not to support it, for consistency.

Supporting (2) is done for NRWT in the manager code (in collect_tests() and strip_test_dir_prefixes()). It would be good to combine that code with this.

Can we constrain this patch to just supporting (3), and then support (2) in a separate patch? If you would prefer to leave things the way they are, can you at least add a FIXME: comment to combine the code later?

Lastly, this name is too similar to relative_test_filename(); I don&apos;t think callers would know when to use one or the other, so we should find a different name. We should also figure out if we can just combine the two routines - does anything *rely* on relatlive_test_filename only having the third type of filename passed as input?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:-746
&gt; -        # filenames with backslashes in them.

Why did you delete this comment?

&gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:344
&gt; +                command += &quot;&apos;&quot; + &apos;--pixel-test&apos;

We should add a comment noting that we are intentionally passing the flag even if the driver was started with --pixel-tests (and to be clear, I think passing the flag is the right thing to do).

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:348
&gt; +                 Example: \&apos;animations compositing\&apos;.&apos;&apos;&apos;),

typically we either just specify the command line argument multiple times and do action=&apos;append&apos; (as in --additional-platform-directory) or we would do that and also optionally have the list be comma-separated (NRWT doesn&apos;t use this style, but webkit-patch does in places). Can we either just start with specifying the argument multiple times or support that plus using commas instead, to be consistent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677075</commentid>
    <comment_count>19</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-24 11:54:30 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; For me it seems easier to just implement it in every DRT, so I did not tried to make it work with DriverProxy.
&gt; 

Fair enough. However, I&apos;d expect it to almost just work (if not just work). What happens if you run this and specify some directories and just set _supports_switching_pixel_tests_per_test() to return False?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>677996</commentid>
    <comment_count>20</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-25 06:54:42 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 154101 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154101&amp;action=review
&gt; 
&gt; getting close ...
&gt; 
&gt; &gt; Tools/ChangeLog:15
&gt; &gt; +        with these drivers.
&gt; 
&gt; So, the idea is that if you don&apos;t pass --pixel-test-directories and the port&apos;s _in_default_pixel_test_directory() always returns false then we will run all pixel tests, right?

It was messed up a bit, so I changed it.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:755
&gt; &gt; +        return relative_path if self._filesystem.exists(self._filesystem.join(self.layout_tests_dir(), relative_path)) else None
&gt; 
&gt; It looks like you&apos;re adding this function so that we can support one of three ways of specifying tests ...
&gt; 
&gt; 1) absolute paths, e.g. &apos;/checkout/LayoutTests/foo
&gt; 2) paths relative to the checkout, e.g., &apos;LayoutTests/foo&apos;
&gt; 3) paths relative to &apos;LayoutTests&apos;, e.g., &apos;foo&apos;
&gt; 
&gt; right?
&gt; 
&gt; I don&apos;t know that supporting (1) is worth it or needed, but maybe you have some need for it I&apos;m not aware of? Most of the other ways of specifying tests and directories don&apos;t support this method, so I would prefer not to support it, for consistency.
&gt; 
&gt; Supporting (2) is done for NRWT in the manager code (in collect_tests() and strip_test_dir_prefixes()). It would be good to combine that code with this.
&gt; 
&gt; Can we constrain this patch to just supporting (3), and then support (2) in a separate patch? If you would prefer to leave things the way they are, can you at least add a FIXME: comment to combine the code later?
&gt; 
&gt; Lastly, this name is too similar to relative_test_filename(); I don&apos;t think callers would know when to use one or the other, so we should find a different name. We should also figure out if we can just combine the two routines - does anything *rely* on relatlive_test_filename only having the third type of filename passed as input?

I think collect_tests supports all the three way, so I was thinking I should do the same. Yes, it&apos;s better to leave it to a follow-up patch, so now I restricted to the third form as you suggested.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:-746
&gt; &gt; -        # filenames with backslashes in them.
&gt; 
&gt; Why did you delete this comment?

By accident.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/port/driver.py:344
&gt; &gt; +                command += &quot;&apos;&quot; + &apos;--pixel-test&apos;
&gt; 
&gt; We should add a comment noting that we are intentionally passing the flag even if the driver was started with --pixel-tests (and to be clear, I think passing the flag is the right thing to do).

We should pass --pixel-tests to the driver when it is started, or pass --pixel-test for each test that should run as pixel test, but not both. I added a comment and an assert to make it clearer.

&gt; 
&gt; &gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:348
&gt; &gt; +                 Example: \&apos;animations compositing\&apos;.&apos;&apos;&apos;),
&gt; 
&gt; typically we either just specify the command line argument multiple times and do action=&apos;append&apos; (as in --additional-platform-directory) or we would do that and also optionally have the list be comma-separated (NRWT doesn&apos;t use this style, but webkit-patch does in places). Can we either just start with specifying the argument multiple times or support that plus using commas instead, to be consistent?

Ok, I restricted it to accept a single arg multiple times. Probably I can look into accepting a comma separated list later.


(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; For me it seems easier to just implement it in every DRT, so I did not tried to make it work with DriverProxy.
&gt; &gt; 
&gt; 
&gt; Fair enough. However, I&apos;d expect it to almost just work (if not just work). What happens if you run this and specify some directories and just set _supports_switching_pixel_tests_per_test() to return False?

This would not work correctly with the previous patch. I changed it so if per test switch is not supported we don&apos;t try to handle the option.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678270</commentid>
    <comment_count>21</comment_count>
      <attachid>154101</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-25 11:19:59 -0700</bug_when>
    <thetext>Comment on attachment 154101
proposed patch, test included

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

r-&apos;ing this since it sounds like you&apos;ve got another patch on the way.

&gt;&gt;&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:755
&gt;&gt;&gt; +        return relative_path if self._filesystem.exists(self._filesystem.join(self.layout_tests_dir(), relative_path)) else None
&gt;&gt; 
&gt;&gt; It looks like you&apos;re adding this function so that we can support one of three ways of specifying tests ...
&gt;&gt; 
&gt;&gt; 1) absolute paths, e.g. &apos;/checkout/LayoutTests/foo
&gt;&gt; 2) paths relative to the checkout, e.g., &apos;LayoutTests/foo&apos;
&gt;&gt; 3) paths relative to &apos;LayoutTests&apos;, e.g., &apos;foo&apos;
&gt;&gt; 
&gt;&gt; right?
&gt;&gt; 
&gt;&gt; I don&apos;t know that supporting (1) is worth it or needed, but maybe you have some need for it I&apos;m not aware of? Most of the other ways of specifying tests and directories don&apos;t support this method, so I would prefer not to support it, for consistency.
&gt;&gt; 
&gt;&gt; Supporting (2) is done for NRWT in the manager code (in collect_tests() and strip_test_dir_prefixes()). It would be good to combine that code with this.
&gt;&gt; 
&gt;&gt; Can we constrain this patch to just supporting (3), and then support (2) in a separate patch? If you would prefer to leave things the way they are, can you at least add a FIXME: comment to combine the code later?
&gt;&gt; 
&gt;&gt; Lastly, this name is too similar to relative_test_filename(); I don&apos;t think callers would know when to use one or the other, so we should find a different name. We should also figure out if we can just combine the two routines - does anything *rely* on relatlive_test_filename only having the third type of filename passed as input?
&gt; 
&gt; I think collect_tests supports all the three way, so I was thinking I should do the same. Yes, it&apos;s better to leave it to a follow-up patch, so now I restricted to the third form as you suggested.

Nope, collect_tests() won&apos;t accept absolute paths (at least in the case I just tested, and I didn&apos;t think it worked, either). We could certainly change that, but I&apos;ve never heard someone actually request it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678282</commentid>
    <comment_count>22</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-25 11:25:03 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Nope, collect_tests() won&apos;t accept absolute paths (at least in the case I just tested, and I didn&apos;t think it worked, either). We could certainly change that, but I&apos;ve never heard someone actually request it.

Argh, I&apos;m totally wrong. It does work, my test was bad. I guess this is an unintentional feature. For the record, I have nothing against this working, but I should probably add a test or something to make sure it keeps working :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678317</commentid>
    <comment_count>23</comment_count>
      <attachid>154412</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-25 11:57:46 -0700</bug_when>
    <thetext>Created attachment 154412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>678334</commentid>
    <comment_count>24</comment_count>
      <attachid>154412</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-07-25 12:25:00 -0700</bug_when>
    <thetext>Comment on attachment 154412
Patch

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

Looks good enough. A few comments, but nothing show-stopping ... 

Do you think we can get rid of --skip-pixel-test-if-no-baseline at some point given this?

&gt; Tools/Scripts/webkitpy/layout_tests/port/base.py:1278
&gt; +        # --pixel-test-directoy is not specified. Ports can override this according to their default

nit: typo: --pixel-test-directo*r*y. I would probably also reword the last sentence as &quot;Ports can override this to specify a default subset of all of the tests to run as pixel tests&quot; and maybe rename the function to _should_run_as_pixel_test() to follow the pattern for _supports_switching etc.

&gt; Tools/Scripts/webkitpy/layout_tests/port/test.py:518
&gt; +        # It should be supported by all platform in the near future anyway.

Nit: I&apos;d probably remove this comment

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:190
&gt; +            warnings.append(&quot;--pixel-test-directories has no effect without --pixel-tests&quot;)

Nit: maybe --pixel-test-directories should just imply --pixel-tests (i.e., set pixel_tests to True)?

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:193
&gt; +            sanitized = set()

I&apos;d probably not used &quot;sanitized&quot; as the name here. Maybe &quot;verified_dirs&quot; or &quot;valid_dirs&quot;?

&gt; Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py:201
&gt; +                    warnings.append(&quot;--pixel-test-directories a directory but got: %s&quot; % str(directory))

I&apos;d reword this to &quot;--pixel-test-directories was passed &apos;%s&apos;, which doesn&apos;t seem to be a directory&quot;, or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679156</commentid>
    <comment_count>25</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-26 04:41:30 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 154412 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=154412&amp;action=review
&gt; 
&gt; Looks good enough. A few comments, but nothing show-stopping ... 
&gt; 
&gt; Do you think we can get rid of --skip-pixel-test-if-no-baseline at some point given this?

Yes, it seems like not really useful.

Fixed all the nits. Committed in http://trac.webkit.org/changeset/123729.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680175</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-07-26 23:51:34 -0700</bug_when>
    <thetext>And unreviewed buildfixes landed in http://trac.webkit.org/changeset/123736 and http://trac.webkit.org/changeset/123738 .

Unfortunately it made all tests crash on Qt debug mode without crash log. Maybe they aren&apos;t real crash, but serious bug in this patch. 

r123728 - http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/24111
r123729 - http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/24108

I tried to roll out these patches, but I can&apos;t because of conflicts. I don&apos;t have time to try to resolve conflicts manually because of your buggy patch. Please roll it out as soon as possible and please watch the bots next time after landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680476</commentid>
    <comment_count>27</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 05:06:09 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; And unreviewed buildfixes landed in http://trac.webkit.org/changeset/123736 and http://trac.webkit.org/changeset/123738 .
&gt; 
&gt; Unfortunately it made all tests crash on Qt debug mode without crash log. Maybe they aren&apos;t real crash, but serious bug in this patch. 
&gt; 
&gt; r123728 - http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/24111
&gt; r123729 - http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/24108
&gt; 
&gt; I tried to roll out these patches, but I can&apos;t because of conflicts. I don&apos;t have time to try to resolve conflicts manually because of your buggy patch. Please roll it out as soon as possible and please watch the bots next time after landing.

I am trying to fix. I made a rollout patch but first I would like to take a try fixing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680496</commentid>
    <comment_count>28</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 05:45:16 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; And unreviewed buildfixes landed in http://trac.webkit.org/changeset/123736 and http://trac.webkit.org/changeset/123738 .
&gt; &gt; 
&gt; &gt; Unfortunately it made all tests crash on Qt debug mode without crash log. Maybe they aren&apos;t real crash, but serious bug in this patch. 
&gt; &gt; 
&gt; &gt; r123728 - http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/24111
&gt; &gt; r123729 - http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Debug/builds/24108
&gt; &gt; 
&gt; &gt; I tried to roll out these patches, but I can&apos;t because of conflicts. I don&apos;t have time to try to resolve conflicts manually because of your buggy patch. Please roll it out as soon as possible and please watch the bots next time after landing.
&gt; 
&gt; I am trying to fix. I made a rollout patch but first I would like to take a try fixing it.

I made a debug build but I cannot reproduce the issue. It&apos;s mistery, this code should have no effect without -p - if there is no serious bug in it, but I don&apos;t see where it is. I&apos;m going to upload the rollout after double-checking that it works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680499</commentid>
    <comment_count>29</comment_count>
      <attachid>154915</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 05:48:37 -0700</bug_when>
    <thetext>Created attachment 154915
rollout patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680510</commentid>
    <comment_count>30</comment_count>
      <attachid>154915</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-07-27 06:06:30 -0700</bug_when>
    <thetext>Comment on attachment 154915
rollout patch

rs=me

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

&gt; Tools/ChangeLog:8
&gt; +        Rollout r123729 because it made Qt debug bots crasy.

Crazy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680566</commentid>
    <comment_count>31</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 06:45:10 -0700</bug_when>
    <thetext>I had to rollout the rollout because somehow it made pixel-tests turned on by default. Now debugging it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680638</commentid>
    <comment_count>32</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 07:44:45 -0700</bug_when>
    <thetext>Found it. This is the fix:
--- a/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
+++ b/Tools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
@@ -696,7 +696,7 @@ void DumpRenderTree::processLine(const QString &amp;input)
     m_expectedHash = QString();
     // single quote marks the pixel dump hash
     int indexOfFirstSeparator = line.indexOf(&apos;\&apos;&apos;);
-    int indexOfSecondSeparator = line.indexOf(&apos;\&apos;&apos;, indexOfFirstSeparator);
+    int indexOfSecondSeparator = line.indexOf(&apos;\&apos;&apos;, indexOfFirstSeparator + 1);
     if (indexOfFirstSeparator &gt; -1) {
         int indexOfPixelHash = indexOfFirstSeparator + 1;

but now svn is down. I will commit asap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>680735</commentid>
    <comment_count>33</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-27 09:30:53 -0700</bug_when>
    <thetext>Hopefully r123877 will fix the issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>681543</commentid>
    <comment_count>34</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-07-29 03:23:20 -0700</bug_when>
    <thetext>Bots are ok now. Sorry for the ridiculous amount of noise.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153526</attachid>
            <date>2012-07-20 09:36:13 -0700</date>
            <delta_ts>2012-07-20 10:28:33 -0700</delta_ts>
            <desc>first attempt - with command line argument</desc>
            <filename>bug-91754-20120720183605.patch</filename>
            <type>text/plain</type>
            <size>21017</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjIyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzA1MjUwMDQzOWQwYjUxOTZiYzU3NmE4ZTlmYjE5N2Zl
Mzk1Mjk4MC4uYWIxMzBhM2I0YmUyMzJlMDNiZDFjYjI5NGVhZDU2MjU1ZmYxODM4YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcy
IEBACisyMDEyLTA3LTIwICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbTlJXVF0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVzdHJpY3QgcGl4ZWwgdGVzdHMg
Zm9yIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxNzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbiB0
byBucnd0LiBJZiBzcGVjaWZpZWQgdG9nZXRoZXIKKyAgICAgICAgd2l0aCAtLXBpeGVsLXRlc3Rz
LCBhbmQgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHRoaXMgb3B0aW9uLCBvbmx5IHRlc3RzCisg
ICAgICAgIGZyb20gdGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBleGVjdXRlZCBhcyBwaXhlbCB0
ZXN0cy4gVG8gc3VwcG9ydCB0aGUKKyAgICAgICAgb3B0aW9uIHRoZSB0ZXN0IGhhcm5lc3MgaGF2
ZSB0byBiZSBhYmxlIHRvIGluZm9ybSB0aGUgZHJpdmVyIHdoZXRoZXIgdG8KKyAgICAgICAgZHVt
cCBwaXhlbHMgZm9yIGVhY2ggdGVzdHMuIEZvciB0aGlzIHB1cnBvc2UgSSBjaGFuZ2VkIFdUUiBh
bmQgdGhlIFF0IERSVAorICAgICAgICB0byBoYW5kbGUgYSAtLXBpeGVsLXRlc3QgYXJndW1lbnQg
ZnJvbSB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBtYWRlIE5SV1QKKyAgICAgICAgdXNlIHRoaXMg
YXJndW1lbnQgd2l0aCB0aGVzZSBkcml2ZXJzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6RHVtcFJlbmRlclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6Om9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OmR1bXApOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICBIYW5kbGUgdGhlIC0tcGl4ZWwtdGVzdCBhcmd1bWVudC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0
X3J1bm5lci5weToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX3Nob3VsZF9mZXRjaF9leHBl
Y3RlZF9jaGVja3N1bSk6CisgICAgICAgIChTaW5nbGVUZXN0UnVubmVyLl9vdmVyd3JpdGVfYmFz
ZWxpbmVzKToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX2NvbXBhcmVfb3V0cHV0KToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIu
cHk6CisgICAgICAgIChXb3JrZXIuX3VwZGF0ZV90ZXN0X2lucHV0KToKKyAgICAgICAgKFdvcmtl
cik6CisgICAgICAgIChXb3JrZXIuX3Nob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAo
UG9ydC5kaXJlY3RvcnlfY29udGFpbnNfdGVzdCk6CisgICAgICAgIChQb3J0KToKKyAgICAgICAg
KFBvcnQucmVsYXRpdmVfdGVzdF9wYXRoX2Zyb21fbGF5b3V0X3Rlc3RzX2Rpcik6CisgICAgICAg
IChQb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6ICBQb3J0cyBj
YW4gb3ZlcnJpZGUgdGhpcyB0byBpbmZvcm0KKyAgICAgICAgdGhlIGhhcm5lc3MgdGhhdCAtLXBp
eGVsLXRlc3QgYXJndW1lbnQgaXMgc3VwcG9ydGVkLiBUcnVlIGZvciBXVFIsIG90aGVyd2lzZSBj
YWxscworICAgICAgICBwcml2YXRlIHZlcnNpb24gdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0
aGUgYWN0dWFsIHBsYXRmb3JtLiBPbmx5IHRydWUgd2l0aCBXVFIKKyAgICAgICAgYW5kIFF0IERS
VCBjdXJyZW50bHkuIFRoaXMgc3VwcG9zZWQgdG8gZXhpc3Qgb25seSB0ZW1wb3JhcnkgdW50aWwg
b3RoZXIgcG9ydHMgZG9uJ3QKKyAgICAgICAgY2hhbmdlIHRoZWlyIERSVCB0byBzdXBwb3J0IGl0
LgorICAgICAgICAoUG9ydC5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5w
eToKKyAgICAgICAgKERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRf
ZnJvbV9kcml2ZXJfaW5wdXQpOiAgUGFzcyAtLXBpeGVsLXRlc3QgaWYgaXQgaXMgc3VwcG9ydGVk
IGFuZCBwaXhlbAorICAgICAgICB0ZXN0cyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5OgorICAgICAgICAoUXRQb3J0LmNoZWNr
X3N5c19kZXBzKToKKyAgICAgICAgKFF0UG9ydCk6CisgICAgICAgIChRdFBvcnQuX3N1cHBvcnRz
X3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKF9zZXRfdXBf
ZGVyaXZlZF9vcHRpb25zKToKKyAgICAgICAgKF9saXN0YXJnX2NhbGxiYWNrKToKKyAgICAgICAg
KHBhcnNlX2FyZ3MpOgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAgIEhhbmRsZSB0aGUg
LS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbi4gb3B0cGFyc2UgZG9uJ3Qgc3VwcG9ydCBs
aXN0IGFyZ3VtZW50cworICAgICAgICBzbyBJIGltcGxlbWVudGVkIGl0IHdpdGggYSBjYWxsYmFj
ay4gVGhlIGFyZ3VtZW50IGNhbiBiZSBhIHNpbXBsZSBkaXJlY3Rvcnkgb3IgYQorICAgICAgICBz
dHJpbmcgKGluIGFwb3N0cm9waGVzKSBjb250YWluaW5nIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qg
b2YgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoVGVzdENvbnRyb2xsZXIpOgorCiAyMDEyLTA3LTIw
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XVtqaGJ1aWxkXSBTd2l0Y2ggdG8gR1N0cmVhbWVyIDAuMTEgYnVpbGQKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMTJkNjU5YTUxOTNlMzk3MDlj
MTk0ZTU3MTZlNDc4NjZkZTBmMGJiOC4uMGExYTNmNDA1N2JhZmIzZjM0NzM4OTI3N2I1N2E1YmVh
ZDgwZmQzYSAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKQEAgLTM4OCw3ICszODgsNyBAQCBXZWJWaWV3R3JhcGhpY3NCYXNlZDo6V2ViVmlld0dyYXBo
aWNzQmFzZWQoUVdpZGdldCogcGFyZW50KQogfQogCiBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRl
clRyZWUoKQotICAgIDogbV9kdW1wUGl4ZWxzKGZhbHNlKQorICAgIDogbV9kdW1wUGl4ZWxzRm9y
QWxsVGVzdHMoZmFsc2UpCiAgICAgLCBtX3N0ZGluKDApCiAgICAgLCBtX2VuYWJsZVRleHRPdXRw
dXQoZmFsc2UpCiAgICAgLCBtX3N0YW5kQWxvbmVNb2RlKGZhbHNlKQpAQCAtNjA2LDcgKzYwNiw3
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6Om9wZW4oY29uc3QgUVVybCYgdXJsKQogCiAgICAgaWYg
KGlzRHVtcEFzVGV4dFRlc3QodXJsKSkgewogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIHNldER1bXBQaXhlbHMoZmFsc2UpOworICAgICAgICBz
ZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChpc0dsb2Jh
bEhpc3RvcnlUZXN0KHVybCkpCkBAIC02OTIsMTQgKzY5MiwyNCBAQCB2b2lkIER1bXBSZW5kZXJU
cmVlOjpwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKIHsKICAgICBRU3RyaW5nIGxp
bmUgPSBpbnB1dDsKIAorICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gZmFsc2U7CiAg
ICAgbV9leHBlY3RlZEhhc2ggPSBRU3RyaW5nKCk7Ci0gICAgaWYgKG1fZHVtcFBpeGVscykgewot
ICAgICAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAotICAgICAg
ICBpbnQgaSA9IGxpbmUuaW5kZXhPZignXCcnKTsKLSAgICAgICAgaWYgKGkgPiAtMSkgewotICAg
ICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpICsgMSwgbGluZS5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBsaW5lLnJlbW92ZShpLCBsaW5lLmxlbmd0aCgpKTsKKyAgICAvLyBzaW5n
bGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAorICAgIGludCBpbmRleE9mRmlyc3RT
ZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJyk7CisgICAgaW50IGluZGV4T2ZTZWNvbmRTZXBh
cmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yKTsKKyAgICBp
ZiAoaW5kZXhPZkZpcnN0U2VwYXJhdG9yID4gLTEpIHsKKyAgICAgICAgaW50IGluZGV4T2ZQaXhl
bEhhc2ggPSBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxOworCisgICAgICAgIC8vIE5SV1QgcGFz
c2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0Lgor
ICAgICAgICBjb25zdCBRTGF0aW4xU3RyaW5nIGV4cGVjdGVkQXJnKCItLXBpeGVsLXRlc3QiKTsK
KyAgICAgICAgUVN0cmluZyBhcmdUZXN0ID0gbGluZS5taWQoaW5kZXhPZkZpcnN0U2VwYXJhdG9y
ICsgMSwgZXhwZWN0ZWRBcmcuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0
ZWRBcmcpIHsKKyAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gdHJ1ZTsK
KyAgICAgICAgICAgIGluZGV4T2ZQaXhlbEhhc2ggPSBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID09
IC0xID8gLTEgOiBpbmRleE9mU2Vjb25kU2VwYXJhdG9yICsgMTsKICAgICAgICAgfQorICAgICAg
ICBpZiAoaW5kZXhPZlBpeGVsSGFzaCAhPSAtMSAmJiBpbmRleE9mUGl4ZWxIYXNoIDwgbGluZS5z
aXplKCkpCisgICAgICAgICAgICBtX2V4cGVjdGVkSGFzaCA9IGxpbmUubWlkKGluZGV4T2ZQaXhl
bEhhc2gpOworICAgICAgICBsaW5lLnJlbW92ZShpbmRleE9mRmlyc3RTZXBhcmF0b3IsIGxpbmUu
bGVuZ3RoKCkpOwogICAgIH0KIAogICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmlu
ZygiaHR0cDoiKSkKQEAgLTczMSw5ICs3NDEsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9j
ZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKICAgICBmZmx1c2goc3Rkb3V0KTsKIH0KIAot
dm9pZCBEdW1wUmVuZGVyVHJlZTo6c2V0RHVtcFBpeGVscyhib29sIGR1bXApCit2b2lkIER1bXBS
ZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoYm9vbCBkdW1wKQogewotICAgIG1f
ZHVtcFBpeGVscyA9IGR1bXA7CisgICAgbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSBkdW1wOwog
fQogCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpjbG9zZVJlbWFpbmluZ1dpbmRvd3MoKQpAQCAtOTUx
LDcgKzk2MSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmR1bXAoKQogICAgIGZwdXRzKCIjRU9G
XG4iLCBzdGRvdXQpOwogICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRlcnIpOwogCi0gICAgaWYgKG1f
ZHVtcFBpeGVscyAmJiAhbV9jb250cm9sbGVyLT5zaG91bGREdW1wQXNUZXh0KCkpIHsKKyAgICBp
ZiAoKG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzIHx8IG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0
KSAmJiAhbV9jb250cm9sbGVyLT5zaG91bGREdW1wQXNUZXh0KCkpIHsKICAgICAgICAgUUltYWdl
IGltYWdlOwogICAgICAgICBpZiAoIW1fY29udHJvbGxlci0+aXNQcmludGluZygpKSB7CiAgICAg
ICAgICAgICBpbWFnZSA9IFFJbWFnZShtX3BhZ2UtPnZpZXdwb3J0U2l6ZSgpLCBRSW1hZ2U6OkZv
cm1hdF9BUkdCMzIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJl
bmRlclRyZWVRdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5o
CmluZGV4IGQzOTI4YmM5OWZhZjE1M2Q5Nzg3MmFlYTFlNWZlMWUxYTM3ZDhkMzkuLmM0ZjkyOTgz
ZjkxNWNjYTZhODg5OGFkZWZiNTYyYzhkMmRkOTFkYTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0R3JhcGhpY3NCYXNlZChib29sIGZsYWcpIHsgbV9ncmFwaGljc0Jhc2VkID0gZmxhZzsg
fQogICAgIGJvb2wgaXNHcmFwaGljc0Jhc2VkKCkgeyByZXR1cm4gbV9ncmFwaGljc0Jhc2VkOyB9
CiAKLSAgICB2b2lkIHNldER1bXBQaXhlbHMoYm9vbCk7CisgICAgdm9pZCBzZXREdW1wUGl4ZWxz
Rm9yQWxsVGVzdHMoYm9vbCk7CiAKICAgICB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwog
ICAgIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3QgUVVybCYp
OwpAQCAtMTQyLDcgKzE0Miw4IEBAIHByaXZhdGU6CiAgICAgUVN0cmluZyBkdW1wRnJhbWVTY3Jv
bGxQb3NpdGlvbihRV2ViRnJhbWUqIGZyYW1lKTsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciAq
bV9jb250cm9sbGVyOwogCi0gICAgYm9vbCBtX2R1bXBQaXhlbHM7CisgICAgYm9vbCBtX2R1bXBQ
aXhlbHNGb3JBbGxUZXN0czsKKyAgICBib29sIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0Owog
ICAgIFFTdHJpbmcgbV9leHBlY3RlZEhhc2g7CiAgICAgUVN0cmluZ0xpc3QgbV9zdGFuZEFsb25l
TW9kZVRlc3RMaXN0OwogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWlu
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCmluZGV4IDgxODhmMTgxNmZm
YWJhMDUwZmZhOTQwMjIyNjNiNGQ5NzFmMjFhMWEuLjIyZmJjNzVjMzk1YTEwZjQwMjRlMTc1NTAw
NWIyZDNiZTNkNjdmOTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4u
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCkBAIC0xOTIsNyArMTky
LDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIAogICAgIGludCBpbmRleCA9
IGFyZ3MuaW5kZXhPZihRTGF0aW4xU3RyaW5nKCItLXBpeGVsLXRlc3RzIikpOwogICAgIGlmIChp
bmRleCAhPSAtMSkgewotICAgICAgICBkdW1wZXIuc2V0RHVtcFBpeGVscyh0cnVlKTsKKyAgICAg
ICAgZHVtcGVyLnNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyh0cnVlKTsKICAgICAgICAgYXJncy5y
ZW1vdmVBdChpbmRleCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9y
dW5uZXIucHkKaW5kZXggZmEwN2U4OGZmNTU5YjQyN2FjOTkxNDhhNzQ4YzZkMzFkYjQ2N2Y5Zi4u
YmUwMmZmNjY2ZTY3YWZkYjM5ZThjZTkyNjViZDcyMzMyYjgyODg5YyAxMDA2NDQKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3Rf
cnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRy
b2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weQpAQCAtNzgsMTAgKzc4LDcgQEAgY2xhc3MgU2lu
Z2xlVGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2VsZi5fcG9ydC5leHBlY3RlZF9hdWRpbyhzZWxmLl90ZXN0X25hbWUpKQogCiAgICAgZGVmIF9z
aG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxm
Ll9zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAg
ICAgcmV0dXJuIChzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzIGFuZAotICAgICAgICAgICAgICAg
IG5vdCAoc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9y
ZXN1bHRzKSkKKyAgICAgICAgcmV0dXJuIChzZWxmLl9zaG91bGRfcnVuX3BpeGVsX3Rlc3QgYW5k
IG5vdCAoc2VsZi5fb3B0aW9ucy5uZXdfYmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9y
ZXN1bHRzKSkKIAogICAgIGRlZiBfZHJpdmVyX2lucHV0KHNlbGYpOgogICAgICAgICAjIFRoZSBp
bWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKQEAg
LTE1Myw3ICsxNTAsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAg
IGxvY2F0aW9uID0gc2VsZi5WRVJTSU9OX0RJUiBpZiBzZWxmLl9vcHRpb25zLmFkZF9wbGF0Zm9y
bV9leGNlcHRpb25zIGVsc2Ugc2VsZi5VUERBVEUKICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGlu
ZV9kYXRhKGRyaXZlcl9vdXRwdXQudGV4dCwgJy50eHQnLCBsb2NhdGlvbikKICAgICAgICAgc2Vs
Zi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQuYXVkaW8sICcud2F2JywgbG9jYXRp
b24pCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgIGlmIHNl
bGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdDoKICAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxp
bmVfZGF0YShkcml2ZXJfb3V0cHV0LmltYWdlLCAnLnBuZycsIGxvY2F0aW9uKQogCiAgICAgZGVm
IF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2VsZiwgZGF0YSwgZXh0ZW5zaW9uLCBsb2NhdGlvbik6CkBA
IC0yMjIsNyArMjE5LDcgQEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcihvYmplY3QpOgogCiAgICAg
ICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX3RleHQoZHJpdmVyX291dHB1dC50ZXh0
LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpKQogICAgICAgICBmYWlsdXJlcy5leHRlbmQo
c2VsZi5fY29tcGFyZV9hdWRpbyhkcml2ZXJfb3V0cHV0LmF1ZGlvLCBleHBlY3RlZF9kcml2ZXJf
b3V0cHV0LmF1ZGlvKSkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAg
ICAgICAgaWYgc2VsZi5fc2hvdWxkX3J1bl9waXhlbF90ZXN0OgogICAgICAgICAgICAgZmFpbHVy
ZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfaW1hZ2UoZHJpdmVyX291dHB1dCwgZXhwZWN0ZWRfZHJp
dmVyX291dHB1dCkpCiAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwg
ZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lLCBkcml2ZXJfb3V0cHV0Lmhhc19zdGRl
cnIoKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
Y29udHJvbGxlcnMvd29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvd29ya2VyLnB5CmluZGV4IDM3ODgyNmM1MWY4ZTA5ZGY2NWEyODAwZDc1
ZmM2NWUyYmExYWU1OGIuLmUyZjkxMmI5MzFhZjA1NGFiMTJiNWI0NDJjOGMyYTIxMzEzMzY1YjYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL3dvcmtlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy93b3JrZXIucHkKQEAgLTg4LDEzICs4OCwxNyBAQCBjbGFzcyBXb3JrZXIob2Jq
ZWN0KToKICAgICAgICAgICAgIHRlc3RfaW5wdXQucmVmZXJlbmNlX2ZpbGVzID0gc2VsZi5fcG9y
dC5yZWZlcmVuY2VfZmlsZXModGVzdF9pbnB1dC50ZXN0X25hbWUpCiAgICAgICAgIGlmIHRlc3Rf
aW5wdXQucmVmZXJlbmNlX2ZpbGVzOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVu
X3BpeGVsX3Rlc3QgPSBUcnVlCi0gICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0
czoKLSAgICAgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2tpcF9waXhlbF90ZXN0X2lmX25vX2Jh
c2VsaW5lOgotICAgICAgICAgICAgICAgIHRlc3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0
ID0gYm9vbChzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfaW5wdXQudGVzdF9uYW1lKSkK
LSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVu
X3BpeGVsX3Rlc3QgPSBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0ZXN0X2lucHV0
LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCA9IEZhbHNlCisgICAgICAgIHRlc3RfaW5wdXQuc2hvdWxk
X3J1bl9waXhlbF90ZXN0ID0gc2VsZi5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHRlc3RfaW5w
dXQpCisKKyAgICBkZWYgX3Nob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdChzZWxmLCB0ZXN0X2lucHV0
KToKKyAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAg
ICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX3BpeGVsX3Rlc3Rf
aWZfbm9fYmFzZWxpbmUgYW5kIG5vdCBzZWxmLl9wb3J0LmV4cGVjdGVkX2ltYWdlKHRlc3RfaW5w
dXQudGVzdF9uYW1lKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBub3Qg
c2VsZi5fcG9ydC5zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKSBvciBu
b3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgcmV0
dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIGFueShzZWxmLl9wb3J0LmRpcmVjdG9yeV9jb250YWlu
c190ZXN0KGRpcmVjdG9yeSwgdGVzdF9pbnB1dC50ZXN0X25hbWUpCisgICAgICAgICAgICAgICAg
ICAgICAgIGZvciBkaXJlY3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9y
aWVzKQogCiAgICAgZGVmIF9ydW5fdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgc2Vs
Zi5fdXBkYXRlX3Rlc3RfaW5wdXQodGVzdF9pbnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQppbmRleCBkNzkxNDMxODlkMDQwYTJmNDM2
YTA4OTVkOTIzMTlkOTBlNDY4MmE5Li5hMWJkNWJmNTI2NWVlMTcxMjFjYTYxMWRmZTAxYzkzY2Yx
YmUxNWY0IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2Jhc2UucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9iYXNlLnB5CkBAIC02MTIsNiArNjEyLDEyIEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAg
ICAgICAgIHJldHVybiAoJycsIHRlc3RfbmFtZSkKICAgICAgICAgcmV0dXJuICh0ZXN0X25hbWVb
MDppbmRleF0sIHRlc3RfbmFtZVtpbmRleDpdKQogCisgICAgZGVmIGRpcmVjdG9yeV9jb250YWlu
c190ZXN0KHNlbGYsIGRpcmVjdG9yeSwgdGVzdF9uYW1lKToKKyAgICAgICAgcmV0dXJuIGRpcmVj
dG9yeSBpbiB0ZXN0X25hbWUuc3BsaXQoc2VsZi5URVNUX1BBVEhfU0VQQVJBVE9SKQorCisgICAg
ZGVmIHJlbGF0aXZlX3Rlc3RfcGF0aF9mcm9tX2xheW91dF90ZXN0c19kaXIoc2VsZiwgdGVzdF9u
YW1lKToKKyAgICAgICAgcmV0dXJuIHJlLnN1YihzZWxmLmxheW91dF90ZXN0c19kaXIoKSArIHN0
cihzZWxmLlRFU1RfUEFUSF9TRVBBUkFUT1IpLCAnJywgdGVzdF9uYW1lKQorCiAgICAgZGVmIG5v
cm1hbGl6ZV90ZXN0X25hbWUoc2VsZiwgdGVzdF9uYW1lKToKICAgICAgICAgIiIiUmV0dXJucyBh
IG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGUgdGVzdCBuYW1lIG9yIHRlc3QgZGlyZWN0b3J5LiIi
IgogICAgICAgICBpZiB0ZXN0X25hbWUuZW5kc3dpdGgoJy8nKToKQEAgLTEyNDksNiArMTI1NSwx
NCBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFy
Z3MKICAgICAgICAgcmV0dXJuIFtdCiAKKyAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVs
X3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtp
dF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpCisKKyAgICBk
ZWYgX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKIAogY2xhc3MgVmlydHVhbFRlc3RTdWl0ZShvYmplY3QpOgogICAg
IGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiYXNlLCBhcmdzLCB0ZXN0cz1Ob25lKToKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKaW5k
ZXggMWE1MzIxMjU3ZDFiYTEyNzgyYmY4MTdmNTc2OTUzYjhmMWEwNjRjNS4uMWJjYmRiZDFlZjk1
NzBlMWU0OGNjNDRlMzcwNzI0MmIzNWM1ZDVhMyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKQEAgLTI5NSw3ICsyOTUsNyBAQCBj
bGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAgICAgICBjbWQuZXh0ZW5kKHNlbGYuX3BvcnQuZ2V0
X29wdGlvbignYWRkaXRpb25hbF9kcnRfZmxhZycsIFtdKSkKIAotICAgICAgICBpZiBwaXhlbF90
ZXN0czoKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHMgYW5kIG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRz
X3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgogICAgICAgICAgICAgY21kLmFwcGVu
ZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAgIGNtZC5leHRlbmQocGVyX3Rlc3RfYXJncykKIApA
QCAtMzM1LDggKzMzNSwxMSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAgICAgICAgIGlm
IHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKICAgICAgICAgICAgICAgICBjb21tYW5kID0gcGF0
aC5jeWdwYXRoKGNvbW1hbmQpCiAKKyAgICAgICAgIyAiJyIgaXMgdGhlIHNlcGFyYXRvciBvZiBj
b21tYW5kIGZpZWxkcy4KKyAgICAgICAgaWYgZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxf
dGVzdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVs
X3Rlc3RzX3Blcl90ZXN0KCk6CisgICAgICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1w
aXhlbC10ZXN0JwogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAg
ICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCiAgICAgICAgICAg
ICBjb21tYW5kICs9ICInIiArIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoCiAgICAgICAgIHJldHVy
biBjb21tYW5kICsgIlxuIgogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9wb3J0L3F0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvcG9ydC9xdC5weQppbmRleCBhYWFhZmFjNWQzNjRjY2FlNDdlOTExM2UzODU1YWQ2MWYxYTVj
MzhkLi5kYWQzNmI0NmEzZDQ5YmExMjdkZWFmMDU3YjEzNjBhMGM1YTlkYTk4IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKQEAgLTE4NSwzICsx
ODUsNiBAQCBjbGFzcyBRdFBvcnQoV2ViS2l0UG9ydCk6CiAgICAgICAgICAgICBfbG9nLmVycm9y
KCdVc2UgZ2l0IHRvIGdyYWIgdGhlIGFjdHVhbCBmb250cyBmcm9tIGh0dHA6Ly9naXRvcmlvdXMu
b3JnL3F0d2Via2l0L3Rlc3Rmb250cycpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAg
ICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIF9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVz
dHNfcGVyX3Rlc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRl
eCBkMTUxNjY2MDYyNjk0NDU1NTRmYTNmY2Q5ZWY4MGQyNDhmMDk1YWQyLi4zNWE4NjU3NTY4NzNm
ODg0YTVlNTU2YjAzM2MwZGE2YjU0ODI2MWM5IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTE4NCw2ICsx
ODQsMjIgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpOgogICAg
ICAgICBvcHRpb25zLnJlc2V0X3Jlc3VsdHMgPSBUcnVlCiAgICAgICAgIG9wdGlvbnMuYWRkX3Bs
YXRmb3JtX2V4Y2VwdGlvbnMgPSBUcnVlCiAKKyAgICBpZiBvcHRpb25zLnBpeGVsX3Rlc3RfZGly
ZWN0b3JpZXM6CisgICAgICAgIGlmIG5vdCBvcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAg
ICAgd2FybmluZ3MuYXBwZW5kKCItLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMgaGFzIG5vIGVmZmVj
dCB3aXRob3V0IC0tcGl4ZWwtdGVzdHMiKQorICAgICAgICAgICAgb3B0aW9ucy5waXhlbF90ZXN0
X2RpcmVjdG9yaWVzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNhbml0aXplZCA9
IFtdCisgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIG9wdGlvbnMucGl4ZWxfdGVzdF9kaXJl
Y3RvcmllczoKKyAgICAgICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0gcG9ydC5yZWxhdGl2ZV90
ZXN0X3BhdGhfZnJvbV9sYXlvdXRfdGVzdHNfZGlyKGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAg
ICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4ocG9ydC5sYXlvdXRfdGVzdHNfZGly
KCksIHJlbGF0aXZlX3BhdGgpKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5k
KCItLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMgZXhwZWN0cyBsaXN0IG9mIGRpcmVjdG9yaWVzIGJ1
dCBnb3Q6ICIgKyBkaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICAgICAgc2FuaXRpemVkLmFwcGVuZChyZWxhdGl2ZV9wYXRoKQorCisgICAgICAgICAgICBv
cHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMgPSBsaXN0KHNldChzYW5pdGl6ZWQpKQorCisK
ICAgICByZXR1cm4gd2FybmluZ3MKIAogCkBAIC0xOTcsNiArMjEzLDEyIEBAIGRlZiBfY29tcGF0
X3NoaW1fb3B0aW9uKG9wdGlvbl9uYW1lLCAqKmt3YXJncyk6CiAgICAgICAgIGhlbHA9Iklnbm9y
ZWQsIGZvciBvbGQtcnVuLXdlYmtpdC10ZXN0cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykKIAog
CitkZWYgX2xpc3RhcmdfY2FsbGJhY2sob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToK
KyAgICB2YWx1ZXMgPSBwYXJzZXIucmFyZ3NbMF0uc3BsaXQoJyAnKQorICAgIHNldGF0dHIocGFy
c2VyLnZhbHVlcywgb3B0aW9uLmRlc3QsIHZhbHVlcykKKyAgICBkZWwgcGFyc2VyLnJhcmdzWzBd
CisKKwogZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAiIiJQcm92aWRlcyBhIGRlZmF1
bHQgc2V0IG9mIGNvbW1hbmQgbGluZSBhcmdzLgogCkBAIC0zMTQsNiArMzM2LDE1IEBAIGRlZiBw
YXJzZV9hcmdzKGFyZ3M9Tm9uZSk6CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNr
aXAtcGl4ZWwtdGVzdC1pZi1uby1iYXNlbGluZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAg
ICAgICAgICBkZXN0PSJza2lwX3BpeGVsX3Rlc3RfaWZfbm9fYmFzZWxpbmUiLCBoZWxwPSJEbyBu
b3QgZ2VuZXJhdGUgYW5kIGNoZWNrIHBpeGVsIHJlc3VsdCBpbiB0aGUgY2FzZSB3aGVuICIKICAg
ICAgICAgICAgICAgICAgIm5vIGltYWdlIGJhc2VsaW5lIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHRl
c3QuIiksCisgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXBpeGVsLXRlc3QtZGlyZWN0
b3JpZXMiLCBhY3Rpb249ImNhbGxiYWNrIiwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgIGRlc3Q9
InBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMiLCBjYWxsYmFjaz1fbGlzdGFyZ19jYWxsYmFjaywKKyAg
ICAgICAgICAgIGhlbHA9IlN0cmluZyBjb250YWluaW5nIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9m
IGRpcmVjdG9yaWVzIHdoZXJlIGl0IGlzIGFsbG93ZWQgdG8gIgorICAgICAgICAgICAgICAgICAi
ZXhlY3V0ZSB0ZXN0cyBhcyBwaXhlbCB0ZXN0cy4gVGhpcyBvcHRpb24gaXMgc3VwcG9zZWQgdG8g
YmUgdXNlZCB0b2dhdGhlciB3aXRoICIKKyAgICAgICAgICAgICAgICAgIi0tcGl4ZWwtdGVzdHMu
IElmIHNwZWNpZmllZCwgb25seSB0aG9zZSB0ZXN0cyB3aWxsIGJlIGV4ZWN1dGVkIGFzIHBpeGVs
IHRlc3RzICIKKyAgICAgICAgICAgICAgICAgInRoYXQgYXJlIGxvY2F0ZWQgaW4gb25lIG9mIHRo
ZSBkaXJlY3RvcmllcyBlbnVtZXJhdGVkIGhlcmUuIFNvbWUgcG9ydHMgbWF5IGlnbm9yZSB0aGlz
IG9wdGlvbi5cbiIKKyAgICAgICAgICAgICAgICAgIkV4YW1wbGUgdXNhZ2U6IHJ1bi13ZWJraXQt
dGVzdHMgLS1waXhlbC10ZXN0cyAtLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMgY29tcG9zaXRpbmdc
biIKKyAgICAgICAgICAgICAgICAgIiAgICAgICAgICAgICAgIHJ1bi13ZWJraXQtdGVzdHMgLS1w
aXhlbC10ZXN0cyAtLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMgXCJhbmltYXRpb25zIGNvbXBvc2l0
aW5nXCIiKSwKKwogICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1za2lwLWZhaWxpbmct
dGVzdHMiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgZGVmYXVsdD1GYWxzZSwg
aGVscD0iU2tpcCB0ZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBmYWlsLiAiCiAgICAgICAgICAg
ICAgICAgICJOb3RlOiBXaGVuIHVzaW5nIHRoaXMgb3B0aW9uLCB5b3UgbWlnaHQgbWlzcyBuZXcg
Y3Jhc2hlcyAiCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4
IDBhMmNiMmJkZDdhYWRkMjI2NjIyNTFjZTBkMGUxOGM1NTgwNTUzYWUuLjk3ZmM2MWUyZDAzYmNh
ZWJhNTczNDUxY2Y1ZTc3OTNmODcwM2M5MzcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFRlc3RDb250cm9sbGVyJiBUZXN0Q29u
dHJvbGxlcjo6c2hhcmVkKCkKIH0KIAogVGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGlu
dCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCi0gICAgOiBtX2R1bXBQaXhlbHMoZmFsc2UpCisg
ICAgOiBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyhmYWxzZSkKICAgICAsIG1fdmVyYm9zZShmYWxz
ZSkKICAgICAsIG1fcHJpbnRTZXBhcmF0b3JzKGZhbHNlKQogICAgICwgbV91c2luZ1NlcnZlck1v
ZGUoZmFsc2UpCkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlh
bGl6ZShpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICAgICB9CiAKICAgICAgICAg
aWYgKGFyZ3VtZW50ID09ICItLXBpeGVsLXRlc3RzIikgewotICAgICAgICAgICAgbV9kdW1wUGl4
ZWxzID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gdHJ1ZTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudCA9
PSAiLS12ZXJib3NlIikgewpAQCAtNTEwLDE4ICs1MTAsMzEgQEAgYm9vbCBUZXN0Q29udHJvbGxl
cjo6cnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMKHRlc3QpOworICAgIGJvb2wgZHVtcFBpeGVs
c1Rlc3QgPSBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKKyAgICBzdGQ6OnN0cmluZyBjb21tYW5k
KHRlc3QpOworICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTCA9IGNvbW1hbmQ7CiAgICAgc3RkOjpz
dHJpbmcgZXhwZWN0ZWRQaXhlbEhhc2g7Ci0gICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9IHBhdGhP
clVSTC5maW5kKCInIik7Ci0gICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdGQ6OnN0cmluZzo6bnBv
cykgewotICAgICAgICBwYXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhzdGQ6OnN0cmluZyh0ZXN0KSwg
MCwgc2VwYXJhdG9yUG9zKTsKLSAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdGQ6OnN0cmlu
ZyhzdGQ6OnN0cmluZyh0ZXN0KSwgc2VwYXJhdG9yUG9zICsgMSk7CisgICAgc2l6ZV90IGZpcnN0
U2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycpOworICAgIHNpemVfdCBz
ZWNvbmRTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJywgZmlyc3RTZXBh
cmF0b3JQb3MgKyAxKTsKKyAgICBpZiAoZmlyc3RTZXBhcmF0b3JQb3MgIT0gc3RkOjpzdHJpbmc6
Om5wb3MpIHsKKyAgICAgICAgcGF0aE9yVVJMID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgMCwgZmly
c3RTZXBhcmF0b3JQb3MpOworICAgICAgICBzaXplX3QgcGl4ZWxIYXNoUG9zID0gZmlyc3RTZXBh
cmF0b3JQb3MgKyAxOworCisgICAgICAgIC8vIE5SV1QgcGFzc2VzIC0tcGl4ZWwtdGVzdCBpZiB3
ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0LgorICAgICAgICBjb25zdCBzdGQ6OnN0
cmluZyBleHBlY3RlZFBpeGVsVGVzdEFyZygiLS1waXhlbC10ZXN0Iik7CisgICAgICAgIHN0ZDo6
c3RyaW5nIGFyZ1Rlc3QgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCBmaXJzdFNlcGFyYXRvclBvcyAr
IDEsIGV4cGVjdGVkUGl4ZWxUZXN0QXJnLnNpemUoKSk7CisgICAgICAgIGlmIChhcmdUZXN0ID09
IGV4cGVjdGVkUGl4ZWxUZXN0QXJnKSB7CisgICAgICAgICAgICBkdW1wUGl4ZWxzVGVzdCA9IHRy
dWU7CisgICAgICAgICAgICBwaXhlbEhhc2hQb3MgPSBzZWNvbmRTZXBhcmF0b3JQb3MgPT0gc3Rk
OjpzdHJpbmc6Om5wb3MgPyAtMSA6IHNlY29uZFNlcGFyYXRvclBvcyArIDE7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHBpeGVsSGFzaFBvcyAhPSAtMSAmJiBwaXhlbEhhc2hQb3MgPCBjb21tYW5k
LnNpemUoKSkKKyAgICAgICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0gc3RkOjpzdHJpbmcoY29t
bWFuZCwgcGl4ZWxIYXNoUG9zKTsKICAgICB9CiAKICAgICBtX3N0YXRlID0gUnVubmluZ1Rlc3Q7
CiAKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uID0gYWRvcHRQdHIobmV3IFRlc3RJbnZvY2F0aW9u
KHBhdGhPclVSTCkpOwotICAgIGlmIChtX2R1bXBQaXhlbHMpCisgICAgaWYgKGR1bXBQaXhlbHNU
ZXN0KQogICAgICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5zZXRJc1BpeGVsVGVzdChleHBlY3Rl
ZFBpeGVsSGFzaCk7CiAKICAgICBtX2N1cnJlbnRJbnZvY2F0aW9uLT5pbnZva2UoKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBiOTQ2NWVmOTZlNTdlNzM1YzQx
MDQ0Nzg1NDE5Mzg2N2YwYjA1Y2IwLi42NTk2YTA4YzZiZmNkYTg2NDllODc2Mjc0OTZiMWJjMTBm
ZDhlMWE4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0xMDQs
NyArMTA0LDcgQEAgcHJpdmF0ZToKIAogICAgIE93blB0cjxUZXN0SW52b2NhdGlvbj4gbV9jdXJy
ZW50SW52b2NhdGlvbjsKIAotICAgIGJvb2wgbV9kdW1wUGl4ZWxzOworICAgIGJvb2wgbV9kdW1w
UGl4ZWxzRm9yQWxsVGVzdHM7CiAgICAgYm9vbCBtX3ZlcmJvc2U7CiAgICAgYm9vbCBtX3ByaW50
U2VwYXJhdG9yczsKICAgICBib29sIG1fdXNpbmdTZXJ2ZXJNb2RlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153534</attachid>
            <date>2012-07-20 10:28:41 -0700</date>
            <delta_ts>2012-07-24 04:16:28 -0700</delta_ts>
            <desc>buildfixed</desc>
            <filename>bug-91754-20120720192833.patch</filename>
            <type>text/plain</type>
            <size>21028</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzMjIyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzA1MjUwMDQzOWQwYjUxOTZiYzU3NmE4ZTlmYjE5N2Zl
Mzk1Mjk4MC4uYWIxMzBhM2I0YmUyMzJlMDNiZDFjYjI5NGVhZDU2MjU1ZmYxODM4YyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcy
IEBACisyMDEyLTA3LTIwICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbTlJXVF0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVzdHJpY3QgcGl4ZWwgdGVzdHMg
Zm9yIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxNzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbiB0
byBucnd0LiBJZiBzcGVjaWZpZWQgdG9nZXRoZXIKKyAgICAgICAgd2l0aCAtLXBpeGVsLXRlc3Rz
LCBhbmQgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHRoaXMgb3B0aW9uLCBvbmx5IHRlc3RzCisg
ICAgICAgIGZyb20gdGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBleGVjdXRlZCBhcyBwaXhlbCB0
ZXN0cy4gVG8gc3VwcG9ydCB0aGUKKyAgICAgICAgb3B0aW9uIHRoZSB0ZXN0IGhhcm5lc3MgaGF2
ZSB0byBiZSBhYmxlIHRvIGluZm9ybSB0aGUgZHJpdmVyIHdoZXRoZXIgdG8KKyAgICAgICAgZHVt
cCBwaXhlbHMgZm9yIGVhY2ggdGVzdHMuIEZvciB0aGlzIHB1cnBvc2UgSSBjaGFuZ2VkIFdUUiBh
bmQgdGhlIFF0IERSVAorICAgICAgICB0byBoYW5kbGUgYSAtLXBpeGVsLXRlc3QgYXJndW1lbnQg
ZnJvbSB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBtYWRlIE5SV1QKKyAgICAgICAgdXNlIHRoaXMg
YXJndW1lbnQgd2l0aCB0aGVzZSBkcml2ZXJzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6RHVtcFJlbmRlclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6Om9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OmR1bXApOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICBIYW5kbGUgdGhlIC0tcGl4ZWwtdGVzdCBhcmd1bWVudC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0
X3J1bm5lci5weToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX3Nob3VsZF9mZXRjaF9leHBl
Y3RlZF9jaGVja3N1bSk6CisgICAgICAgIChTaW5nbGVUZXN0UnVubmVyLl9vdmVyd3JpdGVfYmFz
ZWxpbmVzKToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX2NvbXBhcmVfb3V0cHV0KToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIu
cHk6CisgICAgICAgIChXb3JrZXIuX3VwZGF0ZV90ZXN0X2lucHV0KToKKyAgICAgICAgKFdvcmtl
cik6CisgICAgICAgIChXb3JrZXIuX3Nob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAo
UG9ydC5kaXJlY3RvcnlfY29udGFpbnNfdGVzdCk6CisgICAgICAgIChQb3J0KToKKyAgICAgICAg
KFBvcnQucmVsYXRpdmVfdGVzdF9wYXRoX2Zyb21fbGF5b3V0X3Rlc3RzX2Rpcik6CisgICAgICAg
IChQb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6ICBQb3J0cyBj
YW4gb3ZlcnJpZGUgdGhpcyB0byBpbmZvcm0KKyAgICAgICAgdGhlIGhhcm5lc3MgdGhhdCAtLXBp
eGVsLXRlc3QgYXJndW1lbnQgaXMgc3VwcG9ydGVkLiBUcnVlIGZvciBXVFIsIG90aGVyd2lzZSBj
YWxscworICAgICAgICBwcml2YXRlIHZlcnNpb24gdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0
aGUgYWN0dWFsIHBsYXRmb3JtLiBPbmx5IHRydWUgd2l0aCBXVFIKKyAgICAgICAgYW5kIFF0IERS
VCBjdXJyZW50bHkuIFRoaXMgc3VwcG9zZWQgdG8gZXhpc3Qgb25seSB0ZW1wb3JhcnkgdW50aWwg
b3RoZXIgcG9ydHMgZG9uJ3QKKyAgICAgICAgY2hhbmdlIHRoZWlyIERSVCB0byBzdXBwb3J0IGl0
LgorICAgICAgICAoUG9ydC5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0
KToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5w
eToKKyAgICAgICAgKERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChEcml2ZXIuX2NvbW1hbmRf
ZnJvbV9kcml2ZXJfaW5wdXQpOiAgUGFzcyAtLXBpeGVsLXRlc3QgaWYgaXQgaXMgc3VwcG9ydGVk
IGFuZCBwaXhlbAorICAgICAgICB0ZXN0cyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKiBTY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5OgorICAgICAgICAoUXRQb3J0LmNoZWNr
X3N5c19kZXBzKToKKyAgICAgICAgKFF0UG9ydCk6CisgICAgICAgIChRdFBvcnQuX3N1cHBvcnRz
X3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6CisgICAgICAgICogU2NyaXB0cy93ZWJr
aXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKF9zZXRfdXBf
ZGVyaXZlZF9vcHRpb25zKToKKyAgICAgICAgKF9saXN0YXJnX2NhbGxiYWNrKToKKyAgICAgICAg
KHBhcnNlX2FyZ3MpOgorICAgICAgICAocGFyc2VfYXJncyk6CisgICAgICAgIEhhbmRsZSB0aGUg
LS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbi4gb3B0cGFyc2UgZG9uJ3Qgc3VwcG9ydCBs
aXN0IGFyZ3VtZW50cworICAgICAgICBzbyBJIGltcGxlbWVudGVkIGl0IHdpdGggYSBjYWxsYmFj
ay4gVGhlIGFyZ3VtZW50IGNhbiBiZSBhIHNpbXBsZSBkaXJlY3Rvcnkgb3IgYQorICAgICAgICBz
dHJpbmcgKGluIGFwb3N0cm9waGVzKSBjb250YWluaW5nIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qg
b2YgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKToK
KyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAgICAgICAoV1RS
OjpUZXN0Q29udHJvbGxlcjo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoVGVzdENvbnRyb2xsZXIpOgorCiAyMDEyLTA3LTIw
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XVtqaGJ1aWxkXSBTd2l0Y2ggdG8gR1N0cmVhbWVyIDAuMTEgYnVpbGQKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMTJkNjU5YTUxOTNlMzk3MDlj
MTk0ZTU3MTZlNDc4NjZkZTBmMGJiOC4uODIxMmJmMWU3YzQzNTEyODMyMzk0YjU2MWZlNDY1NTk0
Yzg4MWM4MCAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKQEAgLTM4OCw3ICszODgsNyBAQCBXZWJWaWV3R3JhcGhpY3NCYXNlZDo6V2ViVmlld0dyYXBo
aWNzQmFzZWQoUVdpZGdldCogcGFyZW50KQogfQogCiBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRl
clRyZWUoKQotICAgIDogbV9kdW1wUGl4ZWxzKGZhbHNlKQorICAgIDogbV9kdW1wUGl4ZWxzRm9y
QWxsVGVzdHMoZmFsc2UpCiAgICAgLCBtX3N0ZGluKDApCiAgICAgLCBtX2VuYWJsZVRleHRPdXRw
dXQoZmFsc2UpCiAgICAgLCBtX3N0YW5kQWxvbmVNb2RlKGZhbHNlKQpAQCAtNjA2LDcgKzYwNiw3
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6Om9wZW4oY29uc3QgUVVybCYgdXJsKQogCiAgICAgaWYg
KGlzRHVtcEFzVGV4dFRlc3QodXJsKSkgewogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIHNldER1bXBQaXhlbHMoZmFsc2UpOworICAgICAgICBz
ZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChpc0dsb2Jh
bEhpc3RvcnlUZXN0KHVybCkpCkBAIC02OTIsMTQgKzY5MiwyNCBAQCB2b2lkIER1bXBSZW5kZXJU
cmVlOjpwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKIHsKICAgICBRU3RyaW5nIGxp
bmUgPSBpbnB1dDsKIAorICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gZmFsc2U7CiAg
ICAgbV9leHBlY3RlZEhhc2ggPSBRU3RyaW5nKCk7Ci0gICAgaWYgKG1fZHVtcFBpeGVscykgewot
ICAgICAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAotICAgICAg
ICBpbnQgaSA9IGxpbmUuaW5kZXhPZignXCcnKTsKLSAgICAgICAgaWYgKGkgPiAtMSkgewotICAg
ICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpICsgMSwgbGluZS5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBsaW5lLnJlbW92ZShpLCBsaW5lLmxlbmd0aCgpKTsKKyAgICAvLyBzaW5n
bGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAorICAgIGludCBpbmRleE9mRmlyc3RT
ZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJyk7CisgICAgaW50IGluZGV4T2ZTZWNvbmRTZXBh
cmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yKTsKKyAgICBp
ZiAoaW5kZXhPZkZpcnN0U2VwYXJhdG9yID4gLTEpIHsKKyAgICAgICAgaW50IGluZGV4T2ZQaXhl
bEhhc2ggPSBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxOworCisgICAgICAgIC8vIE5SV1QgcGFz
c2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0Lgor
ICAgICAgICBjb25zdCBRU3RyaW5nIGV4cGVjdGVkQXJnKFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwt
dGVzdCIpKTsKKyAgICAgICAgUVN0cmluZyBhcmdUZXN0ID0gbGluZS5taWQoaW5kZXhPZkZpcnN0
U2VwYXJhdG9yICsgMSwgZXhwZWN0ZWRBcmcubGVuZ3RoKCkpOworICAgICAgICBpZiAoYXJnVGVz
dCA9PSBleHBlY3RlZEFyZykgeworICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgPSB0cnVlOworICAgICAgICAgICAgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZTZWNvbmRT
ZXBhcmF0b3IgPT0gLTEgPyAtMSA6IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgKyAxOwogICAgICAg
ICB9CisgICAgICAgIGlmIChpbmRleE9mUGl4ZWxIYXNoICE9IC0xICYmIGluZGV4T2ZQaXhlbEhh
c2ggPCBsaW5lLnNpemUoKSkKKyAgICAgICAgICAgIG1fZXhwZWN0ZWRIYXNoID0gbGluZS5taWQo
aW5kZXhPZlBpeGVsSGFzaCk7CisgICAgICAgIGxpbmUucmVtb3ZlKGluZGV4T2ZGaXJzdFNlcGFy
YXRvciwgbGluZS5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChR
TGF0aW4xU3RyaW5nKCJodHRwOiIpKQpAQCAtNzMxLDkgKzc0MSw5IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlucHV0KQogICAgIGZmbHVzaChzdGRv
dXQpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcCkK
K3ZvaWQgRHVtcFJlbmRlclRyZWU6OnNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyhib29sIGR1bXAp
CiB7Ci0gICAgbV9kdW1wUGl4ZWxzID0gZHVtcDsKKyAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0
cyA9IGR1bXA7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmNsb3NlUmVtYWluaW5nV2luZG93
cygpCkBAIC05NTEsNyArOTYxLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgpCiAgICAg
ZnB1dHMoIiNFT0ZcbiIsIHN0ZG91dCk7CiAgICAgZnB1dHMoIiNFT0ZcbiIsIHN0ZGVycik7CiAK
LSAgICBpZiAobV9kdW1wUGl4ZWxzICYmICFtX2NvbnRyb2xsZXItPnNob3VsZER1bXBBc1RleHQo
KSkgeworICAgIGlmICgobV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgfHwgbV9kdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QpICYmICFtX2NvbnRyb2xsZXItPnNob3VsZER1bXBBc1RleHQoKSkgewogICAg
ICAgICBRSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmICghbV9jb250cm9sbGVyLT5pc1ByaW50aW5n
KCkpIHsKICAgICAgICAgICAgIGltYWdlID0gUUltYWdlKG1fcGFnZS0+dmlld3BvcnRTaXplKCks
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0LmgKaW5kZXggZDM5MjhiYzk5ZmFmMTUzZDk3ODcyYWVhMWU1ZmUxZTFhMzdkOGQz
OS4uYzRmOTI5ODNmOTE1Y2NhNmE4ODk4YWRlZmI1NjJjOGQyZGQ5MWRhMCAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaApAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRHcmFwaGljc0Jhc2VkKGJvb2wgZmxhZykgeyBtX2dyYXBoaWNzQmFz
ZWQgPSBmbGFnOyB9CiAgICAgYm9vbCBpc0dyYXBoaWNzQmFzZWQoKSB7IHJldHVybiBtX2dyYXBo
aWNzQmFzZWQ7IH0KIAotICAgIHZvaWQgc2V0RHVtcFBpeGVscyhib29sKTsKKyAgICB2b2lkIHNl
dER1bXBQaXhlbHNGb3JBbGxUZXN0cyhib29sKTsKIAogICAgIHZvaWQgY2xvc2VSZW1haW5pbmdX
aW5kb3dzKCk7CiAgICAgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhj
b25zdCBRVXJsJik7CkBAIC0xNDIsNyArMTQyLDggQEAgcHJpdmF0ZToKICAgICBRU3RyaW5nIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpOwogICAgIExheW91dFRlc3RD
b250cm9sbGVyICptX2NvbnRyb2xsZXI7CiAKLSAgICBib29sIG1fZHVtcFBpeGVsczsKKyAgICBi
b29sIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOworICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3Q7CiAgICAgUVN0cmluZyBtX2V4cGVjdGVkSGFzaDsKICAgICBRU3RyaW5nTGlzdCBt
X3N0YW5kQWxvbmVNb2RlVGVzdExpc3Q7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L21haW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXgg
ODE4OGYxODE2ZmZhYmEwNTBmZmE5NDAyMjI2M2I0ZDk3MWYyMWExYS4uMjJmYmM3NWMzOTVhMTBm
NDAyNGUxNzU1MDA1YjJkM2JlM2Q2N2Y5MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKQEAg
LTE5Miw3ICsxOTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogCiAgICAg
aW50IGluZGV4ID0gYXJncy5pbmRleE9mKFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwtdGVzdHMiKSk7
CiAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGR1bXBlci5zZXREdW1wUGl4ZWxzKHRy
dWUpOworICAgICAgICBkdW1wZXIuc2V0RHVtcFBpeGVsc0ZvckFsbFRlc3RzKHRydWUpOwogICAg
ICAgICBhcmdzLnJlbW92ZUF0KGluZGV4KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5l
ci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Np
bmdsZV90ZXN0X3J1bm5lci5weQppbmRleCBmYTA3ZTg4ZmY1NTliNDI3YWM5OTE0OGE3NDhjNmQz
MWRiNDY3ZjlmLi5iZTAyZmY2NjZlNjdhZmRiMzllOGNlOTI2NWJkNzIzMzJiODI4ODljIDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9z
aW5nbGVfdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CkBAIC03OCwxMCArNzgsNyBA
QCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2F1ZGlvKHNlbGYuX3Rlc3RfbmFtZSkpCiAK
ICAgICBkZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShzZWxmKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdDoKLSAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kCi0gICAg
ICAgICAgICAgICAgbm90IChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRp
b25zLnJlc2V0X3Jlc3VsdHMpKQorICAgICAgICByZXR1cm4gKHNlbGYuX3Nob3VsZF9ydW5fcGl4
ZWxfdGVzdCBhbmQgbm90IChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRp
b25zLnJlc2V0X3Jlc3VsdHMpKQogCiAgICAgZGVmIF9kcml2ZXJfaW5wdXQoc2VsZik6CiAgICAg
ICAgICMgVGhlIGltYWdlIGhhc2ggaXMgdXNlZCB0byBhdm9pZCBkb2luZyBhbiBpbWFnZSBkdW1w
IGlmIHRoZQpAQCAtMTUzLDcgKzE1MCw3IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXIob2JqZWN0
KToKICAgICAgICAgbG9jYXRpb24gPSBzZWxmLlZFUlNJT05fRElSIGlmIHNlbGYuX29wdGlvbnMu
YWRkX3BsYXRmb3JtX2V4Y2VwdGlvbnMgZWxzZSBzZWxmLlVQREFURQogICAgICAgICBzZWxmLl9z
YXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291dHB1dC50ZXh0LCAnLnR4dCcsIGxvY2F0aW9uKQog
ICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291dHB1dC5hdWRpbywgJy53
YXYnLCBsb2NhdGlvbikKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAg
ICAgICAgaWYgc2VsZi5fc2hvdWxkX3J1bl9waXhlbF90ZXN0OgogICAgICAgICAgICAgc2VsZi5f
c2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQuaW1hZ2UsICcucG5nJywgbG9jYXRpb24p
CiAKICAgICBkZWYgX3NhdmVfYmFzZWxpbmVfZGF0YShzZWxmLCBkYXRhLCBleHRlbnNpb24sIGxv
Y2F0aW9uKToKQEAgLTIyMiw3ICsyMTksNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVj
dCk6CiAKICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfdGV4dChkcml2ZXJf
b3V0cHV0LnRleHQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQudGV4dCkpCiAgICAgICAgIGZhaWx1
cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX2F1ZGlvKGRyaXZlcl9vdXRwdXQuYXVkaW8sIGV4cGVj
dGVkX2RyaXZlcl9vdXRwdXQuYXVkaW8pKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnBpeGVs
X3Rlc3RzOgorICAgICAgICBpZiBzZWxmLl9zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6CiAgICAgICAg
ICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5fY29tcGFyZV9pbWFnZShkcml2ZXJfb3V0cHV0LCBl
eHBlY3RlZF9kcml2ZXJfb3V0cHV0KSkKICAgICAgICAgcmV0dXJuIFRlc3RSZXN1bHQoc2VsZi5f
dGVzdF9uYW1lLCBmYWlsdXJlcywgZHJpdmVyX291dHB1dC50ZXN0X3RpbWUsIGRyaXZlcl9vdXRw
dXQuaGFzX3N0ZGVycigpKQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKaW5kZXggMzc4ODI2YzUxZjhlMDlk
ZjY1YTI4MDBkNzVmYzY1ZTJiYTFhZTU4Yi4uZTJmOTEyYjkzMWFmMDU0YWIxMmI1YjQ0MmM4YzJh
MjEzMTMzNjViNiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvd29ya2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weQpAQCAtODgsMTMgKzg4LDE3IEBAIGNsYXNz
IFdvcmtlcihvYmplY3QpOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXMg
PSBzZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyh0ZXN0X2lucHV0LnRlc3RfbmFtZSkKICAgICAg
ICAgaWYgdGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXM6CiAgICAgICAgICAgICB0ZXN0X2lucHV0
LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCA9IFRydWUKLSAgICAgICAgZWxpZiBzZWxmLl9vcHRpb25z
LnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX3BpeGVsX3Rl
c3RfaWZfbm9fYmFzZWxpbmU6Ci0gICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVu
X3BpeGVsX3Rlc3QgPSBib29sKHNlbGYuX3BvcnQuZXhwZWN0ZWRfaW1hZ2UodGVzdF9pbnB1dC50
ZXN0X25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0ZXN0X2lucHV0
LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCA9IFRydWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg
IHRlc3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gRmFsc2UKKyAgICAgICAgdGVzdF9p
bnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QgPSBzZWxmLl9zaG91bGRfcnVuX2FzX3BpeGVsX3Rl
c3QodGVzdF9pbnB1dCkKKworICAgIGRlZiBfc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYs
IHRlc3RfaW5wdXQpOgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnNraXBf
cGl4ZWxfdGVzdF9pZl9ub19iYXNlbGluZSBhbmQgbm90IHNlbGYuX3BvcnQuZXhwZWN0ZWRfaW1h
Z2UodGVzdF9pbnB1dC50ZXN0X25hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIGlmIG5vdCBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJf
dGVzdCgpIG9yIG5vdCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6CisgICAg
ICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gYW55KHNlbGYuX3BvcnQuZGlyZWN0
b3J5X2NvbnRhaW5zX3Rlc3QoZGlyZWN0b3J5LCB0ZXN0X2lucHV0LnRlc3RfbmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rl
c3RfZGlyZWN0b3JpZXMpCiAKICAgICBkZWYgX3J1bl90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgog
ICAgICAgICBzZWxmLl91cGRhdGVfdGVzdF9pbnB1dCh0ZXN0X2lucHV0KQpkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CmluZGV4IGQ3OTE0MzE4
OWQwNDBhMmY0MzZhMDg5NWQ5MjMxOWQ5MGU0NjgyYTkuLmExYmQ1YmY1MjY1ZWUxNzEyMWNhNjEx
ZGZlMDFjOTNjZjFiZTE1ZjQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTYxMiw2ICs2MTIsMTIgQEAgY2xhc3MgUG9ydChvYmpl
Y3QpOgogICAgICAgICAgICAgcmV0dXJuICgnJywgdGVzdF9uYW1lKQogICAgICAgICByZXR1cm4g
KHRlc3RfbmFtZVswOmluZGV4XSwgdGVzdF9uYW1lW2luZGV4Ol0pCiAKKyAgICBkZWYgZGlyZWN0
b3J5X2NvbnRhaW5zX3Rlc3Qoc2VsZiwgZGlyZWN0b3J5LCB0ZXN0X25hbWUpOgorICAgICAgICBy
ZXR1cm4gZGlyZWN0b3J5IGluIHRlc3RfbmFtZS5zcGxpdChzZWxmLlRFU1RfUEFUSF9TRVBBUkFU
T1IpCisKKyAgICBkZWYgcmVsYXRpdmVfdGVzdF9wYXRoX2Zyb21fbGF5b3V0X3Rlc3RzX2Rpcihz
ZWxmLCB0ZXN0X25hbWUpOgorICAgICAgICByZXR1cm4gcmUuc3ViKHNlbGYubGF5b3V0X3Rlc3Rz
X2RpcigpICsgc3RyKHNlbGYuVEVTVF9QQVRIX1NFUEFSQVRPUiksICcnLCB0ZXN0X25hbWUpCisK
ICAgICBkZWYgbm9ybWFsaXplX3Rlc3RfbmFtZShzZWxmLCB0ZXN0X25hbWUpOgogICAgICAgICAi
IiJSZXR1cm5zIGEgbm9ybWFsaXplZCB2ZXJzaW9uIG9mIHRoZSB0ZXN0IG5hbWUgb3IgdGVzdCBk
aXJlY3RvcnkuIiIiCiAgICAgICAgIGlmIHRlc3RfbmFtZS5lbmRzd2l0aCgnLycpOgpAQCAtMTI0
OSw2ICsxMjU1LDE0IEBAIGNsYXNzIFBvcnQob2JqZWN0KToKICAgICAgICAgICAgICAgICByZXR1
cm4gc3VpdGUuYXJncwogICAgICAgICByZXR1cm4gW10KIAorICAgIGRlZiBzdXBwb3J0c19zd2l0
Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29w
dGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAg
ICAgICByZXR1cm4gc2VsZi5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0
KCkKKworICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNl
bGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKwogCiBjbGFzcyBWaXJ0dWFsVGVzdFN1aXRlKG9i
amVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGJhc2UsIGFyZ3MsIHRlc3RzPU5v
bmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC9kcml2ZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Ry
aXZlci5weQppbmRleCAxYTUzMjEyNTdkMWJhMTI3ODJiZjgxN2Y1NzY5NTNiOGYxYTA2NGM1Li4x
YmNiZGJkMWVmOTU3MGUxZTQ4Y2M0NGUzNzA3MjQyYjM1YzVkNWEzIDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weQpAQCAtMjk1LDcg
KzI5NSw3IEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogCiAgICAgICAgIGNtZC5leHRlbmQoc2Vs
Zi5fcG9ydC5nZXRfb3B0aW9uKCdhZGRpdGlvbmFsX2RydF9mbGFnJywgW10pKQogCi0gICAgICAg
IGlmIHBpeGVsX3Rlc3RzOgorICAgICAgICBpZiBwaXhlbF90ZXN0cyBhbmQgbm90IHNlbGYuX3Bv
cnQuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6CiAgICAgICAgICAg
ICBjbWQuYXBwZW5kKCctLXBpeGVsLXRlc3RzJykKICAgICAgICAgY21kLmV4dGVuZChwZXJfdGVz
dF9hcmdzKQogCkBAIC0zMzUsOCArMzM1LDExIEBAIGNsYXNzIERyaXZlcihvYmplY3QpOgogICAg
ICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdjeWd3aW4nOgogICAgICAgICAgICAgICAgIGNv
bW1hbmQgPSBwYXRoLmN5Z3BhdGgoY29tbWFuZCkKIAorICAgICAgICAjICInIiBpcyB0aGUgc2Vw
YXJhdG9yIG9mIGNvbW1hbmQgZmllbGRzLgorICAgICAgICBpZiBkcml2ZXJfaW5wdXQuc2hvdWxk
X3J1bl9waXhlbF90ZXN0OgorICAgICAgICAgICAgaWYgc2VsZi5fcG9ydC5zdXBwb3J0c19zd2l0
Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKKyAgICAgICAgICAgICAgICBjb21tYW5kICs9
ICInIiArICctLXBpeGVsLXRlc3QnCiAgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNo
OgotICAgICAgICAgICAgIyAiJyIgaXMgdGhlIHNlcGFyYXRvciBvZiBjb21tYW5kIGZpZWxkcy4K
ICAgICAgICAgICAgIGNvbW1hbmQgKz0gIiciICsgZHJpdmVyX2lucHV0LmltYWdlX2hhc2gKICAg
ICAgICAgcmV0dXJuIGNvbW1hbmQgKyAiXG4iCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CmluZGV4IGFhYWFmYWM1ZDM2NGNjYWU0N2U5MTEzZTM4
NTVhZDYxZjFhNWMzOGQuLmRhZDM2YjQ2YTNkNDliYTEyN2RlYWYwNTdiMTM2MGEwYzVhOWRhOTgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQu
cHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQpA
QCAtMTg1LDMgKzE4NSw2IEBAIGNsYXNzIFF0UG9ydChXZWJLaXRQb3J0KToKICAgICAgICAgICAg
IF9sb2cuZXJyb3IoJ1VzZSBnaXQgdG8gZ3JhYiB0aGUgYWN0dWFsIGZvbnRzIGZyb20gaHR0cDov
L2dpdG9yaW91cy5vcmcvcXR3ZWJraXQvdGVzdGZvbnRzJykKICAgICAgICAgICAgIHJldHVybiBG
YWxzZQogICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3N1cHBvcnRzX3N3aXRjaGlu
Z19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKZGlmZiAt
LWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVz
dHMucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzLnB5CmluZGV4IGQxNTE2NjYwNjI2OTQ0NTU1NGZhM2ZjZDllZjgwZDI0OGYwOTVhZDIuLjM1
YTg2NTc1Njg3M2Y4ODRhNWU1NTZiMDMzYzBkYTZiNTQ4MjYxYzkgMTAwNzU1Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpA
QCAtMTg0LDYgKzE4NCwyMiBAQCBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydCwgb3B0
aW9ucyk6CiAgICAgICAgIG9wdGlvbnMucmVzZXRfcmVzdWx0cyA9IFRydWUKICAgICAgICAgb3B0
aW9ucy5hZGRfcGxhdGZvcm1fZXhjZXB0aW9ucyA9IFRydWUKIAorICAgIGlmIG9wdGlvbnMucGl4
ZWxfdGVzdF9kaXJlY3RvcmllczoKKyAgICAgICAgaWYgbm90IG9wdGlvbnMucGl4ZWxfdGVzdHM6
CisgICAgICAgICAgICB3YXJuaW5ncy5hcHBlbmQoIi0tcGl4ZWwtdGVzdC1kaXJlY3RvcmllcyBo
YXMgbm8gZWZmZWN0IHdpdGhvdXQgLS1waXhlbC10ZXN0cyIpCisgICAgICAgICAgICBvcHRpb25z
LnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAg
c2FuaXRpemVkID0gW10KKyAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4gb3B0aW9ucy5waXhl
bF90ZXN0X2RpcmVjdG9yaWVzOgorICAgICAgICAgICAgICAgIHJlbGF0aXZlX3BhdGggPSBwb3J0
LnJlbGF0aXZlX3Rlc3RfcGF0aF9mcm9tX2xheW91dF90ZXN0c19kaXIoZGlyZWN0b3J5KQorICAg
ICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihwb3J0LmxheW91
dF90ZXN0c19kaXIoKSwgcmVsYXRpdmVfcGF0aCkpOgorICAgICAgICAgICAgICAgICAgICB3YXJu
aW5ncy5hcHBlbmQoIi0tcGl4ZWwtdGVzdC1kaXJlY3RvcmllcyBleHBlY3RzIGxpc3Qgb2YgZGly
ZWN0b3JpZXMgYnV0IGdvdDogIiArIGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBlbHNlOgor
ICAgICAgICAgICAgICAgICAgICBzYW5pdGl6ZWQuYXBwZW5kKHJlbGF0aXZlX3BhdGgpCisKKyAg
ICAgICAgICAgIG9wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3RvcmllcyA9IGxpc3Qoc2V0KHNhbml0
aXplZCkpCisKKwogICAgIHJldHVybiB3YXJuaW5ncwogCiAKQEAgLTE5Nyw2ICsyMTMsMTIgQEAg
ZGVmIF9jb21wYXRfc2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToKICAgICAgICAg
aGVscD0iSWdub3JlZCwgZm9yIG9sZC1ydW4td2Via2l0LXRlc3RzIGNvbXBhdCBvbmx5LiIsICoq
a3dhcmdzKQogCiAKK2RlZiBfbGlzdGFyZ19jYWxsYmFjayhvcHRpb24sIG9wdF9zdHIsIHZhbHVl
LCBwYXJzZXIpOgorICAgIHZhbHVlcyA9IHBhcnNlci5yYXJnc1swXS5zcGxpdCgnICcpCisgICAg
c2V0YXR0cihwYXJzZXIudmFsdWVzLCBvcHRpb24uZGVzdCwgdmFsdWVzKQorICAgIGRlbCBwYXJz
ZXIucmFyZ3NbMF0KKworCiBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAgICIiIlByb3Zp
ZGVzIGEgZGVmYXVsdCBzZXQgb2YgY29tbWFuZCBsaW5lIGFyZ3MuCiAKQEAgLTMxNCw2ICszMzYs
MTUgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tc2tpcC1waXhlbC10ZXN0LWlmLW5vLWJhc2VsaW5lIiwgYWN0aW9uPSJzdG9yZV90
cnVlIiwKICAgICAgICAgICAgIGRlc3Q9InNraXBfcGl4ZWxfdGVzdF9pZl9ub19iYXNlbGluZSIs
IGhlbHA9IkRvIG5vdCBnZW5lcmF0ZSBhbmQgY2hlY2sgcGl4ZWwgcmVzdWx0IGluIHRoZSBjYXNl
IHdoZW4gIgogICAgICAgICAgICAgICAgICAibm8gaW1hZ2UgYmFzZWxpbmUgaXMgYXZhaWxhYmxl
IGZvciB0aGUgdGVzdC4iKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tcGl4ZWwt
dGVzdC1kaXJlY3RvcmllcyIsIGFjdGlvbj0iY2FsbGJhY2siLCBkZWZhdWx0PVtdLAorICAgICAg
ICAgICAgZGVzdD0icGl4ZWxfdGVzdF9kaXJlY3RvcmllcyIsIGNhbGxiYWNrPV9saXN0YXJnX2Nh
bGxiYWNrLAorICAgICAgICAgICAgaGVscD0iU3RyaW5nIGNvbnRhaW5pbmcgc3BhY2Ugc2VwYXJh
dGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2hlcmUgaXQgaXMgYWxsb3dlZCB0byAiCisgICAgICAg
ICAgICAgICAgICJleGVjdXRlIHRlc3RzIGFzIHBpeGVsIHRlc3RzLiBUaGlzIG9wdGlvbiBpcyBz
dXBwb3NlZCB0byBiZSB1c2VkIHRvZ2F0aGVyIHdpdGggIgorICAgICAgICAgICAgICAgICAiLS1w
aXhlbC10ZXN0cy4gSWYgc3BlY2lmaWVkLCBvbmx5IHRob3NlIHRlc3RzIHdpbGwgYmUgZXhlY3V0
ZWQgYXMgcGl4ZWwgdGVzdHMgIgorICAgICAgICAgICAgICAgICAidGhhdCBhcmUgbG9jYXRlZCBp
biBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGVudW1lcmF0ZWQgaGVyZS4gU29tZSBwb3J0cyBtYXkg
aWdub3JlIHRoaXMgb3B0aW9uLlxuIgorICAgICAgICAgICAgICAgICAiRXhhbXBsZSB1c2FnZTog
cnVuLXdlYmtpdC10ZXN0cyAtLXBpeGVsLXRlc3RzIC0tcGl4ZWwtdGVzdC1kaXJlY3RvcmllcyBj
b21wb3NpdGluZ1xuIgorICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgcnVuLXdlYmtp
dC10ZXN0cyAtLXBpeGVsLXRlc3RzIC0tcGl4ZWwtdGVzdC1kaXJlY3RvcmllcyBcImFuaW1hdGlv
bnMgY29tcG9zaXRpbmdcIiIpLAorCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNr
aXAtZmFpbGluZy10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLCBoZWxwPSJTa2lwIHRlc3RzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGZhaWwuICIK
ICAgICAgICAgICAgICAgICAgIk5vdGU6IFdoZW4gdXNpbmcgdGhpcyBvcHRpb24sIHlvdSBtaWdo
dCBtaXNzIG5ldyBjcmFzaGVzICIKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKaW5kZXggMGEyY2IyYmRkN2FhZGQyMjY2MjI1MWNlMGQwZTE4YzU1ODA1NTNhZS4uOTdm
YzYxZTJkMDNiY2FlYmE1NzM0NTFjZjVlNzc5M2Y4NzAzYzkzNyAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgVGVzdENvbnRyb2xs
ZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQogfQogCiBUZXN0Q29udHJvbGxlcjo6VGVzdENv
bnRyb2xsZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKLSAgICA6IG1fZHVtcFBpeGVs
cyhmYWxzZSkKKyAgICA6IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKQogICAgICwgbV92
ZXJib3NlKGZhbHNlKQogICAgICwgbV9wcmludFNlcGFyYXRvcnMoZmFsc2UpCiAgICAgLCBtX3Vz
aW5nU2VydmVyTW9kZShmYWxzZSkKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjppbml0aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoYXJndW1lbnQgPT0gIi0tcGl4ZWwtdGVzdHMiKSB7Ci0gICAgICAgICAg
ICBtX2R1bXBQaXhlbHMgPSB0cnVlOworICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQWxsVGVz
dHMgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYg
KGFyZ3VtZW50ID09ICItLXZlcmJvc2UiKSB7CkBAIC01MTAsMTggKzUxMCwzMSBAQCBib29sIFRl
c3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkwodGVzdCk7CisgICAgYm9v
bCBkdW1wUGl4ZWxzVGVzdCA9IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOworICAgIHN0ZDo6c3Ry
aW5nIGNvbW1hbmQodGVzdCk7CisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMID0gY29tbWFuZDsK
ICAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBzaXplX3Qgc2VwYXJhdG9y
UG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0ZDo6
c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3RyaW5nKHN0ZDo6c3Ry
aW5nKHRlc3QpLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9
IHN0ZDo6c3RyaW5nKHN0ZDo6c3RyaW5nKHRlc3QpLCBzZXBhcmF0b3JQb3MgKyAxKTsKKyAgICBz
aXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJyk7Cisg
ICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcn
LCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOworICAgIGlmIChmaXJzdFNlcGFyYXRvclBvcyAhPSBz
dGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBwYXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhjb21t
YW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7CisgICAgICAgIHNpemVfdCBwaXhlbEhhc2hQb3Mg
PSBmaXJzdFNlcGFyYXRvclBvcyArIDE7CisKKyAgICAgICAgLy8gTlJXVCBwYXNzZXMgLS1waXhl
bC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3QuCisgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxUZXN0QXJnKCItLXBpeGVsLXRlc3QiKTsKKyAg
ICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIGZpcnN0U2Vw
YXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRlc3RBcmcuc2l6ZSgpKTsKKyAgICAgICAgaWYg
KGFyZ1Rlc3QgPT0gZXhwZWN0ZWRQaXhlbFRlc3RBcmcpIHsKKyAgICAgICAgICAgIGR1bXBQaXhl
bHNUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBpeGVsSGFzaFBvcyA9IHNlY29uZFNlcGFyYXRv
clBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IC0xIDogc2Vjb25kU2VwYXJhdG9yUG9zICsgMTsK
KyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxIYXNoUG9zICE9IC0xICYmIHBpeGVsSGFzaFBv
cyA8IGNvbW1hbmQuc2l6ZSgpKQorICAgICAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdGQ6
OnN0cmluZyhjb21tYW5kLCBwaXhlbEhhc2hQb3MpOwogICAgIH0KIAogICAgIG1fc3RhdGUgPSBS
dW5uaW5nVGVzdDsKIAogICAgIG1fY3VycmVudEludm9jYXRpb24gPSBhZG9wdFB0cihuZXcgVGVz
dEludm9jYXRpb24ocGF0aE9yVVJMKSk7Ci0gICAgaWYgKG1fZHVtcFBpeGVscykKKyAgICBpZiAo
ZHVtcFBpeGVsc1Rlc3QpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24tPnNldElzUGl4ZWxU
ZXN0KGV4cGVjdGVkUGl4ZWxIYXNoKTsKIAogICAgIG1fY3VycmVudEludm9jYXRpb24tPmludm9r
ZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5o
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmluZGV4IGI5NDY1ZWY5
NmU1N2U3MzVjNDEwNDQ3ODU0MTkzODY3ZjBiMDVjYjAuLjY1OTZhMDhjNmJmY2RhODY0OWU4NzYy
NzQ5NmIxYmMxMGZkOGUxYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmgKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRyPFRlc3RJbnZvY2F0
aW9uPiBtX2N1cnJlbnRJbnZvY2F0aW9uOwogCi0gICAgYm9vbCBtX2R1bXBQaXhlbHM7CisgICAg
Ym9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKICAgICBib29sIG1fdmVyYm9zZTsKICAgICBi
b29sIG1fcHJpbnRTZXBhcmF0b3JzOwogICAgIGJvb2wgbV91c2luZ1NlcnZlck1vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154015</attachid>
            <date>2012-07-24 04:16:35 -0700</date>
            <delta_ts>2012-07-24 10:41:52 -0700</delta_ts>
            <desc>wip patch, test is missing yet</desc>
            <filename>bug-91754-20120724131619.patch</filename>
            <type>text/plain</type>
            <size>21796</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDBkOTY5OTQzOWRlN2JhMGYwZWJmNDJiZDgxYTgwZDY5
Y2ViZDc4OS4uMDUwYmY5Y2RjNzI0YWFjOWQxMTUyMzMxZmE0NjYzYmQzYmEyZjBjNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0
IEBACisyMDEyLTA3LTIzICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbTlJXVF0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVzdHJpY3QgcGl4ZWwgdGVzdHMg
Zm9yIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxNzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbiB0
byBucnd0LiBJZiBzcGVjaWZpZWQgdG9nZXRoZXIKKyAgICAgICAgd2l0aCAtLXBpeGVsLXRlc3Rz
LCBhbmQgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHRoaXMgb3B0aW9uLCBvbmx5IHRlc3RzCisg
ICAgICAgIGZyb20gdGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBleGVjdXRlZCBhcyBwaXhlbCB0
ZXN0cy4gVG8gc3VwcG9ydCB0aGUKKyAgICAgICAgb3B0aW9uIHRoZSB0ZXN0IGhhcm5lc3MgaGF2
ZSB0byBiZSBhYmxlIHRvIGluZm9ybSB0aGUgZHJpdmVyIHdoZXRoZXIgdG8KKyAgICAgICAgZHVt
cCBwaXhlbHMgZm9yIGVhY2ggdGVzdHMuIEZvciB0aGlzIHB1cnBvc2UgSSBjaGFuZ2VkIFdUUiBh
bmQgdGhlIFF0IERSVAorICAgICAgICB0byBoYW5kbGUgYSAtLXBpeGVsLXRlc3QgYXJndW1lbnQg
ZnJvbSB0aGUgc3RhbmRhcmQgb3V0cHV0IGFuZCBtYWRlIE5SV1QKKyAgICAgICAgdXNlIHRoaXMg
YXJndW1lbnQgd2l0aCB0aGVzZSBkcml2ZXJzLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJl
ZTo6RHVtcFJlbmRlclRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6Om9w
ZW4pOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMp
OgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OmR1bXApOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaDoKKyAgICAgICAgKER1bXBSZW5kZXJU
cmVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcDoKKyAgICAgICAgKG1h
aW4pOgorICAgICAgICBIYW5kbGUgdGhlIC0tcGl4ZWwtdGVzdCBhcmd1bWVudC4KKworICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0
X3J1bm5lci5weToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX3Nob3VsZF9mZXRjaF9leHBl
Y3RlZF9jaGVja3N1bSk6CisgICAgICAgIChTaW5nbGVUZXN0UnVubmVyLl9vdmVyd3JpdGVfYmFz
ZWxpbmVzKToKKyAgICAgICAgKFNpbmdsZVRlc3RSdW5uZXIuX2NvbXBhcmVfb3V0cHV0KToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIu
cHk6CisgICAgICAgIChXb3JrZXIuX3VwZGF0ZV90ZXN0X2lucHV0KToKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHk6CisgICAgICAgIChQb3J0LnJl
bGF0aXZlX3Rlc3RfZmlsZW5hbWUpOgorICAgICAgICAoUG9ydC5zdXBwb3J0c19zd2l0Y2hpbmdf
cGl4ZWxfdGVzdHNfcGVyX3Rlc3QpOiBQb3J0cyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBpbmZvcm0K
KyAgICAgICAgdGhlIGhhcm5lc3MgdGhhdCAtLXBpeGVsLXRlc3QgYXJndW1lbnQgaXMgc3VwcG9y
dGVkLiBUcnVlIGZvciBXVFIsIG90aGVyd2lzZSBjYWxscworICAgICAgICBwcml2YXRlIHZlcnNp
b24gdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYWN0dWFsIHBsYXRmb3JtLiBPbmx5IHRy
dWUgd2l0aCBXVFIKKyAgICAgICAgYW5kIFF0IERSVCBjdXJyZW50bHkuIFRoaXMgc3VwcG9zZWQg
dG8gZXhpc3Qgb25seSB0ZW1wb3JhcnkgdW50aWwgdGhlcmUgYXJlIHBvcnRzCisgICAgICAgIHRo
YXQgZG9lc24ndCBzdXBwb3J0IHRoZSBmZWF0dXJlIGluIHRoZWlyIERSVCdzLgorICAgICAgICAo
UG9ydCk6CisgICAgICAgIChQb3J0Ll9zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVy
X3Rlc3QpOgorICAgICAgICAoUG9ydC5zaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3QpOgorICAgICAg
ICAoUG9ydC5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KTogUG9ydHMgY2FuIG92ZXJyaWRlIHRo
aXMgdG8gaGFuZGxlIHRoZSBwaXhlbAorICAgICAgICB0ZXN0IGRpcmVjdG9yaWVzIGluIHRoZWly
IHNwZWNpZmljIHdheS4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2RyaXZlci5weToKKyAgICAgICAgKERyaXZlci5jbWRfbGluZSk6CisgICAgICAgIChEcml2
ZXIuX2NvbW1hbmRfZnJvbV9kcml2ZXJfaW5wdXQpOiBQYXNzIC0tcGl4ZWwtdGVzdCBpZiBpdCBp
cyBzdXBwb3J0ZWQgYW5kIHBpeGVsCisgICAgICAgIHRlc3RzIGFyZSBlbmFibGVkLgorICAgICAg
ICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHk6CisgICAgICAgIChR
dFBvcnQuY2hlY2tfc3lzX2RlcHMpOgorICAgICAgICAoUXRQb3J0KToKKyAgICAgICAgKFF0UG9y
dC5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KToKKyAgICAgICAgKFF0
UG9ydC5fc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KToKKyAgICAgICAgKFF0UG9ydC5fZGVmYXVs
dF9waXhlbF90ZXN0X2RpcmVjdG9yaWVzKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAoX3NldF91cF9kZXJpdmVk
X29wdGlvbnMpOgorICAgICAgICAoX2xpc3RhcmdfY2FsbGJhY2spOgorICAgICAgICAocGFyc2Vf
YXJncyk6CisgICAgICAgIEhhbmRsZSB0aGUgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlv
bi4gb3B0cGFyc2UgZG9uJ3Qgc3VwcG9ydCBsaXN0IGFyZ3VtZW50cworICAgICAgICBzbyBJIGlt
cGxlbWVudGVkIGl0IHdpdGggYSBjYWxsYmFjay4gVGhlIGFyZ3VtZW50IGNhbiBiZSBhIHNpbXBs
ZSBkaXJlY3Rvcnkgb3IgYQorICAgICAgICBzdHJpbmcgKGluIGFwb3N0cm9waGVzKSBjb250YWlu
aW5nIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6
OmluaXRpYWxpemUpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cnVuVGVzdCk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoVGVz
dENvbnRyb2xsZXIpOgorICAgICAgICBIYW5kbGUgdGhlIC0tcGl4ZWwtdGVzdCBhcmd1bWVudC4K
KwogMjAxMi0wNy0yNCAgUGllcnJlIFJvc3NpICA8cGllcnJlLnJvc3NpQGdtYWlsLmNvbT4KIAog
ICAgICAgICBbUXRdIEVuYWJsZSB0b3VjaCBzbGlkZXIgd2hlbiB0b3VjaCBldmVudHMgYXJlIGVu
YWJsZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVl
UXQuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5k
ZXggMTJkNjU5YTUxOTNlMzk3MDljMTk0ZTU3MTZlNDc4NjZkZTBmMGJiOC4uODIxMmJmMWU3YzQz
NTEyODMyMzk0YjU2MWZlNDY1NTk0Yzg4MWM4MCAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKQEAgLTM4OCw3ICszODgsNyBAQCBXZWJWaWV3R3JhcGhp
Y3NCYXNlZDo6V2ViVmlld0dyYXBoaWNzQmFzZWQoUVdpZGdldCogcGFyZW50KQogfQogCiBEdW1w
UmVuZGVyVHJlZTo6RHVtcFJlbmRlclRyZWUoKQotICAgIDogbV9kdW1wUGl4ZWxzKGZhbHNlKQor
ICAgIDogbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpCiAgICAgLCBtX3N0ZGluKDApCiAg
ICAgLCBtX2VuYWJsZVRleHRPdXRwdXQoZmFsc2UpCiAgICAgLCBtX3N0YW5kQWxvbmVNb2RlKGZh
bHNlKQpAQCAtNjA2LDcgKzYwNiw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6Om9wZW4oY29uc3Qg
UVVybCYgdXJsKQogCiAgICAgaWYgKGlzRHVtcEFzVGV4dFRlc3QodXJsKSkgewogICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlcigpLT5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIHNldER1bXBQaXhl
bHMoZmFsc2UpOworICAgICAgICBzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpOwogICAg
IH0KIAogICAgIGlmIChpc0dsb2JhbEhpc3RvcnlUZXN0KHVybCkpCkBAIC02OTIsMTQgKzY5Miwy
NCBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1
dCkKIHsKICAgICBRU3RyaW5nIGxpbmUgPSBpbnB1dDsKIAorICAgIG1fZHVtcFBpeGVsc0ZvckN1
cnJlbnRUZXN0ID0gZmFsc2U7CiAgICAgbV9leHBlY3RlZEhhc2ggPSBRU3RyaW5nKCk7Ci0gICAg
aWYgKG1fZHVtcFBpeGVscykgewotICAgICAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBp
eGVsIGR1bXAgaGFzaAotICAgICAgICBpbnQgaSA9IGxpbmUuaW5kZXhPZignXCcnKTsKLSAgICAg
ICAgaWYgKGkgPiAtMSkgewotICAgICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChp
ICsgMSwgbGluZS5sZW5ndGgoKSk7Ci0gICAgICAgICAgICBsaW5lLnJlbW92ZShpLCBsaW5lLmxl
bmd0aCgpKTsKKyAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAor
ICAgIGludCBpbmRleE9mRmlyc3RTZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJyk7CisgICAg
aW50IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZp
cnN0U2VwYXJhdG9yKTsKKyAgICBpZiAoaW5kZXhPZkZpcnN0U2VwYXJhdG9yID4gLTEpIHsKKyAg
ICAgICAgaW50IGluZGV4T2ZQaXhlbEhhc2ggPSBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxOwor
CisgICAgICAgIC8vIE5SV1QgcGFzc2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBw
aXhlbHMgZm9yIHRoZSB0ZXN0LgorICAgICAgICBjb25zdCBRU3RyaW5nIGV4cGVjdGVkQXJnKFFM
YXRpbjFTdHJpbmcoIi0tcGl4ZWwtdGVzdCIpKTsKKyAgICAgICAgUVN0cmluZyBhcmdUZXN0ID0g
bGluZS5taWQoaW5kZXhPZkZpcnN0U2VwYXJhdG9yICsgMSwgZXhwZWN0ZWRBcmcubGVuZ3RoKCkp
OworICAgICAgICBpZiAoYXJnVGVzdCA9PSBleHBlY3RlZEFyZykgeworICAgICAgICAgICAgbV9k
dW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QgPSB0cnVlOworICAgICAgICAgICAgaW5kZXhPZlBpeGVs
SGFzaCA9IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgPT0gLTEgPyAtMSA6IGluZGV4T2ZTZWNvbmRT
ZXBhcmF0b3IgKyAxOwogICAgICAgICB9CisgICAgICAgIGlmIChpbmRleE9mUGl4ZWxIYXNoICE9
IC0xICYmIGluZGV4T2ZQaXhlbEhhc2ggPCBsaW5lLnNpemUoKSkKKyAgICAgICAgICAgIG1fZXhw
ZWN0ZWRIYXNoID0gbGluZS5taWQoaW5kZXhPZlBpeGVsSGFzaCk7CisgICAgICAgIGxpbmUucmVt
b3ZlKGluZGV4T2ZGaXJzdFNlcGFyYXRvciwgbGluZS5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAg
aWYgKGxpbmUuc3RhcnRzV2l0aChRTGF0aW4xU3RyaW5nKCJodHRwOiIpKQpAQCAtNzMxLDkgKzc0
MSw5IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlu
cHV0KQogICAgIGZmbHVzaChzdGRvdXQpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlOjpzZXRE
dW1wUGl4ZWxzKGJvb2wgZHVtcCkKK3ZvaWQgRHVtcFJlbmRlclRyZWU6OnNldER1bXBQaXhlbHNG
b3JBbGxUZXN0cyhib29sIGR1bXApCiB7Ci0gICAgbV9kdW1wUGl4ZWxzID0gZHVtcDsKKyAgICBt
X2R1bXBQaXhlbHNGb3JBbGxUZXN0cyA9IGR1bXA7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6
OmNsb3NlUmVtYWluaW5nV2luZG93cygpCkBAIC05NTEsNyArOTYxLDcgQEAgdm9pZCBEdW1wUmVu
ZGVyVHJlZTo6ZHVtcCgpCiAgICAgZnB1dHMoIiNFT0ZcbiIsIHN0ZG91dCk7CiAgICAgZnB1dHMo
IiNFT0ZcbiIsIHN0ZGVycik7CiAKLSAgICBpZiAobV9kdW1wUGl4ZWxzICYmICFtX2NvbnRyb2xs
ZXItPnNob3VsZER1bXBBc1RleHQoKSkgeworICAgIGlmICgobV9kdW1wUGl4ZWxzRm9yQWxsVGVz
dHMgfHwgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3QpICYmICFtX2NvbnRyb2xsZXItPnNob3Vs
ZER1bXBBc1RleHQoKSkgewogICAgICAgICBRSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmICghbV9j
b250cm9sbGVyLT5pc1ByaW50aW5nKCkpIHsKICAgICAgICAgICAgIGltYWdlID0gUUltYWdlKG1f
cGFnZS0+dmlld3BvcnRTaXplKCksIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmggYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKaW5kZXggZDM5MjhiYzk5ZmFmMTUzZDk3
ODcyYWVhMWU1ZmUxZTFhMzdkOGQzOS4uYzRmOTI5ODNmOTE1Y2NhNmE4ODk4YWRlZmI1NjJjOGQy
ZGQ5MWRhMCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaApA
QCAtODIsNyArODIsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRHcmFwaGljc0Jhc2VkKGJvb2wg
ZmxhZykgeyBtX2dyYXBoaWNzQmFzZWQgPSBmbGFnOyB9CiAgICAgYm9vbCBpc0dyYXBoaWNzQmFz
ZWQoKSB7IHJldHVybiBtX2dyYXBoaWNzQmFzZWQ7IH0KIAotICAgIHZvaWQgc2V0RHVtcFBpeGVs
cyhib29sKTsKKyAgICB2b2lkIHNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyhib29sKTsKIAogICAg
IHZvaWQgY2xvc2VSZW1haW5pbmdXaW5kb3dzKCk7CiAgICAgdm9pZCByZXNldFRvQ29uc2lzdGVu
dFN0YXRlQmVmb3JlVGVzdGluZyhjb25zdCBRVXJsJik7CkBAIC0xNDIsNyArMTQyLDggQEAgcHJp
dmF0ZToKICAgICBRU3RyaW5nIGR1bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJh
bWUpOwogICAgIExheW91dFRlc3RDb250cm9sbGVyICptX2NvbnRyb2xsZXI7CiAKLSAgICBib29s
IG1fZHVtcFBpeGVsczsKKyAgICBib29sIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOworICAgIGJv
b2wgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRlc3Q7CiAgICAgUVN0cmluZyBtX2V4cGVjdGVkSGFz
aDsKICAgICBRU3RyaW5nTGlzdCBtX3N0YW5kQWxvbmVNb2RlVGVzdExpc3Q7CiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvbWFpbi5jcHAKaW5kZXggODE4OGYxODE2ZmZhYmEwNTBmZmE5NDAyMjI2M2I0ZDk3MWYy
MWExYS4uMjJmYmM3NWMzOTVhMTBmNDAyNGUxNzU1MDA1YjJkM2JlM2Q2N2Y5MiAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvcXQvbWFpbi5jcHAKQEAgLTE5Miw3ICsxOTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciogYXJndltdKQogCiAgICAgaW50IGluZGV4ID0gYXJncy5pbmRleE9mKFFMYXRpbjFTdHJp
bmcoIi0tcGl4ZWwtdGVzdHMiKSk7CiAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGR1
bXBlci5zZXREdW1wUGl4ZWxzKHRydWUpOworICAgICAgICBkdW1wZXIuc2V0RHVtcFBpeGVsc0Zv
ckFsbFRlc3RzKHRydWUpOwogICAgICAgICBhcmdzLnJlbW92ZUF0KGluZGV4KTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xs
ZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weQppbmRleCBmYTA3ZTg4ZmY1
NTliNDI3YWM5OTE0OGE3NDhjNmQzMWRiNDY3ZjlmLi5hY2Q1Njc3ZTk4NjYzMDJlNGVmZTQxN2Nh
MTIwOWVlMzYxOTJkODQ3IDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVy
LnB5CkBAIC03OCwxMCArNzgsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2F1ZGlv
KHNlbGYuX3Rlc3RfbmFtZSkpCiAKICAgICBkZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVj
a3N1bShzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdDoK
LSAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlvbnMu
cGl4ZWxfdGVzdHMgYW5kCi0gICAgICAgICAgICAgICAgbm90IChzZWxmLl9vcHRpb25zLm5ld19i
YXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMpKQorICAgICAgICByZXR1cm4g
c2VsZi5fc2hvdWxkX3J1bl9waXhlbF90ZXN0IGFuZCBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jh
c2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVzZXRfcmVzdWx0cykKIAogICAgIGRlZiBfZHJpdmVy
X2lucHV0KHNlbGYpOgogICAgICAgICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQg
ZG9pbmcgYW4gaW1hZ2UgZHVtcCBpZiB0aGUKQEAgLTE1Myw3ICsxNTAsNyBAQCBjbGFzcyBTaW5n
bGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgIGxvY2F0aW9uID0gc2VsZi5WRVJTSU9OX0RJ
UiBpZiBzZWxmLl9vcHRpb25zLmFkZF9wbGF0Zm9ybV9leGNlcHRpb25zIGVsc2Ugc2VsZi5VUERB
VEUKICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQudGV4dCwg
Jy50eHQnLCBsb2NhdGlvbikKICAgICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZl
cl9vdXRwdXQuYXVkaW8sICcud2F2JywgbG9jYXRpb24pCi0gICAgICAgIGlmIHNlbGYuX29wdGlv
bnMucGl4ZWxfdGVzdHM6CisgICAgICAgIGlmIHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdDoK
ICAgICAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0LmltYWdl
LCAnLnBuZycsIGxvY2F0aW9uKQogCiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2VsZiwg
ZGF0YSwgZXh0ZW5zaW9uLCBsb2NhdGlvbik6CkBAIC0yMjIsNyArMjE5LDcgQEAgY2xhc3MgU2lu
Z2xlVGVzdFJ1bm5lcihvYmplY3QpOgogCiAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9j
b21wYXJlX3RleHQoZHJpdmVyX291dHB1dC50ZXh0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LnRl
eHQpKQogICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5fY29tcGFyZV9hdWRpbyhkcml2ZXJf
b3V0cHV0LmF1ZGlvLCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LmF1ZGlvKSkKLSAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3J1bl9w
aXhlbF90ZXN0OgogICAgICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfaW1h
Z2UoZHJpdmVyX291dHB1dCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dCkpCiAgICAgICAgIHJldHVy
biBUZXN0UmVzdWx0KHNlbGYuX3Rlc3RfbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVz
dF90aW1lLCBkcml2ZXJfb3V0cHV0Lmhhc19zdGRlcnIoKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5Cmlu
ZGV4IDM3ODgyNmM1MWY4ZTA5ZGY2NWEyODAwZDc1ZmM2NWUyYmExYWU1OGIuLjBkYzA5ODNkNmM3
NGIyMzdhMzBjN2UzY2QxOGI3NThlZDg3ZTc1ZjkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weQorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKQEAgLTg4
LDEzICs4OCw3IEBAIGNsYXNzIFdvcmtlcihvYmplY3QpOgogICAgICAgICAgICAgdGVzdF9pbnB1
dC5yZWZlcmVuY2VfZmlsZXMgPSBzZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyh0ZXN0X2lucHV0
LnRlc3RfbmFtZSkKICAgICAgICAgaWYgdGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXM6CiAgICAg
ICAgICAgICB0ZXN0X2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCA9IFRydWUKLSAgICAgICAg
ZWxpZiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAgaWYgc2VsZi5fb3B0
aW9ucy5za2lwX3BpeGVsX3Rlc3RfaWZfbm9fYmFzZWxpbmU6Ci0gICAgICAgICAgICAgICAgdGVz
dF9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QgPSBib29sKHNlbGYuX3BvcnQuZXhwZWN0ZWRf
aW1hZ2UodGVzdF9pbnB1dC50ZXN0X25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAg
ICAgICAgICB0ZXN0X2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVzdCA9IFRydWUKLSAgICAgICAg
ZWxzZToKLSAgICAgICAgICAgIHRlc3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gRmFs
c2UKKyAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QgPSBzZWxmLl9wb3J0
LnNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdCh0ZXN0X2lucHV0KQogCiAgICAgZGVmIF9ydW5fdGVz
dChzZWxmLCB0ZXN0X2lucHV0KToKICAgICAgICAgc2VsZi5fdXBkYXRlX3Rlc3RfaW5wdXQodGVz
dF9pbnB1dCkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvYmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weQppbmRleCBkNzkxNDMxODlkMDQwYTJmNDM2YTA4OTVkOTIzMTlkOTBlNDY4MmE5Li4z
ODhhNzAxNzg0ZmRkZjNlZjNmOWIxNTY0NjFjYjEyMDcwNjBhMjE4IDEwMDc1NQotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CkBAIC03NDIsOCArNzQy
LDYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogICAgICAgICAiIiJSZXR1cm5zIGEgdGVzdF9uYW1l
IGEgcmVhbHRpdmUgdW5peC1zdHlsZSBwYXRoIGZvciBhIGZpbGVuYW1lIHVuZGVyIHRoZSBMYXlv
dXRUZXN0cwogICAgICAgICBkaXJlY3RvcnkuIEZpbGVuYW1lcyBvdXRzaWRlIHRoZSBMYXlvdXRU
ZXN0cyBkaXJlY3Rvcnkgc2hvdWxkIHJhaXNlCiAgICAgICAgIGFuIGVycm9yLiIiIgotICAgICAg
ICAjIFBvcnRzIHRoYXQgcnVuIG9uIHdpbmRvd3MgbmVlZCB0byBvdmVycmlkZSB0aGlzIG1ldGhv
ZCB0byBkZWFsIHdpdGgKLSAgICAgICAgIyBmaWxlbmFtZXMgd2l0aCBiYWNrc2xhc2hlcyBpbiB0
aGVtLgogICAgICAgICBhc3NlcnQgZmlsZW5hbWUuc3RhcnRzd2l0aChzZWxmLmxheW91dF90ZXN0
c19kaXIoKSksICIlcyBkaWQgbm90IHN0YXJ0IHdpdGggJXMiICUgKGZpbGVuYW1lLCBzZWxmLmxh
eW91dF90ZXN0c19kaXIoKSkKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lW2xlbihzZWxmLmxheW91
dF90ZXN0c19kaXIoKSkgKyAxOl0KIApAQCAtMTI0OSw2ICsxMjQ3LDI1IEBAIGNsYXNzIFBvcnQo
b2JqZWN0KToKICAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGUuYXJncwogICAgICAgICByZXR1
cm4gW10KIAorICAgIGRlZiBzdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3Qo
c2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVyJyk6
CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fc3VwcG9ydHNf
c3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCkKKworICAgIGRlZiBfc3VwcG9ydHNfc3dp
dGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UK
KworICAgIGRlZiBzaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Cisg
ICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMuc2tpcF9waXhlbF90ZXN0X2lmX25v
X2Jhc2VsaW5lIGFuZCBub3Qgc2VsZi5leHBlY3RlZF9pbWFnZSh0ZXN0X2lucHV0LnRlc3RfbmFt
ZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3Vs
ZF9ydW5fYXNfcGl4ZWxfdGVzdCh0ZXN0X2lucHV0KQorCisgICAgZGVmIF9zaG91bGRfcnVuX2Fz
X3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAgICMgRGVmYXVsdCBpcyB0byBu
b3QgZmlsdGVyIHRlc3RzIGZ1cnRoZXIuIFRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHBv
cnQuCisgICAgICAgIHJldHVybiBUcnVlCisKIAogY2xhc3MgVmlydHVhbFRlc3RTdWl0ZShvYmpl
Y3QpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBiYXNlLCBhcmdzLCB0ZXN0cz1Ob25l
KToKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZHJpdmVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2
ZXIucHkKaW5kZXggNWU3MDYxYmFiOTc2Y2E1ZGY4OGQ1MjdkNGE2YjhkNjIyZTIzMTU1OC4uYTlj
YWI4OWRhYWM0MTZkYTRjNWM1MzA2ZGI2ZDNiZTU2YjFlMGRmMyAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKKysrIGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHkKQEAgLTI5OCw3ICsy
OTgsNyBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKIAogICAgICAgICBjbWQuZXh0ZW5kKHNlbGYu
X3BvcnQuZ2V0X29wdGlvbignYWRkaXRpb25hbF9kcnRfZmxhZycsIFtdKSkKIAotICAgICAgICBp
ZiBwaXhlbF90ZXN0czoKKyAgICAgICAgaWYgcGl4ZWxfdGVzdHMgYW5kIG5vdCBzZWxmLl9wb3J0
LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgogICAgICAgICAgICAg
Y21kLmFwcGVuZCgnLS1waXhlbC10ZXN0cycpCiAgICAgICAgIGNtZC5leHRlbmQocGVyX3Rlc3Rf
YXJncykKIApAQCAtMzM4LDggKzMzOCwxMSBAQCBjbGFzcyBEcml2ZXIob2JqZWN0KToKICAgICAg
ICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKICAgICAgICAgICAgICAgICBjb21t
YW5kID0gcGF0aC5jeWdwYXRoKGNvbW1hbmQpCiAKKyAgICAgICAgIyAiJyIgaXMgdGhlIHNlcGFy
YXRvciBvZiBjb21tYW5kIGZpZWxkcy4KKyAgICAgICAgaWYgZHJpdmVyX2lucHV0LnNob3VsZF9y
dW5fcGl4ZWxfdGVzdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX3BvcnQuc3VwcG9ydHNfc3dpdGNo
aW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCk6CisgICAgICAgICAgICAgICAgY29tbWFuZCArPSAi
JyIgKyAnLS1waXhlbC10ZXN0JwogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoK
LSAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCiAg
ICAgICAgICAgICBjb21tYW5kICs9ICInIiArIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoCiAgICAg
ICAgIHJldHVybiBjb21tYW5kICsgIlxuIgogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9xdC5weQppbmRleCBhYWFhZmFjNWQzNjRjY2FlNDdlOTExM2UzODU1
YWQ2MWYxYTVjMzhkLi41YjY0MmM4YzAzMDQ4NDg4NDhhMzQ5YjBmNjUzZDI1MTcwYTQyZmQxIDEw
MDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5
CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKQEAg
LTE4NSwzICsxODUsMTYgQEAgY2xhc3MgUXRQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICAgICAg
X2xvZy5lcnJvcignVXNlIGdpdCB0byBncmFiIHRoZSBhY3R1YWwgZm9udHMgZnJvbSBodHRwOi8v
Z2l0b3Jpb3VzLm9yZy9xdHdlYmtpdC90ZXN0Zm9udHMnKQogICAgICAgICAgICAgcmV0dXJuIEZh
bHNlCiAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5n
X3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAg
ZGVmIF9zaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAgICAg
IHBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMgPSBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0
b3JpZXMKKyAgICAgICAgaWYgbm90IHBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6CisgICAgICAgICAg
ICBwaXhlbF90ZXN0X2RpcmVjdG9yaWVzID0gc2VsZi5fZGVmYXVsdF9waXhlbF90ZXN0X2RpcmVj
dG9yaWVzKCkKKyAgICAgICAgcmV0dXJuIGFueSh0ZXN0X2lucHV0LnRlc3RfbmFtZS5zdGFydHN3
aXRoKGRpcmVjdG9yeSkgZm9yIGRpcmVjdG9yeSBpbiBwaXhlbF90ZXN0X2RpcmVjdG9yaWVzKQor
CisgICAgI0BjbGFzc21ldGhvZAorICAgIGRlZiBfZGVmYXVsdF9waXhlbF90ZXN0X2RpcmVjdG9y
aWVzKHNlbGYpOgorICAgICAgICByZXR1cm4gWydjb21wb3NpdGluZyddCmRpZmYgLS1naXQgYS9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpp
bmRleCA0NTVhOGMyZGMyNWIyN2U2ZGU1NGU3NWUwMTA4YTBkMWMyZGEwYTUzLi42NDFiNTljNTJk
OWMzOGE4YzA5NTUxMWRjZjFmYmQ5NDk5YTRjZTVmIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTE4NSw2
ICsxODUsMjcgQEAgZGVmIF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpOgog
ICAgICAgICBvcHRpb25zLnJlc2V0X3Jlc3VsdHMgPSBUcnVlCiAgICAgICAgIG9wdGlvbnMuYWRk
X3BsYXRmb3JtX2V4Y2VwdGlvbnMgPSBUcnVlCiAKKyAgICBpZiBvcHRpb25zLnBpeGVsX3Rlc3Rf
ZGlyZWN0b3JpZXM6CisgICAgICAgIGlmIG5vdCBvcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAg
ICAgICAgd2FybmluZ3MuYXBwZW5kKCItLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMgaGFzIG5vIGVm
ZmVjdCB3aXRob3V0IC0tcGl4ZWwtdGVzdHMiKQorICAgICAgICAgICAgb3B0aW9ucy5waXhlbF90
ZXN0X2RpcmVjdG9yaWVzID0gW10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNhbml0aXpl
ZCA9IHNldCgpCisgICAgICAgICAgICBwaXhlbF90ZXN0X2RpcmVjdG9yaWVzID0gb3B0aW9ucy5w
aXhlbF90ZXN0X2RpcmVjdG9yaWVzCisgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHBpeGVs
X3Rlc3RfZGlyZWN0b3JpZXM6CisgICAgICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IGRpcmVj
dG9yeQorICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNhYnMoZGlyZWN0b3J5KToKKyAgICAg
ICAgICAgICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShkaXJlY3RvcnkpCisgICAgICAgICAgICAgICAgZWxpZiBkaXJlY3Rvcnkuc3RhcnRzd2l0aChv
cy5wYXRoLmJhc2VuYW1lKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpKSk6CisgICAgICAgICAgICAg
ICAgICAgIHJlbGF0aXZlX3BhdGggPSBkaXJlY3RvcnlbbGVuKG9zLnBhdGguYmFzZW5hbWUocG9y
dC5sYXlvdXRfdGVzdHNfZGlyKCkpKSArIDE6XQorCisgICAgICAgICAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNkaXIob3MucGF0aC5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCByZWxhdGl2
ZV9wYXRoKSk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLmFwcGVuZCgiLS1waXhlbC10
ZXN0LWRpcmVjdG9yaWVzIGV4cGVjdHMgbGlzdCBvZiBkaXJlY3RvcmllcyBidXQgZ290OiAiICsg
ZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNh
bml0aXplZC5hZGQocmVsYXRpdmVfcGF0aCkKKworICAgICAgICAgICAgb3B0aW9ucy5waXhlbF90
ZXN0X2RpcmVjdG9yaWVzID0gbGlzdChzYW5pdGl6ZWQpCisKICAgICByZXR1cm4gd2FybmluZ3MK
IAogCkBAIC0xOTgsNiArMjE5LDEyIEBAIGRlZiBfY29tcGF0X3NoaW1fb3B0aW9uKG9wdGlvbl9u
YW1lLCAqKmt3YXJncyk6CiAgICAgICAgIGhlbHA9Iklnbm9yZWQsIGZvciBvbGQtcnVuLXdlYmtp
dC10ZXN0cyBjb21wYXQgb25seS4iLCAqKmt3YXJncykKIAogCitkZWYgX2xpc3RhcmdfY2FsbGJh
Y2sob3B0aW9uLCBvcHRfc3RyLCB2YWx1ZSwgcGFyc2VyKToKKyAgICB2YWx1ZXMgPSBwYXJzZXIu
cmFyZ3NbMF0uc3BsaXQoJyAnKQorICAgIHNldGF0dHIocGFyc2VyLnZhbHVlcywgb3B0aW9uLmRl
c3QsIHZhbHVlcykKKyAgICBkZWwgcGFyc2VyLnJhcmdzWzBdCisKKwogZGVmIHBhcnNlX2FyZ3Mo
YXJncz1Ob25lKToKICAgICAiIiJQcm92aWRlcyBhIGRlZmF1bHQgc2V0IG9mIGNvbW1hbmQgbGlu
ZSBhcmdzLgogCkBAIC0zMTUsNiArMzQyLDE2IEBAIGRlZiBwYXJzZV9hcmdzKGFyZ3M9Tm9uZSk6
CiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNraXAtcGl4ZWwtdGVzdC1pZi1uby1i
YXNlbGluZSIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICBkZXN0PSJza2lwX3Bp
eGVsX3Rlc3RfaWZfbm9fYmFzZWxpbmUiLCBoZWxwPSJEbyBub3QgZ2VuZXJhdGUgYW5kIGNoZWNr
IHBpeGVsIHJlc3VsdCBpbiB0aGUgY2FzZSB3aGVuICIKICAgICAgICAgICAgICAgICAgIm5vIGlt
YWdlIGJhc2VsaW5lIGlzIGF2YWlsYWJsZSBmb3IgdGhlIHRlc3QuIiksCisgICAgICAgIG9wdHBh
cnNlLm1ha2Vfb3B0aW9uKCItLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMiLCBhY3Rpb249ImNhbGxi
YWNrIiwgZGVmYXVsdD1bXSwKKyAgICAgICAgICAgIGRlc3Q9InBpeGVsX3Rlc3RfZGlyZWN0b3Jp
ZXMiLCBjYWxsYmFjaz1fbGlzdGFyZ19jYWxsYmFjaywKKyAgICAgICAgICAgIGhlbHA9IkEgc3Ry
aW5nIGNvbnRhaW5pbmcgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgd2hlcmUg
aXQgaXMgYWxsb3dlZCB0byAiCisgICAgICAgICAgICAgICAgICJleGVjdXRlIHRlc3RzIGFzIHBp
eGVsIHRlc3RzLiBUaGlzIG9wdGlvbiBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIHRvZ2F0aGVyIHdp
dGggIgorICAgICAgICAgICAgICAgICAiLS1waXhlbC10ZXN0cy4gSWYgc3BlY2lmaWVkLCBvbmx5
IHRob3NlIHRlc3RzIHdpbGwgYmUgZXhlY3V0ZWQgYXMgcGl4ZWwgdGVzdHMgIgorICAgICAgICAg
ICAgICAgICAidGhhdCBhcmUgbG9jYXRlZCBpbiBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzIGVudW1l
cmF0ZWQgaGVyZS4gU29tZSBwb3J0cyBtYXkgaWdub3JlICIKKyAgICAgICAgICAgICAgICAgInRo
aXMgb3B0aW9uIHdoaWxlIG90aGVycyBjYW4gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgdGhhdCBjYW4g
YmUgb3ZlcnJpZGRlbiBoZXJlLiAiCisgICAgICAgICAgICAgICAgICcnJworICAgICAgICAgICAg
ICAgICBFeGFtcGxlOiBcJ2FuaW1hdGlvbnMgY29tcG9zaXRpbmdcJy4nJycpLAorCiAgICAgICAg
IG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNraXAtZmFpbGluZy10ZXN0cyIsIGFjdGlvbj0ic3Rv
cmVfdHJ1ZSIsCiAgICAgICAgICAgICBkZWZhdWx0PUZhbHNlLCBoZWxwPSJTa2lwIHRlc3RzIHRo
YXQgYXJlIGV4cGVjdGVkIHRvIGZhaWwuICIKICAgICAgICAgICAgICAgICAgIk5vdGU6IFdoZW4g
dXNpbmcgdGhpcyBvcHRpb24sIHlvdSBtaWdodCBtaXNzIG5ldyBjcmFzaGVzICIKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggMGEyY2IyYmRkN2FhZGQyMjY2
MjI1MWNlMGQwZTE4YzU1ODA1NTNhZS4uOTdmYzYxZTJkMDNiY2FlYmE1NzM0NTFjZjVlNzc5M2Y4
NzAzYzkzNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAg
LTY3LDcgKzY3LDcgQEAgVGVzdENvbnRyb2xsZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQog
fQogCiBUZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIq
IGFyZ3ZbXSkKLSAgICA6IG1fZHVtcFBpeGVscyhmYWxzZSkKKyAgICA6IG1fZHVtcFBpeGVsc0Zv
ckFsbFRlc3RzKGZhbHNlKQogICAgICwgbV92ZXJib3NlKGZhbHNlKQogICAgICwgbV9wcmludFNl
cGFyYXRvcnMoZmFsc2UpCiAgICAgLCBtX3VzaW5nU2VydmVyTW9kZShmYWxzZSkKQEAgLTI2MSw3
ICsyNjEsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjLCBjb25z
dCBjaGFyKiBhcmd2W10pCiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXJndW1lbnQgPT0gIi0t
cGl4ZWwtdGVzdHMiKSB7Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHMgPSB0cnVlOworICAgICAg
ICAgICAgbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSB0cnVlOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXZlcmJvc2UiKSB7CkBA
IC01MTAsMTggKzUxMCwzMSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNo
YXIqIHRlc3QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmlu
ZyBwYXRoT3JVUkwodGVzdCk7CisgICAgYm9vbCBkdW1wUGl4ZWxzVGVzdCA9IG1fZHVtcFBpeGVs
c0ZvckFsbFRlc3RzOworICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQodGVzdCk7CisgICAgc3RkOjpz
dHJpbmcgcGF0aE9yVVJMID0gY29tbWFuZDsKICAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVs
SGFzaDsKLSAgICBzaXplX3Qgc2VwYXJhdG9yUG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAg
ICBpZiAoc2VwYXJhdG9yUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhP
clVSTCA9IHN0ZDo6c3RyaW5nKHN0ZDo6c3RyaW5nKHRlc3QpLCAwLCBzZXBhcmF0b3JQb3MpOwot
ICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6c3RyaW5nKHN0ZDo6c3RyaW5nKHRlc3Qp
LCBzZXBhcmF0b3JQb3MgKyAxKTsKKyAgICBzaXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBjb21t
YW5kLmZpbmRfZmlyc3Rfb2YoJ1wnJyk7CisgICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9
IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcnLCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOworICAg
IGlmIChmaXJzdFNlcGFyYXRvclBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBw
YXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhjb21tYW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7Cisg
ICAgICAgIHNpemVfdCBwaXhlbEhhc2hQb3MgPSBmaXJzdFNlcGFyYXRvclBvcyArIDE7CisKKyAg
ICAgICAgLy8gTlJXVCBwYXNzZXMgLS1waXhlbC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBpeGVs
cyBmb3IgdGhlIHRlc3QuCisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxU
ZXN0QXJnKCItLXBpeGVsLXRlc3QiKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0
ZDo6c3RyaW5nKGNvbW1hbmQsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRl
c3RBcmcuc2l6ZSgpKTsKKyAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRQaXhlbFRlc3RB
cmcpIHsKKyAgICAgICAgICAgIGR1bXBQaXhlbHNUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBp
eGVsSGFzaFBvcyA9IHNlY29uZFNlcGFyYXRvclBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IC0x
IDogc2Vjb25kU2VwYXJhdG9yUG9zICsgMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxI
YXNoUG9zICE9IC0xICYmIHBpeGVsSGFzaFBvcyA8IGNvbW1hbmQuc2l6ZSgpKQorICAgICAgICAg
ICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdGQ6OnN0cmluZyhjb21tYW5kLCBwaXhlbEhhc2hQb3Mp
OwogICAgIH0KIAogICAgIG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsKIAogICAgIG1fY3VycmVudElu
dm9jYXRpb24gPSBhZG9wdFB0cihuZXcgVGVzdEludm9jYXRpb24ocGF0aE9yVVJMKSk7Ci0gICAg
aWYgKG1fZHVtcFBpeGVscykKKyAgICBpZiAoZHVtcFBpeGVsc1Rlc3QpCiAgICAgICAgIG1fY3Vy
cmVudEludm9jYXRpb24tPnNldElzUGl4ZWxUZXN0KGV4cGVjdGVkUGl4ZWxIYXNoKTsKIAogICAg
IG1fY3VycmVudEludm9jYXRpb24tPmludm9rZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCmluZGV4IGI5NDY1ZWY5NmU1N2U3MzVjNDEwNDQ3ODU0MTkzODY3ZjBiMDVj
YjAuLjY1OTZhMDhjNmJmY2RhODY0OWU4NzYyNzQ5NmIxYmMxMGZkOGUxYTggMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcml2YXRl
OgogCiAgICAgT3duUHRyPFRlc3RJbnZvY2F0aW9uPiBtX2N1cnJlbnRJbnZvY2F0aW9uOwogCi0g
ICAgYm9vbCBtX2R1bXBQaXhlbHM7CisgICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsK
ICAgICBib29sIG1fdmVyYm9zZTsKICAgICBib29sIG1fcHJpbnRTZXBhcmF0b3JzOwogICAgIGJv
b2wgbV91c2luZ1NlcnZlck1vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154101</attachid>
            <date>2012-07-24 10:41:59 -0700</date>
            <delta_ts>2012-07-25 11:57:39 -0700</delta_ts>
            <desc>proposed patch, test included</desc>
            <filename>bug-91754-20120724194142.patch</filename>
            <type>text/plain</type>
            <size>26569</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNDUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDBkOTY5OTQzOWRlN2JhMGYwZWJmNDJiZDgxYTgwZDY5
Y2ViZDc4OS4uMTU0MjRjNmYzZTY2YTUxMGI2MmU4MGM2MWE1OGZkNzY0MWZlZDE1MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgx
IEBACisyMDEyLTA3LTI0ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbTlJXVF0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVzdHJpY3QgcGl4ZWwgdGVzdHMg
Zm9yIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxNzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbiB0
byBucnd0LiBJZiBzcGVjaWZpZWQgdG9nZXRoZXIKKyAgICAgICAgd2l0aCAtLXBpeGVsLXRlc3Rz
LCBhbmQgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHRoaXMgb3B0aW9uLCBvbmx5IHRlc3RzCisg
ICAgICAgIGZyb20gdGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBleGVjdXRlZCBhcyBwaXhlbCB0
ZXN0cy4gRnVydGhlcm1vcmUsIHBsYXRmb3JtcworICAgICAgICBjYW4gaGF2ZSBhIGRlZmF1bHQg
c2V0IG9mIHBpeGVsIHRlc3QgZGlyZWN0b3JpZXMuIFRvIHN1cHBvcnQgdGhlIGZlYXR1cmUKKyAg
ICAgICAgdGhlIHRlc3QgaGFybmVzcyBoYXZlIHRvIGJlIGFibGUgdG8gaW5mb3JtIHRoZSBkcml2
ZXIgd2hldGhlciB0byBkdW1wIHBpeGVscworICAgICAgICBmb3IgZWFjaCB0ZXN0cy4gRm9yIHRo
aXMgcHVycG9zZSBJIGNoYW5nZWQgV1RSIGFuZCB0aGUgUXQgRFJUIHRvIGhhbmRsZSBhCisgICAg
ICAgIC0tcGl4ZWwtdGVzdCBhcmd1bWVudCBmcm9tIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIG1h
ZGUgTlJXVCB1c2UgdGhpcyBhcmd1bWVudAorICAgICAgICB3aXRoIHRoZXNlIGRyaXZlcnMuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVu
ZGVyVHJlZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6
OnNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVy
VHJlZTo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVR
dC5oOgorICAgICAgICAoRHVtcFJlbmRlclRyZWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3F0L21haW4uY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgIEhhbmRsZSB0aGUgLS1waXhl
bC10ZXN0IGFyZ3VtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAoU2luZ2xlVGVz
dFJ1bm5lci5fc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKToKKyAgICAgICAgKFNpbmds
ZVRlc3RSdW5uZXIuX292ZXJ3cml0ZV9iYXNlbGluZXMpOgorICAgICAgICAoU2luZ2xlVGVzdFJ1
bm5lci5fY29tcGFyZV9vdXRwdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weToKKyAgICAgICAgKFdvcmtlci5fdXBkYXRlX3Rl
c3RfaW5wdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weToKKyAgICAgICAgKFBvcnQubWFrZV9yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKToKKyAg
ICAgICAgKFBvcnQucmVsYXRpdmVfdGVzdF9maWxlbmFtZSk6CisgICAgICAgIChQb3J0LnN1cHBv
cnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6IFBvcnRzIGNhbiBvdmVycmlkZSB0
aGlzIHRvIGluZm9ybQorICAgICAgICB0aGUgaGFybmVzcyB0aGF0IC0tcGl4ZWwtdGVzdCBhcmd1
bWVudCBpcyBzdXBwb3J0ZWQuIFRydWUgZm9yIFdUUiwgb3RoZXJ3aXNlIGNhbGxzCisgICAgICAg
IHByaXZhdGUgdmVyc2lvbiB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBhY3R1YWwgcGxh
dGZvcm0uIE9ubHkgdHJ1ZSB3aXRoIFdUUgorICAgICAgICBhbmQgUXQgRFJUIGN1cnJlbnRseS4g
VGhpcyBzdXBwb3NlZCB0byBleGlzdCBvbmx5IHRlbXBvcmFyeSB1bnRpbCB0aGVyZSBhcmUgcG9y
dHMKKyAgICAgICAgdGhhdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGZlYXR1cmUgaW4gdGhlaXIgRFJU
J3MuCisgICAgICAgIChQb3J0KToKKyAgICAgICAgKFBvcnQuX3N1cHBvcnRzX3N3aXRjaGluZ19w
aXhlbF90ZXN0c19wZXJfdGVzdCk6CisgICAgICAgIChQb3J0LnNob3VsZF9ydW5fYXNfcGl4ZWxf
dGVzdCk6CisgICAgICAgIChQb3J0Ll9pbl9kZWZhdWx0X3BpeGVsX3Rlc3RfZGlyZWN0b3J5KTog
UG9ydHMgY2FuIG92ZXJyaWRlIHRoaXMgdG8gZGVmaW5lIHRoZWlyCisgICAgICAgIGRlZmF1bHQg
c2V0IG9mIHBpeGVsIHRlc3RzIGRpcmVjdG9yaWVzLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0
cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5l
KToKKyAgICAgICAgKERyaXZlci5fY29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6ICBQYXNzIC0t
cGl4ZWwtdGVzdCBpZiBpdCBpcyBzdXBwb3J0ZWQgYW5kIHBpeGVsCisgICAgICAgIHRlc3RzIGFy
ZSBlbmFibGVkLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
cXQucHk6CisgICAgICAgIChRdFBvcnQuX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19w
ZXJfdGVzdCk6CisgICAgICAgIChRdFBvcnQuX2luX2RlZmF1bHRfcGl4ZWxfdGVzdF9kaXJlY3Rv
cnkpOgorICAgICAgICAoUXRQb3J0Ll9kZWZhdWx0X3BpeGVsX3Rlc3RfZGlyZWN0b3JpZXMpOiBP
bmx5IGNvbXBvc2l0aW5nIHdpbGwgYmUgb3VyIGRlZmF1bHQgcGl4ZWwKKyAgICAgICAgdGVzdCBk
aXJlY3RvcnkgZm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2xh
eW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5OgorICAgICAgICAoX3NldF91cF9kZXJpdmVk
X29wdGlvbnMpOgorICAgICAgICAoX2xpc3RhcmdfY2FsbGJhY2spOgorICAgICAgICAocGFyc2Vf
YXJncyk6CisgICAgICAgIEhhbmRsZSB0aGUgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlv
bi4gb3B0cGFyc2UgZG9uJ3Qgc3VwcG9ydCBsaXN0IGFyZ3VtZW50cworICAgICAgICBzbyBJIGlt
cGxlbWVudGVkIGl0IHdpdGggYSBjYWxsYmFjay4gVGhlIGFyZ3VtZW50IGNhbiBiZSBhIHNpbXBs
ZSBkaXJlY3Rvcnkgb3IgYQorICAgICAgICBzdHJpbmcgKGluIGFwb3N0cm9waGVzKSBjb250YWlu
aW5nIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMuCisKKyAgICAgICAgKiBT
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9u
dGVzdC5weToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcnVuX3NpbmdseV9hY3R1YWxseV9ydW5z
X3Rlc3RzKToKKyAgICAgICAgKE1haW5UZXN0LnRlc3RfcGl4ZWxfdGVzdF9kaXJlY3Rvcmllcyk6
CisgICAgICAgIEFkZGVkIGludGVncmF0aW9uIHRlc3QgZm9yIHRoZSBmZWF0dXJlLgorCisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChXVFI6OlRlc3RDb250
cm9sbGVyOjppbml0aWFsaXplKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJ1blRl
c3QpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgSGFuZGxlIHRoZSAtLXBpeGVsLXRlc3QgYXJn
dW1lbnQuCisKIDIwMTItMDctMjQgIFBpZXJyZSBSb3NzaSAgPHBpZXJyZS5yb3NzaUBnbWFpbC5j
b20+CiAKICAgICAgICAgW1F0XSBFbmFibGUgdG91Y2ggc2xpZGVyIHdoZW4gdG91Y2ggZXZlbnRz
IGFyZSBlbmFibGVkCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQu
Y3BwCmluZGV4IDEyZDY1OWE1MTkzZTM5NzA5YzE5NGU1NzE2ZTQ3ODY2ZGUwZjBiYjguLjgyMTJi
ZjFlN2M0MzUxMjgzMjM5NGI1NjFmZTQ2NTU5NGM4ODFjODAgMTAwNzU1Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCkBAIC0zODgsNyArMzg4LDcgQEAgV2ViVmll
d0dyYXBoaWNzQmFzZWQ6OldlYlZpZXdHcmFwaGljc0Jhc2VkKFFXaWRnZXQqIHBhcmVudCkKIH0K
IAogRHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVlKCkKLSAgICA6IG1fZHVtcFBpeGVscyhm
YWxzZSkKKyAgICA6IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKQogICAgICwgbV9zdGRp
bigwKQogICAgICwgbV9lbmFibGVUZXh0T3V0cHV0KGZhbHNlKQogICAgICwgbV9zdGFuZEFsb25l
TW9kZShmYWxzZSkKQEAgLTYwNiw3ICs2MDYsNyBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpvcGVu
KGNvbnN0IFFVcmwmIHVybCkKIAogICAgIGlmIChpc0R1bXBBc1RleHRUZXN0KHVybCkpIHsKICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVtcEFzVGV4dCgpOwotICAgICAgICBzZXRE
dW1wUGl4ZWxzKGZhbHNlKTsKKyAgICAgICAgc2V0RHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNl
KTsKICAgICB9CiAKICAgICBpZiAoaXNHbG9iYWxIaXN0b3J5VGVzdCh1cmwpKQpAQCAtNjkyLDE0
ICs2OTIsMjQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6cHJvY2Vzc0xpbmUoY29uc3QgUVN0cmlu
ZyAmaW5wdXQpCiB7CiAgICAgUVN0cmluZyBsaW5lID0gaW5wdXQ7CiAKKyAgICBtX2R1bXBQaXhl
bHNGb3JDdXJyZW50VGVzdCA9IGZhbHNlOwogICAgIG1fZXhwZWN0ZWRIYXNoID0gUVN0cmluZygp
OwotICAgIGlmIChtX2R1bXBQaXhlbHMpIHsKLSAgICAgICAgLy8gc2luZ2xlIHF1b3RlIG1hcmtz
IHRoZSBwaXhlbCBkdW1wIGhhc2gKLSAgICAgICAgaW50IGkgPSBsaW5lLmluZGV4T2YoJ1wnJyk7
Ci0gICAgICAgIGlmIChpID4gLTEpIHsKLSAgICAgICAgICAgIG1fZXhwZWN0ZWRIYXNoID0gbGlu
ZS5taWQoaSArIDEsIGxpbmUubGVuZ3RoKCkpOwotICAgICAgICAgICAgbGluZS5yZW1vdmUoaSwg
bGluZS5sZW5ndGgoKSk7CisgICAgLy8gc2luZ2xlIHF1b3RlIG1hcmtzIHRoZSBwaXhlbCBkdW1w
IGhhc2gKKyAgICBpbnQgaW5kZXhPZkZpcnN0U2VwYXJhdG9yID0gbGluZS5pbmRleE9mKCdcJycp
OworICAgIGludCBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID0gbGluZS5pbmRleE9mKCdcJycsIGlu
ZGV4T2ZGaXJzdFNlcGFyYXRvcik7CisgICAgaWYgKGluZGV4T2ZGaXJzdFNlcGFyYXRvciA+IC0x
KSB7CisgICAgICAgIGludCBpbmRleE9mUGl4ZWxIYXNoID0gaW5kZXhPZkZpcnN0U2VwYXJhdG9y
ICsgMTsKKworICAgICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVsLXRlc3QgaWYgd2Ugc2hvdWxk
IGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KKyAgICAgICAgY29uc3QgUVN0cmluZyBleHBlY3Rl
ZEFyZyhRTGF0aW4xU3RyaW5nKCItLXBpeGVsLXRlc3QiKSk7CisgICAgICAgIFFTdHJpbmcgYXJn
VGVzdCA9IGxpbmUubWlkKGluZGV4T2ZGaXJzdFNlcGFyYXRvciArIDEsIGV4cGVjdGVkQXJnLmxl
bmd0aCgpKTsKKyAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRBcmcpIHsKKyAgICAgICAg
ICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIGluZGV4
T2ZQaXhlbEhhc2ggPSBpbmRleE9mU2Vjb25kU2VwYXJhdG9yID09IC0xID8gLTEgOiBpbmRleE9m
U2Vjb25kU2VwYXJhdG9yICsgMTsKICAgICAgICAgfQorICAgICAgICBpZiAoaW5kZXhPZlBpeGVs
SGFzaCAhPSAtMSAmJiBpbmRleE9mUGl4ZWxIYXNoIDwgbGluZS5zaXplKCkpCisgICAgICAgICAg
ICBtX2V4cGVjdGVkSGFzaCA9IGxpbmUubWlkKGluZGV4T2ZQaXhlbEhhc2gpOworICAgICAgICBs
aW5lLnJlbW92ZShpbmRleE9mRmlyc3RTZXBhcmF0b3IsIGxpbmUubGVuZ3RoKCkpOwogICAgIH0K
IAogICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoUUxhdGluMVN0cmluZygiaHR0cDoiKSkKQEAgLTcz
MSw5ICs3NDEsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVlOjpwcm9jZXNzTGluZShjb25zdCBRU3Ry
aW5nICZpbnB1dCkKICAgICBmZmx1c2goc3Rkb3V0KTsKIH0KIAotdm9pZCBEdW1wUmVuZGVyVHJl
ZTo6c2V0RHVtcFBpeGVscyhib29sIGR1bXApCit2b2lkIER1bXBSZW5kZXJUcmVlOjpzZXREdW1w
UGl4ZWxzRm9yQWxsVGVzdHMoYm9vbCBkdW1wKQogewotICAgIG1fZHVtcFBpeGVscyA9IGR1bXA7
CisgICAgbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgPSBkdW1wOwogfQogCiB2b2lkIER1bXBSZW5k
ZXJUcmVlOjpjbG9zZVJlbWFpbmluZ1dpbmRvd3MoKQpAQCAtOTUxLDcgKzk2MSw3IEBAIHZvaWQg
RHVtcFJlbmRlclRyZWU6OmR1bXAoKQogICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRvdXQpOwogICAg
IGZwdXRzKCIjRU9GXG4iLCBzdGRlcnIpOwogCi0gICAgaWYgKG1fZHVtcFBpeGVscyAmJiAhbV9j
b250cm9sbGVyLT5zaG91bGREdW1wQXNUZXh0KCkpIHsKKyAgICBpZiAoKG1fZHVtcFBpeGVsc0Zv
ckFsbFRlc3RzIHx8IG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0KSAmJiAhbV9jb250cm9sbGVy
LT5zaG91bGREdW1wQXNUZXh0KCkpIHsKICAgICAgICAgUUltYWdlIGltYWdlOwogICAgICAgICBp
ZiAoIW1fY29udHJvbGxlci0+aXNQcmludGluZygpKSB7CiAgICAgICAgICAgICBpbWFnZSA9IFFJ
bWFnZShtX3BhZ2UtPnZpZXdwb3J0U2l6ZSgpLCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIpOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCmluZGV4IGQzOTI4YmM5OWZh
ZjE1M2Q5Nzg3MmFlYTFlNWZlMWUxYTM3ZDhkMzkuLmM0ZjkyOTgzZjkxNWNjYTZhODg5OGFkZWZi
NTYyYzhkMmRkOTFkYTAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBS
ZW5kZXJUcmVlUXQuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJl
ZVF0LmgKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0R3JhcGhpY3NCYXNl
ZChib29sIGZsYWcpIHsgbV9ncmFwaGljc0Jhc2VkID0gZmxhZzsgfQogICAgIGJvb2wgaXNHcmFw
aGljc0Jhc2VkKCkgeyByZXR1cm4gbV9ncmFwaGljc0Jhc2VkOyB9CiAKLSAgICB2b2lkIHNldER1
bXBQaXhlbHMoYm9vbCk7CisgICAgdm9pZCBzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoYm9vbCk7
CiAKICAgICB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93cygpOwogICAgIHZvaWQgcmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3QgUVVybCYpOwpAQCAtMTQyLDcgKzE0Miw4
IEBAIHByaXZhdGU6CiAgICAgUVN0cmluZyBkdW1wRnJhbWVTY3JvbGxQb3NpdGlvbihRV2ViRnJh
bWUqIGZyYW1lKTsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciAqbV9jb250cm9sbGVyOwogCi0g
ICAgYm9vbCBtX2R1bXBQaXhlbHM7CisgICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsK
KyAgICBib29sIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OwogICAgIFFTdHJpbmcgbV9leHBl
Y3RlZEhhc2g7CiAgICAgUVN0cmluZ0xpc3QgbV9zdGFuZEFsb25lTW9kZVRlc3RMaXN0OwogCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9tYWluLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L21haW4uY3BwCmluZGV4IDgxODhmMTgxNmZmYWJhMDUwZmZhOTQwMjIyNjNi
NGQ5NzFmMjFhMWEuLjIyZmJjNzVjMzk1YTEwZjQwMjRlMTc1NTAwNWIyZDNiZTNkNjdmOTIgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCkBAIC0xOTIsNyArMTkyLDcgQEAgaW50IG1haW4oaW50
IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIAogICAgIGludCBpbmRleCA9IGFyZ3MuaW5kZXhPZihRTGF0
aW4xU3RyaW5nKCItLXBpeGVsLXRlc3RzIikpOwogICAgIGlmIChpbmRleCAhPSAtMSkgewotICAg
ICAgICBkdW1wZXIuc2V0RHVtcFBpeGVscyh0cnVlKTsKKyAgICAgICAgZHVtcGVyLnNldER1bXBQ
aXhlbHNGb3JBbGxUZXN0cyh0cnVlKTsKICAgICAgICAgYXJncy5yZW1vdmVBdChpbmRleCk7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9j
b250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkKaW5kZXggZmEw
N2U4OGZmNTU5YjQyN2FjOTkxNDhhNzQ4YzZkMzFkYjQ2N2Y5Zi4uYWNkNTY3N2U5ODY2MzAyZTRl
ZmU0MTdjYTEyMDllZTM2MTkyZDg0NyAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0
X3J1bm5lci5weQpAQCAtNzgsMTAgKzc4LDcgQEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcihvYmpl
Y3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9ydC5leHBlY3Rl
ZF9hdWRpbyhzZWxmLl90ZXN0X25hbWUpKQogCiAgICAgZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0
ZWRfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9zaG91bGRfcnVuX3BpeGVs
X3Rlc3Q6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIChzZWxmLl9v
cHRpb25zLnBpeGVsX3Rlc3RzIGFuZAotICAgICAgICAgICAgICAgIG5vdCAoc2VsZi5fb3B0aW9u
cy5uZXdfYmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzKSkKKyAgICAgICAg
cmV0dXJuIHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdCBhbmQgbm90IChzZWxmLl9vcHRpb25z
Lm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRpb25zLnJlc2V0X3Jlc3VsdHMpCiAKICAgICBkZWYg
X2RyaXZlcl9pbnB1dChzZWxmKToKICAgICAgICAgIyBUaGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRv
IGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhlCkBAIC0xNTMsNyArMTUwLDcgQEAgY2xh
c3MgU2luZ2xlVGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICBsb2NhdGlvbiA9IHNlbGYuVkVS
U0lPTl9ESVIgaWYgc2VsZi5fb3B0aW9ucy5hZGRfcGxhdGZvcm1fZXhjZXB0aW9ucyBlbHNlIHNl
bGYuVVBEQVRFCiAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0
LnRleHQsICcudHh0JywgbG9jYXRpb24pCiAgICAgICAgIHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0
YShkcml2ZXJfb3V0cHV0LmF1ZGlvLCAnLndhdicsIGxvY2F0aW9uKQotICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICBpZiBzZWxmLl9zaG91bGRfcnVuX3BpeGVs
X3Rlc3Q6CiAgICAgICAgICAgICBzZWxmLl9zYXZlX2Jhc2VsaW5lX2RhdGEoZHJpdmVyX291dHB1
dC5pbWFnZSwgJy5wbmcnLCBsb2NhdGlvbikKIAogICAgIGRlZiBfc2F2ZV9iYXNlbGluZV9kYXRh
KHNlbGYsIGRhdGEsIGV4dGVuc2lvbiwgbG9jYXRpb24pOgpAQCAtMjIyLDcgKzIxOSw3IEBAIGNs
YXNzIFNpbmdsZVRlc3RSdW5uZXIob2JqZWN0KToKIAogICAgICAgICBmYWlsdXJlcy5leHRlbmQo
c2VsZi5fY29tcGFyZV90ZXh0KGRyaXZlcl9vdXRwdXQudGV4dCwgZXhwZWN0ZWRfZHJpdmVyX291
dHB1dC50ZXh0KSkKICAgICAgICAgZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfYXVkaW8o
ZHJpdmVyX291dHB1dC5hdWRpbywgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC5hdWRpbykpCi0gICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgIGlmIHNlbGYuX3Nob3Vs
ZF9ydW5fcGl4ZWxfdGVzdDoKICAgICAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9jb21w
YXJlX2ltYWdlKGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVkX2RyaXZlcl9vdXRwdXQpKQogICAgICAg
ICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25hbWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0
cHV0LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5oYXNfc3RkZXJyKCkpCiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtl
ci5weQppbmRleCAzNzg4MjZjNTFmOGUwOWRmNjVhMjgwMGQ3NWZjNjVlMmJhMWFlNThiLi4wZGMw
OTgzZDZjNzRiMjM3YTMwYzdlM2NkMThiNzU4ZWQ4N2U3NWY5IDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKKysrIGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5
CkBAIC04OCwxMyArODgsNyBAQCBjbGFzcyBXb3JrZXIob2JqZWN0KToKICAgICAgICAgICAgIHRl
c3RfaW5wdXQucmVmZXJlbmNlX2ZpbGVzID0gc2VsZi5fcG9ydC5yZWZlcmVuY2VfZmlsZXModGVz
dF9pbnB1dC50ZXN0X25hbWUpCiAgICAgICAgIGlmIHRlc3RfaW5wdXQucmVmZXJlbmNlX2ZpbGVz
OgogICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QgPSBUcnVlCi0g
ICAgICAgIGVsaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKLSAgICAgICAgICAgIGlmIHNl
bGYuX29wdGlvbnMuc2tpcF9waXhlbF90ZXN0X2lmX25vX2Jhc2VsaW5lOgotICAgICAgICAgICAg
ICAgIHRlc3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gYm9vbChzZWxmLl9wb3J0LmV4
cGVjdGVkX2ltYWdlKHRlc3RfaW5wdXQudGVzdF9uYW1lKSkKLSAgICAgICAgICAgIGVsc2U6Ci0g
ICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3QgPSBUcnVlCi0g
ICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0ZXN0X2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVz
dCA9IEZhbHNlCisgICAgICAgIHRlc3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gc2Vs
Zi5fcG9ydC5zaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3QodGVzdF9pbnB1dCkKIAogICAgIGRlZiBf
cnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6CiAgICAgICAgIHNlbGYuX3VwZGF0ZV90ZXN0X2lu
cHV0KHRlc3RfaW5wdXQpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L2Jhc2UucHkKaW5kZXggZDc5MTQzMTg5ZDA0MGEyZjQzNmEwODk1ZDkyMzE5ZDkwZTQ2
ODJhOS4uN2QwYTI1Nzg2ZjM2OTRiNWZiNTJjMDg5NDViMDk1YWU1NGFhNTU0MCAxMDA3NTUKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBi
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtNzM4
LDEyICs3MzgsMjYgQEAgY2xhc3MgUG9ydChvYmplY3QpOgogCiAgICAgICAgIHJldHVybiBzZWxm
Ll9maWxlc3lzdGVtLmpvaW4oc2VsZi5fd2Via2l0X2Jhc2VsaW5lX3BhdGgocG9ydF9uYW1lKSwg
J1Rlc3RFeHBlY3RhdGlvbnMnKQogCisgICAgZGVmIG1ha2VfcmVsYXRpdmVfdGVzdF9maWxlbmFt
ZShzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIlJldHVybnMgYSB0ZXN0X25hbWUgYSByZWxh
dGl2ZSB1bml4LXN0eWxlIHBhdGggZm9yIGEgZmlsZW5hbWUgdW5kZXIgdGhlIExheW91dFRlc3Rz
CisgICAgICAgIGRpcmVjdG9yeS4gZmlsZW5hbWUgc2hvdWxkIGJlIGFuIGFic29sdXRlIG9yIHJl
bGF0aXZlIHBhdGggb2YgYSB0ZXN0IGRpcmVjdG9yeSBvciBhIHRlc3QgZmlsZS4KKyAgICAgICAg
UmVsYXRpdmUgcGF0aHMgY2FuIGJlIHN0YXJ0ZWQgZWl0aGVyIHdpdGggdGhlIHRlc3QgZGlyZWN0
b3J5ICgnTGF5b3V0VGVzdHMnKSBvciBvbmUgbGV2ZWwgYmVsb3cuCisgICAgICAgIFJldHVybnMg
Tm9uZSBpZiBmaWxlbmFtZSBkb2VzIG5vdCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMuIiIiCisK
KyAgICAgICAgcmVsYXRpdmVfcGF0aCA9IGZpbGVuYW1lCisgICAgICAgIGlmIHNlbGYuX2ZpbGVz
eXN0ZW0uaXNhYnMoZmlsZW5hbWUpOgorICAgICAgICAgICAgaWYgbm90IGZpbGVuYW1lLnN0YXJ0
c3dpdGgoc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpOgorICAgICAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgICAgICByZWxhdGl2ZV9wYXRoID0gc2VsZi5yZWxhdGl2ZV90ZXN0X2ZpbGVu
YW1lKGZpbGVuYW1lKQorICAgICAgICBlbGlmIGZpbGVuYW1lLnN0YXJ0c3dpdGgoc2VsZi5fZmls
ZXN5c3RlbS5iYXNlbmFtZShzZWxmLmxheW91dF90ZXN0c19kaXIoKSkpOgorICAgICAgICAgICAg
cmVsYXRpdmVfcGF0aCA9IGZpbGVuYW1lW2xlbihzZWxmLl9maWxlc3lzdGVtLmJhc2VuYW1lKHNl
bGYubGF5b3V0X3Rlc3RzX2RpcigpKSkgKyAxOl0KKworICAgICAgICByZXR1cm4gcmVsYXRpdmVf
cGF0aCBpZiBzZWxmLl9maWxlc3lzdGVtLmV4aXN0cyhzZWxmLl9maWxlc3lzdGVtLmpvaW4oc2Vs
Zi5sYXlvdXRfdGVzdHNfZGlyKCksIHJlbGF0aXZlX3BhdGgpKSBlbHNlIE5vbmUKKwogICAgIGRl
ZiByZWxhdGl2ZV90ZXN0X2ZpbGVuYW1lKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgIiIiUmV0
dXJucyBhIHRlc3RfbmFtZSBhIHJlYWx0aXZlIHVuaXgtc3R5bGUgcGF0aCBmb3IgYSBmaWxlbmFt
ZSB1bmRlciB0aGUgTGF5b3V0VGVzdHMKICAgICAgICAgZGlyZWN0b3J5LiBGaWxlbmFtZXMgb3V0
c2lkZSB0aGUgTGF5b3V0VGVzdHMgZGlyZWN0b3J5IHNob3VsZCByYWlzZQogICAgICAgICBhbiBl
cnJvci4iIiIKLSAgICAgICAgIyBQb3J0cyB0aGF0IHJ1biBvbiB3aW5kb3dzIG5lZWQgdG8gb3Zl
cnJpZGUgdGhpcyBtZXRob2QgdG8gZGVhbCB3aXRoCi0gICAgICAgICMgZmlsZW5hbWVzIHdpdGgg
YmFja3NsYXNoZXMgaW4gdGhlbS4KICAgICAgICAgYXNzZXJ0IGZpbGVuYW1lLnN0YXJ0c3dpdGgo
c2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpLCAiJXMgZGlkIG5vdCBzdGFydCB3aXRoICVzIiAlIChm
aWxlbmFtZSwgc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpCiAgICAgICAgIHJldHVybiBmaWxlbmFt
ZVtsZW4oc2VsZi5sYXlvdXRfdGVzdHNfZGlyKCkpICsgMTpdCiAKQEAgLTEyNDksNiArMTI2Mywy
OSBAQCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFy
Z3MKICAgICAgICAgcmV0dXJuIFtdCiAKKyAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVs
X3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtp
dF90ZXN0X3J1bm5lcicpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJu
IHNlbGYuX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpCisKKyAgICBk
ZWYgX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKKyAgICAg
ICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYs
IHRlc3RfaW5wdXQpOgorICAgICAgICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoK
KyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnNraXBf
cGl4ZWxfdGVzdF9pZl9ub19iYXNlbGluZSBhbmQgbm90IHNlbGYuZXhwZWN0ZWRfaW1hZ2UodGVz
dF9pbnB1dC50ZXN0X25hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlm
IG5vdCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6CisgICAgICAgICAgICBy
ZXR1cm4gVHJ1ZQorICAgICAgICBpZiBhbnkodGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0
aChkaXJlY3RvcnkpIGZvciBkaXJlY3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2Rp
cmVjdG9yaWVzKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxm
Ll9pbl9kZWZhdWx0X3BpeGVsX3Rlc3RfZGlyZWN0b3J5KHRlc3RfaW5wdXQpCisKKyAgICBkZWYg
X2luX2RlZmF1bHRfcGl4ZWxfdGVzdF9kaXJlY3Rvcnkoc2VsZiwgdGVzdF9pbnB1dCk6CisgICAg
ICAgICMgUG9ydHMgY2FuIG92ZXJyaWRlIHRoaXMgYWNjb3JkaW5nIHRvIHRoZWlyIGRlZmF1bHQg
ZGlyZWN0b3JpZXMuCisgICAgICAgIHJldHVybiBGYWxzZQorCiAKIGNsYXNzIFZpcnR1YWxUZXN0
U3VpdGUob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYmFzZSwgYXJncywg
dGVzdHM9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90
ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3BvcnQvZHJpdmVyLnB5CmluZGV4IDVlNzA2MWJhYjk3NmNhNWRmODhkNTI3ZDRhNmI4ZDYyMmUy
MzE1NTguLmE5Y2FiODlkYWFjNDE2ZGE0YzVjNTMwNmRiNmQzYmU1NmIxZTBkZjMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5Cisr
KyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBA
IC0yOTgsNyArMjk4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY21kLmV4
dGVuZChzZWxmLl9wb3J0LmdldF9vcHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCiAK
LSAgICAgICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgIGlmIHBpeGVsX3Rlc3RzIGFuZCBub3Qg
c2VsZi5fcG9ydC5zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKICAg
ICAgICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMnKQogICAgICAgICBjbWQuZXh0ZW5k
KHBlcl90ZXN0X2FyZ3MpCiAKQEAgLTMzOCw4ICszMzgsMTEgQEAgY2xhc3MgRHJpdmVyKG9iamVj
dCk6CiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CiAgICAgICAgICAg
ICAgICAgY29tbWFuZCA9IHBhdGguY3lncGF0aChjb21tYW5kKQogCisgICAgICAgICMgIiciIGlz
IHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCisgICAgICAgIGlmIGRyaXZlcl9pbnB1
dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6CisgICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBv
cnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgorICAgICAgICAgICAgICAgIGNv
bW1hbmQgKz0gIiciICsgJy0tcGl4ZWwtdGVzdCcKICAgICAgICAgaWYgZHJpdmVyX2lucHV0Lmlt
YWdlX2hhc2g6Ci0gICAgICAgICAgICAjICInIiBpcyB0aGUgc2VwYXJhdG9yIG9mIGNvbW1hbmQg
ZmllbGRzLgogICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyBkcml2ZXJfaW5wdXQuaW1hZ2Vf
aGFzaAogICAgICAgICByZXR1cm4gY29tbWFuZCArICJcbiIKIApkaWZmIC0tZ2l0IGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weSBiL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKaW5kZXggYWFhYWZhYzVkMzY0Y2NhZTQ3
ZTkxMTNlMzg1NWFkNjFmMWE1YzM4ZC4uNzU2M2E2MTQxNjdkNDJiZDU0NDU1MTQ0NDIwZTExZmNm
NmEzYjc0NSAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMv
cG9ydC9xdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0
L3F0LnB5CkBAIC0xODUsMyArMTg1LDE0IEBAIGNsYXNzIFF0UG9ydChXZWJLaXRQb3J0KToKICAg
ICAgICAgICAgIF9sb2cuZXJyb3IoJ1VzZSBnaXQgdG8gZ3JhYiB0aGUgYWN0dWFsIGZvbnRzIGZy
b20gaHR0cDovL2dpdG9yaW91cy5vcmcvcXR3ZWJraXQvdGVzdGZvbnRzJykKICAgICAgICAgICAg
IHJldHVybiBGYWxzZQogICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX3N1cHBvcnRz
X3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRy
dWUKKworICAgIGRlZiBfaW5fZGVmYXVsdF9waXhlbF90ZXN0X2RpcmVjdG9yeShzZWxmLCB0ZXN0
X2lucHV0KToKKyAgICAgICAgcmV0dXJuIGFueSh0ZXN0X2lucHV0LnRlc3RfbmFtZS5zdGFydHN3
aXRoKGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICAgICBmb3IgZGlyZWN0b3J5IGluIFF0UG9y
dC5fZGVmYXVsdF9waXhlbF90ZXN0X2RpcmVjdG9yaWVzKCkpCisKKyAgICBAc3RhdGljbWV0aG9k
CisgICAgZGVmIF9kZWZhdWx0X3BpeGVsX3Rlc3RfZGlyZWN0b3JpZXMoKToKKyAgICAgICAgcmV0
dXJuIFsnY29tcG9zaXRpbmcnXQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90ZXN0LnB5CmluZGV4IDljZjk4ZGU3NDg4NTk4NmVmMTE4NDM2NWNjMGViZmRm
Mjc4NjFiMWQuLjAxZDE5NTRlZTU4NzhiNjQ0MDk3NjI3Zjk3Y2JkYWIzY2E4MTY3ZjIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKQEAg
LTIyNyw2ICsyMjcsMTQgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4MzQKICAgICB0ZXN0cy5h
ZGQoJ3BlcmYvZm9vL3Rlc3QuaHRtbCcpCiAgICAgdGVzdHMuYWRkKCdwZXJmL2Zvby90ZXN0LXJl
Zi5odG1sJykKIAorICAgICMgRm9yIHRlc3RpbmcgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzLgor
ICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC9waXhlbGRpci9pbWFnZV9pbl9waXhl
bGRpci5odG1sJywKKyAgICAgICAgYWN0dWFsX2ltYWdlPSdpbWFnZV9pbl9waXhlbGRpci1wbmd0
RVh0Y2hlY2tzdW1ceDAwY2hlY2tzdW1fZmFpbCcsCisgICAgICAgIGV4cGVjdGVkX2ltYWdlPSdp
bWFnZV9pbl9waXhlbGRpci1wbmd0RVh0Y2hlY2tzdW1ceDAwY2hlY2tzdW0tcG5nJykKKyAgICB0
ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvaW1hZ2Vfbm90X2luX3BpeGVsZGlyLmh0bWwn
LAorICAgICAgICBhY3R1YWxfaW1hZ2U9J2ltYWdlX25vdF9pbl9waXhlbGRpci1wbmd0RVh0Y2hl
Y2tzdW1ceDAwY2hlY2tzdW1fZmFpbCcsCisgICAgICAgIGV4cGVjdGVkX2ltYWdlPSdpbWFnZV9u
b3RfaW5fcGl4ZWxkaXItcG5ndEVYdGNoZWNrc3VtXHgwMGNoZWNrc3VtLXBuZycpCisKICAgICBy
ZXR1cm4gdGVzdHMKIAogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQppbmRleCA0NTVhOGMyZGMyNWIyN2U2ZGU1NGU3
NWUwMTA4YTBkMWMyZGEwYTUzLi44OGZjZWVlMDQ3OTY3MDAzNjI2ZWVhZDQzNzVhNzZlNjg4Y2Fi
NDY3IDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5f
d2Via2l0X3Rlc3RzLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHMucHkKQEAgLTE4NSw2ICsxODUsMjIgQEAgZGVmIF9zZXRfdXBfZGVy
aXZlZF9vcHRpb25zKHBvcnQsIG9wdGlvbnMpOgogICAgICAgICBvcHRpb25zLnJlc2V0X3Jlc3Vs
dHMgPSBUcnVlCiAgICAgICAgIG9wdGlvbnMuYWRkX3BsYXRmb3JtX2V4Y2VwdGlvbnMgPSBUcnVl
CiAKKyAgICBpZiBvcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6CisgICAgICAgIGlmIG5v
dCBvcHRpb25zLnBpeGVsX3Rlc3RzOgorICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5kKCItLXBp
eGVsLXRlc3QtZGlyZWN0b3JpZXMgaGFzIG5vIGVmZmVjdCB3aXRob3V0IC0tcGl4ZWwtdGVzdHMi
KQorICAgICAgICAgICAgb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzID0gW10KKyAgICAg
ICAgZWxzZToKKyAgICAgICAgICAgIHNhbml0aXplZCA9IHNldCgpCisgICAgICAgICAgICBwaXhl
bF90ZXN0X2RpcmVjdG9yaWVzID0gb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzCisgICAg
ICAgICAgICBmb3IgZGlyZWN0b3J5IGluIHBpeGVsX3Rlc3RfZGlyZWN0b3JpZXM6CisgICAgICAg
ICAgICAgICAgcmVsYXRpdmVfcGF0aCA9IHBvcnQubWFrZV9yZWxhdGl2ZV90ZXN0X2ZpbGVuYW1l
KGRpcmVjdG9yeSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVsYXRpdmVfcGF0aDoKKyAgICAg
ICAgICAgICAgICAgICAgd2FybmluZ3MuYXBwZW5kKCItLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMg
ZXhwZWN0cyBsaXN0IG9mIGRpcmVjdG9yaWVzIGJ1dCBnb3Q6ICIgKyBkaXJlY3RvcnkpCisgICAg
ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2FuaXRpemVkLmFkZChyZWxh
dGl2ZV9wYXRoKQorCisgICAgICAgICAgICBvcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMg
PSBsaXN0KHNhbml0aXplZCkKKwogICAgIHJldHVybiB3YXJuaW5ncwogCiAKQEAgLTE5OCw2ICsy
MTQsMTIgQEAgZGVmIF9jb21wYXRfc2hpbV9vcHRpb24ob3B0aW9uX25hbWUsICoqa3dhcmdzKToK
ICAgICAgICAgaGVscD0iSWdub3JlZCwgZm9yIG9sZC1ydW4td2Via2l0LXRlc3RzIGNvbXBhdCBv
bmx5LiIsICoqa3dhcmdzKQogCiAKK2RlZiBfbGlzdGFyZ19jYWxsYmFjayhvcHRpb24sIG9wdF9z
dHIsIHZhbHVlLCBwYXJzZXIpOgorICAgIHZhbHVlcyA9IHBhcnNlci5yYXJnc1swXS5zcGxpdCgn
ICcpCisgICAgc2V0YXR0cihwYXJzZXIudmFsdWVzLCBvcHRpb24uZGVzdCwgdmFsdWVzKQorICAg
IGRlbCBwYXJzZXIucmFyZ3NbMF0KKworCiBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgogICAg
ICIiIlByb3ZpZGVzIGEgZGVmYXVsdCBzZXQgb2YgY29tbWFuZCBsaW5lIGFyZ3MuCiAKQEAgLTMx
NSw2ICszMzcsMTYgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToKICAgICAgICAgb3B0cGFy
c2UubWFrZV9vcHRpb24oIi0tc2tpcC1waXhlbC10ZXN0LWlmLW5vLWJhc2VsaW5lIiwgYWN0aW9u
PSJzdG9yZV90cnVlIiwKICAgICAgICAgICAgIGRlc3Q9InNraXBfcGl4ZWxfdGVzdF9pZl9ub19i
YXNlbGluZSIsIGhlbHA9IkRvIG5vdCBnZW5lcmF0ZSBhbmQgY2hlY2sgcGl4ZWwgcmVzdWx0IGlu
IHRoZSBjYXNlIHdoZW4gIgogICAgICAgICAgICAgICAgICAibm8gaW1hZ2UgYmFzZWxpbmUgaXMg
YXZhaWxhYmxlIGZvciB0aGUgdGVzdC4iKSwKKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24o
Ii0tcGl4ZWwtdGVzdC1kaXJlY3RvcmllcyIsIGFjdGlvbj0iY2FsbGJhY2siLCBkZWZhdWx0PVtd
LAorICAgICAgICAgICAgZGVzdD0icGl4ZWxfdGVzdF9kaXJlY3RvcmllcyIsIGNhbGxiYWNrPV9s
aXN0YXJnX2NhbGxiYWNrLAorICAgICAgICAgICAgaGVscD0iQSBzdHJpbmcgY29udGFpbmluZyBz
cGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB3aGVyZSBpdCBpcyBhbGxvd2VkIHRv
ICIKKyAgICAgICAgICAgICAgICAgImV4ZWN1dGUgdGVzdHMgYXMgcGl4ZWwgdGVzdHMuIFRoaXMg
b3B0aW9uIGlzIHN1cHBvc2VkIHRvIGJlIHVzZWQgdG9nYXRoZXIgd2l0aCAiCisgICAgICAgICAg
ICAgICAgICItLXBpeGVsLXRlc3RzLiBJZiBzcGVjaWZpZWQsIG9ubHkgdGhvc2UgdGVzdHMgd2ls
bCBiZSBleGVjdXRlZCBhcyBwaXhlbCB0ZXN0cyAiCisgICAgICAgICAgICAgICAgICJ0aGF0IGFy
ZSBsb2NhdGVkIGluIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgZW51bWVyYXRlZCBoZXJlLiBTb21l
IHBvcnRzIG1heSBpZ25vcmUgIgorICAgICAgICAgICAgICAgICAidGhpcyBvcHRpb24gd2hpbGUg
b3RoZXJzIGNhbiBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGhl
cmUuICIKKyAgICAgICAgICAgICAgICAgJycnCisgICAgICAgICAgICAgICAgIEV4YW1wbGU6IFwn
YW5pbWF0aW9ucyBjb21wb3NpdGluZ1wnLicnJyksCisKICAgICAgICAgb3B0cGFyc2UubWFrZV9v
cHRpb24oIi0tc2tpcC1mYWlsaW5nLXRlc3RzIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAg
ICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9IlNraXAgdGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQg
dG8gZmFpbC4gIgogICAgICAgICAgICAgICAgICAiTm90ZTogV2hlbiB1c2luZyB0aGlzIG9wdGlv
biwgeW91IG1pZ2h0IG1pc3MgbmV3IGNyYXNoZXMgIgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3Qu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
X2ludGVncmF0aW9udGVzdC5weQppbmRleCBhZDE0YmY0ZWZlYzQ3YmE5NTJjOTkxMzg0M2ZjM2I5
MGFhNjY2NDAyLi5lZTFiNjBjNGIxYTA3OTZmODQwOTE1YTBlNTQyNTlhMWQ5MDczMzA0IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rl
c3RzX2ludGVncmF0aW9udGVzdC5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQpAQCAtMTc5LDcgKzE3
OSw3IEBAIGRlZiBnZXRfdGVzdHNfcnVuKGV4dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9
RmFsc2UsIGZsYXR0ZW5fYmF0Y2hlcz1GYWxzZSwKIAogIyBVcGRhdGUgdGhpcyBtYWdpYyBudW1i
ZXIgaWYgeW91IGFkZCBhbiB1bmV4cGVjdGVkIHRlc3QgdG8gd2Via2l0cHkubGF5b3V0X3Rlc3Rz
LnBvcnQudGVzdAogIyBGSVhNRTogSXQncyBuaWNlIHRvIGhhdmUgYSByb3V0aW5lIGluIHBvcnQv
dGVzdC5weSB0aGF0IHJldHVybnMgdGhpcyBudW1iZXIuCi11bmV4cGVjdGVkX3Rlc3RzX2NvdW50
ID0gMTIKK3VuZXhwZWN0ZWRfdGVzdHNfY291bnQgPSAxNAogCiAKIGNsYXNzIFN0cmVhbVRlc3Rp
bmdNaXhpbihvYmplY3QpOgpAQCAtNTAxLDcgKzUwMSw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0
ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5nTWl4aW4pOgogCiAgICAgZGVmIHRlc3RfcnVuX3Np
bmdseV9hY3R1YWxseV9ydW5zX3Rlc3RzKHNlbGYpOgogICAgICAgICByZXMsIF8sIF8sIF8gPSBs
b2dnaW5nX3J1bihbJy0tcnVuLXNpbmdseScsICdmYWlsdXJlcy91bmV4cGVjdGVkJ10pCi0gICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMo
cmVzLCAxMCkKIAogICAgIGRlZiB0ZXN0X3NpbmdsZV9maWxlKHNlbGYpOgogICAgICAgICAjIEZJ
WE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVwbGFjaW5nIG1vcmUgb2YgdGhlIGdldF90ZXN0c19y
dW4oKS1zdHlsZSB0ZXN0cwpAQCAtNTczLDYgKzU3MywyMCBAQCBjbGFzcyBNYWluVGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGluZ01peGluKToKICAgICAgICAgc2VsZi5hc3NlcnRU
cnVlKGpzb25fc3RyaW5nLmZpbmQoJyJudW1fZmxha3kiOjAnKSAhPSAtMSkKICAgICAgICAgc2Vs
Zi5hc3NlcnRUcnVlKGpzb25fc3RyaW5nLmZpbmQoJyJudW1fbWlzc2luZyI6MScpICE9IC0xKQog
CisgICAgZGVmIHRlc3RfcGl4ZWxfdGVzdF9kaXJlY3RvcmllcyhzZWxmKToKKyAgICAgICAgaG9z
dCA9IE1vY2tIb3N0KCkKKworICAgICAgICAiIiJCb3RoIHRlc3RzIGhhdmUgZmFsaW5nIGNoZWNr
c3VtLiBXZSBpbmNsdWRlIG9ubHkgdGhlIGZpcnN0IGluIHBpeGVsIHRlc3RzIHNvIG9ubHkgdGhh
dCBzaG91bGQgZmFpbC4iIiIKKyAgICAgICAgYXJncyA9IFsnLS1waXhlbC10ZXN0cycsICctLXBp
eGVsLXRlc3QtZGlyZWN0b3JpZXMnLCAnZmFpbHVyZXMvdW5leHBlY3RlZC9waXhlbGRpcicsCisg
ICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvcGl4ZWxkaXIvaW1hZ2VfaW5fcGl4
ZWxkaXIuaHRtbCcsCisgICAgICAgICAgICAgICAgJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQvaW1hZ2Vf
bm90X2luX3BpeGVsZGlyLmh0bWwnXQorICAgICAgICByZXMsIG91dCwgZXJyLCBfID0gbG9nZ2lu
Z19ydW4oZXh0cmFfYXJncz1hcmdzLCBob3N0PWhvc3QsIHJlY29yZF9yZXN1bHRzPVRydWUsIHRl
c3RzX2luY2x1ZGVkPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMocmVzLCAxKQor
ICAgICAgICBleHBlY3RlZF90b2tlbiA9ICcidW5leHBlY3RlZCI6eyJwaXhlbGRpciI6eyJpbWFn
ZV9pbl9waXhlbGRpci5odG1sIjp7ImV4cGVjdGVkIjoiUEFTUyIsImFjdHVhbCI6IklNQUdFIicK
KyAgICAgICAganNvbl9zdHJpbmcgPSBob3N0LmZpbGVzeXN0ZW0ucmVhZF90ZXh0X2ZpbGUoJy90
bXAvbGF5b3V0LXRlc3QtcmVzdWx0cy9mdWxsX3Jlc3VsdHMuanNvbicpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShqc29uX3N0cmluZy5maW5kKGV4cGVjdGVkX3Rva2VuKSAhPSAtMSkKKwogICAg
IGRlZiB0ZXN0X21pc3NpbmdfYW5kX3VuZXhwZWN0ZWRfcmVzdWx0c193aXRoX2N1c3RvbV9leGl0
X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IHdlIHVwZGF0ZSBleHBlY3RhdGlvbnMg
aW4gcGxhY2UuIElmIHRoZSBleHBlY3RhdGlvbgogICAgICAgICAjIGlzIG1pc3NpbmcsIHVwZGF0
ZSB0aGUgZXhwZWN0ZWQgZ2VuZXJpYyBsb2NhdGlvbi4KZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAKaW5kZXggMGEyY2IyYmRkN2FhZGQyMjY2MjI1MWNlMGQwZTE4YzU1
ODA1NTNhZS4uOTdmYzYxZTJkMDNiY2FlYmE1NzM0NTFjZjVlNzc5M2Y4NzAzYzkzNyAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTY3LDcgKzY3LDcgQEAg
VGVzdENvbnRyb2xsZXImIFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKQogfQogCiBUZXN0Q29udHJv
bGxlcjo6VGVzdENvbnRyb2xsZXIoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKLSAgICA6
IG1fZHVtcFBpeGVscyhmYWxzZSkKKyAgICA6IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNl
KQogICAgICwgbV92ZXJib3NlKGZhbHNlKQogICAgICwgbV9wcmludFNlcGFyYXRvcnMoZmFsc2Up
CiAgICAgLCBtX3VzaW5nU2VydmVyTW9kZShmYWxzZSkKQEAgLTI2MSw3ICsyNjEsNyBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjppbml0aWFsaXplKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10p
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYXJndW1lbnQgPT0gIi0tcGl4ZWwtdGVzdHMiKSB7
Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHMgPSB0cnVlOworICAgICAgICAgICAgbV9kdW1wUGl4
ZWxzRm9yQWxsVGVzdHMgPSB0cnVlOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKGFyZ3VtZW50ID09ICItLXZlcmJvc2UiKSB7CkBAIC01MTAsMTggKzUxMCwz
MSBAQCBib29sIFRlc3RDb250cm9sbGVyOjpydW5UZXN0KGNvbnN0IGNoYXIqIHRlc3QpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkwodGVz
dCk7CisgICAgYm9vbCBkdW1wUGl4ZWxzVGVzdCA9IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwor
ICAgIHN0ZDo6c3RyaW5nIGNvbW1hbmQodGVzdCk7CisgICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJM
ID0gY29tbWFuZDsKICAgICBzdGQ6OnN0cmluZyBleHBlY3RlZFBpeGVsSGFzaDsKLSAgICBzaXpl
X3Qgc2VwYXJhdG9yUG9zID0gcGF0aE9yVVJMLmZpbmQoIiciKTsKLSAgICBpZiAoc2VwYXJhdG9y
UG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3Ry
aW5nKHN0ZDo6c3RyaW5nKHRlc3QpLCAwLCBzZXBhcmF0b3JQb3MpOwotICAgICAgICBleHBlY3Rl
ZFBpeGVsSGFzaCA9IHN0ZDo6c3RyaW5nKHN0ZDo6c3RyaW5nKHRlc3QpLCBzZXBhcmF0b3JQb3Mg
KyAxKTsKKyAgICBzaXplX3QgZmlyc3RTZXBhcmF0b3JQb3MgPSBjb21tYW5kLmZpbmRfZmlyc3Rf
b2YoJ1wnJyk7CisgICAgc2l6ZV90IHNlY29uZFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9m
aXJzdF9vZignXCcnLCBmaXJzdFNlcGFyYXRvclBvcyArIDEpOworICAgIGlmIChmaXJzdFNlcGFy
YXRvclBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcykgeworICAgICAgICBwYXRoT3JVUkwgPSBzdGQ6
OnN0cmluZyhjb21tYW5kLCAwLCBmaXJzdFNlcGFyYXRvclBvcyk7CisgICAgICAgIHNpemVfdCBw
aXhlbEhhc2hQb3MgPSBmaXJzdFNlcGFyYXRvclBvcyArIDE7CisKKyAgICAgICAgLy8gTlJXVCBw
YXNzZXMgLS1waXhlbC10ZXN0IGlmIHdlIHNob3VsZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3Qu
CisgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxUZXN0QXJnKCItLXBpeGVs
LXRlc3QiKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgYXJnVGVzdCA9IHN0ZDo6c3RyaW5nKGNvbW1h
bmQsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSwgZXhwZWN0ZWRQaXhlbFRlc3RBcmcuc2l6ZSgpKTsK
KyAgICAgICAgaWYgKGFyZ1Rlc3QgPT0gZXhwZWN0ZWRQaXhlbFRlc3RBcmcpIHsKKyAgICAgICAg
ICAgIGR1bXBQaXhlbHNUZXN0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBpeGVsSGFzaFBvcyA9IHNl
Y29uZFNlcGFyYXRvclBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IC0xIDogc2Vjb25kU2VwYXJh
dG9yUG9zICsgMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxIYXNoUG9zICE9IC0xICYm
IHBpeGVsSGFzaFBvcyA8IGNvbW1hbmQuc2l6ZSgpKQorICAgICAgICAgICAgZXhwZWN0ZWRQaXhl
bEhhc2ggPSBzdGQ6OnN0cmluZyhjb21tYW5kLCBwaXhlbEhhc2hQb3MpOwogICAgIH0KIAogICAg
IG1fc3RhdGUgPSBSdW5uaW5nVGVzdDsKIAogICAgIG1fY3VycmVudEludm9jYXRpb24gPSBhZG9w
dFB0cihuZXcgVGVzdEludm9jYXRpb24ocGF0aE9yVVJMKSk7Ci0gICAgaWYgKG1fZHVtcFBpeGVs
cykKKyAgICBpZiAoZHVtcFBpeGVsc1Rlc3QpCiAgICAgICAgIG1fY3VycmVudEludm9jYXRpb24t
PnNldElzUGl4ZWxUZXN0KGV4cGVjdGVkUGl4ZWxIYXNoKTsKIAogICAgIG1fY3VycmVudEludm9j
YXRpb24tPmludm9rZSgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCmlu
ZGV4IGI5NDY1ZWY5NmU1N2U3MzVjNDEwNDQ3ODU0MTkzODY3ZjBiMDVjYjAuLjY1OTZhMDhjNmJm
Y2RhODY0OWU4NzYyNzQ5NmIxYmMxMGZkOGUxYTggMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcml2YXRlOgogCiAgICAgT3duUHRy
PFRlc3RJbnZvY2F0aW9uPiBtX2N1cnJlbnRJbnZvY2F0aW9uOwogCi0gICAgYm9vbCBtX2R1bXBQ
aXhlbHM7CisgICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsKICAgICBib29sIG1fdmVy
Ym9zZTsKICAgICBib29sIG1fcHJpbnRTZXBhcmF0b3JzOwogICAgIGJvb2wgbV91c2luZ1NlcnZl
ck1vZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154412</attachid>
            <date>2012-07-25 11:57:46 -0700</date>
            <delta_ts>2012-07-27 05:48:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91754-20120725205726.patch</filename>
            <type>text/plain</type>
            <size>25701</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzNjEzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWU0ZDE3NTEwOGFhYjY0NDBhNWVjZjBmODhjYWIzOWVj
YzYwZTlhNS4uYjdmOWRiMTlmMWM2MTdhNzc5YmZkOGMyODkxNjljMGMxOTQ5NzZlNCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDgy
IEBACisyMDEyLTA3LTI1ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbTlJXVF0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVzdHJpY3QgcGl4ZWwgdGVzdHMg
Zm9yIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxNzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkZWQgLS1waXhlbC10ZXN0LWRpcmVjdG9yaWVzIG9wdGlvbiB0
byBucnd0LiBJZiBzcGVjaWZpZWQgdG9nZXRoZXIKKyAgICAgICAgd2l0aCAtLXBpeGVsLXRlc3Rz
LCBhbmQgaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHRoaXMgb3B0aW9uLCBvbmx5IHRlc3RzCisg
ICAgICAgIGZyb20gdGhlc2UgZGlyZWN0b3JpZXMgd2lsbCBiZSBleGVjdXRlZCBhcyBwaXhlbCB0
ZXN0cy4gRnVydGhlcm1vcmUsIHBsYXRmb3JtcworICAgICAgICBjYW4gaGF2ZSBhIGRlZmF1bHQg
c2V0IG9mIHBpeGVsIHRlc3QgZGlyZWN0b3JpZXMuIFRvIHN1cHBvcnQgdGhlIGZlYXR1cmUKKyAg
ICAgICAgdGhlIHRlc3QgaGFybmVzcyBoYXZlIHRvIGJlIGFibGUgdG8gaW5mb3JtIHRoZSBkcml2
ZXIgd2hldGhlciB0byBkdW1wIHBpeGVscworICAgICAgICBmb3IgZWFjaCB0ZXN0cy4gRm9yIHRo
aXMgcHVycG9zZSBJIGNoYW5nZWQgV1RSIGFuZCB0aGUgUXQgRFJUIHRvIGhhbmRsZSBhCisgICAg
ICAgIC0tcGl4ZWwtdGVzdCBhcmd1bWVudCBmcm9tIHRoZSBzdGFuZGFyZCBvdXRwdXQgYW5kIG1h
ZGUgTlJXVCB1c2UgdGhpcyBhcmd1bWVudAorICAgICAgICB3aXRoIHRoZXNlIGRyaXZlcnMuCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkR1bXBSZW5kZXJUcmVlOjpEdW1wUmVuZGVyVHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVu
ZGVyVHJlZTo6cHJvY2Vzc0xpbmUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6
OnNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVy
VHJlZTo6ZHVtcCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVR
dC5oOgorICAgICAgICAoRHVtcFJlbmRlclRyZWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3F0L21haW4uY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgIEhhbmRsZSB0aGUgLS1waXhl
bC10ZXN0IGFyZ3VtZW50LgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5OgorICAgICAgICAoU2luZ2xlVGVz
dFJ1bm5lci5fc2hvdWxkX2ZldGNoX2V4cGVjdGVkX2NoZWNrc3VtKToKKyAgICAgICAgKFNpbmds
ZVRlc3RSdW5uZXIuX292ZXJ3cml0ZV9iYXNlbGluZXMpOgorICAgICAgICAoU2luZ2xlVGVzdFJ1
bm5lci5fY29tcGFyZV9vdXRwdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weToKKyAgICAgICAgKFdvcmtlci5fdXBkYXRlX3Rl
c3RfaW5wdXQpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
YmFzZS5weToKKyAgICAgICAgKFBvcnQuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Bl
cl90ZXN0KTogUG9ydHMgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5mb3JtCisgICAgICAgIHRoZSBo
YXJuZXNzIHRoYXQgLS1waXhlbC10ZXN0IGFyZ3VtZW50IGlzIHN1cHBvcnRlZC4gVHJ1ZSBmb3Ig
V1RSLCBvdGhlcndpc2UgY2FsbHMKKyAgICAgICAgcHJpdmF0ZSB2ZXJzaW9uIHRoYXQgY2FuIGJl
IG92ZXJyaWRkZW4gYnkgdGhlIGFjdHVhbCBwbGF0Zm9ybS4gT25seSB0cnVlIHdpdGggV1RSCisg
ICAgICAgIGFuZCBRdCBEUlQgY3VycmVudGx5LiBUaGlzIHN1cHBvc2VkIHRvIGV4aXN0IG9ubHkg
dGVtcG9yYXJ5IHVudGlsIHRoZXJlIGFyZSBwb3J0cworICAgICAgICB0aGF0IGRvZXNuJ3Qgc3Vw
cG9ydCB0aGUgZmVhdHVyZSBpbiB0aGVpciBEUlQncy4KKyAgICAgICAgKFBvcnQpOgorICAgICAg
ICAoUG9ydC5fc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KToKKyAgICAg
ICAgKFBvcnQuc2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KToKKyAgICAgICAgKFBvcnQuX2FsbG93
ZWRfdG9fcnVuX2FzX3BpeGVsX3Rlc3QpOiBQb3J0cyBjYW4gb3ZlcnJpZGUgdGhpcyB0byBkZWZp
bmUgdGhlaXIKKyAgICAgICAgZGVmYXVsdCBzZXQgb2YgcGl4ZWwgdGVzdHMgZGlyZWN0b3JpZXMu
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9kcml2ZXIucHk6
CisgICAgICAgIChEcml2ZXIuY21kX2xpbmUpOgorICAgICAgICAoRHJpdmVyLl9jb21tYW5kX2Zy
b21fZHJpdmVyX2lucHV0KTogUGFzcyAtLXBpeGVsLXRlc3QgaWYgaXQgaXMgc3VwcG9ydGVkIGFu
ZCBwaXhlbAorICAgICAgICB0ZXN0cyBhcmUgZW5hYmxlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5OgorICAgICAgICAoUXRQb3J0LmNoZWNrX3N5
c19kZXBzKToKKyAgICAgICAgKFF0UG9ydCk6CisgICAgICAgIChRdFBvcnQuX3N1cHBvcnRzX3N3
aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6CisgICAgICAgIChRdFBvcnQuX2FsbG93ZWRf
dG9fcnVuX2FzX3BpeGVsX3Rlc3QpOgorICAgICAgICAoUXRQb3J0Ll9kZWZhdWx0X3BpeGVsX3Rl
c3RfZGlyZWN0b3JpZXMpOiBPbmx5IGNvbXBvc2l0aW5nIHdpbGwgYmUgb3VyIGRlZmF1bHQgcGl4
ZWwKKyAgICAgICAgdGVzdCBkaXJlY3RvcnkgZm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weToKKyAgICAgICAgKFRl
c3RQb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAg
ICAgICAgKF9zZXRfdXBfZGVyaXZlZF9vcHRpb25zKToKKyAgICAgICAgKF9saXN0YXJnX2NhbGxi
YWNrKToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICBIYW5kbGUgdGhlIC0tcGl4ZWwt
dGVzdC1kaXJlY3Rvcnkgb3B0aW9uLiBJdCBleHBlY3QgYSBkaXJlY3RvcnkgYmVsb3cgTGF5b3V0
VGVzdHMKKyAgICAgICAgYW5kIGNhbiBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMuIEFkZGVk
IGZpeG1lJ3MgdGhhdCB3ZSBzaG91bGQgaW1wcm92ZSBob3cgd2UKKyAgICAgICAgaGFuZGxlIHRo
ZXNlIGFyZ3VtZW50cy4KKworICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5OgorICAgICAgICAoTWFpblRlc3Qu
dGVzdF9ydW5fc2luZ2x5X2FjdHVhbGx5X3J1bnNfdGVzdHMpOgorICAgICAgICAoTWFpblRlc3Qu
dGVzdF9waXhlbF90ZXN0X2RpcmVjdG9yaWVzKToKKyAgICAgICAgQWRkZWQgYW4gaW50ZWdyYXRp
b24gdGVzdCBmb3IgdGhlIGZlYXR1cmUuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OlRlc3RDb250
cm9sbGVyKToKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OmluaXRpYWxpemUpOgorICAg
ICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cnVuVGVzdCk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoVGVzdENvbnRyb2xsZXIpOgorICAg
ICAgICBIYW5kbGUgdGhlIC0tcGl4ZWwtdGVzdCBhcmd1bWVudC4KKwogMjAxMi0wNy0yNSAgR3l1
eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIFVz
ZSBlaW5hX3N0cmluZ3NoYXJlX2FkZCBpbnN0ZWFkIG9mIHN0cmR1cC4KZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5jcHAKaW5kZXggMTJkNjU5YTUxOTNlMzk3MDlj
MTk0ZTU3MTZlNDc4NjZkZTBmMGJiOC4uODIxMmJmMWU3YzQzNTEyODMyMzk0YjU2MWZlNDY1NTk0
Yzg4MWM4MCAxMDA3NTUKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5j
cHAKQEAgLTM4OCw3ICszODgsNyBAQCBXZWJWaWV3R3JhcGhpY3NCYXNlZDo6V2ViVmlld0dyYXBo
aWNzQmFzZWQoUVdpZGdldCogcGFyZW50KQogfQogCiBEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRl
clRyZWUoKQotICAgIDogbV9kdW1wUGl4ZWxzKGZhbHNlKQorICAgIDogbV9kdW1wUGl4ZWxzRm9y
QWxsVGVzdHMoZmFsc2UpCiAgICAgLCBtX3N0ZGluKDApCiAgICAgLCBtX2VuYWJsZVRleHRPdXRw
dXQoZmFsc2UpCiAgICAgLCBtX3N0YW5kQWxvbmVNb2RlKGZhbHNlKQpAQCAtNjA2LDcgKzYwNiw3
IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6Om9wZW4oY29uc3QgUVVybCYgdXJsKQogCiAgICAgaWYg
KGlzRHVtcEFzVGV4dFRlc3QodXJsKSkgewogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlcigp
LT5kdW1wQXNUZXh0KCk7Ci0gICAgICAgIHNldER1bXBQaXhlbHMoZmFsc2UpOworICAgICAgICBz
ZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpOwogICAgIH0KIAogICAgIGlmIChpc0dsb2Jh
bEhpc3RvcnlUZXN0KHVybCkpCkBAIC02OTIsMTQgKzY5MiwyNCBAQCB2b2lkIER1bXBSZW5kZXJU
cmVlOjpwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKIHsKICAgICBRU3RyaW5nIGxp
bmUgPSBpbnB1dDsKIAorICAgIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0ID0gZmFsc2U7CiAg
ICAgbV9leHBlY3RlZEhhc2ggPSBRU3RyaW5nKCk7Ci0gICAgaWYgKG1fZHVtcFBpeGVscykgewot
ICAgICAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAotICAgICAg
ICBpbnQgaSA9IGxpbmUuaW5kZXhPZignXCcnKTsKLSAgICAgICAgaWYgKGkgPiAtMSkgewotICAg
ICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpICsgMSwgbGluZS5sZW5ndGgoKSk7
Ci0gICAgICAgICAgICBsaW5lLnJlbW92ZShpLCBsaW5lLmxlbmd0aCgpKTsKKyAgICAvLyBzaW5n
bGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAorICAgIGludCBpbmRleE9mRmlyc3RT
ZXBhcmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJyk7CisgICAgaW50IGluZGV4T2ZTZWNvbmRTZXBh
cmF0b3IgPSBsaW5lLmluZGV4T2YoJ1wnJywgaW5kZXhPZkZpcnN0U2VwYXJhdG9yKTsKKyAgICBp
ZiAoaW5kZXhPZkZpcnN0U2VwYXJhdG9yID4gLTEpIHsKKyAgICAgICAgaW50IGluZGV4T2ZQaXhl
bEhhc2ggPSBpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxOworCisgICAgICAgIC8vIE5SV1QgcGFz
c2VzIC0tcGl4ZWwtdGVzdCBpZiB3ZSBzaG91bGQgZHVtcCBwaXhlbHMgZm9yIHRoZSB0ZXN0Lgor
ICAgICAgICBjb25zdCBRU3RyaW5nIGV4cGVjdGVkQXJnKFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwt
dGVzdCIpKTsKKyAgICAgICAgUVN0cmluZyBhcmdUZXN0ID0gbGluZS5taWQoaW5kZXhPZkZpcnN0
U2VwYXJhdG9yICsgMSwgZXhwZWN0ZWRBcmcubGVuZ3RoKCkpOworICAgICAgICBpZiAoYXJnVGVz
dCA9PSBleHBlY3RlZEFyZykgeworICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9yQ3VycmVudFRl
c3QgPSB0cnVlOworICAgICAgICAgICAgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZTZWNvbmRT
ZXBhcmF0b3IgPT0gLTEgPyAtMSA6IGluZGV4T2ZTZWNvbmRTZXBhcmF0b3IgKyAxOwogICAgICAg
ICB9CisgICAgICAgIGlmIChpbmRleE9mUGl4ZWxIYXNoICE9IC0xICYmIGluZGV4T2ZQaXhlbEhh
c2ggPCBsaW5lLnNpemUoKSkKKyAgICAgICAgICAgIG1fZXhwZWN0ZWRIYXNoID0gbGluZS5taWQo
aW5kZXhPZlBpeGVsSGFzaCk7CisgICAgICAgIGxpbmUucmVtb3ZlKGluZGV4T2ZGaXJzdFNlcGFy
YXRvciwgbGluZS5sZW5ndGgoKSk7CiAgICAgfQogCiAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChR
TGF0aW4xU3RyaW5nKCJodHRwOiIpKQpAQCAtNzMxLDkgKzc0MSw5IEBAIHZvaWQgRHVtcFJlbmRl
clRyZWU6OnByb2Nlc3NMaW5lKGNvbnN0IFFTdHJpbmcgJmlucHV0KQogICAgIGZmbHVzaChzdGRv
dXQpOwogfQogCi12b2lkIER1bXBSZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzKGJvb2wgZHVtcCkK
K3ZvaWQgRHVtcFJlbmRlclRyZWU6OnNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyhib29sIGR1bXAp
CiB7Ci0gICAgbV9kdW1wUGl4ZWxzID0gZHVtcDsKKyAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0
cyA9IGR1bXA7CiB9CiAKIHZvaWQgRHVtcFJlbmRlclRyZWU6OmNsb3NlUmVtYWluaW5nV2luZG93
cygpCkBAIC05NTEsNyArOTYxLDcgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6ZHVtcCgpCiAgICAg
ZnB1dHMoIiNFT0ZcbiIsIHN0ZG91dCk7CiAgICAgZnB1dHMoIiNFT0ZcbiIsIHN0ZGVycik7CiAK
LSAgICBpZiAobV9kdW1wUGl4ZWxzICYmICFtX2NvbnRyb2xsZXItPnNob3VsZER1bXBBc1RleHQo
KSkgeworICAgIGlmICgobV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMgfHwgbV9kdW1wUGl4ZWxzRm9y
Q3VycmVudFRlc3QpICYmICFtX2NvbnRyb2xsZXItPnNob3VsZER1bXBBc1RleHQoKSkgewogICAg
ICAgICBRSW1hZ2UgaW1hZ2U7CiAgICAgICAgIGlmICghbV9jb250cm9sbGVyLT5pc1ByaW50aW5n
KCkpIHsKICAgICAgICAgICAgIGltYWdlID0gUUltYWdlKG1fcGFnZS0+dmlld3BvcnRTaXplKCks
IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMik7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVu
ZGVyVHJlZVF0LmgKaW5kZXggZDM5MjhiYzk5ZmFmMTUzZDk3ODcyYWVhMWU1ZmUxZTFhMzdkOGQz
OS4uYzRmOTI5ODNmOTE1Y2NhNmE4ODk4YWRlZmI1NjJjOGQyZGQ5MWRhMCAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWVRdC5oCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaApAQCAtODIsNyArODIsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRHcmFwaGljc0Jhc2VkKGJvb2wgZmxhZykgeyBtX2dyYXBoaWNzQmFz
ZWQgPSBmbGFnOyB9CiAgICAgYm9vbCBpc0dyYXBoaWNzQmFzZWQoKSB7IHJldHVybiBtX2dyYXBo
aWNzQmFzZWQ7IH0KIAotICAgIHZvaWQgc2V0RHVtcFBpeGVscyhib29sKTsKKyAgICB2b2lkIHNl
dER1bXBQaXhlbHNGb3JBbGxUZXN0cyhib29sKTsKIAogICAgIHZvaWQgY2xvc2VSZW1haW5pbmdX
aW5kb3dzKCk7CiAgICAgdm9pZCByZXNldFRvQ29uc2lzdGVudFN0YXRlQmVmb3JlVGVzdGluZyhj
b25zdCBRVXJsJik7CkBAIC0xNDIsNyArMTQyLDggQEAgcHJpdmF0ZToKICAgICBRU3RyaW5nIGR1
bXBGcmFtZVNjcm9sbFBvc2l0aW9uKFFXZWJGcmFtZSogZnJhbWUpOwogICAgIExheW91dFRlc3RD
b250cm9sbGVyICptX2NvbnRyb2xsZXI7CiAKLSAgICBib29sIG1fZHVtcFBpeGVsczsKKyAgICBi
b29sIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOworICAgIGJvb2wgbV9kdW1wUGl4ZWxzRm9yQ3Vy
cmVudFRlc3Q7CiAgICAgUVN0cmluZyBtX2V4cGVjdGVkSGFzaDsKICAgICBRU3RyaW5nTGlzdCBt
X3N0YW5kQWxvbmVNb2RlVGVzdExpc3Q7CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L21haW4uY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKaW5kZXgg
ODE4OGYxODE2ZmZhYmEwNTBmZmE5NDAyMjI2M2I0ZDk3MWYyMWExYS4uMjJmYmM3NWMzOTVhMTBm
NDAyNGUxNzU1MDA1YjJkM2JlM2Q2N2Y5MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvbWFpbi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvbWFpbi5jcHAKQEAg
LTE5Miw3ICsxOTIsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogCiAgICAg
aW50IGluZGV4ID0gYXJncy5pbmRleE9mKFFMYXRpbjFTdHJpbmcoIi0tcGl4ZWwtdGVzdHMiKSk7
CiAgICAgaWYgKGluZGV4ICE9IC0xKSB7Ci0gICAgICAgIGR1bXBlci5zZXREdW1wUGl4ZWxzKHRy
dWUpOworICAgICAgICBkdW1wZXIuc2V0RHVtcFBpeGVsc0ZvckFsbFRlc3RzKHRydWUpOwogICAg
ICAgICBhcmdzLnJlbW92ZUF0KGluZGV4KTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5l
ci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL2NvbnRyb2xsZXJzL3Np
bmdsZV90ZXN0X3J1bm5lci5weQppbmRleCBmYTA3ZTg4ZmY1NTliNDI3YWM5OTE0OGE3NDhjNmQz
MWRiNDY3ZjlmLi5hY2Q1Njc3ZTk4NjYzMDJlNGVmZTQxN2NhMTIwOWVlMzYxOTJkODQ3IDEwMDY0
NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9z
aW5nbGVfdGVzdF9ydW5uZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvY29udHJvbGxlcnMvc2luZ2xlX3Rlc3RfcnVubmVyLnB5CkBAIC03OCwxMCArNzgsNyBA
QCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9wb3J0LmV4cGVjdGVkX2F1ZGlvKHNlbGYuX3Rlc3RfbmFtZSkpCiAK
ICAgICBkZWYgX3Nob3VsZF9mZXRjaF9leHBlY3RlZF9jaGVja3N1bShzZWxmKToKLSAgICAgICAg
aWYgbm90IHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdDoKLSAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICByZXR1cm4gKHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHMgYW5kCi0gICAg
ICAgICAgICAgICAgbm90IChzZWxmLl9vcHRpb25zLm5ld19iYXNlbGluZSBvciBzZWxmLl9vcHRp
b25zLnJlc2V0X3Jlc3VsdHMpKQorICAgICAgICByZXR1cm4gc2VsZi5fc2hvdWxkX3J1bl9waXhl
bF90ZXN0IGFuZCBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlv
bnMucmVzZXRfcmVzdWx0cykKIAogICAgIGRlZiBfZHJpdmVyX2lucHV0KHNlbGYpOgogICAgICAg
ICAjIFRoZSBpbWFnZSBoYXNoIGlzIHVzZWQgdG8gYXZvaWQgZG9pbmcgYW4gaW1hZ2UgZHVtcCBp
ZiB0aGUKQEAgLTE1Myw3ICsxNTAsNyBAQCBjbGFzcyBTaW5nbGVUZXN0UnVubmVyKG9iamVjdCk6
CiAgICAgICAgIGxvY2F0aW9uID0gc2VsZi5WRVJTSU9OX0RJUiBpZiBzZWxmLl9vcHRpb25zLmFk
ZF9wbGF0Zm9ybV9leGNlcHRpb25zIGVsc2Ugc2VsZi5VUERBVEUKICAgICAgICAgc2VsZi5fc2F2
ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQudGV4dCwgJy50eHQnLCBsb2NhdGlvbikKICAg
ICAgICAgc2VsZi5fc2F2ZV9iYXNlbGluZV9kYXRhKGRyaXZlcl9vdXRwdXQuYXVkaW8sICcud2F2
JywgbG9jYXRpb24pCi0gICAgICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAg
ICAgIGlmIHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVzdDoKICAgICAgICAgICAgIHNlbGYuX3Nh
dmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0LmltYWdlLCAnLnBuZycsIGxvY2F0aW9uKQog
CiAgICAgZGVmIF9zYXZlX2Jhc2VsaW5lX2RhdGEoc2VsZiwgZGF0YSwgZXh0ZW5zaW9uLCBsb2Nh
dGlvbik6CkBAIC0yMjIsNyArMjE5LDcgQEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcihvYmplY3Qp
OgogCiAgICAgICAgIGZhaWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX3RleHQoZHJpdmVyX291
dHB1dC50ZXh0LCBleHBlY3RlZF9kcml2ZXJfb3V0cHV0LnRleHQpKQogICAgICAgICBmYWlsdXJl
cy5leHRlbmQoc2VsZi5fY29tcGFyZV9hdWRpbyhkcml2ZXJfb3V0cHV0LmF1ZGlvLCBleHBlY3Rl
ZF9kcml2ZXJfb3V0cHV0LmF1ZGlvKSkKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90
ZXN0czoKKyAgICAgICAgaWYgc2VsZi5fc2hvdWxkX3J1bl9waXhlbF90ZXN0OgogICAgICAgICAg
ICAgZmFpbHVyZXMuZXh0ZW5kKHNlbGYuX2NvbXBhcmVfaW1hZ2UoZHJpdmVyX291dHB1dCwgZXhw
ZWN0ZWRfZHJpdmVyX291dHB1dCkpCiAgICAgICAgIHJldHVybiBUZXN0UmVzdWx0KHNlbGYuX3Rl
c3RfbmFtZSwgZmFpbHVyZXMsIGRyaXZlcl9vdXRwdXQudGVzdF90aW1lLCBkcml2ZXJfb3V0cHV0
Lmhhc19zdGRlcnIoKSkKIApkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlv
dXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5CmluZGV4IDM3ODgyNmM1MWY4ZTA5ZGY2
NWEyODAwZDc1ZmM2NWUyYmExYWU1OGIuLmIxNTgzZmZmMzM3ZjA2NzdhYzIzMGJiODE2NDIxM2M2
M2QwNDczNDkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL3dvcmtlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9jb250cm9sbGVycy93b3JrZXIucHkKQEAgLTg4LDEzICs4OCw4IEBAIGNsYXNzIFdv
cmtlcihvYmplY3QpOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXMgPSBz
ZWxmLl9wb3J0LnJlZmVyZW5jZV9maWxlcyh0ZXN0X2lucHV0LnRlc3RfbmFtZSkKICAgICAgICAg
aWYgdGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXM6CiAgICAgICAgICAgICB0ZXN0X2lucHV0LnNo
b3VsZF9ydW5fcGl4ZWxfdGVzdCA9IFRydWUKLSAgICAgICAgZWxpZiBzZWxmLl9vcHRpb25zLnBp
eGVsX3Rlc3RzOgotICAgICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX3BpeGVsX3Rlc3Rf
aWZfbm9fYmFzZWxpbmU6Ci0gICAgICAgICAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3Bp
eGVsX3Rlc3QgPSBib29sKHNlbGYuX3BvcnQuZXhwZWN0ZWRfaW1hZ2UodGVzdF9pbnB1dC50ZXN0
X25hbWUpKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICB0ZXN0X2lucHV0LnNo
b3VsZF9ydW5fcGl4ZWxfdGVzdCA9IFRydWUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRl
c3RfaW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gRmFsc2UKKyAgICAgICAgICAgIHRlc3Rf
aW5wdXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gc2VsZi5fcG9ydC5zaG91bGRfcnVuX2FzX3Bp
eGVsX3Rlc3QodGVzdF9pbnB1dCkKIAogICAgIGRlZiBfcnVuX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1
dCk6CiAgICAgICAgIHNlbGYuX3VwZGF0ZV90ZXN0X2lucHV0KHRlc3RfaW5wdXQpCmRpZmYgLS1n
aXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkgYi9U
b29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKaW5kZXggZTAx
ZTJiNWFhMGJlMDQxMWQ3MWZjOTU3MzMwYzYxNWNlOGQ0OTZkOC4uZTg4NmUwNmEyY2VmMzk1YjQ2
MGEwODhjMjllYWJmM2Q2Mzc1OTNiOCAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQpAQCAtMTI1Miw2ICsxMjUyLDMzIEBAIGNsYXNzIFBv
cnQob2JqZWN0KToKICAgICAgICAgICAgICAgICByZXR1cm4gc3VpdGUuYXJncwogICAgICAgICBy
ZXR1cm4gW10KIAorICAgIGRlZiBzdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rl
c3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2V0X29wdGlvbignd2Via2l0X3Rlc3RfcnVubmVy
Jyk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fc3VwcG9y
dHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KCkKKworICAgIGRlZiBfc3VwcG9ydHNf
c3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgorICAgICAgICAjIEZJWE1FOiBh
bGwgcG9ydHMgc2hvdWxkIHN1cHBvcnQgaXQuCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAg
ZGVmIHNob3VsZF9ydW5fYXNfcGl4ZWxfdGVzdChzZWxmLCB0ZXN0X2lucHV0KToKKyAgICAgICAg
aWYgbm90IHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CisgICAgICAgICAgICByZXR1cm4gRmFs
c2UKKyAgICAgICAgaWYgbm90IHNlbGYuc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Bl
cl90ZXN0KCk6CisgICAgICAgICAgICAjIENhbm5vdCBkbyBtb3JlIGZpbHRlcmluZyB3aXRob3V0
IHRoaXMuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9vcHRpb25z
LnNraXBfcGl4ZWxfdGVzdF9pZl9ub19iYXNlbGluZSBhbmQgbm90IHNlbGYuZXhwZWN0ZWRfaW1h
Z2UodGVzdF9pbnB1dC50ZXN0X25hbWUpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAg
ICAgIGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdF9kaXJlY3RvcmllczoKKyAgICAgICAgICAg
IHJldHVybiBhbnkodGVzdF9pbnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aChkaXJlY3RvcnkpIGZv
ciBkaXJlY3RvcnkgaW4gc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzKQorICAg
ICAgICByZXR1cm4gc2VsZi5fYWxsb3dlZF90b19ydW5fYXNfcGl4ZWxfdGVzdCh0ZXN0X2lucHV0
KQorCisgICAgZGVmIF9hbGxvd2VkX3RvX3J1bl9hc19waXhlbF90ZXN0KHNlbGYsIHRlc3RfaW5w
dXQpOgorICAgICAgICAjIERlZmF1bHQgYmVoYXZpb3IgaXMgdG8gYWxsb3cgYWxsIHRlc3QgdG8g
cnVuIGFzIHBpeGVsIHRlc3RzIGlmIC0tcGl4ZWwtdGVzdHMgaXMgb24gYW5kCisgICAgICAgICMg
LS1waXhlbC10ZXN0LWRpcmVjdG95IGlzIG5vdCBzcGVjaWZpZWQuIFBvcnRzIGNhbiBvdmVycmlk
ZSB0aGlzIGFjY29yZGluZyB0byB0aGVpciBkZWZhdWx0CisgICAgICAgICMgc2V0IG9mIHBpeGVs
IHRlc3RzLgorICAgICAgICByZXR1cm4gVHJ1ZQorCiAKIGNsYXNzIFZpcnR1YWxUZXN0U3VpdGUo
b2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYmFzZSwgYXJncywgdGVzdHM9
Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9w
b3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZHJpdmVyLnB5CmluZGV4IDVlNzA2MWJhYjk3NmNhNWRmODhkNTI3ZDRhNmI4ZDYyMmUyMzE1NTgu
LmZmYzFjMTk0NWQ2ODljY2RiMjBiNDllZmU3OGMwMWMwOTEyMGQzMzggMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CkBAIC0yOTgs
NyArMjk4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAgICAgY21kLmV4dGVuZChz
ZWxmLl9wb3J0LmdldF9vcHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcnLCBbXSkpCiAKLSAgICAg
ICAgaWYgcGl4ZWxfdGVzdHM6CisgICAgICAgIGlmIHBpeGVsX3Rlc3RzIGFuZCBub3Qgc2VsZi5f
cG9ydC5zdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVyX3Rlc3QoKToKICAgICAgICAg
ICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMnKQogICAgICAgICBjbWQuZXh0ZW5kKHBlcl90
ZXN0X2FyZ3MpCiAKQEAgLTMzOCw4ICszMzgsMTQgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAg
ICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CiAgICAgICAgICAgICAgICAg
Y29tbWFuZCA9IHBhdGguY3lncGF0aChjb21tYW5kKQogCisgICAgICAgIGFzc2VydCBub3QgZHJp
dmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJpdmVyX2lucHV0LnNob3VsZF9ydW5fcGl4ZWxfdGVz
dAorCisgICAgICAgIGlmIGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6CisgICAg
ICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJf
dGVzdCgpOgorICAgICAgICAgICAgICAgICMgV2UgZGlkIG5vdCBzdGFydCB0aGUgZHJpdmVyIHdp
dGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3ZSBzcGVjaWZ5IGl0IHBlciB0ZXN0LgorICAgICAg
ICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCisgICAg
ICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhlbC10ZXN0JwogICAgICAgICBpZiBk
cml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKLSAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0
b3Igb2YgY29tbWFuZCBmaWVsZHMuCiAgICAgICAgICAgICBjb21tYW5kICs9ICInIiArIGRyaXZl
cl9pbnB1dC5pbWFnZV9oYXNoCiAgICAgICAgIHJldHVybiBjb21tYW5kICsgIlxuIgogCmRpZmYg
LS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5IGIv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9xdC5weQppbmRleCBhYWFh
ZmFjNWQzNjRjY2FlNDdlOTExM2UzODU1YWQ2MWYxYTVjMzhkLi4wY2I4NGJlYzg0ZGI5ZWY2MmU5
YTI0ZmY5ZjliNzdhYmYyNDJhOTkxIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvcXQucHkKQEAgLTE4NSwzICsxODUsMTQgQEAgY2xhc3MgUXRQb3J0KFdl
YktpdFBvcnQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcignVXNlIGdpdCB0byBncmFiIHRoZSBh
Y3R1YWwgZm9udHMgZnJvbSBodHRwOi8vZ2l0b3Jpb3VzLm9yZy9xdHdlYmtpdC90ZXN0Zm9udHMn
KQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVybiByZXN1bHQKKworICAg
IGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYpOgorICAg
ICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9hbGxvd2VkX3RvX3J1bl9hc19waXhlbF90ZXN0
KHNlbGYsIHRlc3RfaW5wdXQpOgorICAgICAgICByZXR1cm4gYW55KHRlc3RfaW5wdXQudGVzdF9u
YW1lLnN0YXJ0c3dpdGgoZGlyZWN0b3J5KQorICAgICAgICAgICAgICAgICAgIGZvciBkaXJlY3Rv
cnkgaW4gUXRQb3J0Ll9kZWZhdWx0X3BpeGVsX3Rlc3RfZGlyZWN0b3JpZXMoKSkKKworICAgIEBz
dGF0aWNtZXRob2QKKyAgICBkZWYgX2RlZmF1bHRfcGl4ZWxfdGVzdF9kaXJlY3RvcmllcygpOgor
ICAgICAgICByZXR1cm4gWydjb21wb3NpdGluZyddCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9wb3J0L3Rlc3QucHkKaW5kZXggOWNmOThkZTc0ODg1OTg2ZWYxMTg0
MzY1Y2MwZWJmZGYyNzg2MWIxZC4uMzkzMjQ1MmRhZTI1NzlhZGFmZGFkZjMxNDhhYTMzZjIyYzRl
NDljOCAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9y
dC90ZXN0LnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
dGVzdC5weQpAQCAtMjI3LDYgKzIyNywxNCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgwMHgzNAog
ICAgIHRlc3RzLmFkZCgncGVyZi9mb28vdGVzdC5odG1sJykKICAgICB0ZXN0cy5hZGQoJ3BlcmYv
Zm9vL3Rlc3QtcmVmLmh0bWwnKQogCisgICAgIyBGb3IgdGVzdGluZyAtLXBpeGVsLXRlc3QtZGly
ZWN0b3JpZXMuCisgICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91bmV4cGVjdGVkL3BpeGVsZGlyL2lt
YWdlX2luX3BpeGVsZGlyLmh0bWwnLAorICAgICAgICBhY3R1YWxfaW1hZ2U9J2ltYWdlX2luX3Bp
eGVsZGlyLXBuZ3RFWHRjaGVja3N1bVx4MDBjaGVja3N1bV9mYWlsJywKKyAgICAgICAgZXhwZWN0
ZWRfaW1hZ2U9J2ltYWdlX2luX3BpeGVsZGlyLXBuZ3RFWHRjaGVja3N1bVx4MDBjaGVja3N1bS1w
bmcnKQorICAgIHRlc3RzLmFkZCgnZmFpbHVyZXMvdW5leHBlY3RlZC9pbWFnZV9ub3RfaW5fcGl4
ZWxkaXIuaHRtbCcsCisgICAgICAgIGFjdHVhbF9pbWFnZT0naW1hZ2Vfbm90X2luX3BpeGVsZGly
LXBuZ3RFWHRjaGVja3N1bVx4MDBjaGVja3N1bV9mYWlsJywKKyAgICAgICAgZXhwZWN0ZWRfaW1h
Z2U9J2ltYWdlX25vdF9pbl9waXhlbGRpci1wbmd0RVh0Y2hlY2tzdW1ceDAwY2hlY2tzdW0tcG5n
JykKKwogICAgIHJldHVybiB0ZXN0cwogCiAKQEAgLTUwNSw2ICs1MTMsMTIgQEAgY2xhc3MgVGVz
dFBvcnQoUG9ydCk6CiAgICAgICAgICAgICBWaXJ0dWFsVGVzdFN1aXRlKCd2aXJ0dWFsL3NraXBw
ZWQnLCAnZmFpbHVyZXMvZXhwZWN0ZWQnLCBbJy0tdmlydHVhbC1hcmcyJ10pLAogICAgICAgICBd
CiAKKyAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90ZXN0KHNlbGYp
OgorICAgICAgICAjIExldCBpdCB0cnVlIHNvIHdlIGNhbiB0ZXN0IHRoZSAtLXBpeGVsLXRlc3Qt
ZGlyZWN0b3J5IG9wdGlvbi4KKyAgICAgICAgIyBJdCBzaG91bGQgYmUgc3VwcG9ydGVkIGJ5IGFs
bCBwbGF0Zm9ybSBpbiB0aGUgbmVhciBmdXR1cmUgYW55d2F5LgorICAgICAgICByZXR1cm4gVHJ1
ZQorCisKIGNsYXNzIFRlc3REcml2ZXIoRHJpdmVyKToKICAgICAiIiJUZXN0L0R1bW15IGltcGxl
bWVudGF0aW9uIG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCiAKZGlmZiAtLWdp
dCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMu
cHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3Rz
LnB5CmluZGV4IGQ0ZDBlZGIyYjA0Yzc5MmJjY2E0ZWE5ZjYyYzVlOWQ5MjkxMzczNDkuLjUwM2I2
YTFmNzU4Y2Q1MTFlM2Y5ZmY5MGVkMDg3OGNkN2RmY2QzYjUgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAt
MTg1LDYgKzE4NSwyNSBAQCBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydCwgb3B0aW9u
cyk6CiAgICAgICAgIG9wdGlvbnMucmVzZXRfcmVzdWx0cyA9IFRydWUKICAgICAgICAgb3B0aW9u
cy5hZGRfcGxhdGZvcm1fZXhjZXB0aW9ucyA9IFRydWUKIAorICAgIGlmIG9wdGlvbnMucGl4ZWxf
dGVzdF9kaXJlY3RvcmllczoKKyAgICAgICAgaWYgbm90IG9wdGlvbnMucGl4ZWxfdGVzdHM6Cisg
ICAgICAgICAgICB3YXJuaW5ncy5hcHBlbmQoIi0tcGl4ZWwtdGVzdC1kaXJlY3RvcmllcyBoYXMg
bm8gZWZmZWN0IHdpdGhvdXQgLS1waXhlbC10ZXN0cyIpCisgICAgICAgICAgICBvcHRpb25zLnBp
eGVsX3Rlc3RfZGlyZWN0b3JpZXMgPSBbXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2Fu
aXRpemVkID0gc2V0KCkKKyAgICAgICAgICAgIHBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMgPSBvcHRp
b25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMKKyAgICAgICAgICAgIGZvciBkaXJlY3RvcnkgaW4g
cGl4ZWxfdGVzdF9kaXJlY3RvcmllczoKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiB3ZSBzaG91
bGQgc3VwcG9ydCBzcGVjaWZ5aW5nIHRoZSBkaXJlY3RvcmllcyBhbGwgdGhlIHdheXMgd2Ugc3Vw
cG9ydCBpdCBmb3IgYWRkaXRpb25hbAorICAgICAgICAgICAgICAgICMgYXJndW1lbnRzIHNwZWNp
Znlpbmcgd2hpY2ggdGVzdHMgYW5kIGRpcmVjdG9yaWVzIHRvIHJ1bi4gV2Ugc2hvdWxkIGFsc28g
bW92ZSB0aGUgbG9naWMgZm9yIHRoYXQKKyAgICAgICAgICAgICAgICAjIHRvIFBvcnQuCisgICAg
ICAgICAgICAgICAgZmlsZXN5c3RlbSA9IHBvcnQuaG9zdC5maWxlc3lzdGVtCisgICAgICAgICAg
ICAgICAgaWYgbm90IGZpbGVzeXN0ZW0uaXNkaXIoZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5b3V0
X3Rlc3RzX2RpcigpLCBkaXJlY3RvcnkpKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mu
YXBwZW5kKCItLXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMgYSBkaXJlY3RvcnkgYnV0IGdvdDogJXMi
ICUgc3RyKGRpcmVjdG9yeSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg
ICAgICAgc2FuaXRpemVkLmFkZChkaXJlY3RvcnkpCisKKyAgICAgICAgICAgIG9wdGlvbnMucGl4
ZWxfdGVzdF9kaXJlY3RvcmllcyA9IGxpc3Qoc2FuaXRpemVkKQorCiAgICAgcmV0dXJuIHdhcm5p
bmdzCiAKIApAQCAtMzEyLDYgKzMzMSwxNyBAQCBkZWYgcGFyc2VfYXJncyhhcmdzPU5vbmUpOgog
ICAgICAgICBvcHRwYXJzZS5tYWtlX29wdGlvbigiLS1za2lwLXBpeGVsLXRlc3QtaWYtbm8tYmFz
ZWxpbmUiLCBhY3Rpb249InN0b3JlX3RydWUiLAogICAgICAgICAgICAgZGVzdD0ic2tpcF9waXhl
bF90ZXN0X2lmX25vX2Jhc2VsaW5lIiwgaGVscD0iRG8gbm90IGdlbmVyYXRlIGFuZCBjaGVjayBw
aXhlbCByZXN1bHQgaW4gdGhlIGNhc2Ugd2hlbiAiCiAgICAgICAgICAgICAgICAgICJubyBpbWFn
ZSBiYXNlbGluZSBpcyBhdmFpbGFibGUgZm9yIHRoZSB0ZXN0LiIpLAorCisgICAgICAgICNGSVhN
RTogd2Ugc2hvdWxkIHN1cHBvcnQgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCB3aXRoIC0tcGl4ZWwt
dGVzdC1kaXJlY3RvcnkgYXMgd2VsbC4KKyAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0t
cGl4ZWwtdGVzdC1kaXJlY3RvcnkiLCBhY3Rpb249ImFwcGVuZCIsIGRlZmF1bHQ9W10sIGRlc3Q9
InBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMiLAorICAgICAgICAgICAgaGVscD0iQSBkaXJlY3Rvcnkg
d2hlcmUgaXQgaXMgYWxsb3dlZCB0byBleGVjdXRlIHRlc3RzIGFzIHBpeGVsIHRlc3RzLiAiCisg
ICAgICAgICAgICAgICAgICJTcGVjaWZ5IG11bHRpcGxlIHRpbWVzIHRvIGFkZCBtdWx0aXBsZSBk
aXJlY3Rvcmllcy4gIgorICAgICAgICAgICAgICAgICAiVGhpcyBvcHRpb24gaXMgc3VwcG9zZWQg
dG8gYmUgdXNlZCB0b2dhdGhlciB3aXRoIC0tcGl4ZWwtdGVzdHMuICIKKyAgICAgICAgICAgICAg
ICAgIklmIHNwZWNpZmllZCwgb25seSB0aG9zZSB0ZXN0cyB3aWxsIGJlIGV4ZWN1dGVkIGFzIHBp
eGVsIHRlc3RzICIKKyAgICAgICAgICAgICAgICAgInRoYXQgYXJlIGxvY2F0ZWQgaW4gb25lIG9m
IHRoZSBkaXJlY3RvcmllcyBlbnVtZXJhdGVkIHdpdGggdGhlIG9wdGlvbi4gIgorICAgICAgICAg
ICAgICAgICAiU29tZSBwb3J0cyBtYXkgaWdub3JlIHRoaXMgb3B0aW9uIHdoaWxlIG90aGVycyBj
YW4gaGF2ZSBhIGRlZmF1bHQgIgorICAgICAgICAgICAgICAgICAidmFsdWUgdGhhdCBjYW4gYmUg
b3ZlcnJpZGRlbiBoZXJlLiIpLAorCiAgICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXNr
aXAtZmFpbGluZy10ZXN0cyIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCiAgICAgICAgICAgICBkZWZh
dWx0PUZhbHNlLCBoZWxwPSJTa2lwIHRlc3RzIHRoYXQgYXJlIGV4cGVjdGVkIHRvIGZhaWwuICIK
ICAgICAgICAgICAgICAgICAgIk5vdGU6IFdoZW4gdXNpbmcgdGhpcyBvcHRpb24sIHlvdSBtaWdo
dCBtaXNzIG5ldyBjcmFzaGVzICIKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
bGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRpb250ZXN0LnB5IGIvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlv
bnRlc3QucHkKaW5kZXggYWQxNGJmNGVmZWM0N2JhOTUyYzk5MTM4NDNmYzNiOTBhYTY2NjQwMi4u
MzNiY2Q1YzI2NTY2NDYzZTlhNWM3NjQ4YzQxZDkxZGQ0ZWNkZDgxZCAxMDA3NTUKLS0tIGEvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0c19pbnRlZ3Jh
dGlvbnRlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkKQEAgLTE3OSw3ICsxNzksNyBAQCBkZWYg
Z2V0X3Rlc3RzX3J1bihleHRyYV9hcmdzPU5vbmUsIHRlc3RzX2luY2x1ZGVkPUZhbHNlLCBmbGF0
dGVuX2JhdGNoZXM9RmFsc2UsCiAKICMgVXBkYXRlIHRoaXMgbWFnaWMgbnVtYmVyIGlmIHlvdSBh
ZGQgYW4gdW5leHBlY3RlZCB0ZXN0IHRvIHdlYmtpdHB5LmxheW91dF90ZXN0cy5wb3J0LnRlc3QK
ICMgRklYTUU6IEl0J3MgbmljZSB0byBoYXZlIGEgcm91dGluZSBpbiBwb3J0L3Rlc3QucHkgdGhh
dCByZXR1cm5zIHRoaXMgbnVtYmVyLgotdW5leHBlY3RlZF90ZXN0c19jb3VudCA9IDEyCit1bmV4
cGVjdGVkX3Rlc3RzX2NvdW50ID0gMTQKIAogCiBjbGFzcyBTdHJlYW1UZXN0aW5nTWl4aW4ob2Jq
ZWN0KToKQEAgLTUwMSw3ICs1MDEsNyBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2Fz
ZSwgU3RyZWFtVGVzdGluZ01peGluKToKIAogICAgIGRlZiB0ZXN0X3J1bl9zaW5nbHlfYWN0dWFs
bHlfcnVuc190ZXN0cyhzZWxmKToKICAgICAgICAgcmVzLCBfLCBfLCBfID0gbG9nZ2luZ19ydW4o
WyctLXJ1bi1zaW5nbHknLCAnZmFpbHVyZXMvdW5leHBlY3RlZCddKQotICAgICAgICBzZWxmLmFz
c2VydEVxdWFscyhyZXMsIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywgMTApCiAK
ICAgICBkZWYgdGVzdF9zaW5nbGVfZmlsZShzZWxmKToKICAgICAgICAgIyBGSVhNRTogV2Ugc2hv
dWxkIGNvbnNpZGVyIHJlcGxhY2luZyBtb3JlIG9mIHRoZSBnZXRfdGVzdHNfcnVuKCktc3R5bGUg
dGVzdHMKQEAgLTU3Myw2ICs1NzMsMjAgQEAgY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENh
c2UsIFN0cmVhbVRlc3RpbmdNaXhpbik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShqc29uX3N0
cmluZy5maW5kKCcibnVtX2ZsYWt5IjowJykgIT0gLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShqc29uX3N0cmluZy5maW5kKCcibnVtX21pc3NpbmciOjEnKSAhPSAtMSkKIAorICAgIGRlZiB0
ZXN0X3BpeGVsX3Rlc3RfZGlyZWN0b3JpZXMoc2VsZik6CisgICAgICAgIGhvc3QgPSBNb2NrSG9z
dCgpCisKKyAgICAgICAgIiIiQm90aCB0ZXN0cyBoYXZlIGZhbGluZyBjaGVja3N1bS4gV2UgaW5j
bHVkZSBvbmx5IHRoZSBmaXJzdCBpbiBwaXhlbCB0ZXN0cyBzbyBvbmx5IHRoYXQgc2hvdWxkIGZh
aWwuIiIiCisgICAgICAgIGFyZ3MgPSBbJy0tcGl4ZWwtdGVzdHMnLCAnLS1waXhlbC10ZXN0LWRp
cmVjdG9yeScsICdmYWlsdXJlcy91bmV4cGVjdGVkL3BpeGVsZGlyJywKKyAgICAgICAgICAgICAg
ICAnZmFpbHVyZXMvdW5leHBlY3RlZC9waXhlbGRpci9pbWFnZV9pbl9waXhlbGRpci5odG1sJywK
KyAgICAgICAgICAgICAgICAnZmFpbHVyZXMvdW5leHBlY3RlZC9pbWFnZV9ub3RfaW5fcGl4ZWxk
aXIuaHRtbCddCisgICAgICAgIHJlcywgb3V0LCBlcnIsIF8gPSBsb2dnaW5nX3J1bihleHRyYV9h
cmdzPWFyZ3MsIGhvc3Q9aG9zdCwgcmVjb3JkX3Jlc3VsdHM9VHJ1ZSwgdGVzdHNfaW5jbHVkZWQ9
VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXMsIDEpCisgICAgICAgIGV4cGVj
dGVkX3Rva2VuID0gJyJ1bmV4cGVjdGVkIjp7InBpeGVsZGlyIjp7ImltYWdlX2luX3BpeGVsZGly
Lmh0bWwiOnsiZXhwZWN0ZWQiOiJQQVNTIiwiYWN0dWFsIjoiSU1BR0UiJworICAgICAgICBqc29u
X3N0cmluZyA9IGhvc3QuZmlsZXN5c3RlbS5yZWFkX3RleHRfZmlsZSgnL3RtcC9sYXlvdXQtdGVz
dC1yZXN1bHRzL2Z1bGxfcmVzdWx0cy5qc29uJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGpz
b25fc3RyaW5nLmZpbmQoZXhwZWN0ZWRfdG9rZW4pICE9IC0xKQorCiAgICAgZGVmIHRlc3RfbWlz
c2luZ19hbmRfdW5leHBlY3RlZF9yZXN1bHRzX3dpdGhfY3VzdG9tX2V4aXRfY29kZShzZWxmKToK
ICAgICAgICAgIyBUZXN0IHRoYXQgd2UgdXBkYXRlIGV4cGVjdGF0aW9ucyBpbiBwbGFjZS4gSWYg
dGhlIGV4cGVjdGF0aW9uCiAgICAgICAgICMgaXMgbWlzc2luZywgdXBkYXRlIHRoZSBleHBlY3Rl
ZCBnZW5lcmljIGxvY2F0aW9uLgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAppbmRleCA4YzIyNTA4MzFhZDlhMjBjNDQ3NmVkM2M5NTE3N2NhMWI1OGIxY2M0Li45MjAw
ZDJjMDM0NWNhM2EzMzBiNWZiMjM5MTNiNzFkNDNiNDNiNTM0IDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtNjcsNyArNjcsNyBAQCBUZXN0Q29udHJvbGxl
ciYgVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpCiB9CiAKIFRlc3RDb250cm9sbGVyOjpUZXN0Q29u
dHJvbGxlcihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQotICAgIDogbV9kdW1wUGl4ZWxz
KGZhbHNlKQorICAgIDogbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpCiAgICAgLCBtX3Zl
cmJvc2UoZmFsc2UpCiAgICAgLCBtX3ByaW50U2VwYXJhdG9ycyhmYWxzZSkKICAgICAsIG1fdXNp
bmdTZXJ2ZXJNb2RlKGZhbHNlKQpAQCAtMjY4LDcgKzI2OCw3IEBAIHZvaWQgVGVzdENvbnRyb2xs
ZXI6OmluaXRpYWxpemUoaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgfQog
CiAgICAgICAgIGlmIChhcmd1bWVudCA9PSAiLS1waXhlbC10ZXN0cyIpIHsKLSAgICAgICAgICAg
IG1fZHVtcFBpeGVscyA9IHRydWU7CisgICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0
cyA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBpZiAo
YXJndW1lbnQgPT0gIi0tdmVyYm9zZSIpIHsKQEAgLTUxNywxOCArNTE3LDMxIEBAIGJvb2wgVGVz
dENvbnRyb2xsZXI6OnJ1blRlc3QoY29uc3QgY2hhciogdGVzdCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIHBhdGhPclVSTCh0ZXN0KTsKKyAgICBib29s
IGR1bXBQaXhlbHNUZXN0ID0gbV9kdW1wUGl4ZWxzRm9yQWxsVGVzdHM7CisgICAgc3RkOjpzdHJp
bmcgY29tbWFuZCh0ZXN0KTsKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkwgPSBjb21tYW5kOwog
ICAgIHN0ZDo6c3RyaW5nIGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNpemVfdCBzZXBhcmF0b3JQ
b3MgPSBwYXRoT3JVUkwuZmluZCgiJyIpOwotICAgIGlmIChzZXBhcmF0b3JQb3MgIT0gc3RkOjpz
dHJpbmc6Om5wb3MpIHsKLSAgICAgICAgcGF0aE9yVVJMID0gc3RkOjpzdHJpbmcoc3RkOjpzdHJp
bmcodGVzdCksIDAsIHNlcGFyYXRvclBvcyk7Ci0gICAgICAgIGV4cGVjdGVkUGl4ZWxIYXNoID0g
c3RkOjpzdHJpbmcoc3RkOjpzdHJpbmcodGVzdCksIHNlcGFyYXRvclBvcyArIDEpOworICAgIHNp
emVfdCBmaXJzdFNlcGFyYXRvclBvcyA9IGNvbW1hbmQuZmluZF9maXJzdF9vZignXCcnKTsKKyAg
ICBzaXplX3Qgc2Vjb25kU2VwYXJhdG9yUG9zID0gY29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycs
IGZpcnN0U2VwYXJhdG9yUG9zICsgMSk7CisgICAgaWYgKGZpcnN0U2VwYXJhdG9yUG9zICE9IHN0
ZDo6c3RyaW5nOjpucG9zKSB7CisgICAgICAgIHBhdGhPclVSTCA9IHN0ZDo6c3RyaW5nKGNvbW1h
bmQsIDAsIGZpcnN0U2VwYXJhdG9yUG9zKTsKKyAgICAgICAgc2l6ZV90IHBpeGVsSGFzaFBvcyA9
IGZpcnN0U2VwYXJhdG9yUG9zICsgMTsKKworICAgICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVs
LXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxzIGZvciB0aGUgdGVzdC4KKyAgICAgICAgY29u
c3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbFRlc3RBcmcoIi0tcGl4ZWwtdGVzdCIpOworICAg
ICAgICBzdGQ6OnN0cmluZyBhcmdUZXN0ID0gc3RkOjpzdHJpbmcoY29tbWFuZCwgZmlyc3RTZXBh
cmF0b3JQb3MgKyAxLCBleHBlY3RlZFBpeGVsVGVzdEFyZy5zaXplKCkpOworICAgICAgICBpZiAo
YXJnVGVzdCA9PSBleHBlY3RlZFBpeGVsVGVzdEFyZykgeworICAgICAgICAgICAgZHVtcFBpeGVs
c1Rlc3QgPSB0cnVlOworICAgICAgICAgICAgcGl4ZWxIYXNoUG9zID0gc2Vjb25kU2VwYXJhdG9y
UG9zID09IHN0ZDo6c3RyaW5nOjpucG9zID8gLTEgOiBzZWNvbmRTZXBhcmF0b3JQb3MgKyAxOwor
ICAgICAgICB9CisgICAgICAgIGlmIChwaXhlbEhhc2hQb3MgIT0gLTEgJiYgcGl4ZWxIYXNoUG9z
IDwgY29tbWFuZC5zaXplKCkpCisgICAgICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6
c3RyaW5nKGNvbW1hbmQsIHBpeGVsSGFzaFBvcyk7CiAgICAgfQogCiAgICAgbV9zdGF0ZSA9IFJ1
bm5pbmdUZXN0OwogCiAgICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IGFkb3B0UHRyKG5ldyBUZXN0
SW52b2NhdGlvbihwYXRoT3JVUkwpKTsKLSAgICBpZiAobV9kdW1wUGl4ZWxzKQorICAgIGlmIChk
dW1wUGl4ZWxzVGVzdCkKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+c2V0SXNQaXhlbFRl
c3QoZXhwZWN0ZWRQaXhlbEhhc2gpOwogCiAgICAgbV9jdXJyZW50SW52b2NhdGlvbi0+aW52b2tl
KCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggMjAxODhhZDU1
NWQ0YjdlOTFmOTRkODMzZmZmZDUzYjdmMTA5NjIyNy4uYTk5ZTE2ZWE4NzAyN2MzNGYwN2I4OTYy
YjA5OGMyMzM0ZDk0MjFiZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aApAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAKICAgICBPd25QdHI8VGVzdEludm9jYXRp
b24+IG1fY3VycmVudEludm9jYXRpb247CiAKLSAgICBib29sIG1fZHVtcFBpeGVsczsKKyAgICBi
b29sIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwogICAgIGJvb2wgbV92ZXJib3NlOwogICAgIGJv
b2wgbV9wcmludFNlcGFyYXRvcnM7CiAgICAgYm9vbCBtX3VzaW5nU2VydmVyTW9kZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154915</attachid>
            <date>2012-07-27 05:48:37 -0700</date>
            <delta_ts>2012-07-27 06:06:29 -0700</delta_ts>
            <desc>rollout patch</desc>
            <filename>bug-91754-20120727144813.patch</filename>
            <type>text/plain</type>
            <size>22866</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIzODY3CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZjU4Zjg3OWI5ZTFhNTAzMDI4ZTk0ZWViNzMzNGUxYjNk
MWViZWRiNy4uYTUwOTYyYjhiN2E3YzljYzc1OGVkODA0N2QzZTkzNGRlN2Y0NDhjYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUw
IEBACisyMDEyLTA3LTI3ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBbTlJXVF0gc2hvdWxkIGhhdmUgYSB3YXkgdG8gcmVzdHJpY3QgcGl4ZWwgdGVzdHMg
Zm9yIGluZGl2aWR1YWwgZGlyZWN0b3JpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTkxNzU0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUm9sbG91dCByMTIzNzI5IGJlY2F1c2UgaXQgbWFkZSBRdCBkZWJ1
ZyBib3RzIGNyYXN5LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEdW1wUmVuZGVyVHJlZTo6RHVtcFJlbmRlclRy
ZWUpOgorICAgICAgICAoV2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6Om9wZW4pOgorICAgICAgICAo
V2ViQ29yZTo6RHVtcFJlbmRlclRyZWU6OnByb2Nlc3NMaW5lKToKKyAgICAgICAgKFdlYkNvcmU6
OkR1bXBSZW5kZXJUcmVlOjpzZXREdW1wUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkR1bXBS
ZW5kZXJUcmVlOjpkdW1wKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVy
VHJlZVF0Lmg6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZSk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvcXQvbWFpbi5jcHA6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBTY3JpcHRzL3dl
YmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHk6Cisg
ICAgICAgIChTaW5nbGVUZXN0UnVubmVyLl9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0p
OgorICAgICAgICAoU2luZ2xlVGVzdFJ1bm5lci5fb3ZlcndyaXRlX2Jhc2VsaW5lcyk6CisgICAg
ICAgIChTaW5nbGVUZXN0UnVubmVyLl9jb21wYXJlX291dHB1dCk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvd29ya2VyLnB5OgorICAgICAgICAo
V29ya2VyLl91cGRhdGVfdGVzdF9pbnB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5OgorICAgICAgICAoUG9ydC5sb29rdXBfdmlydHVhbF90
ZXN0X2FyZ3MpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQv
ZHJpdmVyLnB5OgorICAgICAgICAoRHJpdmVyLmNtZF9saW5lKToKKyAgICAgICAgKERyaXZlci5f
Y29tbWFuZF9mcm9tX2RyaXZlcl9pbnB1dCk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9s
YXlvdXRfdGVzdHMvcG9ydC9xdC5weToKKyAgICAgICAgKFF0UG9ydC5jaGVja19zeXNfZGVwcyk6
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC90ZXN0LnB5Ogor
ICAgICAgICAoVGVzdFBvcnQudmlydHVhbF90ZXN0X3N1aXRlcyk6CisgICAgICAgICogU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weToKKyAgICAgICAgKF9z
ZXRfdXBfZGVyaXZlZF9vcHRpb25zKToKKyAgICAgICAgKHBhcnNlX2FyZ3MpOgorICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHNfaW50ZWdyYXRp
b250ZXN0LnB5OgorICAgICAgICAoTWFpblRlc3QudGVzdF9ydW5fc2luZ2x5X2FjdHVhbGx5X3J1
bnNfdGVzdHMpOgorICAgICAgICAoTWFpblRlc3QudGVzdF9taXNzaW5nX2FuZF91bmV4cGVjdGVk
X3Jlc3VsdHMpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6VGVzdENvbnRyb2xsZXIpOgorICAgICAg
ICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXVFI6OlRlc3RD
b250cm9sbGVyOjpydW5UZXN0KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmg6CisgICAgICAgIChUZXN0Q29udHJvbGxlcik6CisKIDIwMTItMDctMjYgIEJhbGF6
cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtucnd0XSBnZXQgcmlk
IG9mIC0tc2tpcC1waXhlbC10ZXN0LWlmLW5vLWJhc2VsaW5lCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCmluZGV4IDgyMTJiZjFlN2M0MzUxMjgzMjM5NGI1
NjFmZTQ2NTU5NGM4ODFjODAuLjEyZDY1OWE1MTkzZTM5NzA5YzE5NGU1NzE2ZTQ3ODY2ZGUwZjBi
YjggMTAwNzU1Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQu
Y3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuY3BwCkBA
IC0zODgsNyArMzg4LDcgQEAgV2ViVmlld0dyYXBoaWNzQmFzZWQ6OldlYlZpZXdHcmFwaGljc0Jh
c2VkKFFXaWRnZXQqIHBhcmVudCkKIH0KIAogRHVtcFJlbmRlclRyZWU6OkR1bXBSZW5kZXJUcmVl
KCkKLSAgICA6IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzKGZhbHNlKQorICAgIDogbV9kdW1wUGl4
ZWxzKGZhbHNlKQogICAgICwgbV9zdGRpbigwKQogICAgICwgbV9lbmFibGVUZXh0T3V0cHV0KGZh
bHNlKQogICAgICwgbV9zdGFuZEFsb25lTW9kZShmYWxzZSkKQEAgLTYwNiw3ICs2MDYsNyBAQCB2
b2lkIER1bXBSZW5kZXJUcmVlOjpvcGVuKGNvbnN0IFFVcmwmIHVybCkKIAogICAgIGlmIChpc0R1
bXBBc1RleHRUZXN0KHVybCkpIHsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIoKS0+ZHVt
cEFzVGV4dCgpOwotICAgICAgICBzZXREdW1wUGl4ZWxzRm9yQWxsVGVzdHMoZmFsc2UpOworICAg
ICAgICBzZXREdW1wUGl4ZWxzKGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAoaXNHbG9iYWxIaXN0
b3J5VGVzdCh1cmwpKQpAQCAtNjkyLDI0ICs2OTIsMTQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZTo6
cHJvY2Vzc0xpbmUoY29uc3QgUVN0cmluZyAmaW5wdXQpCiB7CiAgICAgUVN0cmluZyBsaW5lID0g
aW5wdXQ7CiAKLSAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IGZhbHNlOwogICAgIG1f
ZXhwZWN0ZWRIYXNoID0gUVN0cmluZygpOwotICAgIC8vIHNpbmdsZSBxdW90ZSBtYXJrcyB0aGUg
cGl4ZWwgZHVtcCBoYXNoCi0gICAgaW50IGluZGV4T2ZGaXJzdFNlcGFyYXRvciA9IGxpbmUuaW5k
ZXhPZignXCcnKTsKLSAgICBpbnQgaW5kZXhPZlNlY29uZFNlcGFyYXRvciA9IGxpbmUuaW5kZXhP
ZignXCcnLCBpbmRleE9mRmlyc3RTZXBhcmF0b3IpOwotICAgIGlmIChpbmRleE9mRmlyc3RTZXBh
cmF0b3IgPiAtMSkgewotICAgICAgICBpbnQgaW5kZXhPZlBpeGVsSGFzaCA9IGluZGV4T2ZGaXJz
dFNlcGFyYXRvciArIDE7Ci0KLSAgICAgICAgLy8gTlJXVCBwYXNzZXMgLS1waXhlbC10ZXN0IGlm
IHdlIHNob3VsZCBkdW1wIHBpeGVscyBmb3IgdGhlIHRlc3QuCi0gICAgICAgIGNvbnN0IFFTdHJp
bmcgZXhwZWN0ZWRBcmcoUUxhdGluMVN0cmluZygiLS1waXhlbC10ZXN0IikpOwotICAgICAgICBR
U3RyaW5nIGFyZ1Rlc3QgPSBsaW5lLm1pZChpbmRleE9mRmlyc3RTZXBhcmF0b3IgKyAxLCBleHBl
Y3RlZEFyZy5sZW5ndGgoKSk7Ci0gICAgICAgIGlmIChhcmdUZXN0ID09IGV4cGVjdGVkQXJnKSB7
Ci0gICAgICAgICAgICBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVzdCA9IHRydWU7Ci0gICAgICAg
ICAgICBpbmRleE9mUGl4ZWxIYXNoID0gaW5kZXhPZlNlY29uZFNlcGFyYXRvciA9PSAtMSA/IC0x
IDogaW5kZXhPZlNlY29uZFNlcGFyYXRvciArIDE7CisgICAgaWYgKG1fZHVtcFBpeGVscykgewor
ICAgICAgICAvLyBzaW5nbGUgcXVvdGUgbWFya3MgdGhlIHBpeGVsIGR1bXAgaGFzaAorICAgICAg
ICBpbnQgaSA9IGxpbmUuaW5kZXhPZignXCcnKTsKKyAgICAgICAgaWYgKGkgPiAtMSkgeworICAg
ICAgICAgICAgbV9leHBlY3RlZEhhc2ggPSBsaW5lLm1pZChpICsgMSwgbGluZS5sZW5ndGgoKSk7
CisgICAgICAgICAgICBsaW5lLnJlbW92ZShpLCBsaW5lLmxlbmd0aCgpKTsKICAgICAgICAgfQot
ICAgICAgICBpZiAoaW5kZXhPZlBpeGVsSGFzaCAhPSAtMSAmJiBpbmRleE9mUGl4ZWxIYXNoIDwg
bGluZS5zaXplKCkpCi0gICAgICAgICAgICBtX2V4cGVjdGVkSGFzaCA9IGxpbmUubWlkKGluZGV4
T2ZQaXhlbEhhc2gpOwotICAgICAgICBsaW5lLnJlbW92ZShpbmRleE9mRmlyc3RTZXBhcmF0b3Is
IGxpbmUubGVuZ3RoKCkpOwogICAgIH0KIAogICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoUUxhdGlu
MVN0cmluZygiaHR0cDoiKSkKQEAgLTc0MSw5ICs3MzEsOSBAQCB2b2lkIER1bXBSZW5kZXJUcmVl
Ojpwcm9jZXNzTGluZShjb25zdCBRU3RyaW5nICZpbnB1dCkKICAgICBmZmx1c2goc3Rkb3V0KTsK
IH0KIAotdm9pZCBEdW1wUmVuZGVyVHJlZTo6c2V0RHVtcFBpeGVsc0ZvckFsbFRlc3RzKGJvb2wg
ZHVtcCkKK3ZvaWQgRHVtcFJlbmRlclRyZWU6OnNldER1bXBQaXhlbHMoYm9vbCBkdW1wKQogewot
ICAgIG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzID0gZHVtcDsKKyAgICBtX2R1bXBQaXhlbHMgPSBk
dW1wOwogfQogCiB2b2lkIER1bXBSZW5kZXJUcmVlOjpjbG9zZVJlbWFpbmluZ1dpbmRvd3MoKQpA
QCAtOTYxLDcgKzk1MSw3IEBAIHZvaWQgRHVtcFJlbmRlclRyZWU6OmR1bXAoKQogICAgIGZwdXRz
KCIjRU9GXG4iLCBzdGRvdXQpOwogICAgIGZwdXRzKCIjRU9GXG4iLCBzdGRlcnIpOwogCi0gICAg
aWYgKChtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyB8fCBtX2R1bXBQaXhlbHNGb3JDdXJyZW50VGVz
dCkgJiYgIW1fY29udHJvbGxlci0+c2hvdWxkRHVtcEFzVGV4dCgpKSB7CisgICAgaWYgKG1fZHVt
cFBpeGVscyAmJiAhbV9jb250cm9sbGVyLT5zaG91bGREdW1wQXNUZXh0KCkpIHsKICAgICAgICAg
UUltYWdlIGltYWdlOwogICAgICAgICBpZiAoIW1fY29udHJvbGxlci0+aXNQcmludGluZygpKSB7
CiAgICAgICAgICAgICBpbWFnZSA9IFFJbWFnZShtX3BhZ2UtPnZpZXdwb3J0U2l6ZSgpLCBRSW1h
Z2U6OkZvcm1hdF9BUkdCMzIpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQv
RHVtcFJlbmRlclRyZWVRdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRy
ZWVRdC5oCmluZGV4IGM0ZjkyOTgzZjkxNWNjYTZhODg5OGFkZWZiNTYyYzhkMmRkOTFkYTAuLmQz
OTI4YmM5OWZhZjE1M2Q5Nzg3MmFlYTFlNWZlMWUxYTM3ZDhkMzkgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVlUXQuaAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9EdW1wUmVuZGVyVHJlZVF0LmgKQEAgLTgyLDcgKzgyLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0R3JhcGhpY3NCYXNlZChib29sIGZsYWcpIHsgbV9ncmFwaGljc0Jhc2VkID0g
ZmxhZzsgfQogICAgIGJvb2wgaXNHcmFwaGljc0Jhc2VkKCkgeyByZXR1cm4gbV9ncmFwaGljc0Jh
c2VkOyB9CiAKLSAgICB2b2lkIHNldER1bXBQaXhlbHNGb3JBbGxUZXN0cyhib29sKTsKKyAgICB2
b2lkIHNldER1bXBQaXhlbHMoYm9vbCk7CiAKICAgICB2b2lkIGNsb3NlUmVtYWluaW5nV2luZG93
cygpOwogICAgIHZvaWQgcmVzZXRUb0NvbnNpc3RlbnRTdGF0ZUJlZm9yZVRlc3RpbmcoY29uc3Qg
UVVybCYpOwpAQCAtMTQyLDggKzE0Miw3IEBAIHByaXZhdGU6CiAgICAgUVN0cmluZyBkdW1wRnJh
bWVTY3JvbGxQb3NpdGlvbihRV2ViRnJhbWUqIGZyYW1lKTsKICAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciAqbV9jb250cm9sbGVyOwogCi0gICAgYm9vbCBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0czsK
LSAgICBib29sIG1fZHVtcFBpeGVsc0ZvckN1cnJlbnRUZXN0OworICAgIGJvb2wgbV9kdW1wUGl4
ZWxzOwogICAgIFFTdHJpbmcgbV9leHBlY3RlZEhhc2g7CiAgICAgUVN0cmluZ0xpc3QgbV9zdGFu
ZEFsb25lTW9kZVRlc3RMaXN0OwogCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9x
dC9tYWluLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCmluZGV4IDIyZmJj
NzVjMzk1YTEwZjQwMjRlMTc1NTAwNWIyZDNiZTNkNjdmOTIuLjgxODhmMTgxNmZmYWJhMDUwZmZh
OTQwMjIyNjNiNGQ5NzFmMjFhMWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0
L21haW4uY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L21haW4uY3BwCkBAIC0xOTIs
NyArMTkyLDcgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIAogICAgIGludCBp
bmRleCA9IGFyZ3MuaW5kZXhPZihRTGF0aW4xU3RyaW5nKCItLXBpeGVsLXRlc3RzIikpOwogICAg
IGlmIChpbmRleCAhPSAtMSkgewotICAgICAgICBkdW1wZXIuc2V0RHVtcFBpeGVsc0ZvckFsbFRl
c3RzKHRydWUpOworICAgICAgICBkdW1wZXIuc2V0RHVtcFBpeGVscyh0cnVlKTsKICAgICAgICAg
YXJncy5yZW1vdmVBdChpbmRleCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVfdGVzdF9ydW5uZXIucHkg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250cm9sbGVycy9zaW5nbGVf
dGVzdF9ydW5uZXIucHkKaW5kZXggYWNkNTY3N2U5ODY2MzAyZTRlZmU0MTdjYTEyMDllZTM2MTky
ZDg0Ny4uZmEwN2U4OGZmNTU5YjQyN2FjOTkxNDhhNzQ4YzZkMzFkYjQ2N2Y5ZiAxMDA2NDQKLS0t
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvY29udHJvbGxlcnMvc2luZ2xl
X3Rlc3RfcnVubmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3Rz
L2NvbnRyb2xsZXJzL3NpbmdsZV90ZXN0X3J1bm5lci5weQpAQCAtNzgsNyArNzgsMTAgQEAgY2xh
c3MgU2luZ2xlVGVzdFJ1bm5lcihvYmplY3QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2VsZi5fcG9ydC5leHBlY3RlZF9hdWRpbyhzZWxmLl90ZXN0X25hbWUpKQogCiAgICAg
ZGVmIF9zaG91bGRfZmV0Y2hfZXhwZWN0ZWRfY2hlY2tzdW0oc2VsZik6Ci0gICAgICAgIHJldHVy
biBzZWxmLl9zaG91bGRfcnVuX3BpeGVsX3Rlc3QgYW5kIG5vdCAoc2VsZi5fb3B0aW9ucy5uZXdf
YmFzZWxpbmUgb3Igc2VsZi5fb3B0aW9ucy5yZXNldF9yZXN1bHRzKQorICAgICAgICBpZiBub3Qg
c2VsZi5fc2hvdWxkX3J1bl9waXhlbF90ZXN0OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg
ICAgICAgIHJldHVybiAoc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0cyBhbmQKKyAgICAgICAgICAg
ICAgICBub3QgKHNlbGYuX29wdGlvbnMubmV3X2Jhc2VsaW5lIG9yIHNlbGYuX29wdGlvbnMucmVz
ZXRfcmVzdWx0cykpCiAKICAgICBkZWYgX2RyaXZlcl9pbnB1dChzZWxmKToKICAgICAgICAgIyBU
aGUgaW1hZ2UgaGFzaCBpcyB1c2VkIHRvIGF2b2lkIGRvaW5nIGFuIGltYWdlIGR1bXAgaWYgdGhl
CkBAIC0xNTAsNyArMTUzLDcgQEAgY2xhc3MgU2luZ2xlVGVzdFJ1bm5lcihvYmplY3QpOgogICAg
ICAgICBsb2NhdGlvbiA9IHNlbGYuVkVSU0lPTl9ESVIgaWYgc2VsZi5fb3B0aW9ucy5hZGRfcGxh
dGZvcm1fZXhjZXB0aW9ucyBlbHNlIHNlbGYuVVBEQVRFCiAgICAgICAgIHNlbGYuX3NhdmVfYmFz
ZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0LnRleHQsICcudHh0JywgbG9jYXRpb24pCiAgICAgICAg
IHNlbGYuX3NhdmVfYmFzZWxpbmVfZGF0YShkcml2ZXJfb3V0cHV0LmF1ZGlvLCAnLndhdicsIGxv
Y2F0aW9uKQotICAgICAgICBpZiBzZWxmLl9zaG91bGRfcnVuX3BpeGVsX3Rlc3Q6CisgICAgICAg
IGlmIHNlbGYuX29wdGlvbnMucGl4ZWxfdGVzdHM6CiAgICAgICAgICAgICBzZWxmLl9zYXZlX2Jh
c2VsaW5lX2RhdGEoZHJpdmVyX291dHB1dC5pbWFnZSwgJy5wbmcnLCBsb2NhdGlvbikKIAogICAg
IGRlZiBfc2F2ZV9iYXNlbGluZV9kYXRhKHNlbGYsIGRhdGEsIGV4dGVuc2lvbiwgbG9jYXRpb24p
OgpAQCAtMjE5LDcgKzIyMiw3IEBAIGNsYXNzIFNpbmdsZVRlc3RSdW5uZXIob2JqZWN0KToKIAog
ICAgICAgICBmYWlsdXJlcy5leHRlbmQoc2VsZi5fY29tcGFyZV90ZXh0KGRyaXZlcl9vdXRwdXQu
dGV4dCwgZXhwZWN0ZWRfZHJpdmVyX291dHB1dC50ZXh0KSkKICAgICAgICAgZmFpbHVyZXMuZXh0
ZW5kKHNlbGYuX2NvbXBhcmVfYXVkaW8oZHJpdmVyX291dHB1dC5hdWRpbywgZXhwZWN0ZWRfZHJp
dmVyX291dHB1dC5hdWRpbykpCi0gICAgICAgIGlmIHNlbGYuX3Nob3VsZF9ydW5fcGl4ZWxfdGVz
dDoKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5waXhlbF90ZXN0czoKICAgICAgICAgICAgIGZh
aWx1cmVzLmV4dGVuZChzZWxmLl9jb21wYXJlX2ltYWdlKGRyaXZlcl9vdXRwdXQsIGV4cGVjdGVk
X2RyaXZlcl9vdXRwdXQpKQogICAgICAgICByZXR1cm4gVGVzdFJlc3VsdChzZWxmLl90ZXN0X25h
bWUsIGZhaWx1cmVzLCBkcml2ZXJfb3V0cHV0LnRlc3RfdGltZSwgZHJpdmVyX291dHB1dC5oYXNf
c3RkZXJyKCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rl
c3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0
X3Rlc3RzL2NvbnRyb2xsZXJzL3dvcmtlci5weQppbmRleCBiMTU4M2ZmZjMzN2YwNjc3YWMyMzBi
YjgxNjQyMTNjNjNkMDQ3MzQ5Li5jNDI3MDg0N2IyYmExZjg4ZmViMjgyYjhjYzliMjMwOGRlMzFk
YjdmIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9jb250
cm9sbGVycy93b3JrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVz
dHMvY29udHJvbGxlcnMvd29ya2VyLnB5CkBAIC04OCw4ICs4OCw3IEBAIGNsYXNzIFdvcmtlcihv
YmplY3QpOgogICAgICAgICAgICAgdGVzdF9pbnB1dC5yZWZlcmVuY2VfZmlsZXMgPSBzZWxmLl9w
b3J0LnJlZmVyZW5jZV9maWxlcyh0ZXN0X2lucHV0LnRlc3RfbmFtZSkKICAgICAgICAgaWYgdGVz
dF9pbnB1dC5yZWZlcmVuY2VfZmlsZXM6CiAgICAgICAgICAgICB0ZXN0X2lucHV0LnNob3VsZF9y
dW5fcGl4ZWxfdGVzdCA9IFRydWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRlc3RfaW5w
dXQuc2hvdWxkX3J1bl9waXhlbF90ZXN0ID0gc2VsZi5fcG9ydC5zaG91bGRfcnVuX2FzX3BpeGVs
X3Rlc3QodGVzdF9pbnB1dCkKKyAgICAgICAgdGVzdF9pbnB1dC5zaG91bGRfcnVuX3BpeGVsX3Rl
c3QgPSBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzCiAKICAgICBkZWYgX3J1bl90ZXN0KHNlbGYs
IHRlc3RfaW5wdXQpOgogICAgICAgICBzZWxmLl91cGRhdGVfdGVzdF9pbnB1dCh0ZXN0X2lucHV0
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9i
YXNlLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9iYXNlLnB5
CmluZGV4IGVlZGQxOWRhZDE4NGYzMjhmODlmMmU1NDRlNzAzY2E0OTk4ZDM4MGYuLjYzOTljZGU5
MDM0MmJiYTFlZTQ3OTI1NDM5NzU2MDFlMGYzNmIyMTEgMTAwNzU1Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvYmFzZS5weQorKysgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L2Jhc2UucHkKQEAgLTEyNTYsMzAgKzEyNTYsNiBA
QCBjbGFzcyBQb3J0KG9iamVjdCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN1aXRlLmFyZ3MK
ICAgICAgICAgcmV0dXJuIFtdCiAKLSAgICBkZWYgc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rl
c3RzX3Blcl90ZXN0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmdldF9vcHRpb24oJ3dlYmtpdF90
ZXN0X3J1bm5lcicpOgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIHNl
bGYuX3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpCi0KLSAgICBkZWYg
X3N1cHBvcnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdChzZWxmKToKLSAgICAgICAg
IyBGSVhNRTogYWxsIHBvcnRzIHNob3VsZCBzdXBwb3J0IGl0LgotICAgICAgICByZXR1cm4gRmFs
c2UKLQotICAgIGRlZiBzaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6
Ci0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RzOgotICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCi0gICAgICAgIGlmIG5vdCBzZWxmLnN1cHBvcnRzX3N3aXRjaGluZ19waXhl
bF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgIyBDYW5ub3QgZG8gbW9yZSBmaWx0ZXJp
bmcgd2l0aG91dCB0aGlzLgotICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgaWYgc2Vs
Zi5fb3B0aW9ucy5waXhlbF90ZXN0X2RpcmVjdG9yaWVzOgotICAgICAgICAgICAgcmV0dXJuIGFu
eSh0ZXN0X2lucHV0LnRlc3RfbmFtZS5zdGFydHN3aXRoKGRpcmVjdG9yeSkgZm9yIGRpcmVjdG9y
eSBpbiBzZWxmLl9vcHRpb25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMpCi0gICAgICAgIHJldHVy
biBzZWxmLl9zaG91bGRfcnVuX2FzX3BpeGVsX3Rlc3QodGVzdF9pbnB1dCkKLQotICAgIGRlZiBf
c2hvdWxkX3J1bl9hc19waXhlbF90ZXN0KHNlbGYsIHRlc3RfaW5wdXQpOgotICAgICAgICAjIERl
ZmF1bHQgYmVoYXZpb3IgaXMgdG8gYWxsb3cgYWxsIHRlc3QgdG8gcnVuIGFzIHBpeGVsIHRlc3Rz
IGlmIC0tcGl4ZWwtdGVzdHMgaXMgb24gYW5kCi0gICAgICAgICMgLS1waXhlbC10ZXN0LWRpcmVj
dG9yeSBpcyBub3Qgc3BlY2lmaWVkLgotICAgICAgICByZXR1cm4gVHJ1ZQotCiAKIGNsYXNzIFZp
cnR1YWxUZXN0U3VpdGUob2JqZWN0KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgYmFz
ZSwgYXJncywgdGVzdHM9Tm9uZSk6CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9wb3J0L2RyaXZlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5
b3V0X3Rlc3RzL3BvcnQvZHJpdmVyLnB5CmluZGV4IGZmYzFjMTk0NWQ2ODljY2RiMjBiNDllZmU3
OGMwMWMwOTEyMGQzMzguLjVlNzA2MWJhYjk3NmNhNWRmODhkNTI3ZDRhNmI4ZDYyMmUyMzE1NTgg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJp
dmVyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvZHJp
dmVyLnB5CkBAIC0yOTgsNyArMjk4LDcgQEAgY2xhc3MgRHJpdmVyKG9iamVjdCk6CiAKICAgICAg
ICAgY21kLmV4dGVuZChzZWxmLl9wb3J0LmdldF9vcHRpb24oJ2FkZGl0aW9uYWxfZHJ0X2ZsYWcn
LCBbXSkpCiAKLSAgICAgICAgaWYgcGl4ZWxfdGVzdHMgYW5kIG5vdCBzZWxmLl9wb3J0LnN1cHBv
cnRzX3N3aXRjaGluZ19waXhlbF90ZXN0c19wZXJfdGVzdCgpOgorICAgICAgICBpZiBwaXhlbF90
ZXN0czoKICAgICAgICAgICAgIGNtZC5hcHBlbmQoJy0tcGl4ZWwtdGVzdHMnKQogICAgICAgICBj
bWQuZXh0ZW5kKHBlcl90ZXN0X2FyZ3MpCiAKQEAgLTMzOCwxNCArMzM4LDggQEAgY2xhc3MgRHJp
dmVyKG9iamVjdCk6CiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbic6CiAg
ICAgICAgICAgICAgICAgY29tbWFuZCA9IHBhdGguY3lncGF0aChjb21tYW5kKQogCi0gICAgICAg
IGFzc2VydCBub3QgZHJpdmVyX2lucHV0LmltYWdlX2hhc2ggb3IgZHJpdmVyX2lucHV0LnNob3Vs
ZF9ydW5fcGl4ZWxfdGVzdAotCi0gICAgICAgIGlmIGRyaXZlcl9pbnB1dC5zaG91bGRfcnVuX3Bp
eGVsX3Rlc3Q6Ci0gICAgICAgICAgICBpZiBzZWxmLl9wb3J0LnN1cHBvcnRzX3N3aXRjaGluZ19w
aXhlbF90ZXN0c19wZXJfdGVzdCgpOgotICAgICAgICAgICAgICAgICMgV2UgZGlkIG5vdCBzdGFy
dCB0aGUgZHJpdmVyIHdpdGggLS1waXhlbC10ZXN0cywgaW5zdGVhZCB3ZSBzcGVjaWZ5IGl0IHBl
ciB0ZXN0LgotICAgICAgICAgICAgICAgICMgIiciIGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFu
ZCBmaWVsZHMuCi0gICAgICAgICAgICAgICAgY29tbWFuZCArPSAiJyIgKyAnLS1waXhlbC10ZXN0
JwogICAgICAgICBpZiBkcml2ZXJfaW5wdXQuaW1hZ2VfaGFzaDoKKyAgICAgICAgICAgICMgIici
IGlzIHRoZSBzZXBhcmF0b3Igb2YgY29tbWFuZCBmaWVsZHMuCiAgICAgICAgICAgICBjb21tYW5k
ICs9ICInIiArIGRyaXZlcl9pbnB1dC5pbWFnZV9oYXNoCiAgICAgICAgIHJldHVybiBjb21tYW5k
ICsgIlxuIgogCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0
cy9wb3J0L3F0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcG9ydC9x
dC5weQppbmRleCBiMGQ2NDg1M2M2NTdiMTliZWJkZjljNWFjZGNhNmVlNjc5NjcyMzViLi5hOWEx
ZmY5MWViYTVkN2QxOTRkNDRiOWZmMzVmMjk2NDlhMmMyMTZlIDEwMDY0NAotLS0gYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9wb3J0L3F0LnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvcXQucHkKQEAgLTE4NSwxNCArMTg1LDMgQEAg
Y2xhc3MgUXRQb3J0KFdlYktpdFBvcnQpOgogICAgICAgICAgICAgX2xvZy5lcnJvcignVXNlIGdp
dCB0byBncmFiIHRoZSBhY3R1YWwgZm9udHMgZnJvbSBodHRwOi8vZ2l0b3Jpb3VzLm9yZy9xdHdl
YmtpdC90ZXN0Zm9udHMnKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHJldHVy
biByZXN1bHQKLQotICAgIGRlZiBfc3VwcG9ydHNfc3dpdGNoaW5nX3BpeGVsX3Rlc3RzX3Blcl90
ZXN0KHNlbGYpOgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9zaG91bGRfcnVuX2Fz
X3BpeGVsX3Rlc3Qoc2VsZiwgdGVzdF9pbnB1dCk6Ci0gICAgICAgIHJldHVybiBhbnkodGVzdF9p
bnB1dC50ZXN0X25hbWUuc3RhcnRzd2l0aChkaXJlY3RvcnkpCi0gICAgICAgICAgICAgICAgICAg
Zm9yIGRpcmVjdG9yeSBpbiBRdFBvcnQuX2RlZmF1bHRfcGl4ZWxfdGVzdF9kaXJlY3Rvcmllcygp
KQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfZGVmYXVsdF9waXhlbF90ZXN0X2RpcmVj
dG9yaWVzKCk6Ci0gICAgICAgIHJldHVybiBbJ2NvbXBvc2l0aW5nJ10KZGlmZiAtLWdpdCBhL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weSBiL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3BvcnQvdGVzdC5weQppbmRleCA1NzE0NjYxZmQy
MDM2NzY4MzlkNmM3NmY0NzM1YmVjODEzMmI4OWI4Li45Y2Y5OGRlNzQ4ODU5ODZlZjExODQzNjVj
YzBlYmZkZjI3ODYxYjFkIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91
dF90ZXN0cy9wb3J0L3Rlc3QucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRf
dGVzdHMvcG9ydC90ZXN0LnB5CkBAIC0yMjcsMTQgKzIyNyw2IEBAIGxheWVyIGF0ICgwLDApIHNp
emUgODAweDM0CiAgICAgdGVzdHMuYWRkKCdwZXJmL2Zvby90ZXN0Lmh0bWwnKQogICAgIHRlc3Rz
LmFkZCgncGVyZi9mb28vdGVzdC1yZWYuaHRtbCcpCiAKLSAgICAjIEZvciB0ZXN0aW5nIC0tcGl4
ZWwtdGVzdC1kaXJlY3Rvcmllcy4KLSAgICB0ZXN0cy5hZGQoJ2ZhaWx1cmVzL3VuZXhwZWN0ZWQv
cGl4ZWxkaXIvaW1hZ2VfaW5fcGl4ZWxkaXIuaHRtbCcsCi0gICAgICAgIGFjdHVhbF9pbWFnZT0n
aW1hZ2VfaW5fcGl4ZWxkaXItcG5ndEVYdGNoZWNrc3VtXHgwMGNoZWNrc3VtX2ZhaWwnLAotICAg
ICAgICBleHBlY3RlZF9pbWFnZT0naW1hZ2VfaW5fcGl4ZWxkaXItcG5ndEVYdGNoZWNrc3VtXHgw
MGNoZWNrc3VtLXBuZycpCi0gICAgdGVzdHMuYWRkKCdmYWlsdXJlcy91bmV4cGVjdGVkL2ltYWdl
X25vdF9pbl9waXhlbGRpci5odG1sJywKLSAgICAgICAgYWN0dWFsX2ltYWdlPSdpbWFnZV9ub3Rf
aW5fcGl4ZWxkaXItcG5ndEVYdGNoZWNrc3VtXHgwMGNoZWNrc3VtX2ZhaWwnLAotICAgICAgICBl
eHBlY3RlZF9pbWFnZT0naW1hZ2Vfbm90X2luX3BpeGVsZGlyLXBuZ3RFWHRjaGVja3N1bVx4MDBj
aGVja3N1bS1wbmcnKQotCiAgICAgcmV0dXJuIHRlc3RzCiAKIApAQCAtNTEzLDExICs1MDUsNiBA
QCBjbGFzcyBUZXN0UG9ydChQb3J0KToKICAgICAgICAgICAgIFZpcnR1YWxUZXN0U3VpdGUoJ3Zp
cnR1YWwvc2tpcHBlZCcsICdmYWlsdXJlcy9leHBlY3RlZCcsIFsnLS12aXJ0dWFsLWFyZzInXSks
CiAgICAgICAgIF0KIAotICAgIGRlZiBzdXBwb3J0c19zd2l0Y2hpbmdfcGl4ZWxfdGVzdHNfcGVy
X3Rlc3Qoc2VsZik6Ci0gICAgICAgICMgTGV0IGl0IHRydWUgc28gd2UgY2FuIHRlc3QgdGhlIC0t
cGl4ZWwtdGVzdC1kaXJlY3Rvcnkgb3B0aW9uLgotICAgICAgICByZXR1cm4gVHJ1ZQotCi0KIGNs
YXNzIFRlc3REcml2ZXIoRHJpdmVyKToKICAgICAiIiJUZXN0L0R1bW15IGltcGxlbWVudGF0aW9u
IG9mIHRoZSBEdW1wUmVuZGVyVHJlZSBpbnRlcmZhY2UuIiIiCiAKZGlmZiAtLWdpdCBhL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzLnB5CmluZGV4
IDNkMWU4NzliZDJmOTE2NTM2ODgxMjY2NzI3MzA5OTVlNjYzMWY1ZDkuLjJiM2M3ZjkzY2JiYTY2
NThkYjk5N2NhNGQzYjFmYWQ3OTgyYzY1Y2YgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvbGF5b3V0X3Rlc3RzL3J1bl93ZWJraXRfdGVzdHMucHkKKysrIGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVuX3dlYmtpdF90ZXN0cy5weQpAQCAtMTgyLDIyICsx
ODIsNiBAQCBkZWYgX3NldF91cF9kZXJpdmVkX29wdGlvbnMocG9ydCwgb3B0aW9ucyk6CiAgICAg
ICAgIG9wdGlvbnMucmVzZXRfcmVzdWx0cyA9IFRydWUKICAgICAgICAgb3B0aW9ucy5hZGRfcGxh
dGZvcm1fZXhjZXB0aW9ucyA9IFRydWUKIAotICAgIGlmIG9wdGlvbnMucGl4ZWxfdGVzdF9kaXJl
Y3RvcmllczoKLSAgICAgICAgb3B0aW9ucy5waXhlbF90ZXN0cyA9IFRydWUKLSAgICAgICAgdmFy
aWZpZWRfZGlycyA9IHNldCgpCi0gICAgICAgIHBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMgPSBvcHRp
b25zLnBpeGVsX3Rlc3RfZGlyZWN0b3JpZXMKLSAgICAgICAgZm9yIGRpcmVjdG9yeSBpbiBwaXhl
bF90ZXN0X2RpcmVjdG9yaWVzOgotICAgICAgICAgICAgIyBGSVhNRTogd2Ugc2hvdWxkIHN1cHBv
cnQgc3BlY2lmeWluZyB0aGUgZGlyZWN0b3JpZXMgYWxsIHRoZSB3YXlzIHdlIHN1cHBvcnQgaXQg
Zm9yIGFkZGl0aW9uYWwKLSAgICAgICAgICAgICMgYXJndW1lbnRzIHNwZWNpZnlpbmcgd2hpY2gg
dGVzdHMgYW5kIGRpcmVjdG9yaWVzIHRvIHJ1bi4gV2Ugc2hvdWxkIGFsc28gbW92ZSB0aGUgbG9n
aWMgZm9yIHRoYXQKLSAgICAgICAgICAgICMgdG8gUG9ydC4KLSAgICAgICAgICAgIGZpbGVzeXN0
ZW0gPSBwb3J0Lmhvc3QuZmlsZXN5c3RlbQotICAgICAgICAgICAgaWYgbm90IGZpbGVzeXN0ZW0u
aXNkaXIoZmlsZXN5c3RlbS5qb2luKHBvcnQubGF5b3V0X3Rlc3RzX2RpcigpLCBkaXJlY3Rvcnkp
KToKLSAgICAgICAgICAgICAgICB3YXJuaW5ncy5hcHBlbmQoIiclcycgd2FzIHBhc3NlZCB0byAt
LXBpeGVsLXRlc3QtZGlyZWN0b3JpZXMsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGRpcmVj
dG9yeSIgJSBzdHIoZGlyZWN0b3J5KSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAg
ICAgdmFyaWZpZWRfZGlycy5hZGQoZGlyZWN0b3J5KQotCi0gICAgICAgIG9wdGlvbnMucGl4ZWxf
dGVzdF9kaXJlY3RvcmllcyA9IGxpc3QodmFyaWZpZWRfZGlycykKLQogICAgIHJldHVybiB3YXJu
aW5ncwogCiAKQEAgLTMyMywxNSArMzA3LDYgQEAgZGVmIHBhcnNlX2FyZ3MoYXJncz1Ob25lKToK
ICAgICAgICAgICAgIGRlc3Q9Im5ld190ZXN0X3Jlc3VsdHMiLCBkZWZhdWx0PVRydWUsCiAgICAg
ICAgICAgICBoZWxwPSJEb24ndCBjcmVhdGUgbmV3IGJhc2VsaW5lcyB3aGVuIG5vIGV4cGVjdGVk
IHJlc3VsdHMgZXhpc3QiKSwKIAotICAgICAgICAjRklYTUU6IHdlIHNob3VsZCBzdXBwb3J0IGEg
Y29tbWEgc2VwYXJhdGVkIGxpc3Qgd2l0aCAtLXBpeGVsLXRlc3QtZGlyZWN0b3J5IGFzIHdlbGwu
Ci0gICAgICAgIG9wdHBhcnNlLm1ha2Vfb3B0aW9uKCItLXBpeGVsLXRlc3QtZGlyZWN0b3J5Iiwg
YWN0aW9uPSJhcHBlbmQiLCBkZWZhdWx0PVtdLCBkZXN0PSJwaXhlbF90ZXN0X2RpcmVjdG9yaWVz
IiwKLSAgICAgICAgICAgIGhlbHA9IkEgZGlyZWN0b3J5IHdoZXJlIGl0IGlzIGFsbG93ZWQgdG8g
ZXhlY3V0ZSB0ZXN0cyBhcyBwaXhlbCB0ZXN0cy4gIgotICAgICAgICAgICAgICAgICAiU3BlY2lm
eSBtdWx0aXBsZSB0aW1lcyB0byBhZGQgbXVsdGlwbGUgZGlyZWN0b3JpZXMuICIKLSAgICAgICAg
ICAgICAgICAgIlRoaXMgb3B0aW9uIGltcGxpZXMgLS1waXhlbC10ZXN0cy4gSWYgc3BlY2lmaWVk
LCBvbmx5IHRob3NlIHRlc3RzICIKLSAgICAgICAgICAgICAgICAgIndpbGwgYmUgZXhlY3V0ZWQg
YXMgcGl4ZWwgdGVzdHMgdGhhdCBhcmUgbG9jYXRlZCBpbiBvbmUgb2YgdGhlICIKLSAgICAgICAg
ICAgICAgICAgImRpcmVjdG9yaWVzIGVudW1lcmF0ZWQgd2l0aCB0aGUgb3B0aW9uLiBTb21lIHBv
cnRzIG1heSBpZ25vcmUgdGhpcyAiCi0gICAgICAgICAgICAgICAgICJvcHRpb24gd2hpbGUgb3Ro
ZXJzIGNhbiBoYXZlIGEgZGVmYXVsdCB2YWx1ZSB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGhlcmUu
IiksCi0KICAgICAgICAgb3B0cGFyc2UubWFrZV9vcHRpb24oIi0tc2tpcC1mYWlsaW5nLXRlc3Rz
IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwKICAgICAgICAgICAgIGRlZmF1bHQ9RmFsc2UsIGhlbHA9
IlNraXAgdGVzdHMgdGhhdCBhcmUgZXhwZWN0ZWQgdG8gZmFpbC4gIgogICAgICAgICAgICAgICAg
ICAiTm90ZTogV2hlbiB1c2luZyB0aGlzIG9wdGlvbiwgeW91IG1pZ2h0IG1pc3MgbmV3IGNyYXNo
ZXMgIgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9sYXlvdXRfdGVzdHMvcnVu
X3dlYmtpdF90ZXN0c19pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQppbmRleCA2
ZTg1OTc3YjJlMGVkMDgzNjAxOWNlYzNkNWM1MmY0MGNjNTQ3YmFmLi4wMzA2NjE5NzVkNWY3Nzc5
ZmUwNjBkODE2YjMxYjZlYjI5ZDUxYWNkIDEwMDc1NQotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2ludGVncmF0aW9udGVzdC5weQorKysg
Yi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2xheW91dF90ZXN0cy9ydW5fd2Via2l0X3Rlc3RzX2lu
dGVncmF0aW9udGVzdC5weQpAQCAtMTc5LDcgKzE3OSw3IEBAIGRlZiBnZXRfdGVzdHNfcnVuKGV4
dHJhX2FyZ3M9Tm9uZSwgdGVzdHNfaW5jbHVkZWQ9RmFsc2UsIGZsYXR0ZW5fYmF0Y2hlcz1GYWxz
ZSwKIAogIyBVcGRhdGUgdGhpcyBtYWdpYyBudW1iZXIgaWYgeW91IGFkZCBhbiB1bmV4cGVjdGVk
IHRlc3QgdG8gd2Via2l0cHkubGF5b3V0X3Rlc3RzLnBvcnQudGVzdAogIyBGSVhNRTogSXQncyBu
aWNlIHRvIGhhdmUgYSByb3V0aW5lIGluIHBvcnQvdGVzdC5weSB0aGF0IHJldHVybnMgdGhpcyBu
dW1iZXIuCi11bmV4cGVjdGVkX3Rlc3RzX2NvdW50ID0gMTQKK3VuZXhwZWN0ZWRfdGVzdHNfY291
bnQgPSAxMgogCiAKIGNsYXNzIFN0cmVhbVRlc3RpbmdNaXhpbihvYmplY3QpOgpAQCAtNDk2LDcg
KzQ5Niw3IEBAIGNsYXNzIE1haW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlLCBTdHJlYW1UZXN0aW5n
TWl4aW4pOgogCiAgICAgZGVmIHRlc3RfcnVuX3NpbmdseV9hY3R1YWxseV9ydW5zX3Rlc3RzKHNl
bGYpOgogICAgICAgICByZXMsIF8sIF8sIF8gPSBsb2dnaW5nX3J1bihbJy0tcnVuLXNpbmdseScs
ICdmYWlsdXJlcy91bmV4cGVjdGVkJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywg
MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywgOCkKIAogICAgIGRlZiB0ZXN0X3Np
bmdsZV9maWxlKHNlbGYpOgogICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgY29uc2lkZXIgcmVw
bGFjaW5nIG1vcmUgb2YgdGhlIGdldF90ZXN0c19ydW4oKS1zdHlsZSB0ZXN0cwpAQCAtNTY4LDIw
ICs1NjgsNiBAQCBjbGFzcyBNYWluVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgU3RyZWFtVGVzdGlu
Z01peGluKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGpzb25fc3RyaW5nLmZpbmQoJyJudW1f
Zmxha3kiOjAnKSAhPSAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGpzb25fc3RyaW5nLmZp
bmQoJyJudW1fbWlzc2luZyI6MScpICE9IC0xKQogCi0gICAgZGVmIHRlc3RfcGl4ZWxfdGVzdF9k
aXJlY3RvcmllcyhzZWxmKToKLSAgICAgICAgaG9zdCA9IE1vY2tIb3N0KCkKLQotICAgICAgICAi
IiJCb3RoIHRlc3RzIGhhdmUgZmFsaW5nIGNoZWNrc3VtLiBXZSBpbmNsdWRlIG9ubHkgdGhlIGZp
cnN0IGluIHBpeGVsIHRlc3RzIHNvIG9ubHkgdGhhdCBzaG91bGQgZmFpbC4iIiIKLSAgICAgICAg
YXJncyA9IFsnLS1waXhlbC10ZXN0cycsICctLXBpeGVsLXRlc3QtZGlyZWN0b3J5JywgJ2ZhaWx1
cmVzL3VuZXhwZWN0ZWQvcGl4ZWxkaXInLAotICAgICAgICAgICAgICAgICdmYWlsdXJlcy91bmV4
cGVjdGVkL3BpeGVsZGlyL2ltYWdlX2luX3BpeGVsZGlyLmh0bWwnLAotICAgICAgICAgICAgICAg
ICdmYWlsdXJlcy91bmV4cGVjdGVkL2ltYWdlX25vdF9pbl9waXhlbGRpci5odG1sJ10KLSAgICAg
ICAgcmVzLCBvdXQsIGVyciwgXyA9IGxvZ2dpbmdfcnVuKGV4dHJhX2FyZ3M9YXJncywgaG9zdD1o
b3N0LCByZWNvcmRfcmVzdWx0cz1UcnVlLCB0ZXN0c19pbmNsdWRlZD1UcnVlKQotCi0gICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWxzKHJlcywgMSkKLSAgICAgICAgZXhwZWN0ZWRfdG9rZW4gPSAnInVu
ZXhwZWN0ZWQiOnsicGl4ZWxkaXIiOnsiaW1hZ2VfaW5fcGl4ZWxkaXIuaHRtbCI6eyJleHBlY3Rl
ZCI6IlBBU1MiLCJhY3R1YWwiOiJJTUFHRSInCi0gICAgICAgIGpzb25fc3RyaW5nID0gaG9zdC5m
aWxlc3lzdGVtLnJlYWRfdGV4dF9maWxlKCcvdG1wL2xheW91dC10ZXN0LXJlc3VsdHMvZnVsbF9y
ZXN1bHRzLmpzb24nKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoanNvbl9zdHJpbmcuZmluZChl
eHBlY3RlZF90b2tlbikgIT0gLTEpCi0KICAgICBkZWYgdGVzdF9taXNzaW5nX2FuZF91bmV4cGVj
dGVkX3Jlc3VsdHNfd2l0aF9jdXN0b21fZXhpdF9jb2RlKHNlbGYpOgogICAgICAgICAjIFRlc3Qg
dGhhdCB3ZSB1cGRhdGUgZXhwZWN0YXRpb25zIGluIHBsYWNlLiBJZiB0aGUgZXhwZWN0YXRpb24K
ICAgICAgICAgIyBpcyBtaXNzaW5nLCB1cGRhdGUgdGhlIGV4cGVjdGVkIGdlbmVyaWMgbG9jYXRp
b24uCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGQwMjMy
OTkyNzMxZDFiYzk3MTI2OGZjMzkzMWY0YjcwYWIzNjdhYzcuLjA3Nzc3NjVmODlmYmU2OWY1YjAw
MGU1NDA3ZjNjMzFjOWI2ZjU3OTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIFRlc3RDb250cm9sbGVyJiBUZXN0Q29udHJvbGxl
cjo6c2hhcmVkKCkKIH0KIAogVGVzdENvbnRyb2xsZXI6OlRlc3RDb250cm9sbGVyKGludCBhcmdj
LCBjb25zdCBjaGFyKiBhcmd2W10pCi0gICAgOiBtX2R1bXBQaXhlbHNGb3JBbGxUZXN0cyhmYWxz
ZSkKKyAgICA6IG1fZHVtcFBpeGVscyhmYWxzZSkKICAgICAsIG1fdmVyYm9zZShmYWxzZSkKICAg
ICAsIG1fcHJpbnRTZXBhcmF0b3JzKGZhbHNlKQogICAgICwgbV91c2luZ1NlcnZlck1vZGUoZmFs
c2UpCkBAIC0yNjgsNyArMjY4LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6aW5pdGlhbGl6ZShp
bnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFy
Z3VtZW50ID09ICItLXBpeGVsLXRlc3RzIikgewotICAgICAgICAgICAgbV9kdW1wUGl4ZWxzRm9y
QWxsVGVzdHMgPSB0cnVlOworICAgICAgICAgICAgbV9kdW1wUGl4ZWxzID0gdHJ1ZTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChhcmd1bWVudCA9PSAiLS12
ZXJib3NlIikgewpAQCAtNTE3LDMxICs1MTcsMTggQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cnVu
VGVzdChjb25zdCBjaGFyKiB0ZXN0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgYm9vbCBkdW1wUGl4ZWxzVGVzdCA9IG1fZHVtcFBpeGVsc0ZvckFsbFRlc3RzOwotICAgIHN0
ZDo6c3RyaW5nIGNvbW1hbmQodGVzdCk7Ci0gICAgc3RkOjpzdHJpbmcgcGF0aE9yVVJMID0gY29t
bWFuZDsKKyAgICBzdGQ6OnN0cmluZyBwYXRoT3JVUkwgPSB0ZXN0OwogICAgIHN0ZDo6c3RyaW5n
IGV4cGVjdGVkUGl4ZWxIYXNoOwotICAgIHNpemVfdCBmaXJzdFNlcGFyYXRvclBvcyA9IGNvbW1h
bmQuZmluZF9maXJzdF9vZignXCcnKTsKLSAgICBzaXplX3Qgc2Vjb25kU2VwYXJhdG9yUG9zID0g
Y29tbWFuZC5maW5kX2ZpcnN0X29mKCdcJycsIGZpcnN0U2VwYXJhdG9yUG9zICsgMSk7Ci0gICAg
aWYgKGZpcnN0U2VwYXJhdG9yUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKSB7Ci0gICAgICAgIHBh
dGhPclVSTCA9IHN0ZDo6c3RyaW5nKGNvbW1hbmQsIDAsIGZpcnN0U2VwYXJhdG9yUG9zKTsKLSAg
ICAgICAgc2l6ZV90IHBpeGVsSGFzaFBvcyA9IGZpcnN0U2VwYXJhdG9yUG9zICsgMTsKLQotICAg
ICAgICAvLyBOUldUIHBhc3NlcyAtLXBpeGVsLXRlc3QgaWYgd2Ugc2hvdWxkIGR1bXAgcGl4ZWxz
IGZvciB0aGUgdGVzdC4KLSAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcgZXhwZWN0ZWRQaXhlbFRl
c3RBcmcoIi0tcGl4ZWwtdGVzdCIpOwotICAgICAgICBzdGQ6OnN0cmluZyBhcmdUZXN0ID0gc3Rk
OjpzdHJpbmcoY29tbWFuZCwgZmlyc3RTZXBhcmF0b3JQb3MgKyAxLCBleHBlY3RlZFBpeGVsVGVz
dEFyZy5zaXplKCkpOwotICAgICAgICBpZiAoYXJnVGVzdCA9PSBleHBlY3RlZFBpeGVsVGVzdEFy
ZykgewotICAgICAgICAgICAgZHVtcFBpeGVsc1Rlc3QgPSB0cnVlOwotICAgICAgICAgICAgcGl4
ZWxIYXNoUG9zID0gc2Vjb25kU2VwYXJhdG9yUG9zID09IHN0ZDo6c3RyaW5nOjpucG9zID8gc3Rk
OjpzdHJpbmc6Om5wb3MgOiBzZWNvbmRTZXBhcmF0b3JQb3MgKyAxOwotICAgICAgICB9Ci0gICAg
ICAgIGlmIChwaXhlbEhhc2hQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgcGl4ZWxIYXNoUG9z
IDwgY29tbWFuZC5zaXplKCkpCi0gICAgICAgICAgICBleHBlY3RlZFBpeGVsSGFzaCA9IHN0ZDo6
c3RyaW5nKGNvbW1hbmQsIHBpeGVsSGFzaFBvcyk7CisgICAgc2l6ZV90IHNlcGFyYXRvclBvcyA9
IHBhdGhPclVSTC5maW5kKCInIik7CisgICAgaWYgKHNlcGFyYXRvclBvcyAhPSBzdGQ6OnN0cmlu
Zzo6bnBvcykgeworICAgICAgICBwYXRoT3JVUkwgPSBzdGQ6OnN0cmluZyhzdGQ6OnN0cmluZyh0
ZXN0KSwgMCwgc2VwYXJhdG9yUG9zKTsKKyAgICAgICAgZXhwZWN0ZWRQaXhlbEhhc2ggPSBzdGQ6
OnN0cmluZyhzdGQ6OnN0cmluZyh0ZXN0KSwgc2VwYXJhdG9yUG9zICsgMSk7CiAgICAgfQogCiAg
ICAgbV9zdGF0ZSA9IFJ1bm5pbmdUZXN0OwogCiAgICAgbV9jdXJyZW50SW52b2NhdGlvbiA9IGFk
b3B0UHRyKG5ldyBUZXN0SW52b2NhdGlvbihwYXRoT3JVUkwpKTsKLSAgICBpZiAoZHVtcFBpeGVs
c1Rlc3QpCisgICAgaWYgKG1fZHVtcFBpeGVscykKICAgICAgICAgbV9jdXJyZW50SW52b2NhdGlv
bi0+c2V0SXNQaXhlbFRlc3QoZXhwZWN0ZWRQaXhlbEhhc2gpOwogCiAgICAgbV9jdXJyZW50SW52
b2NhdGlvbi0+aW52b2tlKCk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgK
aW5kZXggYTk5ZTE2ZWE4NzAyN2MzNGYwN2I4OTYyYjA5OGMyMzM0ZDk0MjFiZC4uMjAxODhhZDU1
NWQ0YjdlOTFmOTRkODMzZmZmZDUzYjdmMTA5NjIyNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuaApAQCAtMTA0LDcgKzEwNCw3IEBAIHByaXZhdGU6CiAKICAgICBPd25Q
dHI8VGVzdEludm9jYXRpb24+IG1fY3VycmVudEludm9jYXRpb247CiAKLSAgICBib29sIG1fZHVt
cFBpeGVsc0ZvckFsbFRlc3RzOworICAgIGJvb2wgbV9kdW1wUGl4ZWxzOwogICAgIGJvb2wgbV92
ZXJib3NlOwogICAgIGJvb2wgbV9wcmludFNlcGFyYXRvcnM7CiAgICAgYm9vbCBtX3VzaW5nU2Vy
dmVyTW9kZTsK
</data>
<flag name="review"
          id="164267"
          type_id="1"
          status="+"
          setter="zherczeg"
    />
          </attachment>
      

    </bug>

</bugzilla>