<?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>34992</bug_id>
          
          <creation_ts>2010-02-16 13:54:19 -0800</creation_ts>
          <short_desc>Add async bindings for Worker access to DB</short_desc>
          <delta_ts>2010-05-15 09:37:16 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>38399</dependson>
    
    <dependson>38623</dependson>
          <blocked>34990</blocked>
    
    <blocked>36847</blocked>
    
    <blocked>39145</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric U.">ericu</reporter>
          <assigned_to name="Eric U.">ericu</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>dumi</cc>
    
    <cc>ericu</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190731</commentid>
    <comment_count>0</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-02-16 13:54:19 -0800</bug_when>
    <thetext>Umbrella bug 34990 depends on this.  This bug is just for adding the bindings and the last bits of code to support them.  This should include at least one proof-of-concept test; I&apos;ll log a separate bug for the rest of the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203747</commentid>
    <comment_count>1</comment_count>
      <attachid>51583</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-03-24 19:55:29 -0700</bug_when>
    <thetext>Created attachment 51583
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203769</commentid>
    <comment_count>2</comment_count>
      <attachid>51583</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-24 20:57:38 -0700</bug_when>
    <thetext>Comment on attachment 51583
Patch

&gt; Index: LayoutTests/storage/change-version-handle-reuse.js
&gt; ===================================================================
&gt; +        db = openDatabase(&quot;ChangeVersion&quot;, &quot;&quot;, &quot;Test that changing a database version doesn\&apos;t kill our handle to it&quot;, 1);

minor: probably don&apos;t need the \ in &quot;doesn\&apos;t&quot;.

&gt; +        setTimeout(runTest2, 1000);

why do you want to wait 1s here? if you want to make sure the other transaction is done before calling runTest2(), you can call runTest2() in the transaction&apos;s success callback.

&gt; Index: LayoutTests/storage/execute-sql-args.js
&gt; ===================================================================
&gt; +function runTest()
&gt; +{
&gt; +
&gt; +    var db = openDatabase(&quot;ExecuteSQLArgsTest&quot;, &quot;1.0&quot;, &quot;Test of handling of the arguments to SQLTransaction.executeSql&quot;, 1);
&gt; +    db.transaction(runTransactionTests);
&gt; +}

minor: unnecessary empty line.

&gt; Index: LayoutTests/storage/resources/database-worker-controller.js
&gt; ===================================================================
&gt; Index: LayoutTests/storage/resources/database-worker.js
&gt; ===================================================================

4-space indentation in these files.
also, not sure if the &quot;no {} around 1-line if-statements&quot; rule applies to for-loops too, might be worth asking somebody.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203776</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-03-24 21:21:01 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; Index: LayoutTests/storage/resources/database-worker.js

&gt; also, not sure if the &quot;no {} around 1-line if-statements&quot; rule applies to
&gt; for-loops too, might be worth asking somebody.

It applies to for loops but it isn&apos;t enforced in js files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204150</commentid>
    <comment_count>4</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-03-25 11:11:55 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 51583 [details])
&gt; &gt; Index: LayoutTests/storage/change-version-handle-reuse.js
&gt; &gt; ===================================================================
&gt; &gt; +        db = openDatabase(&quot;ChangeVersion&quot;, &quot;&quot;, &quot;Test that changing a database version doesn\&apos;t kill our handle to it&quot;, 1);
&gt; 
&gt; minor: probably don&apos;t need the \ in &quot;doesn\&apos;t&quot;.

Fixed.

&gt; &gt; +        setTimeout(runTest2, 1000);
&gt; 
&gt; why do you want to wait 1s here? if you want to make sure the other transaction
&gt; is done before calling runTest2(), you can call runTest2() in the transaction&apos;s
&gt; success callback.

Done.  I don&apos;t know why that was there; it predates this refactoring.  I see that the HTML also refers to a reload, which isn&apos;t in this test, so I suspect that&apos;s kruft left over from copy+paste.  I&apos;m also removing that mention of the reload.

&gt; &gt; Index: LayoutTests/storage/execute-sql-args.js
&gt; &gt; ===================================================================
&gt; &gt; +function runTest()
&gt; &gt; +{
&gt; &gt; +
&gt; &gt; +    var db = openDatabase(&quot;ExecuteSQLArgsTest&quot;, &quot;1.0&quot;, &quot;Test of handling of the arguments to SQLTransaction.executeSql&quot;, 1);
&gt; &gt; +    db.transaction(runTransactionTests);
&gt; &gt; +}
&gt; 
&gt; minor: unnecessary empty line.

Removed.

&gt; &gt; Index: LayoutTests/storage/resources/database-worker-controller.js
&gt; &gt; ===================================================================
&gt; &gt; Index: LayoutTests/storage/resources/database-worker.js
&gt; &gt; ===================================================================
&gt; 
&gt; 4-space indentation in these files.

Fixed.

&gt; also, not sure if the &quot;no {} around 1-line if-statements&quot; rule applies to
&gt; for-loops too, might be worth asking somebody.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204154</commentid>
    <comment_count>5</comment_count>
      <attachid>51662</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-03-25 11:17:07 -0700</bug_when>
    <thetext>Created attachment 51662
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206659</commentid>
    <comment_count>6</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-03-31 12:44:22 -0700</bug_when>
    <thetext>Ping: Any JSC folks have time to take a look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210844</commentid>
    <comment_count>7</comment_count>
      <attachid>51662</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-09 12:22:47 -0700</bug_when>
    <thetext>Comment on attachment 51662
Patch

I&apos;m not exactly JCS expert but since it collects dust I&apos;m going to try...

&gt; Index: WebCore/ChangeLog
&gt; +        Add async bindings for Worker access to DB

I&apos;d say &quot;Add bindings for async DB API in Workers&quot;. The bindings themselves are not async.

&gt; Index: WebCore/bindings/js/JSWorkerContextCustom.cpp
&gt; +JSValue JSWorkerContext::openDatabase(ExecState* exec, const ArgList&amp; args) 
&gt; +{ 
&gt; +    ExceptionCode ec = 0; 

I understand this is basically a copy from JSDOMWindowCustom, but I&apos;d move ExceptionCode declaration close to the line that actually uses it.

&gt; Index: LayoutTests/ChangeLog
&gt; +        * storage/execute-sql-args.js: This is the extracted shared core of the test.
&gt; +        (throwOnToStringObject.toString):
&gt; +        (var):
&gt; +        ():

It might be better to just remove the lines describing actual changes inside test files, unless you want to add some additional info.

&gt; Index: LayoutTests/storage/change-version-handle-reuse.html
&gt;  {
&gt;      if (window.layoutTestController) {
&gt; +        layoutTestController.clearAllDatabases();

It seems existing db tests are gaining the new call to clearAllDatabases() before start. It may change slightly what they test, at first look it makes them run in a more &apos;sterile&apos; environment. I wonder if it is necessary. 

&gt; Index: LayoutTests/storage/change-version-handle-reuse.js
&gt; +function runTest()
&gt; +{
&gt; +    try {
&gt; +        db = openDatabase(&quot;ChangeVersion&quot;, &quot;&quot;, &quot;Test that changing a database version doesn&apos;t kill our handle to it&quot;, 1);

What is going to happen when multi-process test harness runs those tests? One process could run regular test, while another will run worker test - both of which will access the same database. Should we use different names for databases in workers?

A general note on the tests to consider: As I understand the new worker tests can be located either in LayoutTests/Storage or in LayoutTests/fast/workers/storage (and refer back for .js files). It might be slightly better to move the worker test files to the fast/workers/storage simply because workers tests are skipped already on many platforms that do not enable workers, and at least one port (chromium) has completely different handling for workers tests for now so it&apos;d be more convenient to add new tests in the directories that already are treated in a special way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210849</commentid>
    <comment_count>8</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-09 12:33:04 -0700</bug_when>
    <thetext>Thanks for the review.

I&apos;ll respond to [or just fix] all the other comments, but first I wanted to make a comment and ask for a clarification.

&gt; &gt; Index: LayoutTests/storage/change-version-handle-reuse.html
&gt; &gt;  {
&gt; &gt;      if (window.layoutTestController) {
&gt; &gt; +        layoutTestController.clearAllDatabases();
&gt; 
&gt; It seems existing db tests are gaining the new call to clearAllDatabases()
&gt; before start. It may change slightly what they test, at first look it makes
&gt; them run in a more &apos;sterile&apos; environment. I wonder if it is necessary. 

I added that to clean things up a bit.  Looking at the tests, there was little protection against flakiness.  Many tests could leave a random amount of data lying around, enough to make an openDatabase call in another test go over quota, depending on implementation and luck.  I think we should add that call to all database tests unless we have a really good reason not to start clean.  This goes double for the multi-process test harness.
  
&gt; A general note on the tests to consider: As I understand the new worker tests
&gt; can be located either in LayoutTests/Storage or in
&gt; LayoutTests/fast/workers/storage (and refer back for .js files). It might be
&gt; slightly better to move the worker test files to the fast/workers/storage
&gt; simply because workers tests are skipped already on many platforms that do not
&gt; enable workers, and at least one port (chromium) has completely different
&gt; handling for workers tests for now so it&apos;d be more convenient to add new tests
&gt; in the directories that already are treated in a special way.

I put the new tests in storage to let them share code easily with the database tests.  I could of course copy the tests over to fast/workers/storage, but then we end up with two copies, which may drift apart.  LayoutTests/fast/workers/storage could load resources out of &quot;../../../storage&quot;; would that be acceptable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>211813</commentid>
    <comment_count>9</comment_count>
      <attachid>53213</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-12 19:40:03 -0700</bug_when>
    <thetext>Created attachment 53213
Fixed changelogs, moved worker tests, made database names unique.

I believe I&apos;ve addressed all your concerns; I left in the database cleanup at the beginning of each test, as I believe we should have that in every database test.  I&apos;ll get to the others shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212119</commentid>
    <comment_count>10</comment_count>
      <attachid>53290</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-13 15:45:32 -0700</bug_when>
    <thetext>Created attachment 53290
The previous patch was missing the WebCore changes.

The previous patch had only the LayoutTests changes, without the WebCore changes to make use of them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212180</commentid>
    <comment_count>11</comment_count>
      <attachid>53290</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-13 17:42:07 -0700</bug_when>
    <thetext>Comment on attachment 53290
The previous patch was missing the WebCore changes.


Looks great. I have only one question left:

(In reply to comment #8)
&gt; &gt; &gt; Index: LayoutTests/storage/change-version-handle-reuse.html
&gt; &gt; &gt;  {
&gt; &gt; &gt;      if (window.layoutTestController) {
&gt; &gt; &gt; +        layoutTestController.clearAllDatabases();
&gt; &gt; 
&gt; &gt; It seems existing db tests are gaining the new call to clearAllDatabases()
&gt; &gt; before start. It may change slightly what they test, at first look it makes
&gt; &gt; them run in a more &apos;sterile&apos; environment. I wonder if it is necessary. 
&gt; 
&gt; I added that to clean things up a bit.  Looking at the tests, there was little
&gt; protection against flakiness.  Many tests could leave a random amount of data
&gt; lying around, enough to make an openDatabase call in another test go over
&gt; quota, depending on implementation and luck.  I think we should add that call
&gt; to all database tests unless we have a really good reason not to start clean. 
&gt; This goes double for the multi-process test harness.

I hear you, but at the same time two things worry me:
- we might end up with the tests only verifying creating a new database, never opening an existing one. It is probably not ideal. Perhaps it should be only added to tests that can generate big databases over time?
- in case of new-run-webkit-tests the clearAllDatabases() can come in during another test&apos;s running. I&apos;m not sure I know all the details of the new script, but I don&apos;t think we have separate local store dirs for multiple DRTs running...

r- to clarify if the clearAllDatabases does not interfere with new-run-webkit-tests, please feel free to flip back if it does not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212186</commentid>
    <comment_count>12</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-13 17:59:52 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 53290 [details])
&gt; 
&gt; Looks great. I have only one question left:
&gt; 
&gt; (In reply to comment #8)
&gt; &gt; &gt; &gt; Index: LayoutTests/storage/change-version-handle-reuse.html
&gt; &gt; &gt; &gt;  {
&gt; &gt; &gt; &gt;      if (window.layoutTestController) {
&gt; &gt; &gt; &gt; +        layoutTestController.clearAllDatabases();
&gt; &gt; &gt; 
&gt; &gt; &gt; It seems existing db tests are gaining the new call to clearAllDatabases()
&gt; &gt; &gt; before start. It may change slightly what they test, at first look it makes
&gt; &gt; &gt; them run in a more &apos;sterile&apos; environment. I wonder if it is necessary. 
&gt; &gt; 
&gt; &gt; I added that to clean things up a bit.  Looking at the tests, there was little
&gt; &gt; protection against flakiness.  Many tests could leave a random amount of data
&gt; &gt; lying around, enough to make an openDatabase call in another test go over
&gt; &gt; quota, depending on implementation and luck.  I think we should add that call
&gt; &gt; to all database tests unless we have a really good reason not to start clean. 
&gt; &gt; This goes double for the multi-process test harness.
&gt; 
&gt; I hear you, but at the same time two things worry me:
&gt; - we might end up with the tests only verifying creating a new database, never
&gt; opening an existing one. It is probably not ideal. Perhaps it should be only
&gt; added to tests that can generate big databases over time?

We can always add tests that are specifically designed to re-open databases.  At the moment each test uses a unique database name, so clearing at the beginning of each test doesn&apos;t change that.

&gt; - in case of new-run-webkit-tests the clearAllDatabases() can come in during
&gt; another test&apos;s running. I&apos;m not sure I know all the details of the new script,
&gt; but I don&apos;t think we have separate local store dirs for multiple DRTs
&gt; running...

Hmm...you&apos;re right about that.  There&apos;s no guarantee that it&apos;s not going to delete a DB another test is using; it&apos;d probably be a rare race that would lead to hard-to-find flakiness.  I put that in back before new-run-webkit-tests existed.  I&apos;ll take the call out for now, but we really need a solution to this, given that the tests as currently written will occasionally fail for the opposite reason: using too much quota between them where one at a time was just fine.  A call to clear out each test&apos;s databases at the end of the test, along with making sure nobody goes over quota, would let us handle everything except testing over-quota behavior.  If a test fails or crashes before cleanup, that will leave a mess, but at least we&apos;ll know what caused the rest of the failures.

I&apos;ll leave that for another CL, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212188</commentid>
    <comment_count>13</comment_count>
      <attachid>53304</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-13 18:19:36 -0700</bug_when>
    <thetext>Created attachment 53304
Removed calls to clearAllDatabases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213005</commentid>
    <comment_count>14</comment_count>
      <attachid>53304</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-15 13:33:51 -0700</bug_when>
    <thetext>Comment on attachment 53304
Removed calls to clearAllDatabases

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213124</commentid>
    <comment_count>15</comment_count>
      <attachid>53304</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-15 17:10:59 -0700</bug_when>
    <thetext>Comment on attachment 53304
Removed calls to clearAllDatabases

Clearing flags on attachment: 53304

Committed r57688: &lt;http://trac.webkit.org/changeset/57688&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213125</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-15 17:11:05 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213155</commentid>
    <comment_count>17</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-15 18:17:42 -0700</bug_when>
    <thetext>Reverted r57688 for reason:

Makes fast/workers/dedicated-worker-lifecycle.html crashing on all GTK bots

Committed r57704: &lt;http://trac.webkit.org/changeset/57704&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217866</commentid>
    <comment_count>18</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-27 12:56:51 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Reverted r57688 for reason:
&gt; 
&gt; Makes fast/workers/dedicated-worker-lifecycle.html crashing on all GTK bots
&gt; 
&gt; Committed r57704: &lt;http://trac.webkit.org/changeset/57704&gt;

I didn&apos;t touch that test or anything that should have affected it directly.  My assumption is that I&apos;ve done something that reveals another bug, and that that test ran after one of my new tests, which got things into an unusual state.  That underlying bug could easily have come out of the refactorings I did to make this CL possible, though.

I&apos;ve just build+run both debug and release builds of webkit-gtk, and I can&apos;t reproduce the problem at all, so either:

1) The underlying problem&apos;s been fixed in the past 2 weeks.
2) The underlying problem&apos;s gotten harder to repro in the past 2 weeks.
3) I just can&apos;t reproduce the conditions on the bots.

Suggestions?  Is there a way to run this patch past the bots again without checking it in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219194</commentid>
    <comment_count>19</comment_count>
      <attachid>54736</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-29 14:45:50 -0700</bug_when>
    <thetext>Created attachment 54736
Updated patch to take into account the big string refactoring.  No functional change, only a one-liner in JSWorkerContextCustom.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219196</commentid>
    <comment_count>20</comment_count>
      <attachid>54736</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-29 14:48:44 -0700</bug_when>
    <thetext>Comment on attachment 54736
Updated patch to take into account the big string refactoring.  No functional change, only a one-liner in JSWorkerContextCustom.cpp.

Dmitry and I discussed this, and we decided to re-land it and see if anything breaks this time.  I can&apos;t repro what happened on the gtk bots on Ubuntu 9.1 in either debug or release, but if this patch is revealing an existing bug, it&apos;s probably going to affect all platforms eventually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219205</commentid>
    <comment_count>21</comment_count>
      <attachid>54736</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-04-29 15:08:21 -0700</bug_when>
    <thetext>Comment on attachment 54736
Updated patch to take into account the big string refactoring.  No functional change, only a one-liner in JSWorkerContextCustom.cpp.

WebCore/bindings/js/JSWorkerContextCustom.cpp:151
 +      const UString&amp; name = args.at(0).toString(exec); 
What about exceptions?

WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp:144
 +      // Implementation coming soon.
Please throw a NOT_IMPLEMENTED exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219229</commentid>
    <comment_count>22</comment_count>
      <attachid>54745</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-29 15:57:18 -0700</bug_when>
    <thetext>Created attachment 54745
Added exception for V8 bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219231</commentid>
    <comment_count>23</comment_count>
      <attachid>54745</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-04-29 15:59:20 -0700</bug_when>
    <thetext>Comment on attachment 54745
Added exception for V8 bindings.

As per discussion with Adam offline, since these bindings were copied from the DOM bindings, they&apos;re ALL wrong in the same way, and there&apos;s a bug open already, we&apos;re going to leave them as-is for the big cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219238</commentid>
    <comment_count>24</comment_count>
      <attachid>54745</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-04-29 16:06:13 -0700</bug_when>
    <thetext>Comment on attachment 54745
Added exception for V8 bindings.

r=me
Lets give it another try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219425</commentid>
    <comment_count>25</comment_count>
      <attachid>54745</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-30 04:11:21 -0700</bug_when>
    <thetext>Comment on attachment 54745
Added exception for V8 bindings.

Clearing flags on attachment: 54745

Committed r58569: &lt;http://trac.webkit.org/changeset/58569&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219426</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-30 04:11:28 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>219444</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-30 04:52:45 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58569 might have broken GTK Linux 32-bit Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/58569
http://trac.webkit.org/changeset/58571</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223656</commentid>
    <comment_count>28</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-10 18:51:41 -0700</bug_when>
    <thetext>We rolled this back again, but managed to get a good stack trace from the breakage.  That led to https://bugs.webkit.org/show_bug.cgi?id=38623, which is now fixed, so let&apos;s try this again--it should now work without breaking anybody.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223659</commentid>
    <comment_count>29</comment_count>
      <attachid>55639</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-10 18:56:09 -0700</bug_when>
    <thetext>Created attachment 55639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223853</commentid>
    <comment_count>30</comment_count>
      <attachid>55639</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-11 03:43:16 -0700</bug_when>
    <thetext>Comment on attachment 55639
Patch

unofficial review.

&gt; Index: WebCore/ChangeLog
&gt; ===================================================================
&gt;          * WebCore.vcproj/WebCore.vcproj:
&gt;  
&gt; -&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r59084
&gt;  2010-05-10  Dirk Schulze  &lt;krit@webkit.org&gt;
&gt;  
&gt;          Reviewed by Nikolas Zimmermann.
&gt; @@ -2804,6 +2834,7 @@
&gt;          (WebCore::FileStream::read):
&gt;          * html/FileStream.h:
&gt;  
&gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r59110
&gt;  2010-05-05  Steve Falkenburg  &lt;sfalken@apple.com&gt;
&gt;  
&gt;          Reviewed by Maciej Stachowiak.
&gt; @@ -5008,6 +5039,7 @@
&gt;          (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
&gt;          (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
&gt;  
&gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r58796
&gt;  2010-04-29  Gustavo Noronha Silva  &lt;gustavo.noronhaollabora.co.uk&gt;

looks like you need to resolve WebCore/ChangeLog.

&gt; Index: WebCore/bindings/js/JSWorkerContextCustom.cpp
&gt; ===================================================================
&gt; +#include &quot;Database.h&quot;
&gt; +#include &quot;JSDatabase.h&quot;
&gt; +#include &quot;JSDatabaseCallback.h&quot;

i think these includes should be inside #if ENABLE(DATABASE) too (the includes for the sync DB classes are).

&gt;  #if ENABLE(DATABASE)
&gt; +JSValue JSWorkerContext::openDatabase(ExecState* exec, const ArgList&amp; args) 
&gt; +{ 
&gt; +    const UString&amp; name = args.at(0).toString(exec); 
&gt; +    const UString&amp; version = args.at(1).toString(exec); 
&gt; +    const UString&amp; displayName = args.at(2).toString(exec); 
&gt; +    unsigned long estimatedSize = args.at(3).toInt32(exec); 
&gt; +    RefPtr&lt;DatabaseCallback&gt; creationCallback; 
&gt; +    if ((args.size() &gt;= 5) &amp;&amp; args.at(4).isObject()) 
&gt; +        creationCallback = JSDatabaseCallback::create(asObject(args.at(4)), globalObject()); 
&gt; + 
&gt; +    ExceptionCode ec = 0; 
&gt; +    JSValue result = toJS(exec, globalObject(), WTF::getPtr(impl()-&gt;openDatabase(ustringToString(name), ustringToString(version), ustringToString(displayName), estimatedSize, creationCallback.release(), ec))); 
&gt; +    setDOMException(exec, ec); 
&gt; +    return result; 
&gt; +} 
&gt; +#endif

can you please update this file and follow the same pattern that openDatabaseSync() does? it&apos;s pretty much the same code, only with more error checking (abarth insisted on it).

&gt; Index: WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
&gt; ===================================================================
&gt; --- WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp	(revision 59110)
&gt; +++ WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp	(working copy)
&gt; @@ -42,6 +42,7 @@
&gt;  #include &quot;ScheduledAction.h&quot;
&gt;  #include &quot;V8Binding.h&quot;
&gt;  #include &quot;V8BindingMacros.h&quot;
&gt; +#include &quot;V8Database.h&quot;

should probably be inside #if ENABLE(DATABASE) too.

&gt; Index: WebCore/workers/WorkerContext.cpp
&gt; ===================================================================
&gt; @@ -275,13 +276,21 @@ PassRefPtr&lt;Database&gt; WorkerContext::open
&gt;          return 0;
&gt;      }
&gt;  
&gt; -    ASSERT(Database::isAvailable());
&gt;      if (!Database::isAvailable())
&gt;          return 0;

we should set &apos;ec = SECURITY_ERR&apos; too. you can probably combine this &apos;if&apos; with the previous one.

&gt; Index: WebCore/workers/WorkerContext.idl
&gt; ===================================================================
&gt;  #if defined(ENABLE_DATABASE) &amp;&amp; ENABLE_DATABASE
&gt; -        // Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize);
&gt; +        [EnabledAtRuntime, Custom] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in DatabaseCallback creationCallback)
&gt; +            raises(DOMException);
&gt;          [EnableAtRuntime, Custom] DatabaseSync openDatabaseSync(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in DatabaseCallback creationCallback);

oops, i have a bug here: s/Enable/Enabled/. can you please fix it since you&apos;re editing this code?

also, i&apos;m not sure we need [EnabledAtRuntime] here at all, since in the implemention of openDatabase{Sync}() we manually check if Database{Sync}.isAvailable(), but we can figure that out in a separate patch.

&gt; Index: LayoutTests/fast/workers/storage/resources/database-worker-controller.js
&gt; ===================================================================
&gt; --- LayoutTests/fast/workers/storage/resources/database-worker-controller.js	(revision 0)
&gt; +++ LayoutTests/fast/workers/storage/resources/database-worker-controller.js	(revision 0)
&gt; @@ -0,0 +1,24 @@
&gt; +var databaseWorker = new Worker(&apos;resources/database-worker.js&apos;);
&gt; +
&gt; +databaseWorker.onerror = function(event) {
&gt; +    log(&quot;Caught an error from the worker!&quot;);
&gt; +    log(event);
&gt; +    for (var i in event) {
&gt; +        log(&quot;event[&quot; + i + &quot;]: &quot; + event[i]);
&gt; +    }

no need for {}.

&gt; +databaseWorker.onmessage = function(event) {
&gt; +    if (event.data.indexOf(&apos;log:&apos;) == 0)
&gt; +        log(event.data.substring(4));
&gt; +    else if (event.data == &apos;notifyDone&apos;) {
&gt; +        if (window.layoutTestController)
&gt; +                layoutTestController.notifyDone();

wrong indentation, should be 4 spaces.

this is definitely beyond the scope of this patch, but i think it would be nice if we could figure out a way to share the *-expected.txt files between the DOM and worker storage tests too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224036</commentid>
    <comment_count>31</comment_count>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-11 11:28:42 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 55639 [details])
&gt; unofficial review.
&gt; 
&gt; &gt; Index: WebCore/ChangeLog
&gt; &gt; ===================================================================
&gt; &gt;          * WebCore.vcproj/WebCore.vcproj:
&gt; &gt;  
&gt; &gt; -&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r59084
&gt; &gt;  2010-05-10  Dirk Schulze  &lt;krit@webkit.org&gt;
&gt; &gt;  
&gt; &gt;          Reviewed by Nikolas Zimmermann.
&gt; &gt; @@ -2804,6 +2834,7 @@
&gt; &gt;          (WebCore::FileStream::read):
&gt; &gt;          * html/FileStream.h:
&gt; &gt;  
&gt; &gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r59110
&gt; &gt;  2010-05-05  Steve Falkenburg  &lt;sfalken@apple.com&gt;
&gt; &gt;  
&gt; &gt;          Reviewed by Maciej Stachowiak.
&gt; &gt; @@ -5008,6 +5039,7 @@
&gt; &gt;          (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
&gt; &gt;          (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
&gt; &gt;  
&gt; &gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r58796
&gt; &gt;  2010-04-29  Gustavo Noronha Silva  &lt;gustavo.noronhaollabora.co.uk&gt;
&gt; 
&gt; looks like you need to resolve WebCore/ChangeLog.

Fixed.  Looks like I wasn&apos;t the only one, either ;&apos;&gt;.

&gt; &gt; Index: WebCore/bindings/js/JSWorkerContextCustom.cpp
&gt; &gt; ===================================================================
&gt; &gt; +#include &quot;Database.h&quot;
&gt; &gt; +#include &quot;JSDatabase.h&quot;
&gt; &gt; +#include &quot;JSDatabaseCallback.h&quot;
&gt; 
&gt; i think these includes should be inside #if ENABLE(DATABASE) too (the includes for the sync DB classes are).

Fixed.

&gt; &gt;  #if ENABLE(DATABASE)
&gt; &gt; +JSValue JSWorkerContext::openDatabase(ExecState* exec, const ArgList&amp; args) 
&gt; &gt; +{ 
&gt; &gt; +    const UString&amp; name = args.at(0).toString(exec); 
&gt; &gt; +    const UString&amp; version = args.at(1).toString(exec); 
&gt; &gt; +    const UString&amp; displayName = args.at(2).toString(exec); 
&gt; &gt; +    unsigned long estimatedSize = args.at(3).toInt32(exec); 
&gt; &gt; +    RefPtr&lt;DatabaseCallback&gt; creationCallback; 
&gt; &gt; +    if ((args.size() &gt;= 5) &amp;&amp; args.at(4).isObject()) 
&gt; &gt; +        creationCallback = JSDatabaseCallback::create(asObject(args.at(4)), globalObject()); 
&gt; &gt; + 
&gt; &gt; +    ExceptionCode ec = 0; 
&gt; &gt; +    JSValue result = toJS(exec, globalObject(), WTF::getPtr(impl()-&gt;openDatabase(ustringToString(name), ustringToString(version), ustringToString(displayName), estimatedSize, creationCallback.release(), ec))); 
&gt; &gt; +    setDOMException(exec, ec); 
&gt; &gt; +    return result; 
&gt; &gt; +} 
&gt; &gt; +#endif
&gt; 
&gt; can you please update this file and follow the same pattern that openDatabaseSync() does? it&apos;s pretty much the same code, only with more error checking (abarth insisted on it).

Fixed.  Thanks for the example code; there wasn&apos;t a correct example in the whole project when he and I discussed it.

&gt; &gt; Index: WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp
&gt; &gt; ===================================================================
&gt; &gt; --- WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp	(revision 59110)
&gt; &gt; +++ WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp	(working copy)
&gt; &gt; @@ -42,6 +42,7 @@
&gt; &gt;  #include &quot;ScheduledAction.h&quot;
&gt; &gt;  #include &quot;V8Binding.h&quot;
&gt; &gt;  #include &quot;V8BindingMacros.h&quot;
&gt; &gt; +#include &quot;V8Database.h&quot;
&gt; 
&gt; should probably be inside #if ENABLE(DATABASE) too.

Fixed.

&gt; &gt; Index: WebCore/workers/WorkerContext.cpp
&gt; &gt; ===================================================================
&gt; &gt; @@ -275,13 +276,21 @@ PassRefPtr&lt;Database&gt; WorkerContext::open
&gt; &gt;          return 0;
&gt; &gt;      }
&gt; &gt;  
&gt; &gt; -    ASSERT(Database::isAvailable());
&gt; &gt;      if (!Database::isAvailable())
&gt; &gt;          return 0;
&gt; 
&gt; we should set &apos;ec = SECURITY_ERR&apos; too. you can probably combine this &apos;if&apos; with the previous one.

Yup; done.

&gt; &gt; Index: WebCore/workers/WorkerContext.idl
&gt; &gt; ===================================================================
&gt; &gt;  #if defined(ENABLE_DATABASE) &amp;&amp; ENABLE_DATABASE
&gt; &gt; -        // Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize);
&gt; &gt; +        [EnabledAtRuntime, Custom] Database openDatabase(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in DatabaseCallback creationCallback)
&gt; &gt; +            raises(DOMException);
&gt; &gt;          [EnableAtRuntime, Custom] DatabaseSync openDatabaseSync(in DOMString name, in DOMString version, in DOMString displayName, in unsigned long estimatedSize, in DatabaseCallback creationCallback);
&gt; 
&gt; oops, i have a bug here: s/Enable/Enabled/. can you please fix it since you&apos;re editing this code?

Fixed.

&gt; also, i&apos;m not sure we need [EnabledAtRuntime] here at all, since in the implemention of openDatabase{Sync}() we manually check if Database{Sync}.isAvailable(), but we can figure that out in a separate patch.

With the runtime enabler, V8 simply won&apos;t present the interface.  Without it, you can call the function, and you&apos;ll get an exception.  It&apos;s a small difference, but it&apos;s there.  I don&apos;t know how consistent we are about it, or if it makes any real difference to anyone.

&gt; &gt; Index: LayoutTests/fast/workers/storage/resources/database-worker-controller.js
&gt; &gt; ===================================================================
&gt; &gt; --- LayoutTests/fast/workers/storage/resources/database-worker-controller.js	(revision 0)
&gt; &gt; +++ LayoutTests/fast/workers/storage/resources/database-worker-controller.js	(revision 0)
&gt; &gt; @@ -0,0 +1,24 @@
&gt; &gt; +var databaseWorker = new Worker(&apos;resources/database-worker.js&apos;);
&gt; &gt; +
&gt; &gt; +databaseWorker.onerror = function(event) {
&gt; &gt; +    log(&quot;Caught an error from the worker!&quot;);
&gt; &gt; +    log(event);
&gt; &gt; +    for (var i in event) {
&gt; &gt; +        log(&quot;event[&quot; + i + &quot;]: &quot; + event[i]);
&gt; &gt; +    }
&gt; 
&gt; no need for {}.

Removed.

&gt; &gt; +databaseWorker.onmessage = function(event) {
&gt; &gt; +    if (event.data.indexOf(&apos;log:&apos;) == 0)
&gt; &gt; +        log(event.data.substring(4));
&gt; &gt; +    else if (event.data == &apos;notifyDone&apos;) {
&gt; &gt; +        if (window.layoutTestController)
&gt; &gt; +                layoutTestController.notifyDone();
&gt; 
&gt; wrong indentation, should be 4 spaces.

Fixed.

&gt; this is definitely beyond the scope of this patch, but i think it would be nice if we could figure out a way to share the *-expected.txt files between the DOM and worker storage tests too.

It would indeed.

I&apos;ll re-upload as soon as my build+test completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224092</commentid>
    <comment_count>32</comment_count>
      <attachid>55737</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-11 12:42:17 -0700</bug_when>
    <thetext>Created attachment 55737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224177</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-11 15:11:09 -0700</bug_when>
    <thetext>Attachment 55737 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/2190154</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224239</commentid>
    <comment_count>34</comment_count>
      <attachid>55737</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-05-11 16:25:40 -0700</bug_when>
    <thetext>Comment on attachment 55737
Patch

It needs a new method in RuntimeEnabledFeatures now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224350</commentid>
    <comment_count>35</comment_count>
      <attachid>55798</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-11 19:44:50 -0700</bug_when>
    <thetext>Created attachment 55798
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224352</commentid>
    <comment_count>36</comment_count>
      <attachid>55798</attachid>
    <who name="Eric U.">ericu</who>
    <bug_when>2010-05-11 19:46:02 -0700</bug_when>
    <thetext>Comment on attachment 55798
Patch

Pretty much the same as the last patch, just based on newer code.  I made the fix, but since I took a while to do it [needed a sync+clean rebuild] Dumi snuck the fix in already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225390</commentid>
    <comment_count>37</comment_count>
      <attachid>55798</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-05-13 11:15:36 -0700</bug_when>
    <thetext>Comment on attachment 55798
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225574</commentid>
    <comment_count>38</comment_count>
      <attachid>55798</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-13 17:02:06 -0700</bug_when>
    <thetext>Comment on attachment 55798
Patch

&gt; Index: WebCore/workers/WorkerContext.cpp
&gt; ===================================================================
&gt;  PassRefPtr&lt;Database&gt; WorkerContext::openDatabase(const String&amp; name, const String&amp; version, const String&amp; displayName, unsigned long estimatedSize, PassRefPtr&lt;DatabaseCallback&gt; creationCallback, ExceptionCode&amp; ec)
&gt;  {
&gt; -    if (!securityOrigin()-&gt;canAccessDatabase()) {
&gt; +    if (!securityOrigin()-&gt;canAccessDatabase() || !Database::isAvailable()) {
&gt;          ec = SECURITY_ERR;
&gt;          return 0;
&gt;      }
&gt;  
&gt; -    ASSERT(Database::isAvailable());
&gt; -    if (!Database::isAvailable())
&gt; -        return 0;
&gt; -
&gt;      return Database::openDatabase(this, name, version, displayName, estimatedSize, creationCallback, ec);
&gt;  }

if you haven&apos;t submitted this patch yet, please apply the same refactoring to openDatabaseSync (i missed it in my patches) -- no need to re-upload/re-review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225585</commentid>
    <comment_count>39</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2010-05-13 17:39:54 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; if you haven&apos;t submitted this patch yet, please apply the same refactoring to openDatabaseSync (i missed it in my patches) -- no need to re-upload/re-review.

I don&apos;t think Eric is a committer yet. So we use commit queue... This can be a separate patch, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225586</commentid>
    <comment_count>40</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-05-13 17:41:35 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; I don&apos;t think Eric is a committer yet. So we use commit queue... This can be a separate patch, right?

ah, forgot that. yes, this can definitely be a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226266</commentid>
    <comment_count>41</comment_count>
      <attachid>55798</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 09:37:07 -0700</bug_when>
    <thetext>Comment on attachment 55798
Patch

Clearing flags on attachment: 55798

Committed r59540: &lt;http://trac.webkit.org/changeset/59540&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>226267</commentid>
    <comment_count>42</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-05-15 09:37:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51583</attachid>
            <date>2010-03-24 19:55:29 -0700</date>
            <delta_ts>2010-03-25 11:17:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34992-20100324195528.patch</filename>
            <type>text/plain</type>
            <size>28576</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDMtMjQgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYXN5bmMgYmluZGluZ3MgZm9yIFdvcmtlciBhY2Nlc3MgdG8gREIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTkyCisKKyAgICAgICAgVGVzdHM6
IHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCisgICAgICAg
ICAgICAgICBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6IEFkZCBvcGVuRGF0YWJhc2Ug
YmluZGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
KToKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwOiBBZGQgb3BlbkRhdGFiYXNlIHN0dWI7IENocm9taXVtIHdpbGwgbmVlZCB3b3JrIGJvdGgg
aW4gVjggYW5kIGluIHRoZSBicm93c2VyIHByb2Nlc3MgYmVmb3JlIHdlIGNhbiB0dXJuIHRoaXMg
b24gdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFz
ZUNhbGxiYWNrKToKKworICAgICAgICBBZGQgTm9TdGF0aWNUYWJsZXMgZmxhZ3MgdG8gYWxsIG9i
amVjdHMgbm93IHNoYXJlZCB3aXRoIHdvcmtlcnMuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxFcnJvci5pZGw6CisgICAgICAgICogc3RvcmFn
ZS9TUUxSZXN1bHRTZXQuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGw6CisgICAgICAgIAor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOiBBZGQgZGF0YWJhc2VFeGNlZWRlZFF1
b3RhLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVkUXVvdGEpOiBBZGQgc3R1YiBpbXBs
ZW1lbnRhdGlvbiBmb3IgdGVzdGluZzsgeW91IGp1c3QgZ2V0IDVNQiBmb3Igbm93LgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKTogUmVtb3ZlIGludmFsaWQg
YXNzZXJ0aW9uLgorCisgICAgICAgIEFkZCB0aGUgSURMIGZvciB0aGUgY2FsbCB0byBvcGVuRGF0
YWJhc2UuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMC0wMy0y
NCAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBObyByZXZp
ZXcsIHJvbGxpbmcgb3V0IHI1NjQ1My4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU2NDc1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw5IEBACiAKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiSlNEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2VD
YWxsYmFjay5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkBAIC0xNjcsNiArMTcw
LDI0IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjptZXNzYWdlQ2hhbm5lbCgKIH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5E
YXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpIAoreyAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsgCisgICAgY29uc3QgVVN0cmluZyYgbmFtZSA9IGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyk7IAorICAgIGNvbnN0IFVTdHJpbmcmIHZlcnNpb24gPSBhcmdzLmF0
KDEpLnRvU3RyaW5nKGV4ZWMpOyAKKyAgICBjb25zdCBVU3RyaW5nJiBkaXNwbGF5TmFtZSA9IGFy
Z3MuYXQoMikudG9TdHJpbmcoZXhlYyk7IAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKTsgCisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2s7IAorICAgIGlmICgoYXJncy5zaXplKCkgPj0gNSkgJiYgYXJn
cy5hdCg0KS5pc09iamVjdCgpKSAKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJh
c2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGFyZ3MuYXQoNCkpLCBnbG9iYWxPYmplY3QoKSk7
IAorIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wbCgpLT5vcGVuRGF0YWJhc2UobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsgCisgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsgCisgICAgcmV0dXJuIHJlc3VsdDsgCit9IAorI2Vu
ZGlmCisgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTY0NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw4IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlNjaGVkdWxl
ZEFjdGlvbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJWOERhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJWOFByb3h5Lmgi
CiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmgiCkBAIC0xNDQsNiArMTQ2LDEyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFdvcmtlckNvbnRleHQKICAgICByZXR1cm4gZ2xvYmFsOwogfQogCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKSAKK3sgCisgICAgSU5DX1NUQVRTKCJET00uV29ya2VyQ29udGV4dC5v
cGVuRGF0YWJhc2UoKSIpOyAKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBjb21pbmcgc29vbi4KKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyAKK30gCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkocmV2aXNp
b24gNTY0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAg
ICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAg
ICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRGF0
YWJhc2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247CiAg
ICAgICAgIFtDdXN0b21dIHZvaWQgY2hhbmdlVmVyc2lvbihpbiBET01TdHJpbmcgb2xkVmVyc2lv
biwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIGluIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBW
b2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxF
cnJvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAkocmV2
aXNpb24gNTY0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBb
CiAgICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IK
KyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0g
U1FMRXJyb3IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2Rl
OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbAkocmV2aXNpb24gNTY0NzUpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQCBtb2R1
bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1EQVRB
QkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwK
KyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTFJlc3VsdFNldCB7CiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTUUxSZXN1bHRTZXRSb3dMaXN0IHJvd3M7CiAKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwJKHJldmlzaW9uIDU2NDc1KQorKysgV2Vi
Q29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAg
IENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICAgICAg
T21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gU1FMUmVzdWx0
U2V0Um93TGlzdCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxl
bmd0aDsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGl0ZW0oaW4gdW5zaWduZWQgbG9uZyBp
bmRleCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwJKHJldmlzaW9uIDU2NDc1
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAg
ICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAg
ICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTFRy
YW5zYWN0aW9uIHsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBleGVjdXRlU3FsKGluIERPTVN0cmlu
ZyBzcWxTdGF0ZW1lbnQsIGluIE9iamVjdEFycmF5IGFyZ3VtZW50cywgaW4gU1FMU3RhdGVtZW50
Q2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjayk7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9u
IDU2NDc1KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNp
bmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1
ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKQEAgLTI2MywxMiArMjY0LDIwIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IFdvcmtlckNvbnRl
eHQ6Om9wZW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKERhdGFiYXNl
Ojppc0F2YWlsYWJsZSgpKTsKICAgICBpZiAoIURhdGFiYXNlOjppc0F2YWlsYWJsZSgpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKHRoaXMs
IG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxi
YWNrLCBlYyk7CiB9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6ZGF0YWJhc2VFeGNlZWRlZFF1b3Rh
KGNvbnN0IFN0cmluZyYpCit7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIGEgcmVhbCBpbXBsZW1lbnRhdGlvbjsgdGhpcyBpcyBhIHRlbXBvcmFyeSBz
b2x1dGlvbiBmb3IgdGVzdGluZy4KKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVs
dFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LnNldFF1b3RhKHNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CisjZW5kaWYKK30KICNl
bmRpZgogCiBib29sIFdvcmtlckNvbnRleHQ6OmlzQ29udGV4dFRocmVhZCgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDU2NDc1KQorKysgV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDggKzExMCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEYXRh
YmFzZVJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgLy8gTm90IGlt
cGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90
YShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIGZvciByZWFs
IHlldC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkg
Y29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDU2NDc1
KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSwxMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIC8vIFdvcmtlclV0aWxz
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgaW1wb3J0U2NyaXB0cygvKltWYXJpYWRpY10gaW4gRE9N
U3RyaW5nIHVybHMgKi8pOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxl
XSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOwotICAgICAgICAvLyBEYXRhYmFzZSBvcGVuRGF0
YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJp
bmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisjaWYgZGVm
aW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBbRW5hYmxl
ZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNh
bGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKICAgICAg
ICAgLy8gRGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGlu
IERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICAgICAgICAgLy8gVGltZXJzCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1NjQ3NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDM5IEBACisyMDEwLTAzLTI0ICBFcmljIFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGFzeW5jIGJpbmRpbmdzIGZvciBXb3JrZXIgYWNjZXNzIHRvIERCCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDk5MgorCisgICAgICAgICogc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBj
b2RlIHdpdGggdGhlIHdvcmtlciB2ZXJzaW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3Jh
Z2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS5qczogVGhpcyBpcyB0aGUgZXh0cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorICAg
ICAgICAoZmluaXNoVGVzdCk6CisgICAgICAgIChydW5UZXN0Mi5jYXRjaCk6CisgICAgICAgIChy
dW5UZXN0Mik6CisgICAgICAgICogc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWw6IFJlZmFj
dG9yZWQgdG8gc2hhcmUgY29kZSB3aXRoIHRoZSB3b3JrZXIgdmVyc2lvbiBvZiB0aGUgdGVzdC4K
KyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanM6IFRoaXMgaXMgdGhl
IGV4dHJhY3RlZCBzaGFyZWQgY29yZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgKHRocm93T25Ub1N0
cmluZ09iamVjdC50b1N0cmluZyk6CisgICAgICAgICh2YXIpOgorICAgICAgICAoKToKKyAgICAg
ICAgKHJ1blRyYW5zYWN0aW9uVGVzdCk6CisgICAgICAgIChydW5UcmFuc2FjdGlvblRlc3RzKToK
KyAgICAgICAgKHJ1blRlc3QpOgorCisgICAgICAgIFRoaXMgZmlsZSBnZXRzIGluY2x1ZGVkIGZy
b20gd29ya2VyIGRhdGFiYXNlIHRlc3RzOyBpdCBkb2VzIGFsbCB0aGUgYm9pbGVycGxhdGUgdGhh
dCdzIG5lZWRlZCBvbiB0aGUgRE9NIHNpZGUuCisgICAgICAgICogc3RvcmFnZS9yZXNvdXJjZXMv
ZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanM6IEFkZGVkLgorICAgICAgICAoZGF0YWJhc2VX
b3JrZXIub25tZXNzYWdlKToKKyAgICAgICAgKGxvZyk6CisKKyAgICAgICAgVGhpcyBmaWxlIGlz
IHRoZSBib2lsZXJwbGF0ZSBmb3IgdGhlIHdvcmtlciBzaWRlIG9mIHRoZSBkYXRhYmFzZSB0ZXN0
cy4gIEl0IHdpbGwgaW1wb3J0IGFuZCBydW4gdGhlIGFjdHVhbCB0ZXN0IG9uIGNvbW1hbmQsIGFu
ZCB3aWxsIHJlcG9ydCBiYWNrIGNvbXBsZXRpb24gYW5kIGV4Y2VwdGlvbnMuCisgICAgICAgICog
c3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzOiBBZGRlZC4KKyAgICAgICAgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKToKKyAgICAgICAgKGxvZyk6Cisg
ICAgICAgIChvbm1lc3NhZ2UpOgorCiAyMDEwLTAzLTI0ICBFcmljIFVocmhhbmUgPGVyaWN1QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBET01Db3JlRXhjZXB0aW9uIG5lZWRzIE5vU3RhdGljVGFi
bGVzIG1vZGlmaWVyCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRs
ZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAK
K1RoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2lu
ZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxl
IGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28sIHJlbG9hZGluZyB0
aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlvbiBmYWlsdXJlLgorY2hhbmdlVmVy
c2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2sKK2NoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJh
Y2sKK3RyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6IG5vIHN1Y2ggdGFibGU6
IEZvb0JhcgorVEVTVCBDT01QTEVURS4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1y
ZXVzZS13b3JrZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPGh0bWw+IAor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVy
LmpzIj48L3NjcmlwdD4gCis8c2NyaXB0PiAKKworZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkK
K3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
ZHVtcEFzVGV4dCgpOworICAgIH0KKyAKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29u
c29sZSIpLmlubmVyVGV4dCA9ICIiOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJp
bXBvcnRTY3JpcHRzOmNoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5qcyIpOworICAgIGRhdGFi
YXNlV29ya2VyLnBvc3RNZXNzYWdlKCJydW5UZXN0Iik7Cit9Cis8L3NjcmlwdD4gCis8L2hlYWQ+
IAorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+IAorPGRpdj5UaGlzIHRlc3RzIHRo
YXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24u
IFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFi
b3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRpbmcgdGhlIHBhZ2Ugc2hvdWxk
IG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KKzxwcmUgaWQ9ImNvbnNvbGUiPiAKK0ZB
SUxVUkU6IHRlc3QgZGlkbid0IHJ1bi4KKzwvcHJlPiAKKzwvYm9keT4gCis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLmh0bWwJKHJldmlzaW9uIDU2NDc1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMSwyOSBA
QAogPGh0bWw+IAogPGhlYWQ+Cis8c2NyaXB0IHNyYz0iY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+IAogZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCiB7Ci0g
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCArPSBtZXNzYWdl
ICsgIlxuIjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4
dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVuY3Rpb24gZmluaXNoVGVzdCgpCi17Ci0gICAg
bG9nKCJURVNUIENPTVBMRVRFLiIpOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotCi1m
dW5jdGlvbiBydW5UZXN0KCkKK2Z1bmN0aW9uIHNldHVwQW5kUnVuVGVzdCgpCiB7CiAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5jbGVhckFsbERhdGFiYXNlcygpOwogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKICAgICB9CiAgCi0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVy
VGV4dCA9ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJU
ZXh0ID0gIiI7CiAgCi0gICAgdHJ5IHsKLSAgICAgICAgZGIgPSBvcGVuRGF0YWJhc2UoIkNoYW5n
ZVZlcnNpb24iLCAiIiwgIlRlc3QgdGhhdCBjaGFuZ2luZyBhIGRhdGFiYXNlIHZlcnNpb24gZG9l
c25cJ3Qga2lsbCBvdXIgaGFuZGxlIHRvIGl0IiwgMSk7Ci0gICAgICAgIHZhciB2ZXJzaW9uID0g
ZGIudmVyc2lvbjsKLSAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBhcnNlSW50
KHZlcnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsgCi0gICAgICAgIGRiLmNoYW5nZVZlcnNp
b24odmVyc2lvbiwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsKLSAgICAgICAgICAgIGxvZygi
Y2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2siKTsKLSAgICAgICAgfSwgZnVuY3Rp
b24oZXJyb3IpIHsKLSAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogZXJyb3IgY2FsbGJh
Y2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKLSAgICAgICAgfSwgZnVuY3Rpb24oKSB7Ci0gICAgICAg
ICAgICBsb2coImNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2siKTsKLSAgICAgICAgfSk7
Ci0gICAgICAgIAotICAgICAgICBzZXRUaW1lb3V0KHJ1blRlc3QyLCAxMDAwKTsKLSAgICAgICAg
Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2coImNoYW5nZVZlcnNpb24gZXhjZXB0aW9u
OiAiICsgZSk7Ci0gICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICB9Ci19Ci0gCi1mdW5jdGlvbiBy
dW5UZXN0MigpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24o
dHgpIHsKLSAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20gRm9vQmFyIiwg
W10sIGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbjogc3Rh
dGVtZW50IGNhbGxiYWNrIik7Ci0gICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAg
ICAgICAgfSwgZnVuY3Rpb24odHgsIGVycm9yKSB7Ci0gICAgICAgICAgICAgICAgbG9nKCJ0cmFu
c2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Ci0g
ICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0p
OwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbiBleGNlcHRpb246
ICIgKyBlKTsKLSAgICAgICAgZmluaXNoVGVzdCgpOwotICAgIH0KKyAgICBydW5UZXN0KCk7CiB9
CiA8L3NjcmlwdD4gCiA8L2hlYWQ+IAotPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPiAKKzxib2R5
IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPiAKIDxkaXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0
YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hv
dWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNt
YXRjaGluZyB2ZXJzaW9ucy4gQWxzbywgcmVsb2FkaW5nIHRoZSBwYWdlIHNob3VsZCBub3QgY2F1
c2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCi08cHJlIGlkPSJyZXN1bHQiPiAKKzxwcmUgaWQ9ImNv
bnNvbGUiPiAKIEZBSUxVUkU6IHRlc3QgZGlkbid0IHJ1bi4KIDwvcHJlPiAKIDwvYm9keT4gCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1y
ZXVzZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNp
b24taGFuZGxlLXJldXNlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACitmdW5jdGlv
biBmaW5pc2hUZXN0KCkKK3sKKyAgICBsb2coIlRFU1QgQ09NUExFVEUuIik7CisKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHRyeSB7Cisg
ICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKCJDaGFuZ2VWZXJzaW9uIiwgIiIsICJUZXN0IHRoYXQg
Y2hhbmdpbmcgYSBkYXRhYmFzZSB2ZXJzaW9uIGRvZXNuXCd0IGtpbGwgb3VyIGhhbmRsZSB0byBp
dCIsIDEpOworICAgICAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAgICAgIHZhciBu
ZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRvU3RyaW5nKCkg
OiAiMSI7IAorICAgICAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1
bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9u
IGNhbGxiYWNrIik7CisgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICBs
b2coImNoYW5nZVZlcnNpb246IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Cisg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBz
dWNjZXNzIGNhbGxiYWNrIik7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICAgICAgc2V0VGlt
ZW91dChydW5UZXN0MiwgMTAwMCk7CisgICAgICAgIAorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgbG9nKCJjaGFuZ2VWZXJzaW9uIGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBmaW5pc2hU
ZXN0KCk7CisgICAgfQorfQorIAorZnVuY3Rpb24gcnVuVGVzdDIoKQoreworICAgIHRyeSB7Cisg
ICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVj
dXRlU3FsKCJTRUxFQ1QgKiBmcm9tIEZvb0JhciIsIFtdLCBmdW5jdGlvbih0eCkgeworICAgICAg
ICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBjYWxsYmFjayIpOworICAgICAg
ICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4LCBlcnJv
cikgeworICAgICAgICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBj
YWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIGZpbmlzaFRlc3Qo
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgIGxvZygidHJhbnNhY3Rpb24gZXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIGZpbmlzaFRl
c3QoKTsKKyAgICB9Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFy
Z3Mtd29ya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdl
L2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9u
CitQQVNTLiBleGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfSkg
ZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51
bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxs
LCB1bmRlZmluZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3Fs
KCIiLCBudWxsLCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCBudWxsLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQgbm90
IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlv
biBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0
aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJv
d09uR2V0TGVuZ3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNT
LiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9u
IGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmpl
Y3QgXSkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgMCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgIiIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwo
IiIsIG51bGwsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1
dGVTcWwoIiIsIG51bGwsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNT
LiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhw
ZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUt
c3FsLWFyZ3Mtd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9l
eGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kYXRhYmFz
ZS13b3JrZXItY29udHJvbGxlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBz
ZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIGRhdGFiYXNlV29ya2Vy
LnBvc3RNZXNzYWdlKCJpbXBvcnRTY3JpcHRzOmV4ZWN1dGUtc3FsLWFyZ3MuanMiKTsKKyAgICBk
YXRhYmFzZVdvcmtlci5wb3N0TWVzc2FnZSgicnVuVGVzdCIpOworfQorCis8L3NjcmlwdD4KKzwv
aGVhZD4KKworPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+Cis8cHJlIGlkPSJjb25z
b2xlIj48L3ByZT4KKzwvYm9keT4KKworPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwJKHJldmlzaW9uIDU2NDc1KQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICsx
LDI4IEBACiA8aHRtbD4KIAogPGhlYWQ+Cis8c2NyaXB0IHNyYz0iZXhlY3V0ZS1zcWwtYXJncy5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogCi12YXIgdGhyb3dPblRvU3RyaW5nT2JqZWN0ID0geyB9
OwotdGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyB0aHJvdyAi
Q2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9OwotCi12YXIgdGhyb3dPbkdl
dExlbmd0aE9iamVjdCA9IHsgfTsKLXRocm93T25HZXRMZW5ndGhPYmplY3QuX19kZWZpbmVHZXR0
ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCBsZW5ndGggb2Yg
dGhpcyBvYmplY3QuIjsgfSk7Ci0KLXZhciB0aHJvd09uR2V0WmVyb09iamVjdCA9IHsgbGVuZ3Ro
OiAxIH07Ci10aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdldHRlcl9fKCIwIiwgZnVuY3Rp
b24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LiI7IH0p
OwotCi12YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCi0gICAgJ251bGwnLAotICAgICd1bmRlZmlu
ZWQnLAotICAgICcwJywKLSAgICAnIiInLAotICAgICciIiwgbnVsbCcsCi0gICAgJyIiLCB1bmRl
ZmluZWQnLAotICAgICciIiwgW10nLAotICAgICciIiwgWyAiYXJnMCIgXScsCi0gICAgJyIiLCB7
IH0nLAotICAgICciIiwgeyBsZW5ndGg6IDAgfScsCi0gICAgJyIiLCB7IGxlbmd0aDogMSwgMDog
ImFyZzAiIH0nLAotICAgICciIiwgbnVsbCwgbnVsbCcsCi0gICAgJyIiLCBudWxsLCB1bmRlZmlu
ZWQnLAotICAgICciIiwgbnVsbCwgeyB9JywKLSAgICAnIiIsIG51bGwsIG51bGwsIG51bGwnLAot
ICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkJywKLSAgICAnIiIsIG51bGwsIG51bGwsIHsg
fScsCi1dOwotCi12YXIgZXhwZWN0RXhjZXB0aW9uID0gWwotICAgICcnLAotICAgICd0aHJvd09u
VG9TdHJpbmdPYmplY3QnLAotICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCcsCi0gICAg
JyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCi0gICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09i
amVjdCBdJywKLSAgICAnIiIsIDAnLAotICAgICciIiwgIiInLAotICAgICciIiwgbnVsbCwgMCcs
Ci0gICAgJyIiLCBudWxsLCAiIicsCi0gICAgJyIiLCBudWxsLCBudWxsLCAwJywKLSAgICAnIiIs
IG51bGwsIG51bGwsICIiJywKLV07Ci0KLWZ1bmN0aW9uIHdyaXRlTWVzc2FnZVRvTG9nKG1lc3Nh
Z2UpCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKIHsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVuY3Rpb24g
dHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKLXsKLSAgICB0cnkgewot
ICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsg
JyknKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgfQotfQotCi1mdW5jdGlvbiBydW5UcmFuc2Fj
dGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKLXsK
LSAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVy
TGlzdCk7Ci0gICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgewotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBh
cmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlTWVzc2FnZVRvTG9nKCIqRkFJTCouIGV4ZWN1dGVT
cWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICB3cml0ZU1l
c3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhy
ZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3Qg
KyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwotICAgIH0KLX0KLQotZnVuY3Rpb24g
cnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2FjdGlvbikKLXsKLSAgICBmb3IgKGkgaW4gZXhwZWN0
Tm9FeGNlcHRpb24pCi0gICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhw
ZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsKLSAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9u
KQotICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlv
bltpXSwgdHJ1ZSk7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1
blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFy
QWxsRGF0YWJhc2VzKCk7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgIH0K
LQotICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0IiwgIjEuMCIs
ICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rpb24uZXhl
Y3V0ZVNxbCIsIDEpOwotICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVzdHMpOwor
ICAgIHJ1blRlc3QoKTsKIH0KIAogPC9zY3JpcHQ+CiA8L2hlYWQ+CiAKLTxib2R5IG9ubG9hZD0i
cnVuVGVzdCgpIj4KKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPgogPHByZSBpZD0i
Y29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZXhl
Y3V0ZS1zcWwtYXJncy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1
dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1
dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKK3ZhciB0aHJvd09u
VG9TdHJpbmdPYmplY3QgPSB7IH07Cit0aHJvd09uVG9TdHJpbmdPYmplY3QudG9TdHJpbmcgPSBm
dW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0cmluZyBvbiB0aGlzIG9iamVjdC4i
IH07CisKK3ZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0ID0geyB9OwordGhyb3dPbkdldExlbmd0
aE9iamVjdC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJD
YW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4iOyB9KTsKKwordmFyIHRocm93T25HZXRa
ZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEgfTsKK3Rocm93T25HZXRaZXJvT2JqZWN0Ll9fZGVmaW5l
R2V0dGVyX18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IDAgcHJvcGVydHkg
b2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciBleHBlY3ROb0V4Y2VwdGlvbiA9IFsKKyAgICAn
bnVsbCcsCisgICAgJ3VuZGVmaW5lZCcsCisgICAgJzAnLAorICAgICciIicsCisgICAgJyIiLCBu
dWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJh
cmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAn
IiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCisgICAgJyIiLCBudWxsLCBudWxsJywKKyAg
ICAnIiIsIG51bGwsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBudWxsLCB7IH0nLAorICAgICciIiwg
bnVsbCwgbnVsbCwgbnVsbCcsCisgICAgJyIiLCBudWxsLCBudWxsLCB1bmRlZmluZWQnLAorICAg
ICciIiwgbnVsbCwgbnVsbCwgeyB9JywKK107CisKK3ZhciBleHBlY3RFeGNlcHRpb24gPSBbCisg
ICAgJycsCisgICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0
TGVuZ3RoT2JqZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAgICAnIiIs
IFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0nLAorICAgICciIiwgMCcsCisgICAgJyIiLCAiIics
CisgICAgJyIiLCBudWxsLCAwJywKKyAgICAnIiIsIG51bGwsICIiJywKKyAgICAnIiIsIG51bGws
IG51bGwsIDAnLAorICAgICciIiwgbnVsbCwgbnVsbCwgIiInLAorXTsKKworZnVuY3Rpb24gdHJ5
RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICB0cnkgeworICAg
ICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJykn
KTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAg
ICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2FjdGlv
blRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKK3sKKyAg
ICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlz
dCk7CisgICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQor
ICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikg
dGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgICAgIGxvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJM
aXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsg
IikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1
blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCit7CisgICAgZm9yIChpIGluIGV4cGVjdE5v
RXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVj
dE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7CisgICAgZm9yIChpIGluIGV4cGVjdEV4Y2VwdGlvbikK
KyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNlcHRpb25b
aV0sIHRydWUpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5U
ZXN0KCkKK3sKKworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0
IiwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNh
Y3Rpb24uZXhlY3V0ZVNxbCIsIDEpOworICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9u
VGVzdHMpOworfQorCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFi
YXNlLXdvcmtlci1jb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xs
ZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTggQEAKK3ZhciBkYXRhYmFzZVdvcmtlciA9
IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanMnKTsKKworZGF0YWJhc2VX
b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgaWYgKGV2ZW50LmRhdGEuaW5k
ZXhPZignbG9nOicpID09IDApIHsKKyAgICBsb2coZXZlbnQuZGF0YS5zdWJzdHJpbmcoNCkpOwor
ICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gJ25vdGlmeURvbmUnKSB7CisgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICB9IGVsc2UgeworICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVk
IG1lc3NhZ2U6ICIgKyBldmVudCk7CisgIH0KK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7
CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gbWVz
c2FnZSArICJcbiI7Cit9CisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2Rh
dGFiYXNlLXdvcmtlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jlc291
cmNlcy9kYXRhYmFzZS13b3JrZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9y
YWdlL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjkgQEAKK3ZhciB3aW5kb3cgPSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyOiB7CisgICAgbm90
aWZ5RG9uZTogZnVuY3Rpb24oKSB7IHBvc3RNZXNzYWdlKCJub3RpZnlEb25lIik7IH0KKyAgfQor
fTsKK3ZhciBsYXlvdXRUZXN0Q29udHJvbGxlciA9IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cjsKKworZnVuY3Rpb24gbG9nKHMpIHsKKyAgcG9zdE1lc3NhZ2UoImxvZzoiICsgcyk7Cit9CisK
K29ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgIHRyeSB7CisgICAgaWYgKGV2ZW50LmRh
dGEuaW5kZXhPZigiaW1wb3J0U2NyaXB0czoiKSA9PSAwKSB7CisgICAgICB2YXIgc2NyaXB0cyA9
IGV2ZW50LmRhdGEuc3Vic3RyaW5nKCJpbXBvcnRTY3JpcHRzOiIubGVuZ3RoKS5zcGxpdCgiLCIp
OworICAgICAgZm9yICh2YXIgaSBpbiBzY3JpcHRzKSB7CisgICAgICAgIHNjcmlwdHNbaV0gPSAi
Li4vIiArIHNjcmlwdHNbaV07CisgICAgICB9CisgICAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdHMp
OworICAgIH0gZWxzZSBpZiAoZXZlbnQuZGF0YSA9PSAicnVuVGVzdCIpIHsKKyAgICAgIHJ1blRl
c3QoKTsgLy8gTXVzdCBiZSBkZWZpbmVkIGJ5IHNvbWUgaW1wb3J0ZWQgc2NyaXB0LgorICAgIH0g
ZWxzZSB7CisgICAgICBsb2coIlJlY2VpdmVkIHVuZXhwZWN0ZWQgbWVzc2FnZTogIiArIGV2ZW50
LmRhdGEpOworICAgIH0KKyAgfSBjYXRjaCAoZXgpIHsKKyAgICBsb2coIldvcmtlciBjYXVnaHQg
ZXhjZXB0aW9uOiAiICsgZXgpOworICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CisgIH0KK307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51662</attachid>
            <date>2010-03-25 11:17:07 -0700</date>
            <delta_ts>2010-04-12 19:40:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34992-20100325111706.patch</filename>
            <type>text/plain</type>
            <size>29585</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDMtMjQgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYXN5bmMgYmluZGluZ3MgZm9yIFdvcmtlciBhY2Nlc3MgdG8gREIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTkyCisKKyAgICAgICAgVGVzdHM6
IHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCisgICAgICAg
ICAgICAgICBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwKKworICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6IEFkZCBvcGVuRGF0YWJhc2Ug
YmluZGluZy4KKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
KToKKworICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwOiBBZGQgb3BlbkRhdGFiYXNlIHN0dWI7IENocm9taXVtIHdpbGwgbmVlZCB3b3JrIGJvdGgg
aW4gVjggYW5kIGluIHRoZSBicm93c2VyIHByb2Nlc3MgYmVmb3JlIHdlIGNhbiB0dXJuIHRoaXMg
b24gdGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpWOFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFz
ZUNhbGxiYWNrKToKKworICAgICAgICBBZGQgTm9TdGF0aWNUYWJsZXMgZmxhZ3MgdG8gYWxsIG9i
amVjdHMgbm93IHNoYXJlZCB3aXRoIHdvcmtlcnMuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFz
ZS5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxFcnJvci5pZGw6CisgICAgICAgICogc3RvcmFn
ZS9TUUxSZXN1bHRTZXQuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlz
dC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGw6CisgICAgICAgIAor
ICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5oOiBBZGQgZGF0YWJhc2VFeGNlZWRlZFF1
b3RhLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXb3JrZXJDb250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVkUXVvdGEpOiBBZGQgc3R1YiBpbXBs
ZW1lbnRhdGlvbiBmb3IgdGVzdGluZzsgeW91IGp1c3QgZ2V0IDVNQiBmb3Igbm93LgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKTogUmVtb3ZlIGludmFsaWQg
YXNzZXJ0aW9uLgorCisgICAgICAgIEFkZCB0aGUgSURMIGZvciB0aGUgY2FsbCB0byBvcGVuRGF0
YWJhc2UuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMC0wMy0y
NCAgRG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBObyByZXZp
ZXcsIHJvbGxpbmcgb3V0IHI1NjQ1My4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU2NDc1KQorKysgV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw5IEBACiAKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiSlNEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2VD
YWxsYmFjay5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xv
YmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkBAIC0xNjcsNiArMTcw
LDI0IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjptZXNzYWdlQ2hhbm5lbCgKIH0KICNlbmRp
ZgogCisjaWYgRU5BQkxFKERBVEFCQVNFKQorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5E
YXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpIAoreyAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsgCisgICAgY29uc3QgVVN0cmluZyYgbmFtZSA9IGFyZ3MuYXQo
MCkudG9TdHJpbmcoZXhlYyk7IAorICAgIGNvbnN0IFVTdHJpbmcmIHZlcnNpb24gPSBhcmdzLmF0
KDEpLnRvU3RyaW5nKGV4ZWMpOyAKKyAgICBjb25zdCBVU3RyaW5nJiBkaXNwbGF5TmFtZSA9IGFy
Z3MuYXQoMikudG9TdHJpbmcoZXhlYyk7IAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6
ZSA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKTsgCisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2s7IAorICAgIGlmICgoYXJncy5zaXplKCkgPj0gNSkgJiYgYXJn
cy5hdCg0KS5pc09iamVjdCgpKSAKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJh
c2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGFyZ3MuYXQoNCkpLCBnbG9iYWxPYmplY3QoKSk7
IAorIAorICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RG
OjpnZXRQdHIoaW1wbCgpLT5vcGVuRGF0YWJhc2UobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUs
IGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsgCisgICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsgCisgICAgcmV0dXJuIHJlc3VsdDsgCit9IAorI2Vu
ZGlmCisgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTY0NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw4IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIlNjaGVkdWxl
ZEFjdGlvbi5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1ZGUgIlY4RGF0YWJhc2Uu
aCIKKyNpbmNsdWRlICJWOERhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJWOFByb3h5Lmgi
CiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRleHRFdmVu
dExpc3RlbmVyLmgiCkBAIC0xNDQsNiArMTQ2LDEyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFdvcmtlckNvbnRleHQKICAgICByZXR1cm4gZ2xvYmFsOwogfQogCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2VDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKSAKK3sgCisgICAgSU5DX1NUQVRTKCJET00uV29ya2VyQ29udGV4dC5v
cGVuRGF0YWJhc2UoKSIpOyAKKyAgICAvLyBJbXBsZW1lbnRhdGlvbiBjb21pbmcgc29vbi4KKyAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOyAKK30gCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBFTkFCTEUoV09SS0VSUykKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFz
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkocmV2aXNp
b24gNTY0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAg
ICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAg
ICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRGF0
YWJhc2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIHZlcnNpb247CiAg
ICAgICAgIFtDdXN0b21dIHZvaWQgY2hhbmdlVmVyc2lvbihpbiBET01TdHJpbmcgb2xkVmVyc2lv
biwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2Fs
bGJhY2ssIGluIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBW
b2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxF
cnJvci5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAkocmV2
aXNpb24gNTY0NzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBb
CiAgICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IK
KyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0g
U1FMRXJyb3IgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBjb2Rl
OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nIG1lc3NhZ2U7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMUmVzdWx0U2V0LmlkbAkocmV2aXNpb24gNTY0NzUpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQCBtb2R1
bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRpb25hbD1EQVRB
QkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwK
KyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTFJlc3VsdFNldCB7CiAgICAgICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBTUUxSZXN1bHRTZXRSb3dMaXN0IHJvd3M7CiAKSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwJKHJldmlzaW9uIDU2NDc1KQorKysgV2Vi
Q29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAg
IENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICAgICAg
T21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gU1FMUmVzdWx0
U2V0Um93TGlzdCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxl
bmd0aDsKICAgICAgICAgW0N1c3RvbV0gRE9NT2JqZWN0IGl0ZW0oaW4gdW5zaWduZWQgbG9uZyBp
bmRleCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwJKHJldmlzaW9uIDU2NDc1
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAg
ICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAg
ICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTFRy
YW5zYWN0aW9uIHsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBleGVjdXRlU3FsKGluIERPTVN0cmlu
ZyBzcWxTdGF0ZW1lbnQsIGluIE9iamVjdEFycmF5IGFyZ3VtZW50cywgaW4gU1FMU3RhdGVtZW50
Q2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2sgZXJyb3JDYWxs
YmFjayk7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9u
IDU2NDc1KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNp
bmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1
ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXZlbnQu
aCIKQEAgLTI2MywxMiArMjY0LDIwIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IFdvcmtlckNvbnRl
eHQ6Om9wZW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKERhdGFiYXNl
Ojppc0F2YWlsYWJsZSgpKTsKICAgICBpZiAoIURhdGFiYXNlOjppc0F2YWlsYWJsZSgpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKHRoaXMs
IG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxi
YWNrLCBlYyk7CiB9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6ZGF0YWJhc2VFeGNlZWRlZFF1b3Rh
KGNvbnN0IFN0cmluZyYpCit7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIGEgcmVhbCBpbXBsZW1lbnRhdGlvbjsgdGhpcyBpcyBhIHRlbXBvcmFyeSBz
b2x1dGlvbiBmb3IgdGVzdGluZy4KKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVs
dFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LnNldFF1b3RhKHNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CisjZW5kaWYKK30KICNl
bmRpZgogCiBib29sIFdvcmtlckNvbnRleHQ6OmlzQ29udGV4dFRocmVhZCgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDU2NDc1KQorKysgV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDggKzExMCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEYXRh
YmFzZVJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgLy8gTm90IGlt
cGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90
YShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIGZvciByZWFs
IHlldC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkg
Y29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDU2NDc1
KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSwxMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIC8vIFdvcmtlclV0aWxz
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgaW1wb3J0U2NyaXB0cygvKltWYXJpYWRpY10gaW4gRE9N
U3RyaW5nIHVybHMgKi8pOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxl
XSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOwotICAgICAgICAvLyBEYXRhYmFzZSBvcGVuRGF0
YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJp
bmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisjaWYgZGVm
aW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBbRW5hYmxl
ZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNh
bGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKICAgICAg
ICAgLy8gRGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGlu
IERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICAgICAgICAgLy8gVGltZXJzCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1NjQ3NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDQwIEBACisyMDEwLTAzLTI0ICBFcmljIFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGFzeW5jIGJpbmRpbmdzIGZvciBXb3JrZXIgYWNjZXNzIHRvIERCCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDk5MgorCisgICAgICAgICogc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBj
b2RlIHdpdGggdGhlIHdvcmtlciB2ZXJzaW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3Jh
Z2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLmh0bWw6IFJlbW92ZWQgcmVm
ZXJlbmNlIHRvIHJlbG9hZGluZywgd2hpY2ggdGhpcyB0ZXN0IGRvZXNuJ3QgZG8uCisgICAgICAg
ICogc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Ut
d29ya2VyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLmpzOiBUaGlzIGlzIHRoZSBleHRyYWN0ZWQgc2hhcmVkIGNvcmUgb2YgdGhlIHRl
c3QuCisgICAgICAgIChmaW5pc2hUZXN0KToKKyAgICAgICAgKHJ1blRlc3QyLmNhdGNoKToKKyAg
ICAgICAgKHJ1blRlc3QyKToKKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuaHRt
bDogUmVmYWN0b3JlZCB0byBzaGFyZSBjb2RlIHdpdGggdGhlIHdvcmtlciB2ZXJzaW9uIG9mIHRo
ZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2Vy
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qczogVGhp
cyBpcyB0aGUgZXh0cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorICAgICAgICAodGhy
b3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nKToKKyAgICAgICAgKHZhcik6CisgICAgICAgICgp
OgorICAgICAgICAocnVuVHJhbnNhY3Rpb25UZXN0KToKKyAgICAgICAgKHJ1blRyYW5zYWN0aW9u
VGVzdHMpOgorICAgICAgICAocnVuVGVzdCk6CisKKyAgICAgICAgVGhpcyBmaWxlIGdldHMgaW5j
bHVkZWQgZnJvbSB3b3JrZXIgZGF0YWJhc2UgdGVzdHM7IGl0IGRvZXMgYWxsIHRoZSBib2lsZXJw
bGF0ZSB0aGF0J3MgbmVlZGVkIG9uIHRoZSBET00gc2lkZS4KKyAgICAgICAgKiBzdG9yYWdlL3Jl
c291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qczogQWRkZWQuCisgICAgICAgIChk
YXRhYmFzZVdvcmtlci5vbm1lc3NhZ2UpOgorICAgICAgICAobG9nKToKKworICAgICAgICBUaGlz
IGZpbGUgaXMgdGhlIGJvaWxlcnBsYXRlIGZvciB0aGUgd29ya2VyIHNpZGUgb2YgdGhlIGRhdGFi
YXNlIHRlc3RzLiAgSXQgd2lsbCBpbXBvcnQgYW5kIHJ1biB0aGUgYWN0dWFsIHRlc3Qgb24gY29t
bWFuZCwgYW5kIHdpbGwgcmVwb3J0IGJhY2sgY29tcGxldGlvbiBhbmQgZXhjZXB0aW9ucy4KKyAg
ICAgICAgKiBzdG9yYWdlL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanM6IEFkZGVkLgorICAg
ICAgICAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUpOgorICAgICAgICAo
bG9nKToKKyAgICAgICAgKG9ubWVzc2FnZSk6CisKIDIwMTAtMDMtMjQgIEVyaWMgVWhyaGFuZSA8
ZXJpY3VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIERPTUNvcmVFeGNlcHRpb24gbmVlZHMgTm9T
dGF0aWNUYWJsZXMgbW9kaWZpZXIKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZl
cnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDU2NDc1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBAQAotVGhpcyB0
ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2
ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3cs
IG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4gQWxzbywgcmVsb2FkaW5nIHRoZSBwYWdl
IHNob3VsZCBub3QgY2F1c2UgYW4gYXNzZXJ0aW9uIGZhaWx1cmUuCitUaGlzIHRlc3RzIHRoYXQg
YSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uIFlv
dSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFib3V0
IG1pc21hdGNoaW5nIHZlcnNpb25zLgogY2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24gY2FsbGJh
Y2sKIGNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2sKIHRyYW5zYWN0aW9uOiBzdGF0ZW1l
bnQgZXJyb3IgY2FsbGJhY2s6IG5vIHN1Y2ggdGFibGU6IEZvb0JhcgpJbmRleDogTGF5b3V0VGVz
dHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRs
ZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitUaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBj
YW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2Vl
IGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5n
IHZlcnNpb25zLgorY2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2sKK2NoYW5nZVZl
cnNpb246IHN1Y2Nlc3MgY2FsbGJhY2sKK3RyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2Fs
bGJhY2s6IG5vIHN1Y2ggdGFibGU6IEZvb0JhcgorVEVTVCBDT01QTEVURS4KKwpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2Utd29ya2VyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2No
YW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNiBAQAorPGh0bWw+IAorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGFi
YXNlLXdvcmtlci1jb250cm9sbGVyLmpzIj48L3NjcmlwdD4gCis8c2NyaXB0PiAKKworZnVuY3Rp
b24gc2V0dXBBbmRSdW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKyAKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCA9ICIiOworICAgIGRhdGFiYXNl
V29ya2VyLnBvc3RNZXNzYWdlKCJpbXBvcnRTY3JpcHRzOmNoYW5nZS12ZXJzaW9uLWhhbmRsZS1y
ZXVzZS5qcyIpOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJydW5UZXN0Iik7Cit9
Cis8L3NjcmlwdD4gCis8L2hlYWQ+IAorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+
IAorPGRpdj5UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIg
Y2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0Jh
ciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgorPHByZSBpZD0i
Y29uc29sZSI+IAorRkFJTFVSRTogdGVzdCBkaWRuJ3QgcnVuLgorPC9wcmU+IAorPC9ib2R5PiAK
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxl
LXJldXNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVy
c2lvbi1oYW5kbGUtcmV1c2UuaHRtbAkocmV2aXNpb24gNTY0NzUpCisrKyBMYXlvdXRUZXN0cy9z
dG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDcwICsxLDI5IEBACiA8aHRtbD4gCiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJjaGFuZ2UtdmVy
c2lvbi1oYW5kbGUtcmV1c2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4gCiBmdW5jdGlvbiBsb2co
bWVzc2FnZSkKIHsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJU
ZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25z
b2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOwogfQogCi1mdW5jdGlvbiBmaW5pc2hU
ZXN0KCkKLXsKLSAgICBsb2coIlRFU1QgQ09NUExFVEUuIik7Ci0KLSAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlE
b25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0
KCkKIHsKICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7CiAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOwogICAgIH0KICAKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
cmVzdWx0IikuaW5uZXJUZXh0ID0gIiI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNv
bnNvbGUiKS5pbm5lclRleHQgPSAiIjsKICAKLSAgICB0cnkgewotICAgICAgICBkYiA9IG9wZW5E
YXRhYmFzZSgiQ2hhbmdlVmVyc2lvbiIsICIiLCAiVGVzdCB0aGF0IGNoYW5naW5nIGEgZGF0YWJh
c2UgdmVyc2lvbiBkb2VzblwndCBraWxsIG91ciBoYW5kbGUgdG8gaXQiLCAxKTsKLSAgICAgICAg
dmFyIHZlcnNpb24gPSBkYi52ZXJzaW9uOwotICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHZlcnNp
b24gPyAocGFyc2VJbnQodmVyc2lvbikgKyAxKS50b1N0cmluZygpIDogIjEiOyAKLSAgICAgICAg
ZGIuY2hhbmdlVmVyc2lvbih2ZXJzaW9uLCBuZXdWZXJzaW9uLCBmdW5jdGlvbih0eCkgewotICAg
ICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOwotICAg
ICAgICB9LCBmdW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9u
OiBlcnJvciBjYWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2UpOwotICAgICAgICB9LCBmdW5jdGlv
bigpIHsKLSAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjayIp
OwotICAgICAgICB9KTsKLSAgICAgICAgCi0gICAgICAgIHNldFRpbWVvdXQocnVuVGVzdDIsIDEw
MDApOwotICAgICAgICAKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGxvZygiY2hhbmdlVmVy
c2lvbiBleGNlcHRpb246ICIgKyBlKTsKLSAgICAgICAgZmluaXNoVGVzdCgpOwotICAgIH0KLX0K
LSAKLWZ1bmN0aW9uIHJ1blRlc3QyKCkKLXsKLSAgICB0cnkgewotICAgICAgICBkYi50cmFuc2Fj
dGlvbihmdW5jdGlvbih0eCkgewotICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICog
ZnJvbSBGb29CYXIiLCBbXSwgZnVuY3Rpb24odHgpIHsKLSAgICAgICAgICAgICAgICBsb2coInRy
YW5zYWN0aW9uOiBzdGF0ZW1lbnQgY2FsbGJhY2siKTsKLSAgICAgICAgICAgICAgICBmaW5pc2hU
ZXN0KCk7Ci0gICAgICAgICAgICB9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsKLSAgICAgICAgICAg
ICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJv
ci5tZXNzYWdlKTsKLSAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgfSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2coInRyYW5zYWN0
aW9uIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgfQorICAg
IHJ1blRlc3QoKTsKIH0KIDwvc2NyaXB0PiAKIDwvaGVhZD4gCi08Ym9keSBvbmxvYWQ9InJ1blRl
c3QoKSI+IAotPGRpdj5UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQg
YWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0
IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNv
LCByZWxvYWRpbmcgdGhlIHBhZ2Ugc2hvdWxkIG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVy
ZS4KLTxwcmUgaWQ9InJlc3VsdCI+IAorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+
IAorPGRpdj5UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIg
Y2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0Jh
ciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgorPHByZSBpZD0i
Y29uc29sZSI+IAogRkFJTFVSRTogdGVzdCBkaWRuJ3QgcnVuLgogPC9wcmU+IAogPC9ib2R5PiAK
SW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxl
LXJldXNlLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVy
c2lvbi1oYW5kbGUtcmV1c2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKK2Z1bmN0
aW9uIGZpbmlzaFRlc3QoKQoreworICAgIGxvZygiVEVTVCBDT01QTEVURS4iKTsKKworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdHJ5IHsK
KyAgICAgICAgZGIgPSBvcGVuRGF0YWJhc2UoIkNoYW5nZVZlcnNpb24iLCAiIiwgIlRlc3QgdGhh
dCBjaGFuZ2luZyBhIGRhdGFiYXNlIHZlcnNpb24gZG9lc24ndCBraWxsIG91ciBoYW5kbGUgdG8g
aXQiLCAxKTsKKyAgICAgICAgdmFyIHZlcnNpb24gPSBkYi52ZXJzaW9uOworICAgICAgICB2YXIg
bmV3VmVyc2lvbiA9IHZlcnNpb24gPyAocGFyc2VJbnQodmVyc2lvbikgKyAxKS50b1N0cmluZygp
IDogIjEiOyAKKyAgICAgICAgZGIuY2hhbmdlVmVyc2lvbih2ZXJzaW9uLCBuZXdWZXJzaW9uLCBm
dW5jdGlvbih0eCkgeworICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlv
biBjYWxsYmFjayIpOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAg
bG9nKCJjaGFuZ2VWZXJzaW9uOiBlcnJvciBjYWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2UpOwor
ICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjog
c3VjY2VzcyBjYWxsYmFjayIpOworICAgICAgICAgICAgcnVuVGVzdDIoKTsKKyAgICAgICAgfSk7
CisgICAgICAgIAorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9u
IGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgfQorfQorIAor
ZnVuY3Rpb24gcnVuVGVzdDIoKQoreworICAgIHRyeSB7CisgICAgICAgIGRiLnRyYW5zYWN0aW9u
KGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBmcm9t
IEZvb0JhciIsIFtdLCBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgIGxvZygidHJhbnNh
Y3Rpb246IHN0YXRlbWVudCBjYWxsYmFjayIpOworICAgICAgICAgICAgICAgIGZpbmlzaFRlc3Qo
KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4LCBlcnJvcikgeworICAgICAgICAgICAgICAg
IGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazogIiArIGVycm9yLm1l
c3NhZ2UpOworICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICB9KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygidHJhbnNhY3Rpb24g
ZXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9Cit9CkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29y
a2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZXhl
Y3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9u
CitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24K
K1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4
ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3Fs
KCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNx
bCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIi
LCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNx
bCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1
dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwpIGRpZCBub3QgdGhyb3cgYW4g
ZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCB1bmRlZmluZWQpIGRpZCBub3Qg
dGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCB7IH0pIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCBu
dWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVs
bCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhl
Y3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgor
UEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1Mu
IGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMg
ZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0KSB0
aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJv
d09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhyZXcgYW4gZXhjZXB0
aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgMCkgdGhyZXcgYW4gZXhjZXB0
aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgIiIpIHRocmV3IGFuIGV4Y2Vw
dGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIDApIHRocmV3IGFu
IGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsICIiKSB0
aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxs
LCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtl
ci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQorewor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJpbXBvcnRT
Y3JpcHRzOmV4ZWN1dGUtc3FsLWFyZ3MuanMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVz
c2FnZSgicnVuVGVzdCIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2Fk
PSJzZXR1cEFuZFJ1blRlc3QoKSI+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4K
KworPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0
bWwJKHJldmlzaW9uIDU2NDc1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICsxLDI4IEBACiA8aHRtbD4KIAogPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iZXhlY3V0ZS1zcWwtYXJncy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
PgogCi12YXIgdGhyb3dPblRvU3RyaW5nT2JqZWN0ID0geyB9OwotdGhyb3dPblRvU3RyaW5nT2Jq
ZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcg
b24gdGhpcyBvYmplY3QuIiB9OwotCi12YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsK
LXRocm93T25HZXRMZW5ndGhPYmplY3QuX19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rp
b24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7Ci0K
LXZhciB0aHJvd09uR2V0WmVyb09iamVjdCA9IHsgbGVuZ3RoOiAxIH07Ci10aHJvd09uR2V0WmVy
b09iamVjdC5fX2RlZmluZUdldHRlcl9fKCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90
IGdldCAwIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LiI7IH0pOwotCi12YXIgZXhwZWN0Tm9FeGNl
cHRpb24gPSBbCi0gICAgJ251bGwnLAotICAgICd1bmRlZmluZWQnLAotICAgICcwJywKLSAgICAn
IiInLAotICAgICciIiwgbnVsbCcsCi0gICAgJyIiLCB1bmRlZmluZWQnLAotICAgICciIiwgW10n
LAotICAgICciIiwgWyAiYXJnMCIgXScsCi0gICAgJyIiLCB7IH0nLAotICAgICciIiwgeyBsZW5n
dGg6IDAgfScsCi0gICAgJyIiLCB7IGxlbmd0aDogMSwgMDogImFyZzAiIH0nLAotICAgICciIiwg
bnVsbCwgbnVsbCcsCi0gICAgJyIiLCBudWxsLCB1bmRlZmluZWQnLAotICAgICciIiwgbnVsbCwg
eyB9JywKLSAgICAnIiIsIG51bGwsIG51bGwsIG51bGwnLAotICAgICciIiwgbnVsbCwgbnVsbCwg
dW5kZWZpbmVkJywKLSAgICAnIiIsIG51bGwsIG51bGwsIHsgfScsCi1dOwotCi12YXIgZXhwZWN0
RXhjZXB0aW9uID0gWwotICAgICcnLAotICAgICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAotICAg
ICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCcsCi0gICAgJyIiLCB0aHJvd09uR2V0WmVyb09i
amVjdCcsCi0gICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09iamVjdCBdJywKLSAgICAnIiIsIDAn
LAotICAgICciIiwgIiInLAotICAgICciIiwgbnVsbCwgMCcsCi0gICAgJyIiLCBudWxsLCAiIics
Ci0gICAgJyIiLCBudWxsLCBudWxsLCAwJywKLSAgICAnIiIsIG51bGwsIG51bGwsICIiJywKLV07
Ci0KLWZ1bmN0aW9uIHdyaXRlTWVzc2FnZVRvTG9nKG1lc3NhZ2UpCitmdW5jdGlvbiBsb2cobWVz
c2FnZSkKIHsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4
dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2Fj
dGlvbiwgcGFyYW1ldGVyTGlzdCkKLXsKLSAgICB0cnkgewotICAgICAgICBldmFsKCd0cmFuc2Fj
dGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKLSAgICAgICAgcmV0dXJu
IG51bGw7Ci0gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIHJldHVybiBleGNlcHRp
b247Ci0gICAgfQotfQotCi1mdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24s
IHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKLXsKLSAgICB2YXIgZXhjZXB0aW9uID0g
dHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7Ci0gICAgaWYgKGV4cGVj
dEV4Y2VwdGlvbikgewotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVN
ZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJl
dyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHdyaXRlTWVzc2FnZVRvTG9nKCIqRkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3Qg
KyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBl
eGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsg
ZXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2co
IlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbiIpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0
cmFuc2FjdGlvbikKLXsKLSAgICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCi0gICAgICAg
IHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZh
bHNlKTsKLSAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9uKQotICAgICAgICBydW5UcmFuc2Fj
dGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Ci0KLSAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0
dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7CiAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgIH0KLQotICAgIHZhciBkYiA9IG9wZW5E
YXRhYmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0IiwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9m
IHRoZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOwotICAgIGRi
LnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVzdHMpOworICAgIHJ1blRlc3QoKTsKIH0KIAog
PC9zY3JpcHQ+CiA8L2hlYWQ+CiAKLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxib2R5IG9u
bG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPgogPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2Jv
ZHk+CiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODYgQEAKK3ZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07
Cit0aHJvd09uVG9TdHJpbmdPYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJD
YW5ub3QgY2FsbCB0b1N0cmluZyBvbiB0aGlzIG9iamVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0
TGVuZ3RoT2JqZWN0ID0geyB9OwordGhyb3dPbkdldExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRl
cl9fKCJsZW5ndGgiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0
aGlzIG9iamVjdC4iOyB9KTsKKwordmFyIHRocm93T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6
IDEgfTsKK3Rocm93T25HZXRaZXJvT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlv
biAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IDAgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7
CisKK3ZhciBleHBlY3ROb0V4Y2VwdGlvbiA9IFsKKyAgICAnbnVsbCcsCisgICAgJ3VuZGVmaW5l
ZCcsCisgICAgJzAnLAorICAgICciIicsCisgICAgJyIiLCBudWxsJywKKyAgICAnIiIsIHVuZGVm
aW5lZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJhcmcwIiBdJywKKyAgICAnIiIsIHsg
fScsCisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAnIiIsIHsgbGVuZ3RoOiAxLCAwOiAi
YXJnMCIgfScsCisgICAgJyIiLCBudWxsLCBudWxsJywKKyAgICAnIiIsIG51bGwsIHVuZGVmaW5l
ZCcsCisgICAgJyIiLCBudWxsLCB7IH0nLAorICAgICciIiwgbnVsbCwgbnVsbCwgbnVsbCcsCisg
ICAgJyIiLCBudWxsLCBudWxsLCB1bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgbnVsbCwgeyB9
JywKK107CisKK3ZhciBleHBlY3RFeGNlcHRpb24gPSBbCisgICAgJycsCisgICAgJ3Rocm93T25U
b1N0cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0JywKKyAgICAn
IiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dPblRvU3RyaW5nT2Jq
ZWN0IF0nLAorICAgICciIiwgMCcsCisgICAgJyIiLCAiIicsCisgICAgJyIiLCBudWxsLCAwJywK
KyAgICAnIiIsIG51bGwsICIiJywKKyAgICAnIiIsIG51bGwsIG51bGwsIDAnLAorICAgICciIiwg
bnVsbCwgbnVsbCwgIiInLAorXTsKKworZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlv
biwgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICB0cnkgeworICAgICAgICBldmFsKCd0cmFuc2FjdGlv
bi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKKyAgICAgICAgcmV0dXJuIG51
bGw7CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgIHJldHVybiBleGNlcHRpb247
CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBh
cmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKK3sKKyAgICB2YXIgZXhjZXB0aW9uID0gdHJ5
RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7CisgICAgaWYgKGV4cGVjdEV4
Y2VwdGlvbikgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgbG9nKCJQQVNT
LiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFz
IGV4cGVjdGVkLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIipGQUlMKi4gZXhl
Y3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9u
Iik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGxv
ZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhj
ZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJQ
QVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24iKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJh
bnNhY3Rpb24pCit7CisgICAgZm9yIChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBy
dW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxz
ZSk7CisgICAgZm9yIChpIGluIGV4cGVjdEV4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rp
b25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNlcHRpb25baV0sIHRydWUpOworCisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKworICAgIHZhciBk
YiA9IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0IiwgIjEuMCIsICJUZXN0IG9mIGhh
bmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEp
OworICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVzdHMpOworfQpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29y
a2VyLWNvbnRyb2xsZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Jl
c291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNyBAQAordmFyIGRhdGFiYXNlV29ya2VyID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL2Rh
dGFiYXNlLXdvcmtlci5qcycpOworCitkYXRhYmFzZVdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlv
bihldmVudCkgeworICAgIGlmIChldmVudC5kYXRhLmluZGV4T2YoJ2xvZzonKSA9PSAwKQorICAg
ICAgICBsb2coZXZlbnQuZGF0YS5zdWJzdHJpbmcoNCkpOworICAgIGVsc2UgaWYgKGV2ZW50LmRh
dGEgPT0gJ25vdGlmeURvbmUnKSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0gZWxzZQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtZXNz
YWdlOiAiICsgZXZlbnQpOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxu
IjsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29y
a2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFi
YXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2RhdGFiYXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBAQAordmFy
IHdpbmRvdyA9IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlcjogeworICAgICAgICBub3RpZnlE
b25lOiBmdW5jdGlvbigpIHsgcG9zdE1lc3NhZ2UoIm5vdGlmeURvbmUiKTsgfQorICAgIH0KK307
Cit2YXIgbGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXI7
CisKK2Z1bmN0aW9uIGxvZyhzKSB7CisgICAgcG9zdE1lc3NhZ2UoImxvZzoiICsgcyk7Cit9CisK
K29ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGV2
ZW50LmRhdGEuaW5kZXhPZigiaW1wb3J0U2NyaXB0czoiKSA9PSAwKSB7CisgICAgICAgICAgICB2
YXIgc2NyaXB0cyA9IGV2ZW50LmRhdGEuc3Vic3RyaW5nKCJpbXBvcnRTY3JpcHRzOiIubGVuZ3Ro
KS5zcGxpdCgiLCIpOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzY3JpcHRzKQorICAgICAg
ICAgICAgICAgIHNjcmlwdHNbaV0gPSAiLi4vIiArIHNjcmlwdHNbaV07CisgICAgICAgICAgICBp
bXBvcnRTY3JpcHRzKHNjcmlwdHMpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0g
InJ1blRlc3QiKQorICAgICAgICAgICAgcnVuVGVzdCgpOyAvLyBNdXN0IGJlIGRlZmluZWQgYnkg
c29tZSBpbXBvcnRlZCBzY3JpcHQuCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiUmVj
ZWl2ZWQgdW5leHBlY3RlZCBtZXNzYWdlOiAiICsgZXZlbnQuZGF0YSk7CisgICAgfSBjYXRjaCAo
ZXgpIHsKKyAgICAgICAgbG9nKCJXb3JrZXIgY2F1Z2h0IGV4Y2VwdGlvbjogIiArIGV4KTsKKyAg
ICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9
Owo=
</data>
<flag name="review"
          id="34968"
          type_id="1"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53213</attachid>
            <date>2010-04-12 19:40:03 -0700</date>
            <delta_ts>2010-04-13 15:45:32 -0700</delta_ts>
            <desc>Fixed changelogs, moved worker tests, made database names unique.</desc>
            <filename>five.patch</filename>
            <type>text/plain</type>
            <size>20141</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDU3NDg4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQtMTIgIEVyaWMgVWhyaGFuZSAgPGVy
aWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAg
ICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmh0bWw6IFJlZmFjdG9y
ZWQgdG8gc2hhcmUgY29kZSB3aXRoIHRoZSB3b3JrZXIgdmVyc2lvbiBvZiB0aGUgdGVzdC4KKyAg
ICAgICAgKiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC5odG1s
OiBSZW1vdmVkIHJlZmVyZW5jZSB0byByZWxvYWRpbmcsIHdoaWNoIHRoaXMgdGVzdCBkb2Vzbid0
IGRvLgorICAgICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzOiBU
aGlzIGlzIHRoZSBleHRyYWN0ZWQgc2hhcmVkIGNvcmUgb2YgdGhlIHRlc3QuCisgICAgICAgICog
c3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWw6IFJlZmFjdG9yZWQgdG8gc2hhcmUgY29kZSB3
aXRoIHRoZSB3b3JrZXIgdmVyc2lvbiBvZiB0aGUgdGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2V4
ZWN1dGUtc3FsLWFyZ3MuanM6IFRoaXMgaXMgdGhlIGV4dHJhY3RlZCBzaGFyZWQgY29yZSBvZiB0
aGUgdGVzdC4KKworICAgICAgICBUaGVzZSBhcmUgdGhlIHdvcmtlciB2ZXJzaW9ucyBvZiB0aGUg
dGVzdHM7IHRoZXkncmUgdGlueSBzaGltcyBhcm91bmQgc2hhcmVkIGNvZGUuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Ut
d29ya2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL2NoYW5n
ZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXIuaHRtbDogQWRkZWQuCisgICAgICAgIFRoaXMg
ZmlsZSBnZXRzIGluY2x1ZGVkIGZyb20gd29ya2VyIGRhdGFiYXNlIHRlc3RzOyBpdCBkb2VzIGFs
bCB0aGUgYm9pbGVycGxhdGUgdGhhdCdzIG5lZWRlZCBvbiB0aGUgRE9NIHNpZGUuCisgICAgICAg
ICogZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qczog
QWRkZWQuCisgICAgICAgIFRoaXMgZmlsZSBpcyB0aGUgYm9pbGVycGxhdGUgZm9yIHRoZSB3b3Jr
ZXIgc2lkZSBvZiB0aGUgZGF0YWJhc2UgdGVzdHMuICBJdCB3aWxsIGltcG9ydCBhbmQgcnVuIHRo
ZSBhY3R1YWwgdGVzdCBvbiBjb21tYW5kLCBhbmQgd2lsbCByZXBvcnQgYmFjayBjb21wbGV0aW9u
IGFuZCBleGNlcHRpb25zLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJh
c2Utd29ya2VyLmpzOiBBZGRlZC4KKwogMjAxMC0wNC0xMiAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13
b3JrZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitU
aGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcg
aXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBi
ZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgorY2hhbmdlVmVyc2lvbjogdHJh
bnNhY3Rpb24gY2FsbGJhY2sKK2NoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2sKK3RyYW5z
YWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6IG5vIHN1Y2ggdGFibGU6IEZvb0Jhcgor
VEVTVCBDT01QTEVURS4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12
ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS13b3JrZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPGh0
bWw+IAorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250
cm9sbGVyLmpzIj48L3NjcmlwdD4gCis8c2NyaXB0PiAKKworZnVuY3Rpb24gc2V0dXBBbmRSdW5U
ZXN0KCkKK3sKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKyAKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpLmlubmVyVGV4dCA9ICIiOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNz
YWdlKCJpbXBvcnRTY3JpcHRzOi4uLy4uL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLmpzIik7CisgICAgZGF0YWJhc2VXb3JrZXIucG9zdE1lc3NhZ2UoInJ1blRlc3QiKTsKK30K
Kzwvc2NyaXB0PiAKKzwvaGVhZD4gCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4g
Cis8ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBj
aGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFy
IHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCis8cHJlIGlkPSJj
b25zb2xlIj4gCitGQUlMVVJFOiB0ZXN0IGRpZG4ndCBydW4uCis8L3ByZT4gCis8L2JvZHk+IAor
PC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mt
d29ya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorUEFTUy4gZXhlY3V0ZVNxbChudWxs
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCh1bmRlZmluZWQp
IGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKDApIGRpZCBub3Qg
dGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIFtdKSBkaWQgbm90IHRocm93IGFuIGV4
Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyAiYXJnMCIgXSkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgfSkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAwIH0pIGRpZCBub3QgdGhy
b3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMSwgMDogImFy
ZzAiIH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBu
dWxsLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhl
Y3V0ZVNxbCgiIiwgbnVsbCwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRp
b24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwsIHVuZGVmaW5lZCkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwsIHsgfSkg
ZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoKSB0aHJldyBhbiBl
eGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKHRocm93T25Ub1N0cmluZ09i
amVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgdGhyb3dPbkdldFplcm9PYmplY3QpIHRocmV3IGFuIGV4
Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIFsgdGhyb3dPblRvU3Ry
aW5nT2JqZWN0IF0pIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1
dGVTcWwoIiIsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1
dGVTcWwoIiIsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVj
dXRlU3FsKCIiLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNT
LiBleGVjdXRlU3FsKCIiLCBudWxsLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgMCkgdGhyZXcgYW4gZXhjZXB0aW9u
IGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgIiIpIHRocmV3
IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdD4KKworZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNs
ZWFyQWxsRGF0YWJhc2VzKCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1Rl
eHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IH0KKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVzc2FnZSgiaW1wb3J0U2NyaXB0czouLi8uLi9z
dG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVz
c2FnZSgicnVuVGVzdCIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2Fk
PSJzZXR1cEFuZFJ1blRlc3QoKSI+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4K
KworPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRh
YmFzZS13b3JrZXItY29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3Jr
ZXItY29udHJvbGxlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAordmFyIGRhdGFi
YXNlV29ya2VyID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcycpOwor
CitkYXRhYmFzZVdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChl
dmVudC5kYXRhLmluZGV4T2YoJ2xvZzonKSA9PSAwKQorICAgICAgICBsb2coZXZlbnQuZGF0YS5z
dWJzdHJpbmcoNCkpOworICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gJ25vdGlmeURvbmUnKSB7
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtZXNzYWdlOiAiICsgZXZlbnQpOworfQor
CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKK30KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRh
YmFzZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciB3aW5kb3cg
PSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXI6IHsKKyAgICAgICAgbm90aWZ5RG9uZTogZnVu
Y3Rpb24oKSB7IHBvc3RNZXNzYWdlKCJub3RpZnlEb25lIik7IH0KKyAgICB9Cit9OwordmFyIGxh
eW91dFRlc3RDb250cm9sbGVyID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyOworCitmdW5j
dGlvbiBsb2cocykgeworICAgIHBvc3RNZXNzYWdlKCJsb2c6IiArIHMpOworfQorCitvbm1lc3Nh
Z2UgPSBmdW5jdGlvbihldmVudCkgeworICAgIHRyeSB7CisgICAgICAgIGlmIChldmVudC5kYXRh
LmluZGV4T2YoImltcG9ydFNjcmlwdHM6IikgPT0gMCkgeworICAgICAgICAgICAgdmFyIHNjcmlw
dHMgPSBldmVudC5kYXRhLnN1YnN0cmluZygiaW1wb3J0U2NyaXB0czoiLmxlbmd0aCkuc3BsaXQo
IiwiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc2NyaXB0cykKKyAgICAgICAgICAgICAg
ICBzY3JpcHRzW2ldID0gIi4uLyIgKyBzY3JpcHRzW2ldOworICAgICAgICAgICAgaW1wb3J0U2Ny
aXB0cyhzY3JpcHRzKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhID09ICJydW5UZXN0
IikKKyAgICAgICAgICAgIHJ1blRlc3QoKTsgLy8gTXVzdCBiZSBkZWZpbmVkIGJ5IHNvbWUgaW1w
b3J0ZWQgc2NyaXB0LgorICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIlJlY2VpdmVkIHVu
ZXhwZWN0ZWQgbWVzc2FnZTogIiArIGV2ZW50LmRhdGEpOworICAgIH0gY2F0Y2ggKGV4KSB7Cisg
ICAgICAgIGxvZygiV29ya2VyIGNhdWdodCBleGNlcHRpb246ICIgKyBleCk7CisgICAgICAgIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfTsKKwordmFy
IERCX1RFU1RfU1VGRklYID0gIl93b3JrZXIiOwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9j
aGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gNTc0ODgpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBA
Ci1UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdp
bmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJs
ZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRpbmcg
dGhlIHBhZ2Ugc2hvdWxkIG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KK1RoaXMgdGVz
dHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVy
c2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBu
b3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCiBjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlv
biBjYWxsYmFjawogY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawogdHJhbnNhY3Rpb246
IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCkluZGV4OiBM
YXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
Lmh0bWwJKHJldmlzaW9uIDU3NDg4KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVy
c2lvbi1oYW5kbGUtcmV1c2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMSwzMiBAQAog
PGh0bWw+IAogPGhlYWQ+Cis8c2NyaXB0IHNyYz0iY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+IAotZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCi17Ci0gICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsg
IlxuIjsKLX0KIAotZnVuY3Rpb24gZmluaXNoVGVzdCgpCi17Ci0gICAgbG9nKCJURVNUIENPTVBM
RVRFLiIpOwordmFyIERCX1RFU1RfU1VGRklYID0gIl9kb20iOwogCi0gICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7CiB9CiAKLWZ1bmN0
aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmNsZWFyQWxsRGF0YWJhc2VzKCk7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwog
ICAgIH0KICAKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0
ID0gIiI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQg
PSAiIjsKICAKLSAgICB0cnkgewotICAgICAgICBkYiA9IG9wZW5EYXRhYmFzZSgiQ2hhbmdlVmVy
c2lvbiIsICIiLCAiVGVzdCB0aGF0IGNoYW5naW5nIGEgZGF0YWJhc2UgdmVyc2lvbiBkb2Vzblwn
dCBraWxsIG91ciBoYW5kbGUgdG8gaXQiLCAxKTsKLSAgICAgICAgdmFyIHZlcnNpb24gPSBkYi52
ZXJzaW9uOwotICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHZlcnNpb24gPyAocGFyc2VJbnQodmVy
c2lvbikgKyAxKS50b1N0cmluZygpIDogIjEiOyAKLSAgICAgICAgZGIuY2hhbmdlVmVyc2lvbih2
ZXJzaW9uLCBuZXdWZXJzaW9uLCBmdW5jdGlvbih0eCkgewotICAgICAgICAgICAgbG9nKCJjaGFu
Z2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOwotICAgICAgICB9LCBmdW5jdGlvbihl
cnJvcikgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBlcnJvciBjYWxsYmFjazog
IiArIGVycm9yLm1lc3NhZ2UpOwotICAgICAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAg
IGxvZygiY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjayIpOwotICAgICAgICB9KTsKLSAg
ICAgICAgCi0gICAgICAgIHNldFRpbWVvdXQocnVuVGVzdDIsIDEwMDApOwotICAgICAgICAKLSAg
ICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbiBleGNlcHRpb246ICIg
KyBlKTsKLSAgICAgICAgZmluaXNoVGVzdCgpOwotICAgIH0KLX0KLSAKLWZ1bmN0aW9uIHJ1blRl
c3QyKCkKLXsKLSAgICB0cnkgewotICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkg
ewotICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogZnJvbSBGb29CYXIiLCBbXSwg
ZnVuY3Rpb24odHgpIHsKLSAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1l
bnQgY2FsbGJhY2siKTsKLSAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAg
ICB9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0
aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKLSAgICAg
ICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0g
ICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2coInRyYW5zYWN0aW9uIGV4Y2VwdGlvbjogIiAr
IGUpOwotICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgfQorICAgIHJ1blRlc3QoKTsKIH0KIDwv
c2NyaXB0PiAKIDwvaGVhZD4gCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+IAotPGRpdj5UaGlz
IHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRz
IHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxv
dywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRpbmcgdGhlIHBh
Z2Ugc2hvdWxkIG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KLTxwcmUgaWQ9InJlc3Vs
dCI+IAorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+IAorPGRpdj5UaGlzIHRlc3Rz
IHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNp
b24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90
IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgorPHByZSBpZD0iY29uc29sZSI+IAogRkFJTFVS
RTogdGVzdCBkaWRuJ3QgcnVuLgogPC9wcmU+IAogPC9ib2R5PiAKSW5kZXg6IExheW91dFRlc3Rz
L3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Uu
anMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQor
eworICAgIGxvZygiVEVTVCBDT01QTEVURS4iKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
K30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZGIgPSBvcGVu
RGF0YWJhc2UoIkNoYW5nZVZlcnNpb24iICsgREJfVEVTVF9TVUZGSVgsICIiLCAiVGVzdCB0aGF0
IGNoYW5naW5nIGEgZGF0YWJhc2UgdmVyc2lvbiBkb2Vzbid0IGtpbGwgb3VyIGhhbmRsZSB0byBp
dCIsIDEpOworICAgICAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAgICAgIHZhciBu
ZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRvU3RyaW5nKCkg
OiAiMSI7IAorICAgICAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1
bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9u
IGNhbGxiYWNrIik7CisgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICBs
b2coImNoYW5nZVZlcnNpb246IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Cisg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBz
dWNjZXNzIGNhbGxiYWNrIik7CisgICAgICAgICAgICBydW5UZXN0MigpOworICAgICAgICB9KTsK
KyAgICAgICAgCisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBsb2coImNoYW5nZVZlcnNpb24g
ZXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9Cit9CisgCitm
dW5jdGlvbiBydW5UZXN0MigpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZGIudHJhbnNhY3Rpb24o
ZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20g
Rm9vQmFyIiwgW10sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgbG9nKCJ0cmFuc2Fj
dGlvbjogc3RhdGVtZW50IGNhbGxiYWNrIik7CisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgp
OworICAgICAgICAgICAgfSwgZnVuY3Rpb24odHgsIGVycm9yKSB7CisgICAgICAgICAgICAgICAg
bG9nKCJ0cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVz
c2FnZSk7CisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0pOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbiBl
eGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgZmluaXNoVGVzdCgpOworICAgIH0KK30KSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCShyZXZpc2lvbiA1NzQ4
OCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDEwOCArMSwzMCBAQAogPGh0bWw+CiAKIDxoZWFkPgorPHNjcmlwdCBzcmM9
ImV4ZWN1dGUtc3FsLWFyZ3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIAotdmFyIHRocm93T25U
b1N0cmluZ09iamVjdCA9IHsgfTsKLXRocm93T25Ub1N0cmluZ09iamVjdC50b1N0cmluZyA9IGZ1
bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nIG9uIHRoaXMgb2JqZWN0LiIg
fTsKK3ZhciBEQl9URVNUX1NVRkZJWCA9ICJfZG9tIjsKIAotdmFyIHRocm93T25HZXRMZW5ndGhP
YmplY3QgPSB7IH07Ci10aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oImxl
bmd0aCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3RoIG9mIHRoaXMgb2Jq
ZWN0LiI7IH0pOwotCi12YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxlbmd0aDogMSB9Owot
dGhyb3dPbkdldFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1bmN0aW9uICgpIHsg
dGhyb3cgIkNhbm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4iOyB9KTsKLQotdmFy
IGV4cGVjdE5vRXhjZXB0aW9uID0gWwotICAgICdudWxsJywKLSAgICAndW5kZWZpbmVkJywKLSAg
ICAnMCcsCi0gICAgJyIiJywKLSAgICAnIiIsIG51bGwnLAotICAgICciIiwgdW5kZWZpbmVkJywK
LSAgICAnIiIsIFtdJywKLSAgICAnIiIsIFsgImFyZzAiIF0nLAotICAgICciIiwgeyB9JywKLSAg
ICAnIiIsIHsgbGVuZ3RoOiAwIH0nLAotICAgICciIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9
JywKLSAgICAnIiIsIG51bGwsIG51bGwnLAotICAgICciIiwgbnVsbCwgdW5kZWZpbmVkJywKLSAg
ICAnIiIsIG51bGwsIHsgfScsCi0gICAgJyIiLCBudWxsLCBudWxsLCBudWxsJywKLSAgICAnIiIs
IG51bGwsIG51bGwsIHVuZGVmaW5lZCcsCi0gICAgJyIiLCBudWxsLCBudWxsLCB7IH0nLAotXTsK
LQotdmFyIGV4cGVjdEV4Y2VwdGlvbiA9IFsKLSAgICAnJywKLSAgICAndGhyb3dPblRvU3RyaW5n
T2JqZWN0JywKLSAgICAnIiIsIHRocm93T25HZXRMZW5ndGhPYmplY3QnLAotICAgICciIiwgdGhy
b3dPbkdldFplcm9PYmplY3QnLAotICAgICciIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXScs
Ci0gICAgJyIiLCAwJywKLSAgICAnIiIsICIiJywKLSAgICAnIiIsIG51bGwsIDAnLAotICAgICci
IiwgbnVsbCwgIiInLAotICAgICciIiwgbnVsbCwgbnVsbCwgMCcsCi0gICAgJyIiLCBudWxsLCBu
dWxsLCAiIicsCi1dOwotCi1mdW5jdGlvbiB3cml0ZU1lc3NhZ2VUb0xvZyhtZXNzYWdlKQorZnVu
Y3Rpb24gbG9nKG1lc3NhZ2UpCiB7CiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNv
bGUiKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7CiB9CiAKLWZ1bmN0aW9uIHRyeUV4ZWN1
dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAg
ZXZhbCgndHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsgcGFyYW1ldGVyTGlzdCArICcpJyk7Ci0g
ICAgICAgIHJldHVybiBudWxsOwotICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewotICAgICAgICBy
ZXR1cm4gZXhjZXB0aW9uOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0
KHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBlY3RFeGNlcHRpb24pCi17Ci0gICAgdmFy
IGV4Y2VwdGlvbiA9IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpOwot
ICAgIGlmIChleHBlY3RFeGNlcHRpb24pIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgIHdyaXRlTWVzc2FnZVRvTG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJM
aXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBw
YXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9M
b2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4
Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRl
TWVzc2FnZVRvTG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlk
IG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHJ1blRyYW5z
YWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCi17Ci0gICAgZm9yIChpIGluIGV4cGVjdE5vRXhjZXB0
aW9uKQotICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhj
ZXB0aW9uW2ldLCBmYWxzZSk7Ci0gICAgZm9yIChpIGluIGV4cGVjdEV4Y2VwdGlvbikKLSAgICAg
ICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNlcHRpb25baV0sIHRy
dWUpOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotCi1mdW5jdGlvbiBydW5UZXN0KCkK
K2Z1bmN0aW9uIHNldHVwQW5kUnVuVGVzdCgpCiB7CiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5jbGVhckFsbERhdGFi
YXNlcygpOwogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICB9Ci0KLSAgICB2
YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkV4ZWN1dGVTUUxBcmdzVGVzdCIsICIxLjAiLCAiVGVzdCBv
ZiBoYW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwi
LCAxKTsKLSAgICBkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKKyAgICBydW5U
ZXN0KCk7CiB9CiAKIDwvc2NyaXB0PgogPC9oZWFkPgogCi08Ym9keSBvbmxvYWQ9InJ1blRlc3Qo
KSI+Cis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KIDxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgogPC9ib2R5PgogCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3Fs
LWFyZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACit2YXIgdGhyb3dPblRvU3RyaW5n
T2JqZWN0ID0geyB9OwordGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24g
KCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9OworCit2
YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKK3Rocm93T25HZXRMZW5ndGhPYmplY3Qu
X19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdl
dCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciB0aHJvd09uR2V0WmVyb09iamVj
dCA9IHsgbGVuZ3RoOiAxIH07Cit0aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdldHRlcl9f
KCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9mIHRoaXMg
b2JqZWN0LiI7IH0pOworCit2YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCisgICAgJ251bGwnLAor
ICAgICd1bmRlZmluZWQnLAorICAgICcwJywKKyAgICAnIiInLAorICAgICciIiwgbnVsbCcsCisg
ICAgJyIiLCB1bmRlZmluZWQnLAorICAgICciIiwgW10nLAorICAgICciIiwgWyAiYXJnMCIgXScs
CisgICAgJyIiLCB7IH0nLAorICAgICciIiwgeyBsZW5ndGg6IDAgfScsCisgICAgJyIiLCB7IGxl
bmd0aDogMSwgMDogImFyZzAiIH0nLAorICAgICciIiwgbnVsbCwgbnVsbCcsCisgICAgJyIiLCBu
dWxsLCB1bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgeyB9JywKKyAgICAnIiIsIG51bGwsIG51
bGwsIG51bGwnLAorICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkJywKKyAgICAnIiIsIG51
bGwsIG51bGwsIHsgfScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9uID0gWworICAgICcnLAor
ICAgICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAorICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9i
amVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCisgICAgJyIiLCBbIHRocm93
T25Ub1N0cmluZ09iamVjdCBdJywKKyAgICAnIiIsIDAnLAorICAgICciIiwgIiInLAorICAgICci
IiwgbnVsbCwgMCcsCisgICAgJyIiLCBudWxsLCAiIicsCisgICAgJyIiLCBudWxsLCBudWxsLCAw
JywKKyAgICAnIiIsIG51bGwsIG51bGwsICIiJywKK107CisKK2Z1bmN0aW9uIHRyeUV4ZWN1dGVT
cWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZXZh
bCgndHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsgcGFyYW1ldGVyTGlzdCArICcpJyk7CisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICByZXR1
cm4gZXhjZXB0aW9uOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0KHRy
YW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBlY3RFeGNlcHRpb24pCit7CisgICAgdmFyIGV4
Y2VwdGlvbiA9IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpOworICAg
IGlmIChleHBlY3RFeGNlcHRpb24pIHsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAg
ICAgIGxvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFu
IGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9n
KCIqRkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93
IGFuIGV4Y2VwdGlvbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisg
ICAgICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIp
IHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGxvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2Fj
dGlvblRlc3RzKHRyYW5zYWN0aW9uKQoreworICAgIGZvciAoaSBpbiBleHBlY3ROb0V4Y2VwdGlv
bikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3ROb0V4Y2Vw
dGlvbltpXSwgZmFsc2UpOworICAgIGZvciAoaSBpbiBleHBlY3RFeGNlcHRpb24pCisgICAgICAg
IHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0RXhjZXB0aW9uW2ldLCB0cnVl
KTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7
CisKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkV4ZWN1dGVTUUxBcmdzVGVzdCIgKyBEQl9U
RVNUX1NVRkZJWCwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8g
U1FMVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOworICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRy
YW5zYWN0aW9uVGVzdHMpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53290</attachid>
            <date>2010-04-13 15:45:32 -0700</date>
            <delta_ts>2010-04-13 18:19:36 -0700</delta_ts>
            <desc>The previous patch was missing the WebCore changes.</desc>
            <filename>five.patch</filename>
            <type>text/plain</type>
            <size>29587</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzQ4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQtMTIgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA0LTEy
ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
YW4gQmVybnN0ZWluLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTc0ODgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAK
IAogI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5oIgogCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJKU0RhdGFiYXNlLmgiCisjaW5jbHVkZSAiSlNEYXRhYmFzZUNhbGxiYWNrLmgi
CiAjaW5jbHVkZSAiSlNET01CaW5kaW5nLmgiCiAjaW5jbHVkZSAiSlNET01HbG9iYWxPYmplY3Qu
aCIKICNpbmNsdWRlICJKU0V2ZW50TGlzdGVuZXIuaCIKQEAgLTE2Miw2ICsxNjUsMjQgQEAgSlNW
YWx1ZSBKU1dvcmtlckNvbnRleHQ6Om1lc3NhZ2VDaGFubmVsKAogfQogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoREFUQUJBU0UpCitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykgCit7IAorICAgIGNvbnN0IFVTdHJp
bmcmIG5hbWUgPSBhcmdzLmF0KDApLnRvU3RyaW5nKGV4ZWMpOyAKKyAgICBjb25zdCBVU3RyaW5n
JiB2ZXJzaW9uID0gYXJncy5hdCgxKS50b1N0cmluZyhleGVjKTsgCisgICAgY29uc3QgVVN0cmlu
ZyYgZGlzcGxheU5hbWUgPSBhcmdzLmF0KDIpLnRvU3RyaW5nKGV4ZWMpOyAKKyAgICB1bnNpZ25l
ZCBsb25nIGVzdGltYXRlZFNpemUgPSBhcmdzLmF0KDMpLnRvSW50MzIoZXhlYyk7IAorICAgIFJl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOyAKKyAgICBpZiAoKGFyZ3Mu
c2l6ZSgpID49IDUpICYmIGFyZ3MuYXQoNCkuaXNPYmplY3QoKSkgCisgICAgICAgIGNyZWF0aW9u
Q2FsbGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChhcmdzLmF0KDQp
KSwgZ2xvYmFsT2JqZWN0KCkpOyAKKyAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsgCisgICAg
SlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0cihp
bXBsKCktPm9wZW5EYXRhYmFzZShuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVk
U2l6ZSwgY3JlYXRpb25DYWxsYmFjay5yZWxlYXNlKCksIGVjKSkpOyAKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOyAKKyAgICByZXR1cm4gcmVzdWx0OyAKK30gCisjZW5kaWYKKyAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDog
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0
b20uY3BwCShyZXZpc2lvbiA1NzQ4OCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAK
ICNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgi
CiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgiCisjaW5jbHVkZSAiVjhEYXRhYmFzZS5oIgorI2luY2x1
ZGUgIlY4RGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRl
ICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIu
aCIKQEAgLTEzNiw2ICsxMzgsMTIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV29ya2Vy
Q29udGV4dAogICAgIHJldHVybiBnbG9iYWw7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZ3MpIAoreyAKKyAgICBJTkNfU1RBVFMoIkRPTS5Xb3JrZXJDb250ZXh0Lm9wZW5EYXRhYmFz
ZSgpIik7IAorICAgIC8vIEltcGxlbWVudGF0aW9uIGNvbWluZyBzb29uLgorICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7IAorfSAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCShyZXZpc2lvbiA1NzQ4OCkK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29u
ZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0
Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBEYXRhYmFzZSB7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgdmVyc2lvbjsKICAgICAgICAgW0N1
c3RvbV0gdm9pZCBjaGFuZ2VWZXJzaW9uKGluIERPTVN0cmluZyBvbGRWZXJzaW9uLCBpbiBET01T
dHJpbmcgbmV3VmVyc2lvbiwgaW4gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4g
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFj
ayBzdWNjZXNzQ2FsbGJhY2spOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaWRsCShyZXZpc2lvbiA1NzQ4
OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAg
Q29uZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBP
bWl0Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBTUUxFcnJvciB7
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGNvZGU7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgbWVzc2FnZTsKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9TUUxSZXN1bHRTZXQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxS
ZXN1bHRTZXQuaWRsCShyZXZpc2lvbiA1NzQ4OCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1
bHRTZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdl
IHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAg
ICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBO
b1N0YXRpY1RhYmxlcwogICAgIF0gU1FMUmVzdWx0U2V0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFNRTFJlc3VsdFNldFJvd0xpc3Qgcm93czsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxSZXN1bHRTZXRSb3dMaXN0LmlkbAkocmV2aXNpb24gNTc0ODgpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDgg
QEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9u
YWw9REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0Q29uc3Ry
dWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBTUUxSZXN1bHRTZXRSb3dMaXN0
IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogICAg
ICAgICBbQ3VzdG9tXSBET01PYmplY3QgaXRlbShpbiB1bnNpZ25lZCBsb25nIGluZGV4KTsKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbAkocmV2aXNpb24gNTc0ODgpCisrKyBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAgIENvbmRp
dGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICAgICAgT21pdENv
bnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gU1FMVHJhbnNhY3Rpb24g
ewogICAgICAgICBbQ3VzdG9tXSB2b2lkIGV4ZWN1dGVTcWwoaW4gRE9NU3RyaW5nIHNxbFN0YXRl
bWVudCwgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRzLCBpbiBTUUxTdGF0ZW1lbnRDYWxsYmFjayBj
YWxsYmFjaywgaW4gU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAg
ICB9OwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gNTc0ODgpCisr
KyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3Rp
dmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJE
T01UaW1lci5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgi
CkBAIC0yNzUsMTIgKzI3NiwyMCBAQCBQYXNzUmVmUHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0
OjpvcGVuCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEFTU0VSVChEYXRhYmFzZTo6
aXNBdmFpbGFibGUoKSk7CiAgICAgaWYgKCFEYXRhYmFzZTo6aXNBdmFpbGFibGUoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gRGF0YWJhc2U6Om9wZW5EYXRhYmFzZSh0aGlzLCBu
YW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFj
aywgZWMpOwogfQorCit2b2lkIFdvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YShj
b25zdCBTdHJpbmcmKQoreworI2lmICFQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBGSVhNRTog
VGhpcyBuZWVkcyBhIHJlYWwgaW1wbGVtZW50YXRpb247IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29s
dXRpb24gZm9yIHRlc3RpbmcuCisgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRR
dW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBEYXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5z
ZXRRdW90YShzZWN1cml0eU9yaWdpbigpLCBkZWZhdWx0UXVvdGEpOworI2VuZGlmCit9CiAjZW5k
aWYKIAogYm9vbCBXb3JrZXJDb250ZXh0Ojppc0NvbnRleHRUaHJlYWQoKSBjb25zdApJbmRleDog
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5oCShyZXZpc2lvbiA1NzQ4OCkKKysrIFdlYkNvcmUvd29ya2Vy
cy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw4ICsxMDcsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5n
JiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERh
dGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAg
ICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KICAgICAgICAgdmlydHVhbCBib29sIGlzRGF0YWJh
c2VSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIC8vIE5vdCBpbXBs
ZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEo
Y29uc3QgU3RyaW5nJikgeyB9CisgICAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBmb3IgcmVhbCB5
ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3Ry
aW5nJik7CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNv
bnN0OwogCkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCShyZXZpc2lvbiA1NzQ4OCkK
KysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
NDksNyArNDksMTAgQEAgbW9kdWxlIHRocmVhZHMgewogICAgICAgICAvLyBXb3JrZXJVdGlscwog
ICAgICAgICBbQ3VzdG9tXSB2b2lkIGltcG9ydFNjcmlwdHMoLypbVmFyaWFkaWNdIGluIERPTVN0
cmluZyB1cmxzICovKTsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJsZV0g
V29ya2VyTmF2aWdhdG9yIG5hdmlnYXRvcjsKLSAgICAgICAgLy8gRGF0YWJhc2Ugb3BlbkRhdGFi
YXNlKGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5n
IGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOworI2lmIGRlZmlu
ZWQoRU5BQkxFX0RBVEFCQVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKKyAgICAgICAgW0VuYWJsZWRB
dFJ1bnRpbWUsIEN1c3RvbV0gRGF0YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0cmluZyBuYW1l
LCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNp
Z25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIERhdGFiYXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxs
YmFjaykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworI2VuZGlmCiAgICAgICAg
IC8vIERhdGFiYXNlU3luYyBvcGVuRGF0YWJhc2VTeW5jKGluIERPTVN0cmluZyBuYW1lLCBpbiBE
T01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBs
b25nIGVzdGltYXRlZFNpemUpOwogCiAgICAgICAgIC8vIFRpbWVycwpJbmRleDogTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNp
b24gNTc0ODgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyNiBAQAorMjAxMC0wNC0xMiAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBi
aW5kaW5ncyBmb3IgYXN5bmMgREIgQVBJIGluIFdvcmtlcnMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDk5MgorCisgICAgICAgICogc3RvcmFnZS9j
aGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBjb2Rl
IHdpdGggdGhlIHdvcmtlciB2ZXJzaW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLmh0bWw6IFJlbW92ZWQgcmVmZXJl
bmNlIHRvIHJlbG9hZGluZywgd2hpY2ggdGhpcyB0ZXN0IGRvZXNuJ3QgZG8uCisgICAgICAgICog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanM6IFRoaXMgaXMgdGhlIGV4dHJh
Y3RlZCBzaGFyZWQgY29yZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUt
c3FsLWFyZ3MuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBjb2RlIHdpdGggdGhlIHdvcmtlciB2
ZXJzaW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5q
czogVGhpcyBpcyB0aGUgZXh0cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorCisgICAg
ICAgIFRoZXNlIGFyZSB0aGUgd29ya2VyIHZlcnNpb25zIG9mIHRoZSB0ZXN0czsgdGhleSdyZSB0
aW55IHNoaW1zIGFyb3VuZCBzaGFyZWQgY29kZS4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvZXhl
Y3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxl
LXJldXNlLXdvcmtlci5odG1sOiBBZGRlZC4KKyAgICAgICAgVGhpcyBmaWxlIGdldHMgaW5jbHVk
ZWQgZnJvbSB3b3JrZXIgZGF0YWJhc2UgdGVzdHM7IGl0IGRvZXMgYWxsIHRoZSBib2lsZXJwbGF0
ZSB0aGF0J3MgbmVlZGVkIG9uIHRoZSBET00gc2lkZS4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMv
cmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzOiBBZGRlZC4KKyAgICAgICAg
VGhpcyBmaWxlIGlzIHRoZSBib2lsZXJwbGF0ZSBmb3IgdGhlIHdvcmtlciBzaWRlIG9mIHRoZSBk
YXRhYmFzZSB0ZXN0cy4gIEl0IHdpbGwgaW1wb3J0IGFuZCBydW4gdGhlIGFjdHVhbCB0ZXN0IG9u
IGNvbW1hbmQsIGFuZCB3aWxsIHJlcG9ydCBiYWNrIGNvbXBsZXRpb24gYW5kIGV4Y2VwdGlvbnMu
CisgICAgICAgICogZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanM6IEFk
ZGVkLgorCiAyMDEwLTA0LTEyICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdHMgdGhhdCBh
IGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91
IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQg
bWlzbWF0Y2hpbmcgdmVyc2lvbnMuCitjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFj
aworY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawordHJhbnNhY3Rpb246IHN0YXRlbWVu
dCBlcnJvciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCitURVNUIENPTVBMRVRFLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLXdvcmtlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9j
aGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtl
ci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACis8aHRtbD4gCis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMiPjwvc2Ny
aXB0PiAKKzxzY3JpcHQ+IAorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0
KCk7CisgICAgfQorIAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5u
ZXJUZXh0ID0gIiI7CisgICAgZGF0YWJhc2VXb3JrZXIucG9zdE1lc3NhZ2UoImltcG9ydFNjcmlw
dHM6Li4vLi4vc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMiKTsKKyAgICBk
YXRhYmFzZVdvcmtlci5wb3N0TWVzc2FnZSgicnVuVGVzdCIpOworfQorPC9zY3JpcHQ+IAorPC9o
ZWFkPiAKKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPiAKKzxkaXY+VGhpcyB0ZXN0
cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJz
aW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3csIG5v
dCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KKzxwcmUgaWQ9ImNvbnNvbGUiPiAKK0ZBSUxV
UkU6IHRlc3QgZGlkbid0IHJ1bi4KKzwvcHJlPiAKKzwvYm9keT4gCis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1h
cmdzLXdvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRp
b24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNT
LiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBl
eGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24K
K1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfSkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCB1bmRlZmlu
ZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxs
LCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBu
dWxsLCBudWxsLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0
ZVNxbCgiIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBl
eGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVu
Z3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRl
U3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVj
dGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgMCkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgIiIpIHRo
cmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGws
IDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIs
IG51bGwsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFz
IGV4cGVjdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwt
YXJncy13b3JrZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
ZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDI0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9k
YXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5j
dGlvbiBzZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIGRhdGFiYXNl
V29ya2VyLnBvc3RNZXNzYWdlKCJpbXBvcnRTY3JpcHRzOi4uLy4uL3N0b3JhZ2UvZXhlY3V0ZS1z
cWwtYXJncy5qcyIpOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJydW5UZXN0Iik7
Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVz
dCgpIj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorCis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250
cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJj
ZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACit2YXIgZGF0YWJhc2VXb3JrZXIgPSBuZXcg
V29ya2VyKCdyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzJyk7CisKK2RhdGFiYXNlV29ya2Vy
Lm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LmRhdGEuaW5kZXhP
ZignbG9nOicpID09IDApCisgICAgICAgIGxvZyhldmVudC5kYXRhLnN1YnN0cmluZyg0KSk7Cisg
ICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PSAnbm90aWZ5RG9uZScpIHsKKyAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlCisgICAgICAgIHRocm93IG5ldyBFcnJv
cigiVW5yZWNvZ25pemVkIG1lc3NhZ2U6ICIgKyBldmVudCk7Cit9CisKK2Z1bmN0aW9uIGxvZyht
ZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJU
ZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanMJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcwko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAordmFyIHdpbmRvdyA9IHsKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlcjogeworICAgICAgICBub3RpZnlEb25lOiBmdW5jdGlvbigpIHsgcG9zdE1l
c3NhZ2UoIm5vdGlmeURvbmUiKTsgfQorICAgIH0KK307Cit2YXIgbGF5b3V0VGVzdENvbnRyb2xs
ZXIgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXI7CisKK2Z1bmN0aW9uIGxvZyhzKSB7Cisg
ICAgcG9zdE1lc3NhZ2UoImxvZzoiICsgcyk7Cit9CisKK29ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGV2ZW50LmRhdGEuaW5kZXhPZigiaW1wb3J0
U2NyaXB0czoiKSA9PSAwKSB7CisgICAgICAgICAgICB2YXIgc2NyaXB0cyA9IGV2ZW50LmRhdGEu
c3Vic3RyaW5nKCJpbXBvcnRTY3JpcHRzOiIubGVuZ3RoKS5zcGxpdCgiLCIpOworICAgICAgICAg
ICAgZm9yICh2YXIgaSBpbiBzY3JpcHRzKQorICAgICAgICAgICAgICAgIHNjcmlwdHNbaV0gPSAi
Li4vIiArIHNjcmlwdHNbaV07CisgICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdHMpOwor
ICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gInJ1blRlc3QiKQorICAgICAgICAgICAg
cnVuVGVzdCgpOyAvLyBNdXN0IGJlIGRlZmluZWQgYnkgc29tZSBpbXBvcnRlZCBzY3JpcHQuCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiUmVjZWl2ZWQgdW5leHBlY3RlZCBtZXNzYWdl
OiAiICsgZXZlbnQuZGF0YSk7CisgICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJXb3Jr
ZXIgY2F1Z2h0IGV4Y2VwdGlvbjogIiArIGV4KTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9OworCit2YXIgREJfVEVTVF9TVUZGSVgg
PSAiX3dvcmtlciI7CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NzQ4
OCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLVRoaXMgdGVzdHMgdGhh
dCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4g
WW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJv
dXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28sIHJlbG9hZGluZyB0aGUgcGFnZSBzaG91bGQg
bm90IGNhdXNlIGFuIGFzc2VydGlvbiBmYWlsdXJlLgorVGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJh
c2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxk
IHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRj
aGluZyB2ZXJzaW9ucy4KIGNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9uIGNhbGxiYWNrCiBjaGFu
Z2VWZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrCiB0cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9y
IGNhbGxiYWNrOiBubyBzdWNoIHRhYmxlOiBGb29CYXIKSW5kZXg6IExheW91dFRlc3RzL3N0b3Jh
Z2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbAkocmV2aXNpb24g
NTc0ODgpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICsxLDMyIEBACiA8aHRtbD4gCiA8aGVhZD4K
KzxzY3JpcHQgc3JjPSJjaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMiPjwvc2NyaXB0Pgog
PHNjcmlwdD4gCi1mdW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOwotfQogCi1mdW5j
dGlvbiBmaW5pc2hUZXN0KCkKLXsKLSAgICBsb2coIlRFU1QgQ09NUExFVEUuIik7Cit2YXIgREJf
VEVTVF9TVUZGSVggPSAiX2RvbSI7CiAKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIp
LmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVuY3Rpb24gcnVuVGVzdCgpCitm
dW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQogewogICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFz
ZXMoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgfQogIAotICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQgPSAiIjsKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCA9ICIiOwogIAotICAgIHRy
eSB7Ci0gICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKCJDaGFuZ2VWZXJzaW9uIiwgIiIsICJUZXN0
IHRoYXQgY2hhbmdpbmcgYSBkYXRhYmFzZSB2ZXJzaW9uIGRvZXNuXCd0IGtpbGwgb3VyIGhhbmRs
ZSB0byBpdCIsIDEpOwotICAgICAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247Ci0gICAgICAg
IHZhciBuZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRvU3Ry
aW5nKCkgOiAiMSI7IAotICAgICAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNp
b24sIGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRyYW5z
YWN0aW9uIGNhbGxiYWNrIik7Ci0gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAg
ICAgICBsb2coImNoYW5nZVZlcnNpb246IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2Fn
ZSk7Ci0gICAgICAgIH0sIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJz
aW9uOiBzdWNjZXNzIGNhbGxiYWNrIik7Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAg
c2V0VGltZW91dChydW5UZXN0MiwgMTAwMCk7Ci0gICAgICAgIAotICAgIH0gY2F0Y2ggKGUpIHsK
LSAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgICBm
aW5pc2hUZXN0KCk7Ci0gICAgfQotfQotIAotZnVuY3Rpb24gcnVuVGVzdDIoKQotewotICAgIHRy
eSB7Ci0gICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICB0
eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBmcm9tIEZvb0JhciIsIFtdLCBmdW5jdGlvbih0eCkgewot
ICAgICAgICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBjYWxsYmFjayIpOwot
ICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4
LCBlcnJvcikgewotICAgICAgICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBl
cnJvciBjYWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGZpbmlz
aFRlc3QoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9IGNhdGNoIChlKSB7
Ci0gICAgICAgIGxvZygidHJhbnNhY3Rpb24gZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICAgIGZp
bmlzaFRlc3QoKTsKLSAgICB9CisgICAgcnVuVGVzdCgpOwogfQogPC9zY3JpcHQ+IAogPC9oZWFk
PiAKLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4gCi08ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRh
dGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNo
b3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlz
bWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28sIHJlbG9hZGluZyB0aGUgcGFnZSBzaG91bGQgbm90IGNh
dXNlIGFuIGFzc2VydGlvbiBmYWlsdXJlLgotPHByZSBpZD0icmVzdWx0Ij4gCis8Ym9keSBvbmxv
YWQ9InNldHVwQW5kUnVuVGVzdCgpIj4gCis8ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNl
IGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBz
ZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hp
bmcgdmVyc2lvbnMuCis8cHJlIGlkPSJjb25zb2xlIj4gCiBGQUlMVVJFOiB0ZXN0IGRpZG4ndCBy
dW4uCiA8L3ByZT4gCiA8L2JvZHk+IApJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5qcwkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NiBAQAorZnVuY3Rpb24gZmluaXNoVGVzdCgpCit7CisgICAgbG9nKCJURVNU
IENPTVBMRVRFLiIpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBy
dW5UZXN0KCkKK3sKKyAgICB0cnkgeworICAgICAgICBkYiA9IG9wZW5EYXRhYmFzZSgiQ2hhbmdl
VmVyc2lvbiIgKyBEQl9URVNUX1NVRkZJWCwgIiIsICJUZXN0IHRoYXQgY2hhbmdpbmcgYSBkYXRh
YmFzZSB2ZXJzaW9uIGRvZXNuJ3Qga2lsbCBvdXIgaGFuZGxlIHRvIGl0IiwgMSk7CisgICAgICAg
IHZhciB2ZXJzaW9uID0gZGIudmVyc2lvbjsKKyAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJz
aW9uID8gKHBhcnNlSW50KHZlcnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsgCisgICAgICAg
IGRiLmNoYW5nZVZlcnNpb24odmVyc2lvbiwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsKKyAg
ICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2siKTsKKyAg
ICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lv
bjogZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgfSwgZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2si
KTsKKyAgICAgICAgICAgIHJ1blRlc3QyKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbiBleGNlcHRpb246ICIgKyBl
KTsKKyAgICAgICAgZmluaXNoVGVzdCgpOworICAgIH0KK30KKyAKK2Z1bmN0aW9uIHJ1blRlc3Qy
KCkKK3sKKyAgICB0cnkgeworICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgewor
ICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogZnJvbSBGb29CYXIiLCBbXSwgZnVu
Y3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQg
Y2FsbGJhY2siKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICB9
LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9u
OiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAg
ICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICBsb2coInRyYW5zYWN0aW9uIGV4Y2VwdGlvbjogIiArIGUp
OworICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgfQorfQpJbmRleDogTGF5b3V0VGVzdHMvc3Rv
cmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3Rv
cmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwJKHJldmlzaW9uIDU3NDg4KQorKysgTGF5b3V0VGVz
dHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4
ICsxLDMwIEBACiA8aHRtbD4KIAogPGhlYWQ+Cis8c2NyaXB0IHNyYz0iZXhlY3V0ZS1zcWwtYXJn
cy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogCi12YXIgdGhyb3dPblRvU3RyaW5nT2JqZWN0ID0g
eyB9OwotdGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyB0aHJv
dyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9OwordmFyIERCX1RFU1Rf
U1VGRklYID0gIl9kb20iOwogCi12YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKLXRo
cm93T25HZXRMZW5ndGhPYmplY3QuX19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24g
KCkgeyB0aHJvdyAiQ2Fubm90IGdldCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7Ci0KLXZh
ciB0aHJvd09uR2V0WmVyb09iamVjdCA9IHsgbGVuZ3RoOiAxIH07Ci10aHJvd09uR2V0WmVyb09i
amVjdC5fX2RlZmluZUdldHRlcl9fKCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdl
dCAwIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LiI7IH0pOwotCi12YXIgZXhwZWN0Tm9FeGNlcHRp
b24gPSBbCi0gICAgJ251bGwnLAotICAgICd1bmRlZmluZWQnLAotICAgICcwJywKLSAgICAnIiIn
LAotICAgICciIiwgbnVsbCcsCi0gICAgJyIiLCB1bmRlZmluZWQnLAotICAgICciIiwgW10nLAot
ICAgICciIiwgWyAiYXJnMCIgXScsCi0gICAgJyIiLCB7IH0nLAotICAgICciIiwgeyBsZW5ndGg6
IDAgfScsCi0gICAgJyIiLCB7IGxlbmd0aDogMSwgMDogImFyZzAiIH0nLAotICAgICciIiwgbnVs
bCwgbnVsbCcsCi0gICAgJyIiLCBudWxsLCB1bmRlZmluZWQnLAotICAgICciIiwgbnVsbCwgeyB9
JywKLSAgICAnIiIsIG51bGwsIG51bGwsIG51bGwnLAotICAgICciIiwgbnVsbCwgbnVsbCwgdW5k
ZWZpbmVkJywKLSAgICAnIiIsIG51bGwsIG51bGwsIHsgfScsCi1dOwotCi12YXIgZXhwZWN0RXhj
ZXB0aW9uID0gWwotICAgICcnLAotICAgICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAotICAgICci
IiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCcsCi0gICAgJyIiLCB0aHJvd09uR2V0WmVyb09iamVj
dCcsCi0gICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09iamVjdCBdJywKLSAgICAnIiIsIDAnLAot
ICAgICciIiwgIiInLAotICAgICciIiwgbnVsbCwgMCcsCi0gICAgJyIiLCBudWxsLCAiIicsCi0g
ICAgJyIiLCBudWxsLCBudWxsLCAwJywKLSAgICAnIiIsIG51bGwsIG51bGwsICIiJywKLV07Ci0K
LWZ1bmN0aW9uIHdyaXRlTWVzc2FnZVRvTG9nKG1lc3NhZ2UpCitmdW5jdGlvbiBsb2cobWVzc2Fn
ZSkKIHsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCAr
PSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlv
biwgcGFyYW1ldGVyTGlzdCkKLXsKLSAgICB0cnkgewotICAgICAgICBldmFsKCd0cmFuc2FjdGlv
bi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKLSAgICAgICAgcmV0dXJuIG51
bGw7Ci0gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247
Ci0gICAgfQotfQotCi1mdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBh
cmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKLXsKLSAgICB2YXIgZXhjZXB0aW9uID0gdHJ5
RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7Ci0gICAgaWYgKGV4cGVjdEV4
Y2VwdGlvbikgewotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVNZXNz
YWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBh
biBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdy
aXRlTWVzc2FnZVRvTG9nKCIqRkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAi
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChleGNlcHRpb24pCi0gICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBleGVj
dXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhj
ZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBB
U1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4
Y2VwdGlvbiIpOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFu
c2FjdGlvbikKLXsKLSAgICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCi0gICAgICAgIHJ1
blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNl
KTsKLSAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9uKQotICAgICAgICBydW5UcmFuc2FjdGlv
blRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Ci0KLSAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0dXBB
bmRSdW5UZXN0KCkKIHsKICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmNsZWFyQWxsRGF0YWJhc2VzKCk7CiAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgIH0KLQotICAgIHZhciBkYiA9IG9wZW5EYXRh
YmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0IiwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRo
ZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOwotICAgIGRiLnRy
YW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVzdHMpOworICAgIHJ1blRlc3QoKTsKIH0KIAogPC9z
Y3JpcHQ+CiA8L2hlYWQ+CiAKLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxib2R5IG9ubG9h
ZD0ic2V0dXBBbmRSdW5UZXN0KCkiPgogPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+
CiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODYgQEAKK3ZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Cit0
aHJvd09uVG9TdHJpbmdPYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5u
b3QgY2FsbCB0b1N0cmluZyBvbiB0aGlzIG9iamVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0TGVu
Z3RoT2JqZWN0ID0geyB9OwordGhyb3dPbkdldExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRlcl9f
KCJsZW5ndGgiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlz
IG9iamVjdC4iOyB9KTsKKwordmFyIHRocm93T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEg
fTsKK3Rocm93T25HZXRaZXJvT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlvbiAo
KSB7IHRocm93ICJDYW5ub3QgZ2V0IDAgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7CisK
K3ZhciBleHBlY3ROb0V4Y2VwdGlvbiA9IFsKKyAgICAnbnVsbCcsCisgICAgJ3VuZGVmaW5lZCcs
CisgICAgJzAnLAorICAgICciIicsCisgICAgJyIiLCBudWxsJywKKyAgICAnIiIsIHVuZGVmaW5l
ZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIiLCBbICJhcmcwIiBdJywKKyAgICAnIiIsIHsgfScs
CisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywKKyAgICAnIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJn
MCIgfScsCisgICAgJyIiLCBudWxsLCBudWxsJywKKyAgICAnIiIsIG51bGwsIHVuZGVmaW5lZCcs
CisgICAgJyIiLCBudWxsLCB7IH0nLAorICAgICciIiwgbnVsbCwgbnVsbCwgbnVsbCcsCisgICAg
JyIiLCBudWxsLCBudWxsLCB1bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgbnVsbCwgeyB9JywK
K107CisKK3ZhciBleHBlY3RFeGNlcHRpb24gPSBbCisgICAgJycsCisgICAgJ3Rocm93T25Ub1N0
cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0JywKKyAgICAnIiIs
IHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0
IF0nLAorICAgICciIiwgMCcsCisgICAgJyIiLCAiIicsCisgICAgJyIiLCBudWxsLCAwJywKKyAg
ICAnIiIsIG51bGwsICIiJywKKyAgICAnIiIsIG51bGwsIG51bGwsIDAnLAorICAgICciIiwgbnVs
bCwgbnVsbCwgIiInLAorXTsKKworZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwg
cGFyYW1ldGVyTGlzdCkKK3sKKyAgICB0cnkgeworICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5l
eGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKKyAgICAgICAgcmV0dXJuIG51bGw7
CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgIHJldHVybiBleGNlcHRpb247Cisg
ICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFt
ZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKK3sKKyAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhl
Y3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7CisgICAgaWYgKGV4cGVjdEV4Y2Vw
dGlvbikgeworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgbG9nKCJQQVNTLiBl
eGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4
cGVjdGVkLiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0
ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGxvZygi
KkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0
aW9uOiAiICsgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJQQVNT
LiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24iKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNh
Y3Rpb24pCit7CisgICAgZm9yIChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBydW5U
cmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7
CisgICAgZm9yIChpIGluIGV4cGVjdEV4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25U
ZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNlcHRpb25baV0sIHRydWUpOworCisgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
bm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKworICAgIHZhciBkYiA9
IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0IiArIERCX1RFU1RfU1VGRklYLCAiMS4w
IiwgIlRlc3Qgb2YgaGFuZGxpbmcgb2YgdGhlIGFyZ3VtZW50cyB0byBTUUxUcmFuc2FjdGlvbi5l
eGVjdXRlU3FsIiwgMSk7CisgICAgZGIudHJhbnNhY3Rpb24ocnVuVHJhbnNhY3Rpb25UZXN0cyk7
Cit9Cg==
</data>
<flag name="review"
          id="36973"
          type_id="1"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53304</attachid>
            <date>2010-04-13 18:19:36 -0700</date>
            <delta_ts>2010-04-29 14:45:46 -0700</delta_ts>
            <desc>Removed calls to clearAllDatabases</desc>
            <filename>five.patch</filename>
            <type>text/plain</type>
            <size>29389</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzU1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQtMTMgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA0LTEz
ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2xpdmVyIEh1bnQuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1NzU1NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBA
QAogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCiAKKyNpbmNsdWRlICJEYXRhYmFzZS5o
IgorI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJKU0RhdGFiYXNlQ2FsbGJhY2su
aCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVj
dC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgpAQCAtMTYyLDYgKzE2NSwyNCBAQCBK
U1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwoCiB9CiAjZW5kaWYKIAorI2lm
IEVOQUJMRShEQVRBQkFTRSkKK0pTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKSAKK3sgCisgICAgY29uc3QgVVN0
cmluZyYgbmFtZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7IAorICAgIGNvbnN0IFVTdHJp
bmcmIHZlcnNpb24gPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMpOyAKKyAgICBjb25zdCBVU3Ry
aW5nJiBkaXNwbGF5TmFtZSA9IGFyZ3MuYXQoMikudG9TdHJpbmcoZXhlYyk7IAorICAgIHVuc2ln
bmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9JbnQzMihleGVjKTsgCisgICAg
UmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7IAorICAgIGlmICgoYXJn
cy5zaXplKCkgPj0gNSkgJiYgYXJncy5hdCg0KS5pc09iamVjdCgpKSAKKyAgICAgICAgY3JlYXRp
b25DYWxsYmFjayA9IEpTRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRlKGFzT2JqZWN0KGFyZ3MuYXQo
NCkpLCBnbG9iYWxPYmplY3QoKSk7IAorIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOyAKKyAg
ICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcGwoKS0+b3BlbkRhdGFiYXNlKG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0
ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKSk7IAorICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7IAorICAgIHJldHVybiByZXN1bHQ7IAorfSAKKyNlbmRpZgorIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1
c3RvbS5jcHAJKHJldmlzaW9uIDU3NTU1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBA
QAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRBY3Rpb24u
aCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERhdGFiYXNlLmgiCisjaW5j
bHVkZSAiVjhEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhQcm94eS5oIgogI2luY2x1
ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5l
ci5oIgpAQCAtMTM2LDYgKzEzOCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChXb3Jr
ZXJDb250ZXh0CiAgICAgcmV0dXJuIGdsb2JhbDsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykgCit7IAorICAgIElOQ19TVEFUUygiRE9NLldvcmtlckNvbnRleHQub3BlbkRhdGFi
YXNlKCkiKTsgCisgICAgLy8gSW1wbGVtZW50YXRpb24gY29taW5nIHNvb24uCisgICAgcmV0dXJu
IHY4OjpVbmRlZmluZWQoKTsgCit9IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHJldmlzaW9uIDU3NTU1
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBD
b25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgICAgIE9t
aXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIERhdGFiYXNlIHsK
ICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwogICAgICAgICBb
Q3VzdG9tXSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERP
TVN0cmluZyBuZXdWZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBp
biBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gVm9pZENhbGxi
YWNrIHN1Y2Nlc3NDYWxsYmFjayk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3IuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5pZGwJKHJldmlzaW9uIDU3
NTU1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MzAsNyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAg
ICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgICAg
IE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTEVycm9y
IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgY29kZTsKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFJlc3VsdFNldC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NR
TFJlc3VsdFNldC5pZGwJKHJldmlzaW9uIDU3NTU1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFJl
c3VsdFNldC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAgbW9kdWxlIHN0b3Jh
Z2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCi0g
ICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0Q29uc3RydWN0b3IsCisgICAgICAg
IE5vU3RhdGljVGFibGVzCiAgICAgXSBTUUxSZXN1bHRTZXQgewogICAgICAgICByZWFkb25seSBh
dHRyaWJ1dGUgU1FMUmVzdWx0U2V0Um93TGlzdCByb3dzOwogCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCShyZXZpc2lvbiA1NzU1NSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
OCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAgICAgICBDb25kaXRp
b25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAgICAgIE9taXRDb25z
dHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTFJlc3VsdFNldFJvd0xp
c3QgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAg
ICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBpdGVtKGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiA1NzU1NSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcg
KzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29u
ZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0
Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBTUUxUcmFuc2FjdGlv
biB7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZXhlY3V0ZVNxbChpbiBET01TdHJpbmcgc3FsU3Rh
dGVtZW50LCBpbiBPYmplY3RBcnJheSBhcmd1bWVudHMsIGluIFNRTFN0YXRlbWVudENhbGxiYWNr
IGNhbGxiYWNrLCBpbiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2spOwog
ICAgIH07CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiA1NzU1NSkK
KysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAogI2luY2x1ZGUgIkFj
dGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUg
IkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2Uu
aCIKQEAgLTI3NSwxMiArMjc2LDIwIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+IFdvcmtlckNvbnRl
eHQ6Om9wZW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKERhdGFiYXNl
Ojppc0F2YWlsYWJsZSgpKTsKICAgICBpZiAoIURhdGFiYXNlOjppc0F2YWlsYWJsZSgpKQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKHRoaXMs
IG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxi
YWNrLCBlYyk7CiB9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6ZGF0YWJhc2VFeGNlZWRlZFF1b3Rh
KGNvbnN0IFN0cmluZyYpCit7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIGEgcmVhbCBpbXBsZW1lbnRhdGlvbjsgdGhpcyBpcyBhIHRlbXBvcmFyeSBz
b2x1dGlvbiBmb3IgdGVzdGluZy4KKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVs
dFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigp
LnNldFF1b3RhKHNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CisjZW5kaWYKK30KICNl
bmRpZgogCiBib29sIFdvcmtlckNvbnRleHQ6OmlzQ29udGV4dFRocmVhZCgpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDU3NTU1KQorKysgV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDggKzEwNyw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25zdCBTdHJp
bmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYpOwogICAg
ICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNEYXRh
YmFzZVJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgLy8gTm90IGlt
cGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90
YShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIGZvciByZWFs
IHlldC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBT
dHJpbmcmKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZXh0VGhyZWFkKCkg
Y29uc3Q7CiAKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDU3NTU1
KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw3ICs0OSwxMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIC8vIFdvcmtlclV0aWxz
CiAgICAgICAgIFtDdXN0b21dIHZvaWQgaW1wb3J0U2NyaXB0cygvKltWYXJpYWRpY10gaW4gRE9N
U3RyaW5nIHVybHMgKi8pOwogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgW1JlcGxhY2VhYmxl
XSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOwotICAgICAgICAvLyBEYXRhYmFzZSBvcGVuRGF0
YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJp
bmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CisjaWYgZGVm
aW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRBQkFTRQorICAgICAgICBbRW5hYmxl
ZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5h
bWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNh
bGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisjZW5kaWYKICAgICAg
ICAgLy8gRGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGlu
IERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVk
IGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICAgICAgICAgLy8gVGltZXJzCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA1NzU1NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI2IEBACisyMDEwLTA0LTEzICBFcmljIFVocmhhbmUgIDxlcmljdUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRk
IGJpbmRpbmdzIGZvciBhc3luYyBEQiBBUEkgaW4gV29ya2Vycy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTkyCisKKyAgICAgICAgKiBzdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sOiBSZWZhY3RvcmVkIHRvIHNoYXJlIGNv
ZGUgd2l0aCB0aGUgd29ya2VyIHZlcnNpb24gb2YgdGhlIHRlc3QuCisgICAgICAgICogc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0ZWQuaHRtbDogUmVtb3ZlZCByZWZl
cmVuY2UgdG8gcmVsb2FkaW5nLCB3aGljaCB0aGlzIHRlc3QgZG9lc24ndCBkby4KKyAgICAgICAg
KiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5qczogVGhpcyBpcyB0aGUgZXh0
cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvZXhlY3V0
ZS1zcWwtYXJncy5odG1sOiBSZWZhY3RvcmVkIHRvIHNoYXJlIGNvZGUgd2l0aCB0aGUgd29ya2Vy
IHZlcnNpb24gb2YgdGhlIHRlc3QuCisgICAgICAgICogc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdz
LmpzOiBUaGlzIGlzIHRoZSBleHRyYWN0ZWQgc2hhcmVkIGNvcmUgb2YgdGhlIHRlc3QuCisKKyAg
ICAgICAgVGhlc2UgYXJlIHRoZSB3b3JrZXIgdmVyc2lvbnMgb2YgdGhlIHRlc3RzOyB0aGV5J3Jl
IHRpbnkgc2hpbXMgYXJvdW5kIHNoYXJlZCBjb2RlLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9l
eGVjdXRlLXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5k
bGUtcmV1c2Utd29ya2VyLmh0bWw6IEFkZGVkLgorICAgICAgICBUaGlzIGZpbGUgZ2V0cyBpbmNs
dWRlZCBmcm9tIHdvcmtlciBkYXRhYmFzZSB0ZXN0czsgaXQgZG9lcyBhbGwgdGhlIGJvaWxlcnBs
YXRlIHRoYXQncyBuZWVkZWQgb24gdGhlIERPTSBzaWRlLgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanM6IEFkZGVkLgorICAgICAg
ICBUaGlzIGZpbGUgaXMgdGhlIGJvaWxlcnBsYXRlIGZvciB0aGUgd29ya2VyIHNpZGUgb2YgdGhl
IGRhdGFiYXNlIHRlc3RzLiAgSXQgd2lsbCBpbXBvcnQgYW5kIHJ1biB0aGUgYWN0dWFsIHRlc3Qg
b24gY29tbWFuZCwgYW5kIHdpbGwgcmVwb3J0IGJhY2sgY29tcGxldGlvbiBhbmQgZXhjZXB0aW9u
cy4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qczog
QWRkZWQuCisKIDIwMTAtMDQtMTMgIE1hcmsgUm93ZSAgPG1yb3dlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVcGRhdGUgdGhlIHRlc3QgcmVzdWx0cyBhZnRlciByNTc1NDQuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12
ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3Jr
ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdHMg
dGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lv
bi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3Qg
YWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCitjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBj
YWxsYmFjaworY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawordHJhbnNhY3Rpb246IHN0
YXRlbWVudCBlcnJvciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCitURVNUIENPTVBM
RVRFLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLXdvcmtlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29y
a2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
LXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACis8aHRtbD4gCis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMi
Pjwvc2NyaXB0PiAKKzxzY3JpcHQ+IAorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQorewor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisgICAgfQorIAorICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CisgICAgZGF0YWJhc2VXb3JrZXIucG9zdE1lc3NhZ2Uo
ImltcG9ydFNjcmlwdHM6Li4vLi4vc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Uu
anMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVzc2FnZSgicnVuVGVzdCIpOworfQorPC9z
Y3JpcHQ+IAorPC9oZWFkPiAKKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPiAKKzxk
aXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5n
aW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFi
bGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KKzxwcmUgaWQ9ImNvbnNv
bGUiPiAKK0ZBSUxVUkU6IHRlc3QgZGlkbid0IHJ1bi4KKzwvcHJlPiAKKzwvYm9keT4gCis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3Jr
ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9l
eGVjdXRlLXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRp
ZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlk
IG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhj
ZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4
Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4
Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIg
fSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGws
IG51bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBu
dWxsLCB1bmRlZmluZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVj
dXRlU3FsKCIiLCBudWxsLCBudWxsLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgor
UEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93
IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQg
bm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2Vw
dGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0
KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0
aHJvd09uR2V0TGVuZ3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTLiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0
aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdP
YmplY3QgXSkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNx
bCgiIiwgMCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNx
bCgiIiwgIiIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVT
cWwoIiIsIG51bGwsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4
ZWN1dGVTcWwoIiIsIG51bGwsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMg
ZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4g
ZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
ZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0PgorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cisg
ICAgfQorICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJpbXBvcnRTY3JpcHRzOi4uLy4u
L3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcyIpOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RN
ZXNzYWdlKCJydW5UZXN0Iik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxv
YWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5
PgorCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2Rh
dGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdv
cmtlci1jb250cm9sbGVyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACit2YXIgZGF0
YWJhc2VXb3JrZXIgPSBuZXcgV29ya2VyKCdyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzJyk7
CisKK2RhdGFiYXNlV29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYg
KGV2ZW50LmRhdGEuaW5kZXhPZignbG9nOicpID09IDApCisgICAgICAgIGxvZyhldmVudC5kYXRh
LnN1YnN0cmluZyg0KSk7CisgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PSAnbm90aWZ5RG9uZScp
IHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1lc3NhZ2U6ICIgKyBldmVudCk7Cit9
CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworfQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2Rh
dGFiYXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAordmFyIHdpbmRv
dyA9IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlcjogeworICAgICAgICBub3RpZnlEb25lOiBm
dW5jdGlvbigpIHsgcG9zdE1lc3NhZ2UoIm5vdGlmeURvbmUiKTsgfQorICAgIH0KK307Cit2YXIg
bGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXI7CisKK2Z1
bmN0aW9uIGxvZyhzKSB7CisgICAgcG9zdE1lc3NhZ2UoImxvZzoiICsgcyk7Cit9CisKK29ubWVz
c2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdHJ5IHsKKyAgICAgICAgaWYgKGV2ZW50LmRh
dGEuaW5kZXhPZigiaW1wb3J0U2NyaXB0czoiKSA9PSAwKSB7CisgICAgICAgICAgICB2YXIgc2Ny
aXB0cyA9IGV2ZW50LmRhdGEuc3Vic3RyaW5nKCJpbXBvcnRTY3JpcHRzOiIubGVuZ3RoKS5zcGxp
dCgiLCIpOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzY3JpcHRzKQorICAgICAgICAgICAg
ICAgIHNjcmlwdHNbaV0gPSAiLi4vIiArIHNjcmlwdHNbaV07CisgICAgICAgICAgICBpbXBvcnRT
Y3JpcHRzKHNjcmlwdHMpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gInJ1blRl
c3QiKQorICAgICAgICAgICAgcnVuVGVzdCgpOyAvLyBNdXN0IGJlIGRlZmluZWQgYnkgc29tZSBp
bXBvcnRlZCBzY3JpcHQuCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiUmVjZWl2ZWQg
dW5leHBlY3RlZCBtZXNzYWdlOiAiICsgZXZlbnQuZGF0YSk7CisgICAgfSBjYXRjaCAoZXgpIHsK
KyAgICAgICAgbG9nKCJXb3JrZXIgY2F1Z2h0IGV4Y2VwdGlvbjogIiArIGV4KTsKKyAgICAgICAg
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9OworCit2
YXIgREJfVEVTVF9TVUZGSVggPSAiX3dvcmtlciI7CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiA1NzU1NSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNp
b24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQg
QEAKLVRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFu
Z2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRh
YmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28sIHJlbG9hZGlu
ZyB0aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlvbiBmYWlsdXJlLgorVGhpcyB0
ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2
ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3cs
IG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KIGNoYW5nZVZlcnNpb246IHRyYW5zYWN0
aW9uIGNhbGxiYWNrCiBjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrCiB0cmFuc2FjdGlv
bjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiBubyBzdWNoIHRhYmxlOiBGb29CYXIKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1
c2UuaHRtbAkocmV2aXNpb24gNTc1NTUpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12
ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcwICsxLDMxIEBA
CiA8aHRtbD4gCiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJjaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1
c2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4gCi1mdW5jdGlvbiBsb2cobWVzc2FnZSkKLXsKLSAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ICs9IG1lc3NhZ2Ug
KyAiXG4iOwotfQogCi1mdW5jdGlvbiBmaW5pc2hUZXN0KCkKLXsKLSAgICBsb2coIlRFU1QgQ09N
UExFVEUuIik7Cit2YXIgREJfVEVTVF9TVUZGSVggPSAiX2RvbSI7CiAKLSAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVu
Y3Rpb24gcnVuVGVzdCgpCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQogewogICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CiAgICAgfQogIAotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5p
bm5lclRleHQgPSAiIjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlu
bmVyVGV4dCA9ICIiOwogIAotICAgIHRyeSB7Ci0gICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKCJD
aGFuZ2VWZXJzaW9uIiwgIiIsICJUZXN0IHRoYXQgY2hhbmdpbmcgYSBkYXRhYmFzZSB2ZXJzaW9u
IGRvZXNuXCd0IGtpbGwgb3VyIGhhbmRsZSB0byBpdCIsIDEpOwotICAgICAgICB2YXIgdmVyc2lv
biA9IGRiLnZlcnNpb247Ci0gICAgICAgIHZhciBuZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJz
ZUludCh2ZXJzaW9uKSArIDEpLnRvU3RyaW5nKCkgOiAiMSI7IAotICAgICAgICBkYi5jaGFuZ2VW
ZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICBs
b2coImNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9uIGNhbGxiYWNrIik7Ci0gICAgICAgIH0sIGZ1
bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IGVycm9yIGNh
bGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Ci0gICAgICAgIH0sIGZ1bmN0aW9uKCkgewotICAg
ICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrIik7Ci0gICAgICAg
IH0pOwotICAgICAgICAKLSAgICAgICAgc2V0VGltZW91dChydW5UZXN0MiwgMTAwMCk7Ci0gICAg
ICAgIAotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uIGV4Y2Vw
dGlvbjogIiArIGUpOwotICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgfQotfQotIAotZnVuY3Rp
b24gcnVuVGVzdDIoKQotewotICAgIHRyeSB7Ci0gICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0
aW9uKHR4KSB7Ci0gICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBmcm9tIEZvb0Jh
ciIsIFtdLCBmdW5jdGlvbih0eCkgewotICAgICAgICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246
IHN0YXRlbWVudCBjYWxsYmFjayIpOwotICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKLSAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4LCBlcnJvcikgewotICAgICAgICAgICAgICAgIGxvZygi
dHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2Up
OwotICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICB9KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGxvZygidHJhbnNhY3Rpb24gZXhjZXB0
aW9uOiAiICsgZSk7Ci0gICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICB9CisgICAgcnVuVGVzdCgp
OwogfQogPC9zY3JpcHQ+IAogPC9oZWFkPiAKLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4gCi08
ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFu
Z2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRh
YmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28sIHJlbG9hZGlu
ZyB0aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlvbiBmYWlsdXJlLgotPHByZSBp
ZD0icmVzdWx0Ij4gCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4gCis8ZGl2PlRo
aXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBp
dHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJl
bG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCis8cHJlIGlkPSJjb25zb2xlIj4g
CiBGQUlMVVJFOiB0ZXN0IGRpZG4ndCBydW4uCiA8L3ByZT4gCiA8L2JvZHk+IApJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRs
ZS1yZXVzZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorZnVuY3Rpb24gZmluaXNo
VGVzdCgpCit7CisgICAgbG9nKCJURVNUIENPTVBMRVRFLiIpOworCisgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB0cnkgeworICAgICAgICBk
YiA9IG9wZW5EYXRhYmFzZSgiQ2hhbmdlVmVyc2lvbiIgKyBEQl9URVNUX1NVRkZJWCwgIiIsICJU
ZXN0IHRoYXQgY2hhbmdpbmcgYSBkYXRhYmFzZSB2ZXJzaW9uIGRvZXNuJ3Qga2lsbCBvdXIgaGFu
ZGxlIHRvIGl0IiwgMSk7CisgICAgICAgIHZhciB2ZXJzaW9uID0gZGIudmVyc2lvbjsKKyAgICAg
ICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBhcnNlSW50KHZlcnNpb24pICsgMSkudG9T
dHJpbmcoKSA6ICIxIjsgCisgICAgICAgIGRiLmNoYW5nZVZlcnNpb24odmVyc2lvbiwgbmV3VmVy
c2lvbiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogdHJh
bnNhY3Rpb24gY2FsbGJhY2siKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAg
ICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNz
YWdlKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBsb2coImNoYW5nZVZl
cnNpb246IHN1Y2Nlc3MgY2FsbGJhY2siKTsKKyAgICAgICAgICAgIHJ1blRlc3QyKCk7CisgICAg
ICAgIH0pOworICAgICAgICAKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiY2hhbmdl
VmVyc2lvbiBleGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgZmluaXNoVGVzdCgpOworICAgIH0K
K30KKyAKK2Z1bmN0aW9uIHJ1blRlc3QyKCkKK3sKKyAgICB0cnkgeworICAgICAgICBkYi50cmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNU
ICogZnJvbSBGb29CYXIiLCBbXSwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgICAgICBsb2co
InRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgY2FsbGJhY2siKTsKKyAgICAgICAgICAgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsKKyAgICAgICAg
ICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6ICIgKyBl
cnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBsb2coInRyYW5z
YWN0aW9uIGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgfQor
fQpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwJKHJldmlz
aW9uIDU3NTU1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWwJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICsxLDI5IEBACiA8aHRtbD4KIAogPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iZXhlY3V0ZS1zcWwtYXJncy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgogCi12YXIg
dGhyb3dPblRvU3RyaW5nT2JqZWN0ID0geyB9OwotdGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3Ry
aW5nID0gZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBv
YmplY3QuIiB9OwordmFyIERCX1RFU1RfU1VGRklYID0gIl9kb20iOwogCi12YXIgdGhyb3dPbkdl
dExlbmd0aE9iamVjdCA9IHsgfTsKLXRocm93T25HZXRMZW5ndGhPYmplY3QuX19kZWZpbmVHZXR0
ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCBsZW5ndGggb2Yg
dGhpcyBvYmplY3QuIjsgfSk7Ci0KLXZhciB0aHJvd09uR2V0WmVyb09iamVjdCA9IHsgbGVuZ3Ro
OiAxIH07Ci10aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdldHRlcl9fKCIwIiwgZnVuY3Rp
b24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9mIHRoaXMgb2JqZWN0LiI7IH0p
OwotCi12YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCi0gICAgJ251bGwnLAotICAgICd1bmRlZmlu
ZWQnLAotICAgICcwJywKLSAgICAnIiInLAotICAgICciIiwgbnVsbCcsCi0gICAgJyIiLCB1bmRl
ZmluZWQnLAotICAgICciIiwgW10nLAotICAgICciIiwgWyAiYXJnMCIgXScsCi0gICAgJyIiLCB7
IH0nLAotICAgICciIiwgeyBsZW5ndGg6IDAgfScsCi0gICAgJyIiLCB7IGxlbmd0aDogMSwgMDog
ImFyZzAiIH0nLAotICAgICciIiwgbnVsbCwgbnVsbCcsCi0gICAgJyIiLCBudWxsLCB1bmRlZmlu
ZWQnLAotICAgICciIiwgbnVsbCwgeyB9JywKLSAgICAnIiIsIG51bGwsIG51bGwsIG51bGwnLAot
ICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkJywKLSAgICAnIiIsIG51bGwsIG51bGwsIHsg
fScsCi1dOwotCi12YXIgZXhwZWN0RXhjZXB0aW9uID0gWwotICAgICcnLAotICAgICd0aHJvd09u
VG9TdHJpbmdPYmplY3QnLAotICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVjdCcsCi0gICAg
JyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCi0gICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09i
amVjdCBdJywKLSAgICAnIiIsIDAnLAotICAgICciIiwgIiInLAotICAgICciIiwgbnVsbCwgMCcs
Ci0gICAgJyIiLCBudWxsLCAiIicsCi0gICAgJyIiLCBudWxsLCBudWxsLCAwJywKLSAgICAnIiIs
IG51bGwsIG51bGwsICIiJywKLV07Ci0KLWZ1bmN0aW9uIHdyaXRlTWVzc2FnZVRvTG9nKG1lc3Nh
Z2UpCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKIHsKICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAotZnVuY3Rpb24g
dHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKLXsKLSAgICB0cnkgewot
ICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0ICsg
JyknKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7Ci0g
ICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgfQotfQotCi1mdW5jdGlvbiBydW5UcmFuc2Fj
dGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikKLXsK
LSAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVy
TGlzdCk7Ci0gICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgewotICAgICAgICBpZiAoZXhjZXB0aW9u
KQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBh
cmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlTWVzc2FnZVRvTG9nKCIqRkFJTCouIGV4ZWN1dGVT
cWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICB3cml0ZU1l
c3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhy
ZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3Qg
KyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwotICAgIH0KLX0KLQotZnVuY3Rpb24g
cnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2FjdGlvbikKLXsKLSAgICBmb3IgKGkgaW4gZXhwZWN0
Tm9FeGNlcHRpb24pCi0gICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhw
ZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsKLSAgICBmb3IgKGkgaW4gZXhwZWN0RXhjZXB0aW9u
KQotICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdEV4Y2VwdGlv
bltpXSwgdHJ1ZSk7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci0KLWZ1bmN0aW9uIHJ1
blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwog
ICAgIH0KLQotICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0Iiwg
IjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rp
b24uZXhlY3V0ZVNxbCIsIDEpOwotICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVz
dHMpOworICAgIHJ1blRlc3QoKTsKIH0KIAogPC9zY3JpcHQ+CiA8L2hlYWQ+CiAKLTxib2R5IG9u
bG9hZD0icnVuVGVzdCgpIj4KKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPgogPHBy
ZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3Jh
Z2UvZXhlY3V0ZS1zcWwtYXJncy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdl
L2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdl
L2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYgQEAKK3ZhciB0
aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Cit0aHJvd09uVG9TdHJpbmdPYmplY3QudG9TdHJp
bmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0cmluZyBvbiB0aGlzIG9i
amVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0ID0geyB9OwordGhyb3dPbkdl
dExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgiLCBmdW5jdGlvbiAoKSB7IHRo
cm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4iOyB9KTsKKwordmFyIHRocm93
T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEgfTsKK3Rocm93T25HZXRaZXJvT2JqZWN0Ll9f
ZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IDAgcHJv
cGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciBleHBlY3ROb0V4Y2VwdGlvbiA9IFsK
KyAgICAnbnVsbCcsCisgICAgJ3VuZGVmaW5lZCcsCisgICAgJzAnLAorICAgICciIicsCisgICAg
JyIiLCBudWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBbXScsCisgICAgJyIi
LCBbICJhcmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisgICAgJyIiLCB7IGxlbmd0aDogMCB9JywK
KyAgICAnIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCisgICAgJyIiLCBudWxsLCBudWxs
JywKKyAgICAnIiIsIG51bGwsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBudWxsLCB7IH0nLAorICAg
ICciIiwgbnVsbCwgbnVsbCwgbnVsbCcsCisgICAgJyIiLCBudWxsLCBudWxsLCB1bmRlZmluZWQn
LAorICAgICciIiwgbnVsbCwgbnVsbCwgeyB9JywKK107CisKK3ZhciBleHBlY3RFeGNlcHRpb24g
PSBbCisgICAgJycsCisgICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcsCisgICAgJyIiLCB0aHJv
d09uR2V0TGVuZ3RoT2JqZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKKyAg
ICAnIiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0nLAorICAgICciIiwgMCcsCisgICAgJyIi
LCAiIicsCisgICAgJyIiLCBudWxsLCAwJywKKyAgICAnIiIsIG51bGwsICIiJywKKyAgICAnIiIs
IG51bGwsIG51bGwsIDAnLAorICAgICciIiwgbnVsbCwgbnVsbCwgIiInLAorXTsKKworZnVuY3Rp
b24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKK3sKKyAgICB0cnkg
eworICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0ZXJMaXN0
ICsgJyknKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7
CisgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFu
c2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2VwdGlvbikK
K3sKKyAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1l
dGVyTGlzdCk7CisgICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgeworICAgICAgICBpZiAoZXhjZXB0
aW9uKQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0
ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIp
IGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYg
KGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGxvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJh
bWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJM
aXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCit7CisgICAgZm9yIChpIGluIGV4
cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24s
IGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7CisgICAgZm9yIChpIGluIGV4cGVjdEV4Y2Vw
dGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNl
cHRpb25baV0sIHRydWUpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biBydW5UZXN0KCkKK3sKKworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFy
Z3NUZXN0IiArIERCX1RFU1RfU1VGRklYLCAiMS4wIiwgIlRlc3Qgb2YgaGFuZGxpbmcgb2YgdGhl
IGFyZ3VtZW50cyB0byBTUUxUcmFuc2FjdGlvbi5leGVjdXRlU3FsIiwgMSk7CisgICAgZGIudHJh
bnNhY3Rpb24ocnVuVHJhbnNhY3Rpb25UZXN0cyk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54736</attachid>
            <date>2010-04-29 14:45:50 -0700</date>
            <delta_ts>2010-04-29 15:57:13 -0700</delta_ts>
            <desc>Updated patch to take into account the big string refactoring.  No functional change, only a one-liner in JSWorkerContextCustom.cpp.</desc>
            <filename>bug-34992-20100429144549.patch</filename>
            <type>text/plain</type>
            <size>29504</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQtMjkgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA0LTI5
ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFvbGxhYm9yYS5jby51az4K
IAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1ODUzMSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksOSBAQAogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCiAKKyNp
bmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJK
U0RhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgpAQCAt
MTQyLDYgKzE0NSwyNCBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwo
CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShEQVRBQkFTRSkKK0pTVmFsdWUgSlNXb3JrZXJDb250
ZXh0OjpvcGVuRGF0YWJhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKSAK
K3sgCisgICAgY29uc3QgVVN0cmluZyYgbmFtZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7
IAorICAgIGNvbnN0IFVTdHJpbmcmIHZlcnNpb24gPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMp
OyAKKyAgICBjb25zdCBVU3RyaW5nJiBkaXNwbGF5TmFtZSA9IGFyZ3MuYXQoMikudG9TdHJpbmco
ZXhlYyk7IAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9J
bnQzMihleGVjKTsgCisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJh
Y2s7IAorICAgIGlmICgoYXJncy5zaXplKCkgPj0gNSkgJiYgYXJncy5hdCg0KS5pc09iamVjdCgp
KSAKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRl
KGFzT2JqZWN0KGFyZ3MuYXQoNCkpLCBnbG9iYWxPYmplY3QoKSk7IAorIAorICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOyAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCksIFdURjo6Z2V0UHRyKGltcGwoKS0+b3BlbkRhdGFiYXNlKHVzdHJpbmdUb1N0cmluZyhu
YW1lKSwgdXN0cmluZ1RvU3RyaW5nKHZlcnNpb24pLCB1c3RyaW5nVG9TdHJpbmcoZGlzcGxheU5h
bWUpLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKSk7IAor
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7IAorICAgIHJldHVybiByZXN1bHQ7IAorfSAK
KyNlbmRpZgorIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdP
UktFUlMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29y
a2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU4NTMxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY2hl
ZHVsZWRBY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERhdGFi
YXNlLmgiCisjaW5jbHVkZSAiVjhEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhQcm94
eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lci5oIgpAQCAtMTM2LDYgKzEzOCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChXb3JrZXJDb250ZXh0CiAgICAgcmV0dXJuIGdsb2JhbDsKIH0KIAordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykgCit7IAorICAgIElOQ19TVEFUUygiRE9NLldvcmtlckNvbnRl
eHQub3BlbkRhdGFiYXNlKCkiKTsgCisgICAgLy8gSW1wbGVtZW50YXRpb24gY29taW5nIHNvb24u
CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsgCit9IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdPUktFUlMpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHJl
dmlzaW9uIDU4NTMxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2Ug
WwogICAgICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9y
CisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBd
IERhdGFiYXNlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9u
OwogICAgICAgICBbQ3VzdG9tXSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZl
cnNpb24sIGluIERPTVN0cmluZyBuZXdWZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
IGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywg
aW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U1FMRXJyb3IuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJvci5pZGwJ
KHJldmlzaW9uIDU4NTMxKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZh
Y2UgWwogICAgICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVj
dG9yCisgICAgICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAg
ICBdIFNRTEVycm9yIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcg
Y29kZTsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBtZXNzYWdlOwpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5pZGwJKHJldmlzaW9uIDU4NTMxKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFJlc3VsdFNldC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAg
bW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9
REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0Q29uc3RydWN0
b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBTUUxSZXN1bHRTZXQgewogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgU1FMUmVzdWx0U2V0Um93TGlzdCByb3dzOwogCkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCShyZXZpc2lvbiA1ODUzMSkKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsOCBAQCBtb2R1bGUgc3RvcmFnZSB7CiAKICAgICBpbnRlcmZhY2UgWwogICAg
ICAgICBDb25kaXRpb25hbD1EQVRBQkFTRSwKLSAgICAgICAgT21pdENvbnN0cnVjdG9yCisgICAg
ICAgIE9taXRDb25zdHJ1Y3RvciwKKyAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIFNRTFJl
c3VsdFNldFJvd0xpc3QgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7CiAgICAgICAgIFtDdXN0b21dIERPTU9iamVjdCBpdGVtKGluIHVuc2lnbmVkIGxv
bmcgaW5kZXgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRsCShyZXZpc2lvbiA1
ODUzMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5pZGwJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDcgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50ZXJmYWNlIFsK
ICAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25zdHJ1Y3Rvcgor
ICAgICAgICBPbWl0Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBT
UUxUcmFuc2FjdGlvbiB7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZXhlY3V0ZVNxbChpbiBET01T
dHJpbmcgc3FsU3RhdGVtZW50LCBpbiBPYmplY3RBcnJheSBhcmd1bWVudHMsIGluIFNRTFN0YXRl
bWVudENhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2spOwogICAgIH07CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCShyZXZp
c2lvbiA1ODUzMSkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAog
I2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5o
IgogI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVk
ZSAiRGF0YWJhc2UuaCIKQEAgLTI3NSwxMiArMjc2LDIwIEBAIFBhc3NSZWZQdHI8RGF0YWJhc2U+
IFdvcmtlckNvbnRleHQ6Om9wZW4KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNT
RVJUKERhdGFiYXNlOjppc0F2YWlsYWJsZSgpKTsKICAgICBpZiAoIURhdGFiYXNlOjppc0F2YWls
YWJsZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRh
dGFiYXNlKHRoaXMsIG5hbWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBj
cmVhdGlvbkNhbGxiYWNrLCBlYyk7CiB9CisKK3ZvaWQgV29ya2VyQ29udGV4dDo6ZGF0YWJhc2VF
eGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYpCit7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQor
ICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIGEgcmVhbCBpbXBsZW1lbnRhdGlvbjsgdGhpcyBpcyBh
IHRlbXBvcmFyeSBzb2x1dGlvbiBmb3IgdGVzdGluZy4KKyAgICBjb25zdCB1bnNpZ25lZCBsb25n
IGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEwMjQgKiAxMDI0OworICAgIERhdGFiYXNlVHJhY2tl
cjo6dHJhY2tlcigpLnNldFF1b3RhKHNlY3VyaXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7Cisj
ZW5kaWYKK30KICNlbmRpZgogCiBib29sIFdvcmtlckNvbnRleHQ6OmlzQ29udGV4dFRocmVhZCgp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHJldmlzaW9uIDU4NTMxKQorKysg
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDgg
KzEwNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFzc1JlZlB0cjxEYXRhYmFz
ZT4gb3BlbkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBjb25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUs
IFBhc3NSZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9u
Q29kZSYpOwogICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgeWV0LgogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNEYXRhYmFzZVJlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAg
ICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KLSAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNl
RXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmKSB7IH0KKyAgICAgICAgLy8gTm90IGltcGxlbWVu
dGVkIGZvciByZWFsIHlldC4KKyAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFiYXNlRXhjZWVkZWRR
dW90YShjb25zdCBTdHJpbmcmKTsKICNlbmRpZgogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDb250
ZXh0VGhyZWFkKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0pTRXhlY3V0aW9uVGVy
bWluYXRlZCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRs
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkocmV2aXNp
b24gNTg1MzEpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDcgKzQ5LDEwIEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgLy8gV29y
a2VyVXRpbHMKICAgICAgICAgW0N1c3RvbV0gdm9pZCBpbXBvcnRTY3JpcHRzKC8qW1ZhcmlhZGlj
XSBpbiBET01TdHJpbmcgdXJscyAqLyk7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVw
bGFjZWFibGVdIFdvcmtlck5hdmlnYXRvciBuYXZpZ2F0b3I7Ci0gICAgICAgIC8vIERhdGFiYXNl
IG9wZW5EYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGlu
IERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsK
KyNpZiBkZWZpbmVkKEVOQUJMRV9EQVRBQkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCisgICAgICAg
IFtFbmFibGVkQXRSdW50aW1lLCBDdXN0b21dIERhdGFiYXNlIG9wZW5EYXRhYmFzZShpbiBET01T
dHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFt
ZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBpbiBEYXRhYmFzZUNhbGxiYWNrIGNy
ZWF0aW9uQ2FsbGJhY2spCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyNlbmRp
ZgogICAgICAgICAvLyBEYXRhYmFzZVN5bmMgb3BlbkRhdGFiYXNlU3luYyhpbiBET01TdHJpbmcg
bmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4g
dW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKIAogICAgICAgICAvLyBUaW1lcnMKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDU4NTMxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQtMjkgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICAq
IHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmh0bWw6IFJlZmFjdG9yZWQgdG8g
c2hhcmUgY29kZSB3aXRoIHRoZSB3b3JrZXIgdmVyc2lvbiBvZiB0aGUgdGVzdC4KKyAgICAgICAg
KiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC5odG1sOiBSZW1v
dmVkIHJlZmVyZW5jZSB0byByZWxvYWRpbmcsIHdoaWNoIHRoaXMgdGVzdCBkb2Vzbid0IGRvLgor
ICAgICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzOiBUaGlzIGlz
IHRoZSBleHRyYWN0ZWQgc2hhcmVkIGNvcmUgb2YgdGhlIHRlc3QuCisgICAgICAgICogc3RvcmFn
ZS9leGVjdXRlLXNxbC1hcmdzLmh0bWw6IFJlZmFjdG9yZWQgdG8gc2hhcmUgY29kZSB3aXRoIHRo
ZSB3b3JrZXIgdmVyc2lvbiBvZiB0aGUgdGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUt
c3FsLWFyZ3MuanM6IFRoaXMgaXMgdGhlIGV4dHJhY3RlZCBzaGFyZWQgY29yZSBvZiB0aGUgdGVz
dC4KKworICAgICAgICBUaGVzZSBhcmUgdGhlIHdvcmtlciB2ZXJzaW9ucyBvZiB0aGUgdGVzdHM7
IHRoZXkncmUgdGlueSBzaGltcyBhcm91bmQgc2hhcmVkIGNvZGUuCisgICAgICAgICogZmFzdC93
b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2Vy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJz
aW9uLWhhbmRsZS1yZXVzZS13b3JrZXIuaHRtbDogQWRkZWQuCisgICAgICAgIFRoaXMgZmlsZSBn
ZXRzIGluY2x1ZGVkIGZyb20gd29ya2VyIGRhdGFiYXNlIHRlc3RzOyBpdCBkb2VzIGFsbCB0aGUg
Ym9pbGVycGxhdGUgdGhhdCdzIG5lZWRlZCBvbiB0aGUgRE9NIHNpZGUuCisgICAgICAgICogZmFz
dC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qczogQWRkZWQu
CisgICAgICAgIFRoaXMgZmlsZSBpcyB0aGUgYm9pbGVycGxhdGUgZm9yIHRoZSB3b3JrZXIgc2lk
ZSBvZiB0aGUgZGF0YWJhc2UgdGVzdHMuICBJdCB3aWxsIGltcG9ydCBhbmQgcnVuIHRoZSBhY3R1
YWwgdGVzdCBvbiBjb21tYW5kLCBhbmQgd2lsbCByZXBvcnQgYmFjayBjb21wbGV0aW9uIGFuZCBl
eGNlcHRpb25zLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29y
a2VyLmpzOiBBZGRlZC4KKwogMjAxMC0wNC0yOSAgQW50b24gTXVoaW4gIDxhbnRvbm1AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29y
a2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitUaGlzIHRlc3Rz
IHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNp
b24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90
IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgorY2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24g
Y2FsbGJhY2sKK2NoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2sKK3RyYW5zYWN0aW9uOiBz
dGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6IG5vIHN1Y2ggdGFibGU6IEZvb0JhcgorVEVTVCBDT01Q
TEVURS4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS13b3JrZXIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS13b3JrZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorPGh0bWw+IAorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpz
Ij48L3NjcmlwdD4gCis8c2NyaXB0PiAKKworZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKK3sK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgIH0KKyAKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y29uc29sZSIpLmlubmVyVGV4dCA9ICIiOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdl
KCJpbXBvcnRTY3JpcHRzOi4uLy4uL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
LmpzIik7CisgICAgZGF0YWJhc2VXb3JrZXIucG9zdE1lc3NhZ2UoInJ1blRlc3QiKTsKK30KKzwv
c2NyaXB0PiAKKzwvaGVhZD4gCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4gCis8
ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFu
Z2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRh
YmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCis8cHJlIGlkPSJjb25z
b2xlIj4gCitGQUlMVVJFOiB0ZXN0IGRpZG4ndCBydW4uCis8L3ByZT4gCis8L2JvZHk+IAorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29y
a2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
ZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorUEFTUy4gZXhlY3V0ZVNxbChudWxsKSBk
aWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCh1bmRlZmluZWQpIGRp
ZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKDApIGRpZCBub3QgdGhy
b3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiKSBkaWQgbm90IHRocm93IGFuIGV4
Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIFtdKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyAiYXJnMCIgXSkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNl
cHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAwIH0pIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMSwgMDogImFyZzAi
IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxs
LCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwg
bnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0
ZVNxbCgiIiwgbnVsbCwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhl
Y3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24K
K1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwsIHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwsIHsgfSkgZGlk
IG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoKSB0aHJldyBhbiBleGNl
cHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKHRocm93T25Ub1N0cmluZ09iamVj
dCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwg
dGhyb3dPbkdldExlbmd0aE9iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgor
UEFTUy4gZXhlY3V0ZVNxbCgiIiwgdGhyb3dPbkdldFplcm9PYmplY3QpIHRocmV3IGFuIGV4Y2Vw
dGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIFsgdGhyb3dPblRvU3RyaW5n
T2JqZWN0IF0pIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVT
cWwoIiIsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVT
cWwoIiIsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBl
eGVjdXRlU3FsKCIiLCBudWxsLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgor
UEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgMCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFz
IGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgIiIpIHRocmV3IGFu
IGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KKworZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgIH0KKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVzc2FnZSgiaW1wb3J0U2NyaXB0czouLi8u
Li9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0
TWVzc2FnZSgicnVuVGVzdCIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25s
b2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+Cis8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9k
eT4KKworPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9k
YXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13
b3JrZXItY29udHJvbGxlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAordmFyIGRh
dGFiYXNlV29ya2VyID0gbmV3IFdvcmtlcigncmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcycp
OworCitkYXRhYmFzZVdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlm
IChldmVudC5kYXRhLmluZGV4T2YoJ2xvZzonKSA9PSAwKQorICAgICAgICBsb2coZXZlbnQuZGF0
YS5zdWJzdHJpbmcoNCkpOworICAgIGVsc2UgaWYgKGV2ZW50LmRhdGEgPT0gJ25vdGlmeURvbmUn
KSB7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBtZXNzYWdlOiAiICsgZXZlbnQpOwor
fQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKK30KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2Vy
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9k
YXRhYmFzZS13b3JrZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciB3aW5k
b3cgPSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXI6IHsKKyAgICAgICAgbm90aWZ5RG9uZTog
ZnVuY3Rpb24oKSB7IHBvc3RNZXNzYWdlKCJub3RpZnlEb25lIik7IH0KKyAgICB9Cit9OwordmFy
IGxheW91dFRlc3RDb250cm9sbGVyID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyOworCitm
dW5jdGlvbiBsb2cocykgeworICAgIHBvc3RNZXNzYWdlKCJsb2c6IiArIHMpOworfQorCitvbm1l
c3NhZ2UgPSBmdW5jdGlvbihldmVudCkgeworICAgIHRyeSB7CisgICAgICAgIGlmIChldmVudC5k
YXRhLmluZGV4T2YoImltcG9ydFNjcmlwdHM6IikgPT0gMCkgeworICAgICAgICAgICAgdmFyIHNj
cmlwdHMgPSBldmVudC5kYXRhLnN1YnN0cmluZygiaW1wb3J0U2NyaXB0czoiLmxlbmd0aCkuc3Bs
aXQoIiwiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgaW4gc2NyaXB0cykKKyAgICAgICAgICAg
ICAgICBzY3JpcHRzW2ldID0gIi4uLyIgKyBzY3JpcHRzW2ldOworICAgICAgICAgICAgaW1wb3J0
U2NyaXB0cyhzY3JpcHRzKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhID09ICJydW5U
ZXN0IikKKyAgICAgICAgICAgIHJ1blRlc3QoKTsgLy8gTXVzdCBiZSBkZWZpbmVkIGJ5IHNvbWUg
aW1wb3J0ZWQgc2NyaXB0LgorICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIlJlY2VpdmVk
IHVuZXhwZWN0ZWQgbWVzc2FnZTogIiArIGV2ZW50LmRhdGEpOworICAgIH0gY2F0Y2ggKGV4KSB7
CisgICAgICAgIGxvZygiV29ya2VyIGNhdWdodCBleGNlcHRpb246ICIgKyBleCk7CisgICAgICAg
IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfTsKKwor
dmFyIERCX1RFU1RfU1VGRklYID0gIl93b3JrZXIiOwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gNTg1MzEpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJz
aW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0
IEBACi1UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hh
bmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0
YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRp
bmcgdGhlIHBhZ2Ugc2hvdWxkIG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KK1RoaXMg
dGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMg
dmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93
LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCiBjaGFuZ2VWZXJzaW9uOiB0cmFuc2Fj
dGlvbiBjYWxsYmFjawogY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawogdHJhbnNhY3Rp
b246IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLmh0bWwJKHJldmlzaW9uIDU4NTMxKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMSwzMSBA
QAogPGh0bWw+IAogPGhlYWQ+Cis8c2NyaXB0IHNyYz0iY2hhbmdlLXZlcnNpb24taGFuZGxlLXJl
dXNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQ+IAotZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCi17Ci0g
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCArPSBtZXNzYWdl
ICsgIlxuIjsKLX0KIAotZnVuY3Rpb24gZmluaXNoVGVzdCgpCi17Ci0gICAgbG9nKCJURVNUIENP
TVBMRVRFLiIpOwordmFyIERCX1RFU1RfU1VGRklYID0gIl9kb20iOwogCi0gICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7CiB9CiAKLWZ1
bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOwogICAgIH0KICAKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iiku
aW5uZXJUZXh0ID0gIiI7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5p
bm5lclRleHQgPSAiIjsKICAKLSAgICB0cnkgewotICAgICAgICBkYiA9IG9wZW5EYXRhYmFzZSgi
Q2hhbmdlVmVyc2lvbiIsICIiLCAiVGVzdCB0aGF0IGNoYW5naW5nIGEgZGF0YWJhc2UgdmVyc2lv
biBkb2VzblwndCBraWxsIG91ciBoYW5kbGUgdG8gaXQiLCAxKTsKLSAgICAgICAgdmFyIHZlcnNp
b24gPSBkYi52ZXJzaW9uOwotICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHZlcnNpb24gPyAocGFy
c2VJbnQodmVyc2lvbikgKyAxKS50b1N0cmluZygpIDogIjEiOyAKLSAgICAgICAgZGIuY2hhbmdl
VmVyc2lvbih2ZXJzaW9uLCBuZXdWZXJzaW9uLCBmdW5jdGlvbih0eCkgewotICAgICAgICAgICAg
bG9nKCJjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOwotICAgICAgICB9LCBm
dW5jdGlvbihlcnJvcikgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBlcnJvciBj
YWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2UpOwotICAgICAgICB9LCBmdW5jdGlvbigpIHsKLSAg
ICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjayIpOwotICAgICAg
ICB9KTsKLSAgICAgICAgCi0gICAgICAgIHNldFRpbWVvdXQocnVuVGVzdDIsIDEwMDApOwotICAg
ICAgICAKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbiBleGNl
cHRpb246ICIgKyBlKTsKLSAgICAgICAgZmluaXNoVGVzdCgpOwotICAgIH0KLX0KLSAKLWZ1bmN0
aW9uIHJ1blRlc3QyKCkKLXsKLSAgICB0cnkgewotICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5j
dGlvbih0eCkgewotICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogZnJvbSBGb29C
YXIiLCBbXSwgZnVuY3Rpb24odHgpIHsKLSAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9u
OiBzdGF0ZW1lbnQgY2FsbGJhY2siKTsKLSAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0g
ICAgICAgICAgICB9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBsb2co
InRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdl
KTsKLSAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAg
ICAgfSk7Ci0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2coInRyYW5zYWN0aW9uIGV4Y2Vw
dGlvbjogIiArIGUpOwotICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgfQorICAgIHJ1blRlc3Qo
KTsKIH0KIDwvc2NyaXB0PiAKIDwvaGVhZD4gCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+IAot
PGRpdj5UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hh
bmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0
YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRp
bmcgdGhlIHBhZ2Ugc2hvdWxkIG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KLTxwcmUg
aWQ9InJlc3VsdCI+IAorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+IAorPGRpdj5U
aGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcg
aXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBi
ZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgorPHByZSBpZD0iY29uc29sZSI+
IAogRkFJTFVSRTogdGVzdCBkaWRuJ3QgcnVuLgogPC9wcmU+IAogPC9ib2R5PiAKSW5kZXg6IExh
eW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5k
bGUtcmV1c2UuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKK2Z1bmN0aW9uIGZpbmlz
aFRlc3QoKQoreworICAgIGxvZygiVEVTVCBDT01QTEVURS4iKTsKKworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlm
eURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgdHJ5IHsKKyAgICAgICAg
ZGIgPSBvcGVuRGF0YWJhc2UoIkNoYW5nZVZlcnNpb24iICsgREJfVEVTVF9TVUZGSVgsICIiLCAi
VGVzdCB0aGF0IGNoYW5naW5nIGEgZGF0YWJhc2UgdmVyc2lvbiBkb2Vzbid0IGtpbGwgb3VyIGhh
bmRsZSB0byBpdCIsIDEpOworICAgICAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAg
ICAgIHZhciBuZXdWZXJzaW9uID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRv
U3RyaW5nKCkgOiAiMSI7IAorICAgICAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1Zl
cnNpb24sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRy
YW5zYWN0aW9uIGNhbGxiYWNrIik7CisgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAg
ICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVz
c2FnZSk7CisgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJjaGFuZ2VW
ZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrIik7CisgICAgICAgICAgICBydW5UZXN0MigpOworICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBsb2coImNoYW5n
ZVZlcnNpb24gZXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9
Cit9CisgCitmdW5jdGlvbiBydW5UZXN0MigpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZGIudHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVD
VCAqIGZyb20gRm9vQmFyIiwgW10sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgbG9n
KCJ0cmFuc2FjdGlvbjogc3RhdGVtZW50IGNhbGxiYWNrIik7CisgICAgICAgICAgICAgICAgZmlu
aXNoVGVzdCgpOworICAgICAgICAgICAgfSwgZnVuY3Rpb24odHgsIGVycm9yKSB7CisgICAgICAg
ICAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiAiICsg
ZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJ0cmFu
c2FjdGlvbiBleGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgZmluaXNoVGVzdCgpOworICAgIH0K
K30KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCShyZXZp
c2lvbiA1ODUzMSkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwOCArMSwyOSBAQAogPGh0bWw+CiAKIDxoZWFkPgorPHNj
cmlwdCBzcmM9ImV4ZWN1dGUtc3FsLWFyZ3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIAotdmFy
IHRocm93T25Ub1N0cmluZ09iamVjdCA9IHsgfTsKLXRocm93T25Ub1N0cmluZ09iamVjdC50b1N0
cmluZyA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nIG9uIHRoaXMg
b2JqZWN0LiIgfTsKK3ZhciBEQl9URVNUX1NVRkZJWCA9ICJfZG9tIjsKIAotdmFyIHRocm93T25H
ZXRMZW5ndGhPYmplY3QgPSB7IH07Ci10aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5lR2V0
dGVyX18oImxlbmd0aCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3RoIG9m
IHRoaXMgb2JqZWN0LiI7IH0pOwotCi12YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxlbmd0
aDogMSB9OwotdGhyb3dPbkdldFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1bmN0
aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4iOyB9
KTsKLQotdmFyIGV4cGVjdE5vRXhjZXB0aW9uID0gWwotICAgICdudWxsJywKLSAgICAndW5kZWZp
bmVkJywKLSAgICAnMCcsCi0gICAgJyIiJywKLSAgICAnIiIsIG51bGwnLAotICAgICciIiwgdW5k
ZWZpbmVkJywKLSAgICAnIiIsIFtdJywKLSAgICAnIiIsIFsgImFyZzAiIF0nLAotICAgICciIiwg
eyB9JywKLSAgICAnIiIsIHsgbGVuZ3RoOiAwIH0nLAotICAgICciIiwgeyBsZW5ndGg6IDEsIDA6
ICJhcmcwIiB9JywKLSAgICAnIiIsIG51bGwsIG51bGwnLAotICAgICciIiwgbnVsbCwgdW5kZWZp
bmVkJywKLSAgICAnIiIsIG51bGwsIHsgfScsCi0gICAgJyIiLCBudWxsLCBudWxsLCBudWxsJywK
LSAgICAnIiIsIG51bGwsIG51bGwsIHVuZGVmaW5lZCcsCi0gICAgJyIiLCBudWxsLCBudWxsLCB7
IH0nLAotXTsKLQotdmFyIGV4cGVjdEV4Y2VwdGlvbiA9IFsKLSAgICAnJywKLSAgICAndGhyb3dP
blRvU3RyaW5nT2JqZWN0JywKLSAgICAnIiIsIHRocm93T25HZXRMZW5ndGhPYmplY3QnLAotICAg
ICciIiwgdGhyb3dPbkdldFplcm9PYmplY3QnLAotICAgICciIiwgWyB0aHJvd09uVG9TdHJpbmdP
YmplY3QgXScsCi0gICAgJyIiLCAwJywKLSAgICAnIiIsICIiJywKLSAgICAnIiIsIG51bGwsIDAn
LAotICAgICciIiwgbnVsbCwgIiInLAotICAgICciIiwgbnVsbCwgbnVsbCwgMCcsCi0gICAgJyIi
LCBudWxsLCBudWxsLCAiIicsCi1dOwotCi1mdW5jdGlvbiB3cml0ZU1lc3NhZ2VUb0xvZyhtZXNz
YWdlKQorZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCiB7CiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7CiB9CiAKLWZ1bmN0aW9u
IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpCi17Ci0gICAgdHJ5IHsK
LSAgICAgICAgZXZhbCgndHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsgcGFyYW1ldGVyTGlzdCAr
ICcpJyk7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewot
ICAgICAgICByZXR1cm4gZXhjZXB0aW9uOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcnVuVHJhbnNh
Y3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBlY3RFeGNlcHRpb24pCi17
Ci0gICAgdmFyIGV4Y2VwdGlvbiA9IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRl
ckxpc3QpOwotICAgIGlmIChleHBlY3RFeGNlcHRpb24pIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlv
bikKLSAgICAgICAgICAgIHdyaXRlTWVzc2FnZVRvTG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBw
YXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRl
U3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVN
ZXNzYWdlVG9Mb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRo
cmV3IGFuIGV4Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHdyaXRlTWVzc2FnZVRvTG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0
ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9u
IHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCi17Ci0gICAgZm9yIChpIGluIGV4cGVj
dE5vRXhjZXB0aW9uKQotICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4
cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7Ci0gICAgZm9yIChpIGluIGV4cGVjdEV4Y2VwdGlv
bikKLSAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNlcHRp
b25baV0sIHRydWUpOwotCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotCi1mdW5jdGlvbiBy
dW5UZXN0KCkKK2Z1bmN0aW9uIHNldHVwQW5kUnVuVGVzdCgpCiB7CiAgICAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
ICAgICB9Ci0KLSAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkV4ZWN1dGVTUUxBcmdzVGVzdCIs
ICIxLjAiLCAiVGVzdCBvZiBoYW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0
aW9uLmV4ZWN1dGVTcWwiLCAxKTsKLSAgICBkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRl
c3RzKTsKKyAgICBydW5UZXN0KCk7CiB9CiAKIDwvc2NyaXB0PgogPC9oZWFkPgogCi08Ym9keSBv
bmxvYWQ9InJ1blRlc3QoKSI+Cis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KIDxw
cmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgogPC9ib2R5PgogCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9y
YWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFn
ZS9leGVjdXRlLXNxbC1hcmdzLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS9leGVjdXRlLXNxbC1hcmdzLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACit2YXIg
dGhyb3dPblRvU3RyaW5nT2JqZWN0ID0geyB9OwordGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3Ry
aW5nID0gZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBv
YmplY3QuIiB9OworCit2YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKK3Rocm93T25H
ZXRMZW5ndGhPYmplY3QuX19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0
aHJvdyAiQ2Fubm90IGdldCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciB0aHJv
d09uR2V0WmVyb09iamVjdCA9IHsgbGVuZ3RoOiAxIH07Cit0aHJvd09uR2V0WmVyb09iamVjdC5f
X2RlZmluZUdldHRlcl9fKCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHBy
b3BlcnR5IG9mIHRoaXMgb2JqZWN0LiI7IH0pOworCit2YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBb
CisgICAgJ251bGwnLAorICAgICd1bmRlZmluZWQnLAorICAgICcwJywKKyAgICAnIiInLAorICAg
ICciIiwgbnVsbCcsCisgICAgJyIiLCB1bmRlZmluZWQnLAorICAgICciIiwgW10nLAorICAgICci
IiwgWyAiYXJnMCIgXScsCisgICAgJyIiLCB7IH0nLAorICAgICciIiwgeyBsZW5ndGg6IDAgfScs
CisgICAgJyIiLCB7IGxlbmd0aDogMSwgMDogImFyZzAiIH0nLAorICAgICciIiwgbnVsbCwgbnVs
bCcsCisgICAgJyIiLCBudWxsLCB1bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgeyB9JywKKyAg
ICAnIiIsIG51bGwsIG51bGwsIG51bGwnLAorICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVk
JywKKyAgICAnIiIsIG51bGwsIG51bGwsIHsgfScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9u
ID0gWworICAgICcnLAorICAgICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAorICAgICciIiwgdGhy
b3dPbkdldExlbmd0aE9iamVjdCcsCisgICAgJyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCisg
ICAgJyIiLCBbIHRocm93T25Ub1N0cmluZ09iamVjdCBdJywKKyAgICAnIiIsIDAnLAorICAgICci
IiwgIiInLAorICAgICciIiwgbnVsbCwgMCcsCisgICAgJyIiLCBudWxsLCAiIicsCisgICAgJyIi
LCBudWxsLCBudWxsLCAwJywKKyAgICAnIiIsIG51bGwsIG51bGwsICIiJywKK107CisKK2Z1bmN0
aW9uIHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpCit7CisgICAgdHJ5
IHsKKyAgICAgICAgZXZhbCgndHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsgcGFyYW1ldGVyTGlz
dCArICcpJyk7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikg
eworICAgICAgICByZXR1cm4gZXhjZXB0aW9uOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVHJh
bnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBlY3RFeGNlcHRpb24p
Cit7CisgICAgdmFyIGV4Y2VwdGlvbiA9IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFt
ZXRlckxpc3QpOworICAgIGlmIChleHBlY3RFeGNlcHRpb24pIHsKKyAgICAgICAgaWYgKGV4Y2Vw
dGlvbikKKyAgICAgICAgICAgIGxvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlz
dCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbG9nKCIqRkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAi
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFy
YW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVy
TGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfQorfQorCitmdW5j
dGlvbiBydW5UcmFuc2FjdGlvblRlc3RzKHRyYW5zYWN0aW9uKQoreworICAgIGZvciAoaSBpbiBl
eHBlY3ROb0V4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9u
LCBleHBlY3ROb0V4Y2VwdGlvbltpXSwgZmFsc2UpOworICAgIGZvciAoaSBpbiBleHBlY3RFeGNl
cHRpb24pCisgICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0RXhj
ZXB0aW9uW2ldLCB0cnVlKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rp
b24gcnVuVGVzdCgpCit7CisKKyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkV4ZWN1dGVTUUxB
cmdzVGVzdCIgKyBEQl9URVNUX1NVRkZJWCwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRo
ZSBhcmd1bWVudHMgdG8gU1FMVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOworICAgIGRiLnRy
YW5zYWN0aW9uKHJ1blRyYW5zYWN0aW9uVGVzdHMpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54745</attachid>
            <date>2010-04-29 15:57:18 -0700</date>
            <delta_ts>2010-05-10 18:56:03 -0700</delta_ts>
            <desc>Added exception for V8 bindings.</desc>
            <filename>bug-34992-20100429155717.patch</filename>
            <type>text/plain</type>
            <size>29517</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODUzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDQtMjkgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA0LTI5
ICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFvbGxhYm9yYS5jby51az4K
IAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9wZXouCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1ODUzMSkKKysrIFdl
YkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjksNiArMjksOSBAQAogCiAjaW5jbHVkZSAiSlNXb3JrZXJDb250ZXh0LmgiCiAKKyNp
bmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKKyNpbmNsdWRlICJK
U0RhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRl
ICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgpAQCAt
MTQyLDYgKzE0NSwyNCBAQCBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6bWVzc2FnZUNoYW5uZWwo
CiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShEQVRBQkFTRSkKK0pTVmFsdWUgSlNXb3JrZXJDb250
ZXh0OjpvcGVuRGF0YWJhc2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKSAK
K3sgCisgICAgY29uc3QgVVN0cmluZyYgbmFtZSA9IGFyZ3MuYXQoMCkudG9TdHJpbmcoZXhlYyk7
IAorICAgIGNvbnN0IFVTdHJpbmcmIHZlcnNpb24gPSBhcmdzLmF0KDEpLnRvU3RyaW5nKGV4ZWMp
OyAKKyAgICBjb25zdCBVU3RyaW5nJiBkaXNwbGF5TmFtZSA9IGFyZ3MuYXQoMikudG9TdHJpbmco
ZXhlYyk7IAorICAgIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9J
bnQzMihleGVjKTsgCisgICAgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJh
Y2s7IAorICAgIGlmICgoYXJncy5zaXplKCkgPj0gNSkgJiYgYXJncy5hdCg0KS5pc09iamVjdCgp
KSAKKyAgICAgICAgY3JlYXRpb25DYWxsYmFjayA9IEpTRGF0YWJhc2VDYWxsYmFjazo6Y3JlYXRl
KGFzT2JqZWN0KGFyZ3MuYXQoNCkpLCBnbG9iYWxPYmplY3QoKSk7IAorIAorICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOyAKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0KCksIFdURjo6Z2V0UHRyKGltcGwoKS0+b3BlbkRhdGFiYXNlKHVzdHJpbmdUb1N0cmluZyhu
YW1lKSwgdXN0cmluZ1RvU3RyaW5nKHZlcnNpb24pLCB1c3RyaW5nVG9TdHJpbmcoZGlzcGxheU5h
bWUpLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLnJlbGVhc2UoKSwgZWMpKSk7IAor
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7IAorICAgIHJldHVybiByZXN1bHQ7IAorfSAK
KyNlbmRpZgorIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdP
UktFUlMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRD
dXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29y
a2VyQ29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU4NTMxKQorKysgV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJTY2hl
ZHVsZWRBY3Rpb24uaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOERhdGFi
YXNlLmgiCisjaW5jbHVkZSAiVjhEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5jbHVkZSAiVjhQcm94
eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0
RXZlbnRMaXN0ZW5lci5oIgpAQCAtMTM2LDYgKzEzOCwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOChXb3JrZXJDb250ZXh0CiAgICAgcmV0dXJuIGdsb2JhbDsKIH0KIAordjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlQ2FsbGJhY2soY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykgCit7IAorICAgIElOQ19TVEFUUygiRE9NLldvcmtlckNvbnRl
eHQub3BlbkRhdGFiYXNlKCkiKTsgCisgICAgLy8gSW1wbGVtZW50YXRpb24gY29taW5nIHNvb24u
CisgICAgcmV0dXJuIHRocm93RXJyb3IoTk9UX1NVUFBPUlRFRF9FUlIpOworfSAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXT1JLRVJTKQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0
YWJhc2UuaWRsCShyZXZpc2lvbiA1ODUzMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAg
ICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAgIE9t
aXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGlj
VGFibGVzCiAgICAgXSBEYXRhYmFzZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01T
dHJpbmcgdmVyc2lvbjsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBjaGFuZ2VWZXJzaW9uKGluIERP
TVN0cmluZyBvbGRWZXJzaW9uLCBpbiBET01TdHJpbmcgbmV3VmVyc2lvbiwgaW4gU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVy
cm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOwpJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTEVycm9yLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U1FMRXJyb3IuaWRsCShyZXZpc2lvbiA1ODUzMSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxFcnJv
ci5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2Ugewog
CiAgICAgaW50ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAg
IE9taXRDb25zdHJ1Y3RvcgorICAgICAgICBPbWl0Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3Rh
dGljVGFibGVzCiAgICAgXSBTUUxFcnJvciB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGNvZGU7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcg
bWVzc2FnZTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCShyZXZpc2lvbiA1ODUzMSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAgIGludGVyZmFjZSBbCiAgICAgICAg
IENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0Q29uc3RydWN0b3IKKyAgICAgICAg
T21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gU1FMUmVzdWx0
U2V0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNRTFJlc3VsdFNldFJvd0xpc3Qgcm93
czsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldFJvd0xpc3QuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0LmlkbAkocmV2aXNp
b24gNTg1MzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMUmVzdWx0U2V0Um93TGlzdC5pZGwJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgaW50
ZXJmYWNlIFsKICAgICAgICAgQ29uZGl0aW9uYWw9REFUQUJBU0UsCi0gICAgICAgIE9taXRDb25z
dHJ1Y3RvcgorICAgICAgICBPbWl0Q29uc3RydWN0b3IsCisgICAgICAgIE5vU3RhdGljVGFibGVz
CiAgICAgXSBTUUxSZXN1bHRTZXRSb3dMaXN0IHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRl
IHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwogICAgICAgICBbQ3VzdG9tXSBET01PYmplY3QgaXRlbShp
biB1bnNpZ25lZCBsb25nIGluZGV4KTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlk
bAkocmV2aXNpb24gNTg1MzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAg
IGludGVyZmFjZSBbCiAgICAgICAgIENvbmRpdGlvbmFsPURBVEFCQVNFLAotICAgICAgICBPbWl0
Q29uc3RydWN0b3IKKyAgICAgICAgT21pdENvbnN0cnVjdG9yLAorICAgICAgICBOb1N0YXRpY1Rh
YmxlcwogICAgIF0gU1FMVHJhbnNhY3Rpb24gewogICAgICAgICBbQ3VzdG9tXSB2b2lkIGV4ZWN1
dGVTcWwoaW4gRE9NU3RyaW5nIHNxbFN0YXRlbWVudCwgaW4gT2JqZWN0QXJyYXkgYXJndW1lbnRz
LCBpbiBTUUxTdGF0ZW1lbnRDYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjayBlcnJvckNhbGxiYWNrKTsKICAgICB9OwpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmNwcAkocmV2aXNpb24gNTg1MzEpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCkBAIC0yNzUsMTIgKzI3NiwyMCBAQCBQYXNzUmVm
UHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0OjpvcGVuCiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIEFTU0VSVChEYXRhYmFzZTo6aXNBdmFpbGFibGUoKSk7CiAgICAgaWYgKCFEYXRh
YmFzZTo6aXNBdmFpbGFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gRGF0
YWJhc2U6Om9wZW5EYXRhYmFzZSh0aGlzLCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0
aW1hdGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjaywgZWMpOwogfQorCit2b2lkIFdvcmtlckNvbnRl
eHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YShjb25zdCBTdHJpbmcmKQoreworI2lmICFQTEFURk9S
TShDSFJPTUlVTSkKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyBhIHJlYWwgaW1wbGVtZW50YXRp
b247IHRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gZm9yIHRlc3RpbmcuCisgICAgY29uc3Qg
dW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRRdW90YSA9IDUgKiAxMDI0ICogMTAyNDsKKyAgICBE
YXRhYmFzZVRyYWNrZXI6OnRyYWNrZXIoKS5zZXRRdW90YShzZWN1cml0eU9yaWdpbigpLCBkZWZh
dWx0UXVvdGEpOworI2VuZGlmCit9CiAjZW5kaWYKIAogYm9vbCBXb3JrZXJDb250ZXh0Ojppc0Nv
bnRleHRUaHJlYWQoKSBjb25zdApJbmRleDogV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5oCShyZXZpc2lv
biA1ODUzMSkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNyw4ICsxMDcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NS
ZWZQdHI8RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5zaWduZWQgbG9uZyBl
c3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJh
Y2ssIEV4Y2VwdGlvbkNvZGUmKTsKICAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KICAg
ICAgICAgdmlydHVhbCBib29sIGlzRGF0YWJhc2VSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJikgeyB9CisgICAgICAgIC8v
IE5vdCBpbXBsZW1lbnRlZCBmb3IgcmVhbCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRh
YmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKICAgICAgICAgdmlydHVh
bCBib29sIGlzQ29udGV4dFRocmVhZCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNK
U0V4ZWN1dGlvblRlcm1pbmF0ZWQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3Jr
ZXJDb250ZXh0LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5pZGwJKHJldmlzaW9uIDU4NTMxKQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQu
aWRsCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSwxMCBAQCBtb2R1bGUgdGhyZWFkcyB7CiAg
ICAgICAgIC8vIFdvcmtlclV0aWxzCiAgICAgICAgIFtDdXN0b21dIHZvaWQgaW1wb3J0U2NyaXB0
cygvKltWYXJpYWRpY10gaW4gRE9NU3RyaW5nIHVybHMgKi8pOwogICAgICAgICAgICAgICAgICBh
dHRyaWJ1dGUgW1JlcGxhY2VhYmxlXSBXb3JrZXJOYXZpZ2F0b3IgbmF2aWdhdG9yOwotICAgICAg
ICAvLyBEYXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmlu
ZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSk7CisjaWYgZGVmaW5lZChFTkFCTEVfREFUQUJBU0UpICYmIEVOQUJMRV9EQVRB
QkFTRQorICAgICAgICBbRW5hYmxlZEF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZSBvcGVuRGF0
YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJp
bmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJh
c2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2Vw
dGlvbik7CisjZW5kaWYKICAgICAgICAgLy8gRGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMo
aW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlz
cGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSk7CiAKICAgICAgICAgLy8g
VGltZXJzCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1ODUzMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDEwLTA0LTI5ICBFcmljIFVocmhh
bmUgIDxlcmljdUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIGJpbmRpbmdzIGZvciBhc3luYyBEQiBBUEkgaW4gV29ya2Vy
cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTky
CisKKyAgICAgICAgKiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sOiBS
ZWZhY3RvcmVkIHRvIHNoYXJlIGNvZGUgd2l0aCB0aGUgd29ya2VyIHZlcnNpb24gb2YgdGhlIHRl
c3QuCisgICAgICAgICogc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0
ZWQuaHRtbDogUmVtb3ZlZCByZWZlcmVuY2UgdG8gcmVsb2FkaW5nLCB3aGljaCB0aGlzIHRlc3Qg
ZG9lc24ndCBkby4KKyAgICAgICAgKiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS5qczogVGhpcyBpcyB0aGUgZXh0cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorICAg
ICAgICAqIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sOiBSZWZhY3RvcmVkIHRvIHNoYXJl
IGNvZGUgd2l0aCB0aGUgd29ya2VyIHZlcnNpb24gb2YgdGhlIHRlc3QuCisgICAgICAgICogc3Rv
cmFnZS9leGVjdXRlLXNxbC1hcmdzLmpzOiBUaGlzIGlzIHRoZSBleHRyYWN0ZWQgc2hhcmVkIGNv
cmUgb2YgdGhlIHRlc3QuCisKKyAgICAgICAgVGhlc2UgYXJlIHRoZSB3b3JrZXIgdmVyc2lvbnMg
b2YgdGhlIHRlc3RzOyB0aGV5J3JlIHRpbnkgc2hpbXMgYXJvdW5kIHNoYXJlZCBjb2RlLgorICAg
ICAgICAqIGZhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxl
LXJldXNlLXdvcmtlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWw6IEFkZGVkLgorICAgICAg
ICBUaGlzIGZpbGUgZ2V0cyBpbmNsdWRlZCBmcm9tIHdvcmtlciBkYXRhYmFzZSB0ZXN0czsgaXQg
ZG9lcyBhbGwgdGhlIGJvaWxlcnBsYXRlIHRoYXQncyBuZWVkZWQgb24gdGhlIERPTSBzaWRlLgor
ICAgICAgICAqIGZhc3Qvd29ya2Vycy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xs
ZXIuanM6IEFkZGVkLgorICAgICAgICBUaGlzIGZpbGUgaXMgdGhlIGJvaWxlcnBsYXRlIGZvciB0
aGUgd29ya2VyIHNpZGUgb2YgdGhlIGRhdGFiYXNlIHRlc3RzLiAgSXQgd2lsbCBpbXBvcnQgYW5k
IHJ1biB0aGUgYWN0dWFsIHRlc3Qgb24gY29tbWFuZCwgYW5kIHdpbGwgcmVwb3J0IGJhY2sgY29t
cGxldGlvbiBhbmQgZXhjZXB0aW9ucy4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3VyY2Vz
L2RhdGFiYXNlLXdvcmtlci5qczogQWRkZWQuCisKIDIwMTAtMDQtMjkgIEFudG9uIE11aGluICA8
YW50b25tQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1
c2Utd29ya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dv
cmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLXdvcmtlci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNiBA
QAorVGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5n
aW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFi
bGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KK2NoYW5nZVZlcnNpb246
IHRyYW5zYWN0aW9uIGNhbGxiYWNrCitjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrCit0
cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiBubyBzdWNoIHRhYmxlOiBGb29C
YXIKK1RFU1QgQ09NUExFVEUuCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXIuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9jaGFuZ2UtdmVyc2lv
bi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjUgQEAK
KzxodG1sPiAKKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kYXRhYmFzZS13b3JrZXIt
Y29udHJvbGxlci5qcyI+PC9zY3JpcHQ+IAorPHNjcmlwdD4gCisKK2Z1bmN0aW9uIHNldHVwQW5k
UnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICB9CisgCisgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgPSAiIjsKKyAgICBkYXRhYmFzZVdvcmtl
ci5wb3N0TWVzc2FnZSgiaW1wb3J0U2NyaXB0czouLi8uLi9zdG9yYWdlL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS5qcyIpOworICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJydW5U
ZXN0Iik7Cit9Cis8L3NjcmlwdD4gCis8L2hlYWQ+IAorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1
blRlc3QoKSI+IAorPGRpdj5UaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNz
ZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFi
b3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgor
PHByZSBpZD0iY29uc29sZSI+IAorRkFJTFVSRTogdGVzdCBkaWRuJ3QgcnVuLgorPC9wcmU+IAor
PC9ib2R5PiAKKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9leGVjdXRl
LXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtl
ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK1BBU1MuIGV4ZWN1
dGVTcWwobnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwo
dW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgw
KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIikgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwpIGRpZCBub3Qg
dGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCB1bmRlZmluZWQpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBbXSkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIFsgImFyZzAiIF0pIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCB7IH0pIGRpZCBub3Qg
dGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCB7IGxlbmd0aDogMCB9KSBk
aWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6
IDEsIDA6ICJhcmcwIiB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0
ZVNxbCgiIiwgbnVsbCwgbnVsbCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4
ZWN1dGVTcWwoIiIsIG51bGwsIHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24K
K1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIHsgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRp
b24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwsIG51bGwpIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCB1bmRlZmluZWQp
IGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBu
dWxsLCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCkg
dGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCh0aHJvd09u
VG9TdHJpbmdPYmplY3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4
ZWN1dGVTcWwoIiIsIHRocm93T25HZXRMZW5ndGhPYmplY3QpIHRocmV3IGFuIGV4Y2VwdGlvbiBh
cyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHRocm93T25HZXRaZXJvT2JqZWN0KSB0
aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCBbIHRo
cm93T25Ub1N0cmluZ09iamVjdCBdKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTLiBleGVjdXRlU3FsKCIiLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTLiBleGVjdXRlU3FsKCIiLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgor
UEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgMCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVj
dGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgIiIpIHRocmV3IGFuIGV4Y2VwdGlvbiBh
cyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwsIDApIHRocmV3IGFu
IGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGws
ICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL2V4ZWN1dGUtc3FsLWFyZ3Mt
d29ya2VyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIHNldHVwQW5kUnVuVGVzdCgpCit7CisgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKKyAgICB9CisgICAgZGF0YWJhc2VXb3JrZXIucG9zdE1lc3NhZ2UoImltcG9y
dFNjcmlwdHM6Li4vLi4vc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmpzIik7CisgICAgZGF0YWJh
c2VXb3JrZXIucG9zdE1lc3NhZ2UoInJ1blRlc3QiKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPgorPHByZSBpZD0iY29uc29sZSI+
PC9wcmU+Cis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJv
bGxlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9yZXNvdXJj
ZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTYgQEAKK3ZhciBkYXRhYmFzZVdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy9kYXRhYmFz
ZS13b3JrZXIuanMnKTsKKworZGF0YWJhc2VXb3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZXZl
bnQpIHsKKyAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCdsb2c6JykgPT0gMCkKKyAgICAgICAg
bG9nKGV2ZW50LmRhdGEuc3Vic3RyaW5nKDQpKTsKKyAgICBlbHNlIGlmIChldmVudC5kYXRhID09
ICdub3RpZnlEb25lJykgeworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgbWVzc2FnZTog
IiArIGV2ZW50KTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7Cit9
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvcmVzb3VyY2VzL2Rh
dGFiYXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5
IEBACit2YXIgd2luZG93ID0geworICAgIGxheW91dFRlc3RDb250cm9sbGVyOiB7CisgICAgICAg
IG5vdGlmeURvbmU6IGZ1bmN0aW9uKCkgeyBwb3N0TWVzc2FnZSgibm90aWZ5RG9uZSIpOyB9Cisg
ICAgfQorfTsKK3ZhciBsYXlvdXRUZXN0Q29udHJvbGxlciA9IHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcjsKKworZnVuY3Rpb24gbG9nKHMpIHsKKyAgICBwb3N0TWVzc2FnZSgibG9nOiIgKyBz
KTsKK30KKworb25tZXNzYWdlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICB0cnkgeworICAgICAg
ICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCJpbXBvcnRTY3JpcHRzOiIpID09IDApIHsKKyAgICAg
ICAgICAgIHZhciBzY3JpcHRzID0gZXZlbnQuZGF0YS5zdWJzdHJpbmcoImltcG9ydFNjcmlwdHM6
Ii5sZW5ndGgpLnNwbGl0KCIsIik7CisgICAgICAgICAgICBmb3IgKHZhciBpIGluIHNjcmlwdHMp
CisgICAgICAgICAgICAgICAgc2NyaXB0c1tpXSA9ICIuLi8iICsgc2NyaXB0c1tpXTsKKyAgICAg
ICAgICAgIGltcG9ydFNjcmlwdHMoc2NyaXB0cyk7CisgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQu
ZGF0YSA9PSAicnVuVGVzdCIpCisgICAgICAgICAgICBydW5UZXN0KCk7IC8vIE11c3QgYmUgZGVm
aW5lZCBieSBzb21lIGltcG9ydGVkIHNjcmlwdC4KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bG9nKCJSZWNlaXZlZCB1bmV4cGVjdGVkIG1lc3NhZ2U6ICIgKyBldmVudC5kYXRhKTsKKyAgICB9
IGNhdGNoIChleCkgeworICAgICAgICBsb2coIldvcmtlciBjYXVnaHQgZXhjZXB0aW9uOiAiICsg
ZXgpOworICAgICAgICB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0KK307CisKK3ZhciBEQl9URVNUX1NVRkZJWCA9ICJfd29ya2VyIjsKSW5kZXg6IExheW91
dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1y
ZXVzZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU4NTMxKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNCBAQAotVGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vz
c2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBh
Ym91dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4g
QWxzbywgcmVsb2FkaW5nIHRoZSBwYWdlIHNob3VsZCBub3QgY2F1c2UgYW4gYXNzZXJ0aW9uIGZh
aWx1cmUuCitUaGlzIHRlc3RzIHRoYXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIg
Y2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0Jh
ciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLgogY2hhbmdlVmVy
c2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2sKIGNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJh
Y2sKIHRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2s6IG5vIHN1Y2ggdGFibGU6
IEZvb0JhcgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJz
aW9uLWhhbmRsZS1yZXVzZS5odG1sCShyZXZpc2lvbiA1ODUzMSkKKysrIExheW91dFRlc3RzL3N0
b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTEsNzAgKzEsMzEgQEAKIDxodG1sPiAKIDxoZWFkPgorPHNjcmlwdCBzcmM9ImNoYW5nZS12ZXJz
aW9uLWhhbmRsZS1yZXVzZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PiAKLWZ1bmN0aW9uIGxvZyht
ZXNzYWdlKQotewotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5pbm5lclRl
eHQgKz0gbWVzc2FnZSArICJcbiI7Ci19CiAKLWZ1bmN0aW9uIGZpbmlzaFRlc3QoKQotewotICAg
IGxvZygiVEVTVCBDT01QTEVURS4iKTsKK3ZhciBEQl9URVNUX1NVRkZJWCA9ICJfZG9tIjsKIAot
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCi0gICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAi
XG4iOwogfQogCi1mdW5jdGlvbiBydW5UZXN0KCkKK2Z1bmN0aW9uIHNldHVwQW5kUnVuVGVzdCgp
CiB7CiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewogICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICB9CiAgCi0gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICIiOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CiAgCi0gICAgdHJ5IHsKLSAgICAgICAgZGIgPSBv
cGVuRGF0YWJhc2UoIkNoYW5nZVZlcnNpb24iLCAiIiwgIlRlc3QgdGhhdCBjaGFuZ2luZyBhIGRh
dGFiYXNlIHZlcnNpb24gZG9lc25cJ3Qga2lsbCBvdXIgaGFuZGxlIHRvIGl0IiwgMSk7Ci0gICAg
ICAgIHZhciB2ZXJzaW9uID0gZGIudmVyc2lvbjsKLSAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSB2
ZXJzaW9uID8gKHBhcnNlSW50KHZlcnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsgCi0gICAg
ICAgIGRiLmNoYW5nZVZlcnNpb24odmVyc2lvbiwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsK
LSAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2siKTsK
LSAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKLSAgICAgICAgICAgIGxvZygiY2hhbmdlVmVy
c2lvbjogZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKLSAgICAgICAgfSwgZnVu
Y3Rpb24oKSB7Ci0gICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJh
Y2siKTsKLSAgICAgICAgfSk7Ci0gICAgICAgIAotICAgICAgICBzZXRUaW1lb3V0KHJ1blRlc3Qy
LCAxMDAwKTsKLSAgICAgICAgCi0gICAgfSBjYXRjaCAoZSkgewotICAgICAgICBsb2coImNoYW5n
ZVZlcnNpb24gZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICB9
Ci19Ci0gCi1mdW5jdGlvbiBydW5UZXN0MigpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgZGIudHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKLSAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVD
VCAqIGZyb20gRm9vQmFyIiwgW10sIGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICAgICAgbG9n
KCJ0cmFuc2FjdGlvbjogc3RhdGVtZW50IGNhbGxiYWNrIik7Ci0gICAgICAgICAgICAgICAgZmlu
aXNoVGVzdCgpOwotICAgICAgICAgICAgfSwgZnVuY3Rpb24odHgsIGVycm9yKSB7Ci0gICAgICAg
ICAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiAiICsg
ZXJyb3IubWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOwotICAgICAgICAg
ICAgfSk7Ci0gICAgICAgIH0pOwotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJ0cmFu
c2FjdGlvbiBleGNlcHRpb246ICIgKyBlKTsKLSAgICAgICAgZmluaXNoVGVzdCgpOwotICAgIH0K
KyAgICBydW5UZXN0KCk7CiB9CiA8L3NjcmlwdD4gCiA8L2hlYWQ+IAotPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPiAKLTxkaXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vz
c2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBh
Ym91dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4g
QWxzbywgcmVsb2FkaW5nIHRoZSBwYWdlIHNob3VsZCBub3QgY2F1c2UgYW4gYXNzZXJ0aW9uIGZh
aWx1cmUuCi08cHJlIGlkPSJyZXN1bHQiPiAKKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0
KCkiPiAKKzxkaXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFm
dGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBG
b29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KKzxwcmUg
aWQ9ImNvbnNvbGUiPiAKIEZBSUxVUkU6IHRlc3QgZGlkbid0IHJ1bi4KIDwvcHJlPiAKIDwvYm9k
eT4gCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVz
ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhh
bmRsZS1yZXVzZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdl
LXZlcnNpb24taGFuZGxlLXJldXNlLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACitm
dW5jdGlvbiBmaW5pc2hUZXN0KCkKK3sKKyAgICBsb2coIlRFU1QgQ09NUExFVEUuIik7CisKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworICAgIHRy
eSB7CisgICAgICAgIGRiID0gb3BlbkRhdGFiYXNlKCJDaGFuZ2VWZXJzaW9uIiArIERCX1RFU1Rf
U1VGRklYLCAiIiwgIlRlc3QgdGhhdCBjaGFuZ2luZyBhIGRhdGFiYXNlIHZlcnNpb24gZG9lc24n
dCBraWxsIG91ciBoYW5kbGUgdG8gaXQiLCAxKTsKKyAgICAgICAgdmFyIHZlcnNpb24gPSBkYi52
ZXJzaW9uOworICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHZlcnNpb24gPyAocGFyc2VJbnQodmVy
c2lvbikgKyAxKS50b1N0cmluZygpIDogIjEiOyAKKyAgICAgICAgZGIuY2hhbmdlVmVyc2lvbih2
ZXJzaW9uLCBuZXdWZXJzaW9uLCBmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgbG9nKCJjaGFu
Z2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOworICAgICAgICB9LCBmdW5jdGlvbihl
cnJvcikgeworICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBlcnJvciBjYWxsYmFjazog
IiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
IGxvZygiY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjayIpOworICAgICAgICAgICAgcnVu
VGVzdDIoKTsKKyAgICAgICAgfSk7CisgICAgICAgIAorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgbG9nKCJjaGFuZ2VWZXJzaW9uIGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBmaW5pc2hU
ZXN0KCk7CisgICAgfQorfQorIAorZnVuY3Rpb24gcnVuVGVzdDIoKQoreworICAgIHRyeSB7Cisg
ICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVj
dXRlU3FsKCJTRUxFQ1QgKiBmcm9tIEZvb0JhciIsIFtdLCBmdW5jdGlvbih0eCkgeworICAgICAg
ICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBjYWxsYmFjayIpOworICAgICAg
ICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4LCBlcnJv
cikgeworICAgICAgICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBj
YWxsYmFjazogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgIGZpbmlzaFRlc3Qo
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgIGxvZygidHJhbnNhY3Rpb24gZXhjZXB0aW9uOiAiICsgZSk7CisgICAgICAgIGZpbmlzaFRl
c3QoKTsKKyAgICB9Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFy
Z3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFy
Z3MuaHRtbAkocmV2aXNpb24gNTg1MzEpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUt
c3FsLWFyZ3MuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSwxMDggKzEsMjkgQEAKIDxodG1sPgog
CiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJleGVjdXRlLXNxbC1hcmdzLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQ+CiAKLXZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Ci10aHJvd09uVG9TdHJp
bmdPYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0
cmluZyBvbiB0aGlzIG9iamVjdC4iIH07Cit2YXIgREJfVEVTVF9TVUZGSVggPSAiX2RvbSI7CiAK
LXZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0ID0geyB9OwotdGhyb3dPbkdldExlbmd0aE9iamVj
dC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3Qg
Z2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4iOyB9KTsKLQotdmFyIHRocm93T25HZXRaZXJvT2Jq
ZWN0ID0geyBsZW5ndGg6IDEgfTsKLXRocm93T25HZXRaZXJvT2JqZWN0Ll9fZGVmaW5lR2V0dGVy
X18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IDAgcHJvcGVydHkgb2YgdGhp
cyBvYmplY3QuIjsgfSk7Ci0KLXZhciBleHBlY3ROb0V4Y2VwdGlvbiA9IFsKLSAgICAnbnVsbCcs
Ci0gICAgJ3VuZGVmaW5lZCcsCi0gICAgJzAnLAotICAgICciIicsCi0gICAgJyIiLCBudWxsJywK
LSAgICAnIiIsIHVuZGVmaW5lZCcsCi0gICAgJyIiLCBbXScsCi0gICAgJyIiLCBbICJhcmcwIiBd
JywKLSAgICAnIiIsIHsgfScsCi0gICAgJyIiLCB7IGxlbmd0aDogMCB9JywKLSAgICAnIiIsIHsg
bGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCi0gICAgJyIiLCBudWxsLCBudWxsJywKLSAgICAnIiIs
IG51bGwsIHVuZGVmaW5lZCcsCi0gICAgJyIiLCBudWxsLCB7IH0nLAotICAgICciIiwgbnVsbCwg
bnVsbCwgbnVsbCcsCi0gICAgJyIiLCBudWxsLCBudWxsLCB1bmRlZmluZWQnLAotICAgICciIiwg
bnVsbCwgbnVsbCwgeyB9JywKLV07Ci0KLXZhciBleHBlY3RFeGNlcHRpb24gPSBbCi0gICAgJycs
Ci0gICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcsCi0gICAgJyIiLCB0aHJvd09uR2V0TGVuZ3Ro
T2JqZWN0JywKLSAgICAnIiIsIHRocm93T25HZXRaZXJvT2JqZWN0JywKLSAgICAnIiIsIFsgdGhy
b3dPblRvU3RyaW5nT2JqZWN0IF0nLAotICAgICciIiwgMCcsCi0gICAgJyIiLCAiIicsCi0gICAg
JyIiLCBudWxsLCAwJywKLSAgICAnIiIsIG51bGwsICIiJywKLSAgICAnIiIsIG51bGwsIG51bGws
IDAnLAotICAgICciIiwgbnVsbCwgbnVsbCwgIiInLAotXTsKLQotZnVuY3Rpb24gd3JpdGVNZXNz
YWdlVG9Mb2cobWVzc2FnZSkKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQogewogICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOwog
fQogCi1mdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0KQot
ewotICAgIHRyeSB7Ci0gICAgICAgIGV2YWwoJ3RyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoJyArIHBh
cmFtZXRlckxpc3QgKyAnKScpOwotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9IGNhdGNoIChl
eGNlcHRpb24pIHsKLSAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKLSAgICB9Ci19Ci0KLWZ1bmN0
aW9uIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCwgZXhwZWN0
RXhjZXB0aW9uKQotewotICAgIHZhciBleGNlcHRpb24gPSB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0
aW9uLCBwYXJhbWV0ZXJMaXN0KTsKLSAgICBpZiAoZXhwZWN0RXhjZXB0aW9uKSB7Ci0gICAgICAg
IGlmIChleGNlcHRpb24pCi0gICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiUEFTUy4gZXhl
Y3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4iKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIipG
QUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4g
ZXhjZXB0aW9uIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAg
ICAgICAgIHdyaXRlTWVzc2FnZVRvTG9nKCIqRkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRl
ckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBleGNlcHRpb24pOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsg
cGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7Ci0gICAgfQot
fQotCi1mdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3RzKHRyYW5zYWN0aW9uKQotewotICAgIGZv
ciAoaSBpbiBleHBlY3ROb0V4Y2VwdGlvbikKLSAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRy
YW5zYWN0aW9uLCBleHBlY3ROb0V4Y2VwdGlvbltpXSwgZmFsc2UpOwotICAgIGZvciAoaSBpbiBl
eHBlY3RFeGNlcHRpb24pCi0gICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwg
ZXhwZWN0RXhjZXB0aW9uW2ldLCB0cnVlKTsKLQotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCi0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKLX0K
LQotZnVuY3Rpb24gcnVuVGVzdCgpCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQogewogICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CiAgICAgfQotCi0gICAgdmFyIGRiID0gb3BlbkRhdGFiYXNlKCJFeGVjdXRl
U1FMQXJnc1Rlc3QiLCAiMS4wIiwgIlRlc3Qgb2YgaGFuZGxpbmcgb2YgdGhlIGFyZ3VtZW50cyB0
byBTUUxUcmFuc2FjdGlvbi5leGVjdXRlU3FsIiwgMSk7Ci0gICAgZGIudHJhbnNhY3Rpb24ocnVu
VHJhbnNhY3Rpb25UZXN0cyk7CisgICAgcnVuVGVzdCgpOwogfQogCiA8L3NjcmlwdD4KIDwvaGVh
ZD4KIAotPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgorPGJvZHkgb25sb2FkPSJzZXR1cEFuZFJ1
blRlc3QoKSI+CiA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KIDwvYm9keT4KIApJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw4NiBAQAordmFyIHRocm93T25Ub1N0cmluZ09iamVjdCA9IHsgfTsKK3Rocm93T25Ub1N0cmlu
Z09iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3Ry
aW5nIG9uIHRoaXMgb2JqZWN0LiIgfTsKKwordmFyIHRocm93T25HZXRMZW5ndGhPYmplY3QgPSB7
IH07Cit0aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oImxlbmd0aCIsIGZ1
bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LiI7IH0p
OworCit2YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxlbmd0aDogMSB9OwordGhyb3dPbkdl
dFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNh
bm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4iOyB9KTsKKwordmFyIGV4cGVjdE5v
RXhjZXB0aW9uID0gWworICAgICdudWxsJywKKyAgICAndW5kZWZpbmVkJywKKyAgICAnMCcsCisg
ICAgJyIiJywKKyAgICAnIiIsIG51bGwnLAorICAgICciIiwgdW5kZWZpbmVkJywKKyAgICAnIiIs
IFtdJywKKyAgICAnIiIsIFsgImFyZzAiIF0nLAorICAgICciIiwgeyB9JywKKyAgICAnIiIsIHsg
bGVuZ3RoOiAwIH0nLAorICAgICciIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9JywKKyAgICAn
IiIsIG51bGwsIG51bGwnLAorICAgICciIiwgbnVsbCwgdW5kZWZpbmVkJywKKyAgICAnIiIsIG51
bGwsIHsgfScsCisgICAgJyIiLCBudWxsLCBudWxsLCBudWxsJywKKyAgICAnIiIsIG51bGwsIG51
bGwsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBudWxsLCBudWxsLCB7IH0nLAorXTsKKwordmFyIGV4
cGVjdEV4Y2VwdGlvbiA9IFsKKyAgICAnJywKKyAgICAndGhyb3dPblRvU3RyaW5nT2JqZWN0JywK
KyAgICAnIiIsIHRocm93T25HZXRMZW5ndGhPYmplY3QnLAorICAgICciIiwgdGhyb3dPbkdldFpl
cm9PYmplY3QnLAorICAgICciIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXScsCisgICAgJyIi
LCAwJywKKyAgICAnIiIsICIiJywKKyAgICAnIiIsIG51bGwsIDAnLAorICAgICciIiwgbnVsbCwg
IiInLAorICAgICciIiwgbnVsbCwgbnVsbCwgMCcsCisgICAgJyIiLCBudWxsLCBudWxsLCAiIics
CitdOworCitmdW5jdGlvbiB0cnlFeGVjdXRlU3FsKHRyYW5zYWN0aW9uLCBwYXJhbWV0ZXJMaXN0
KQoreworICAgIHRyeSB7CisgICAgICAgIGV2YWwoJ3RyYW5zYWN0aW9uLmV4ZWN1dGVTcWwoJyAr
IHBhcmFtZXRlckxpc3QgKyAnKScpOworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9IGNhdGNo
IChleGNlcHRpb24pIHsKKyAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCwgZXhw
ZWN0RXhjZXB0aW9uKQoreworICAgIHZhciBleGNlcHRpb24gPSB0cnlFeGVjdXRlU3FsKHRyYW5z
YWN0aW9uLCBwYXJhbWV0ZXJMaXN0KTsKKyAgICBpZiAoZXhwZWN0RXhjZXB0aW9uKSB7CisgICAg
ICAgIGlmIChleGNlcHRpb24pCisgICAgICAgICAgICBsb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiAr
IHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuIik7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJh
bWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgbG9nKCIqRkFJTCouIGV4ZWN1
dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb246ICIgKyBleGNl
cHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIlBBU1MuIGV4ZWN1dGVTcWwo
IiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOworICAg
IH0KK30KKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2FjdGlvbikKK3sKKyAg
ICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCisgICAgICAgIHJ1blRyYW5zYWN0aW9uVGVz
dCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsKKyAgICBmb3IgKGkg
aW4gZXhwZWN0RXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rp
b24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7CisKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQoreworCisgICAgdmFyIGRiID0gb3BlbkRhdGFiYXNl
KCJFeGVjdXRlU1FMQXJnc1Rlc3QiICsgREJfVEVTVF9TVUZGSVgsICIxLjAiLCAiVGVzdCBvZiBo
YW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwiLCAx
KTsKKyAgICBkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55639</attachid>
            <date>2010-05-10 18:56:09 -0700</date>
            <delta_ts>2010-05-11 12:42:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34992-20100510185607.patch</filename>
            <type>text/plain</type>
            <size>28061</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTExMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDUtMTAgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA1LTEw
ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkBAIC0zNTUsNyArMzg2LDYgQEAKIAogICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgogCi0+Pj4+Pj4+IC5yNTkwODQKIDIwMTAtMDUtMTAgIERpcmsgU2No
dWx6ZSAgPGtyaXRAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBOaWtvbGFzIFpp
bW1lcm1hbm4uCkBAIC0yODA0LDYgKzI4MzQsNyBAQAogICAgICAgICAoV2ViQ29yZTo6RmlsZVN0
cmVhbTo6cmVhZCk6CiAgICAgICAgICogaHRtbC9GaWxlU3RyZWFtLmg6CiAKKz4+Pj4+Pj4gLnI1
OTExMAogMjAxMC0wNS0wNSAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpAQCAtNTAwOCw2ICs1MDM5
LDcgQEAKICAgICAgICAgKFdlYkNvcmU6OmpzVGVzdE9ialByb3RvdHlwZUZ1bmN0aW9uTWV0aG9k
V2l0aE5vbk9wdGlvbmFsQXJnQW5kT3B0aW9uYWxBcmcpOgogICAgICAgICAoV2ViQ29yZTo6anNU
ZXN0T2JqUHJvdG90eXBlRnVuY3Rpb25NZXRob2RXaXRoTm9uT3B0aW9uYWxBcmdBbmRUd29PcHRp
b25hbEFyZ3MpOgogCis+Pj4+Pj4+IC5yNTg3OTYKIDIwMTAtMDQtMjkgIEd1c3Rhdm8gTm9yb25o
YSBTaWx2YSAgPGd1c3Rhdm8ubm9yb25oYW9sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFhhbiBMb3Blei4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250
ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU5MTEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5
IEBACiAKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKIAorI2luY2x1ZGUgIkRhdGFiYXNl
LmgiCisjaW5jbHVkZSAiSlNEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2VDYWxsYmFj
ay5oIgogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCkBAIC0xNDMsNiArMTQ2LDI0IEBA
IEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjptZXNzYWdlQ2hhbm5lbCgKICNlbmRpZgogCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQorSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZShF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpIAoreyAKKyAgICBjb25zdCBVU3Ry
aW5nJiBuYW1lID0gYXJncy5hdCgwKS50b1N0cmluZyhleGVjKTsgCisgICAgY29uc3QgVVN0cmlu
ZyYgdmVyc2lvbiA9IGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYyk7IAorICAgIGNvbnN0IFVTdHJp
bmcmIGRpc3BsYXlOYW1lID0gYXJncy5hdCgyKS50b1N0cmluZyhleGVjKTsgCisgICAgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplID0gYXJncy5hdCgzKS50b0ludDMyKGV4ZWMpOyAKKyAgICBS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjazsgCisgICAgaWYgKChhcmdz
LnNpemUoKSA+PSA1KSAmJiBhcmdzLmF0KDQpLmlzT2JqZWN0KCkpIAorICAgICAgICBjcmVhdGlv
bkNhbGxiYWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoYXJncy5hdCg0
KSksIGdsb2JhbE9iamVjdCgpKTsgCisgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7IAorICAg
IEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIo
aW1wbCgpLT5vcGVuRGF0YWJhc2UodXN0cmluZ1RvU3RyaW5nKG5hbWUpLCB1c3RyaW5nVG9TdHJp
bmcodmVyc2lvbiksIHVzdHJpbmdUb1N0cmluZyhkaXNwbGF5TmFtZSksIGVzdGltYXRlZFNpemUs
IGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsgCisgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsgCisgICAgcmV0dXJuIHJlc3VsdDsgCit9IAorI2VuZGlmCisgCisjaWYgRU5B
QkxFKERBVEFCQVNFKQogSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmMo
RXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAJKHJldmlzaW9uIDU5MTEwKQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiAr
NDIsNyBAQAogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgogI2luY2x1ZGUgIlY4QmluZGlu
Zy5oIgogI2luY2x1ZGUgIlY4QmluZGluZ01hY3Jvcy5oIgorI2luY2x1ZGUgIlY4RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgiCkBAIC0xNDIsNiArMTQzLDEzIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdvcmtlckNvbnRleHQKIH0KIAogI2lmIEVOQUJM
RShEQVRBQkFTRSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om9wZW5E
YXRhYmFzZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpIAoreyAKKyAgICBJTkNf
U1RBVFMoIkRPTS5Xb3JrZXJDb250ZXh0Lm9wZW5EYXRhYmFzZSgpIik7IAorICAgIC8vIEltcGxl
bWVudGF0aW9uIGNvbWluZyBzb29uLgorICAgIHJldHVybiB0aHJvd0Vycm9yKE5PVF9TVVBQT1JU
RURfRVJSKTsKK30gCisKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFdvcmtlckNvbnRleHQ6Om9w
ZW5EYXRhYmFzZVN5bmNDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewogICAg
IElOQ19TVEFUUygiRE9NLlY4V29ya2VyQ29udGV4dC5vcGVuRGF0YWJhc2VTeW5jKCkiKTsKSW5k
ZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHJldmlzaW9uIDU5MTEwKQorKysgV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogCiAjaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiRE9NVGltZXIu
aCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEYXRhYmFzZS5oIgpAQCAtMjc1
LDEzICsyNzYsMjEgQEAgUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dDo6b3Blbgog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBBU1NFUlQoRGF0YWJhc2U6OmlzQXZhaWxh
YmxlKCkpOwogICAgIGlmICghRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkpCiAgICAgICAgIHJldHVy
biAwOwogCiAgICAgcmV0dXJuIERhdGFiYXNlOjpvcGVuRGF0YWJhc2UodGhpcywgbmFtZSwgdmVy
c2lvbiwgZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsK
IH0KIAordm9pZCBXb3JrZXJDb250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3Ry
aW5nJikKK3sKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8gRklYTUU6IFRoaXMgbmVl
ZHMgYSByZWFsIGltcGxlbWVudGF0aW9uOyB0aGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGZv
ciB0ZXN0aW5nLgorICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1
ICogMTAyNCAqIDEwMjQ7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEo
c2VjdXJpdHlPcmlnaW4oKSwgZGVmYXVsdFF1b3RhKTsKKyNlbmRpZgorfQorCiBQYXNzUmVmUHRy
PERhdGFiYXNlU3luYz4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFt
ZSwgdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJh
Y2s+IGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghc2Vj
dXJpdHlPcmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkgewpJbmRleDogV2ViQ29yZS93b3Jr
ZXJzL1dvcmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2Vy
Q29udGV4dC5oCShyZXZpc2lvbiA1OTExMCkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsxMTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KICAgICAgICAgdmlydHVhbCBi
b29sIGlzRGF0YWJhc2VSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAg
IC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUV4
Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJikgeyB9CisgICAgICAgIC8vIE5vdCBpbXBsZW1lbnRl
ZCBmb3IgcmVhbCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCBib29sIGlzQ29udGV4
dFRocmVhZCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvblRlcm1p
bmF0ZWQoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9u
IDU5MTEwKQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC00OSw5ICs0OSw5IEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgLy8gV29ya2Vy
VXRpbHMKICAgICAgICAgW0N1c3RvbV0gdm9pZCBpbXBvcnRTY3JpcHRzKC8qW1ZhcmlhZGljXSBp
biBET01TdHJpbmcgdXJscyAqLyk7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFj
ZWFibGVdIFdvcmtlck5hdmlnYXRvciBuYXZpZ2F0b3I7Ci0KICNpZiBkZWZpbmVkKEVOQUJMRV9E
QVRBQkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCi0gICAgICAgIC8vIERhdGFiYXNlIG9wZW5EYXRh
YmFzZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmlu
ZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKKyAgICAgICAg
W0VuYWJsZWRBdFJ1bnRpbWUsIEN1c3RvbV0gRGF0YWJhc2Ugb3BlbkRhdGFiYXNlKGluIERPTVN0
cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1l
LCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIERhdGFiYXNlQ2FsbGJhY2sgY3Jl
YXRpb25DYWxsYmFjaykKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgICAg
ICBbRW5hYmxlQXRSdW50aW1lLCBDdXN0b21dIERhdGFiYXNlU3luYyBvcGVuRGF0YWJhc2VTeW5j
KGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRp
c3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIERhdGFiYXNlQ2Fs
bGJhY2sgY3JlYXRpb25DYWxsYmFjayk7CiAjZW5kaWYKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTkx
MTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
NiBAQAorMjAxMC0wNS0xMCAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBiaW5kaW5n
cyBmb3IgYXN5bmMgREIgQVBJIGluIFdvcmtlcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDk5MgorCisgICAgICAgICogc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBjb2RlIHdpdGgg
dGhlIHdvcmtlciB2ZXJzaW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvY2hhbmdl
LXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLmh0bWw6IFJlbW92ZWQgcmVmZXJlbmNlIHRv
IHJlbG9hZGluZywgd2hpY2ggdGhpcyB0ZXN0IGRvZXNuJ3QgZG8uCisgICAgICAgICogc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanM6IFRoaXMgaXMgdGhlIGV4dHJhY3RlZCBz
aGFyZWQgY29yZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFy
Z3MuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBjb2RlIHdpdGggdGhlIHdvcmtlciB2ZXJzaW9u
IG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qczogVGhp
cyBpcyB0aGUgZXh0cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorCisgICAgICAgIFRo
ZXNlIGFyZSB0aGUgd29ya2VyIHZlcnNpb25zIG9mIHRoZSB0ZXN0czsgdGhleSdyZSB0aW55IHNo
aW1zIGFyb3VuZCBzaGFyZWQgY29kZS4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvZXhlY3V0ZS1z
cWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC93
b3JrZXJzL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
LXdvcmtlci5odG1sOiBBZGRlZC4KKyAgICAgICAgVGhpcyBmaWxlIGdldHMgaW5jbHVkZWQgZnJv
bSB3b3JrZXIgZGF0YWJhc2UgdGVzdHM7IGl0IGRvZXMgYWxsIHRoZSBib2lsZXJwbGF0ZSB0aGF0
J3MgbmVlZGVkIG9uIHRoZSBET00gc2lkZS4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvcmVzb3Vy
Y2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzOiBBZGRlZC4KKyAgICAgICAgVGhpcyBm
aWxlIGlzIHRoZSBib2lsZXJwbGF0ZSBmb3IgdGhlIHdvcmtlciBzaWRlIG9mIHRoZSBkYXRhYmFz
ZSB0ZXN0cy4gIEl0IHdpbGwgaW1wb3J0IGFuZCBydW4gdGhlIGFjdHVhbCB0ZXN0IG9uIGNvbW1h
bmQsIGFuZCB3aWxsIHJlcG9ydCBiYWNrIGNvbXBsZXRpb24gYW5kIGV4Y2VwdGlvbnMuCisgICAg
ICAgICogZmFzdC93b3JrZXJzL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanM6IEFkZGVkLgor
CiAyMDEwLTA1LTEwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lv
bi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13
b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVz
dHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVy
c2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBu
b3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCitjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlv
biBjYWxsYmFjaworY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawordHJhbnNhY3Rpb246
IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCitURVNUIENP
TVBMRVRFLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtl
ci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDI1IEBACis8aHRtbD4gCis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0
YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMiPjwvc2NyaXB0PiAKKzxzY3JpcHQ+IAorCitmdW5j
dGlvbiBzZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorIAorICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CisgICAg
ZGF0YWJhc2VXb3JrZXIucG9zdE1lc3NhZ2UoImltcG9ydFNjcmlwdHM6Li4vLi4vLi4vc3RvcmFn
ZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5w
b3N0TWVzc2FnZSgicnVuVGVzdCIpOworfQorPC9zY3JpcHQ+IAorPC9oZWFkPiAKKzxib2R5IG9u
bG9hZD0ic2V0dXBBbmRSdW5UZXN0KCkiPiAKKzxkaXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJh
c2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxk
IHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRj
aGluZyB2ZXJzaW9ucy4KKzxwcmUgaWQ9ImNvbnNvbGUiPiAKK0ZBSUxVUkU6IHRlc3QgZGlkbid0
IHJ1bi4KKzwvcHJlPiAKKzwvYm9keT4gCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwt
YXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlkIG5v
dCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9u
CitQQVNTLiBleGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfSkg
ZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51
bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxs
LCB1bmRlZmluZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3Fs
KCIiLCBudWxsLCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCBudWxsLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQgbm90
IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlv
biBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0
aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJv
d09uR2V0TGVuZ3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNT
LiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9u
IGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmpl
Y3QgXSkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgMCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgi
IiwgIiIpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwo
IiIsIG51bGwsIDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1
dGVTcWwoIiIsIG51bGwsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNT
LiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhw
ZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3Rv
cmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNx
bC1hcmdzLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxl
ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQor
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdl
KCJpbXBvcnRTY3JpcHRzOi4uLy4uLy4uL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcyIpOwor
ICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJydW5UZXN0Iik7Cit9CisKKzwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KKzxwcmUgaWQ9
ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3Vy
Y2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250
cm9sbGVyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0IEBACit2YXIgZGF0YWJhc2VXb3Jr
ZXIgPSBuZXcgV29ya2VyKCdyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzJyk7CisKK2RhdGFi
YXNlV29ya2VyLm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgIGxvZygiQ2F1Z2h0IGFu
IGVycm9yIGZyb20gdGhlIHdvcmtlciEiKTsKKyAgICBsb2coZXZlbnQpOworICAgIGZvciAodmFy
IGkgaW4gZXZlbnQpIHsKKyAgICAgICAgbG9nKCJldmVudFsiICsgaSArICJdOiAiICsgZXZlbnRb
aV0pOworICAgIH0KK307CisKK2RhdGFiYXNlV29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2
ZW50KSB7CisgICAgaWYgKGV2ZW50LmRhdGEuaW5kZXhPZignbG9nOicpID09IDApCisgICAgICAg
IGxvZyhldmVudC5kYXRhLnN1YnN0cmluZyg0KSk7CisgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9
PSAnbm90aWZ5RG9uZScpIHsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
ICAgfSBlbHNlCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIG1lc3NhZ2U6
ICIgKyBldmVudCk7Cit9OworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsK
K30KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9kYXRh
YmFzZS13b3JrZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanMJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKK3ZhciB3aW5kb3cgPSB7CisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXI6IHsKKyAgICAgICAgbm90aWZ5RG9uZTogZnVuY3Rpb24oKSB7IHBvc3RN
ZXNzYWdlKCJub3RpZnlEb25lIik7IH0KKyAgICB9Cit9OwordmFyIGxheW91dFRlc3RDb250cm9s
bGVyID0gd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyOworCitmdW5jdGlvbiBsb2cocykgewor
ICAgIHBvc3RNZXNzYWdlKCJsb2c6IiArIHMpOworfQorCitvbm1lc3NhZ2UgPSBmdW5jdGlvbihl
dmVudCkgeworICAgIHRyeSB7CisgICAgICAgIGlmIChldmVudC5kYXRhLmluZGV4T2YoImltcG9y
dFNjcmlwdHM6IikgPT0gMCkgeworICAgICAgICAgICAgdmFyIHNjcmlwdHMgPSBldmVudC5kYXRh
LnN1YnN0cmluZygiaW1wb3J0U2NyaXB0czoiLmxlbmd0aCkuc3BsaXQoIiwiKTsKKyAgICAgICAg
ICAgIGZvciAodmFyIGkgaW4gc2NyaXB0cykKKyAgICAgICAgICAgICAgICBzY3JpcHRzW2ldID0g
Ii4uLyIgKyBzY3JpcHRzW2ldOworICAgICAgICAgICAgaW1wb3J0U2NyaXB0cyhzY3JpcHRzKTsK
KyAgICAgICAgfSBlbHNlIGlmIChldmVudC5kYXRhID09ICJydW5UZXN0IikKKyAgICAgICAgICAg
IHJ1blRlc3QoKTsgLy8gTXVzdCBiZSBkZWZpbmVkIGJ5IHNvbWUgaW1wb3J0ZWQgc2NyaXB0Lgor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIlJlY2VpdmVkIHVuZXhwZWN0ZWQgbWVzc2Fn
ZTogIiArIGV2ZW50LmRhdGEpOworICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgIGxvZygiV29y
a2VyIGNhdWdodCBleGNlcHRpb246ICIgKyBleCk7CisgICAgICAgIHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfTsKKwordmFyIERCX1RFU1RfU1VGRklY
ID0gIl93b3JrZXIiOwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTkx
MTApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1l
eHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi1UaGlzIHRlc3RzIHRo
YXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24u
IFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFi
b3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRpbmcgdGhlIHBhZ2Ugc2hvdWxk
IG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KK1RoaXMgdGVzdHMgdGhhdCBhIGRhdGFi
YXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3Vs
ZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0
Y2hpbmcgdmVyc2lvbnMuCiBjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFjawogY2hh
bmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawogdHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJv
ciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9y
YWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmh0bWwJKHJldmlzaW9u
IDU5MTEwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1
c2UuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw3MCArMSwzMSBAQAogPGh0bWw+IAogPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzIj48L3NjcmlwdD4K
IDxzY3JpcHQ+IAotZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCi17Ci0gICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKLX0KIAotZnVu
Y3Rpb24gZmluaXNoVGVzdCgpCi17Ci0gICAgbG9nKCJURVNUIENPTVBMRVRFLiIpOwordmFyIERC
X1RFU1RfU1VGRklYID0gIl9kb20iOwogCi0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworZnVuY3Rp
b24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUi
KS5pbm5lclRleHQgKz0gbWVzc2FnZSArICJcbiI7CiB9CiAKLWZ1bmN0aW9uIHJ1blRlc3QoKQor
ZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgIH0KICAK
LSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ID0gIiI7Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5lclRleHQgPSAiIjsKICAK
LSAgICB0cnkgewotICAgICAgICBkYiA9IG9wZW5EYXRhYmFzZSgiQ2hhbmdlVmVyc2lvbiIsICIi
LCAiVGVzdCB0aGF0IGNoYW5naW5nIGEgZGF0YWJhc2UgdmVyc2lvbiBkb2VzblwndCBraWxsIG91
ciBoYW5kbGUgdG8gaXQiLCAxKTsKLSAgICAgICAgdmFyIHZlcnNpb24gPSBkYi52ZXJzaW9uOwot
ICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IHZlcnNpb24gPyAocGFyc2VJbnQodmVyc2lvbikgKyAx
KS50b1N0cmluZygpIDogIjEiOyAKLSAgICAgICAgZGIuY2hhbmdlVmVyc2lvbih2ZXJzaW9uLCBu
ZXdWZXJzaW9uLCBmdW5jdGlvbih0eCkgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9u
OiB0cmFuc2FjdGlvbiBjYWxsYmFjayIpOwotICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgewot
ICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBlcnJvciBjYWxsYmFjazogIiArIGVycm9y
Lm1lc3NhZ2UpOwotICAgICAgICB9LCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIGxvZygiY2hh
bmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjayIpOwotICAgICAgICB9KTsKLSAgICAgICAgCi0g
ICAgICAgIHNldFRpbWVvdXQocnVuVGVzdDIsIDEwMDApOwotICAgICAgICAKLSAgICB9IGNhdGNo
IChlKSB7Ci0gICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbiBleGNlcHRpb246ICIgKyBlKTsKLSAg
ICAgICAgZmluaXNoVGVzdCgpOwotICAgIH0KLX0KLSAKLWZ1bmN0aW9uIHJ1blRlc3QyKCkKLXsK
LSAgICB0cnkgewotICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgewotICAgICAg
ICAgICAgdHguZXhlY3V0ZVNxbCgiU0VMRUNUICogZnJvbSBGb29CYXIiLCBbXSwgZnVuY3Rpb24o
dHgpIHsKLSAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgY2FsbGJh
Y2siKTsKLSAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICB9LCBmdW5j
dGlvbih0eCwgZXJyb3IpIHsKLSAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0
ZW1lbnQgZXJyb3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKLSAgICAgICAgICAgICAg
ICBmaW5pc2hUZXN0KCk7Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAgfSk7Ci0gICAgfSBjYXRj
aCAoZSkgewotICAgICAgICBsb2coInRyYW5zYWN0aW9uIGV4Y2VwdGlvbjogIiArIGUpOwotICAg
ICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgfQorICAgIHJ1blRlc3QoKTsKIH0KIDwvc2NyaXB0PiAK
IDwvaGVhZD4gCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+IAotPGRpdj5UaGlzIHRlc3RzIHRo
YXQgYSBkYXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24u
IFlvdSBzaG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFi
b3V0IG1pc21hdGNoaW5nIHZlcnNpb25zLiBBbHNvLCByZWxvYWRpbmcgdGhlIHBhZ2Ugc2hvdWxk
IG5vdCBjYXVzZSBhbiBhc3NlcnRpb24gZmFpbHVyZS4KLTxwcmUgaWQ9InJlc3VsdCI+IAorPGJv
ZHkgb25sb2FkPSJzZXR1cEFuZFJ1blRlc3QoKSI+IAorPGRpdj5UaGlzIHRlc3RzIHRoYXQgYSBk
YXRhYmFzZSBjYW4gYmUgYWNjZXNzZWQgYWZ0ZXIgY2hhbmdpbmcgaXRzIHZlcnNpb24uIFlvdSBz
aG91bGQgc2VlIGFuIGVycm9yIGFib3V0IEZvb0JhciB0YWJsZSBiZWxvdywgbm90IGFib3V0IG1p
c21hdGNoaW5nIHZlcnNpb25zLgorPHByZSBpZD0iY29uc29sZSI+IAogRkFJTFVSRTogdGVzdCBk
aWRuJ3QgcnVuLgogPC9wcmU+IAogPC9ib2R5PiAKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uv
Y2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDYgQEAKK2Z1bmN0aW9uIGZpbmlzaFRlc3QoKQoreworICAgIGxv
ZygiVEVTVCBDT01QTEVURS4iKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZGIgPSBvcGVuRGF0YWJhc2Uo
IkNoYW5nZVZlcnNpb24iICsgREJfVEVTVF9TVUZGSVgsICIiLCAiVGVzdCB0aGF0IGNoYW5naW5n
IGEgZGF0YWJhc2UgdmVyc2lvbiBkb2Vzbid0IGtpbGwgb3VyIGhhbmRsZSB0byBpdCIsIDEpOwor
ICAgICAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247CisgICAgICAgIHZhciBuZXdWZXJzaW9u
ID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRvU3RyaW5nKCkgOiAiMSI7IAor
ICAgICAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4
KSB7CisgICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9uIGNhbGxiYWNr
Iik7CisgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICBsb2coImNoYW5n
ZVZlcnNpb246IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgIH0s
IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNh
bGxiYWNrIik7CisgICAgICAgICAgICBydW5UZXN0MigpOworICAgICAgICB9KTsKKyAgICAgICAg
CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBsb2coImNoYW5nZVZlcnNpb24gZXhjZXB0aW9u
OiAiICsgZSk7CisgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICB9Cit9CisgCitmdW5jdGlvbiBy
dW5UZXN0MigpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24o
dHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCAqIGZyb20gRm9vQmFyIiwg
W10sIGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbjogc3Rh
dGVtZW50IGNhbGxiYWNrIik7CisgICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAg
ICAgICAgfSwgZnVuY3Rpb24odHgsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJ0cmFu
c2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Cisg
ICAgICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0p
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJ0cmFuc2FjdGlvbiBleGNlcHRpb246
ICIgKyBlKTsKKyAgICAgICAgZmluaXNoVGVzdCgpOworICAgIH0KK30KSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCShyZXZpc2lvbiA1OTExMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwOCArMSwyOSBAQAogPGh0bWw+CiAKIDxoZWFkPgorPHNjcmlwdCBzcmM9ImV4ZWN1dGUt
c3FsLWFyZ3MuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4KIAotdmFyIHRocm93T25Ub1N0cmluZ09i
amVjdCA9IHsgfTsKLXRocm93T25Ub1N0cmluZ09iamVjdC50b1N0cmluZyA9IGZ1bmN0aW9uICgp
IHsgdGhyb3cgIkNhbm5vdCBjYWxsIHRvU3RyaW5nIG9uIHRoaXMgb2JqZWN0LiIgfTsKK3ZhciBE
Ql9URVNUX1NVRkZJWCA9ICJfZG9tIjsKIAotdmFyIHRocm93T25HZXRMZW5ndGhPYmplY3QgPSB7
IH07Ci10aHJvd09uR2V0TGVuZ3RoT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oImxlbmd0aCIsIGZ1
bmN0aW9uICgpIHsgdGhyb3cgIkNhbm5vdCBnZXQgbGVuZ3RoIG9mIHRoaXMgb2JqZWN0LiI7IH0p
OwotCi12YXIgdGhyb3dPbkdldFplcm9PYmplY3QgPSB7IGxlbmd0aDogMSB9OwotdGhyb3dPbkdl
dFplcm9PYmplY3QuX19kZWZpbmVHZXR0ZXJfXygiMCIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgIkNh
bm5vdCBnZXQgMCBwcm9wZXJ0eSBvZiB0aGlzIG9iamVjdC4iOyB9KTsKLQotdmFyIGV4cGVjdE5v
RXhjZXB0aW9uID0gWwotICAgICdudWxsJywKLSAgICAndW5kZWZpbmVkJywKLSAgICAnMCcsCi0g
ICAgJyIiJywKLSAgICAnIiIsIG51bGwnLAotICAgICciIiwgdW5kZWZpbmVkJywKLSAgICAnIiIs
IFtdJywKLSAgICAnIiIsIFsgImFyZzAiIF0nLAotICAgICciIiwgeyB9JywKLSAgICAnIiIsIHsg
bGVuZ3RoOiAwIH0nLAotICAgICciIiwgeyBsZW5ndGg6IDEsIDA6ICJhcmcwIiB9JywKLSAgICAn
IiIsIG51bGwsIG51bGwnLAotICAgICciIiwgbnVsbCwgdW5kZWZpbmVkJywKLSAgICAnIiIsIG51
bGwsIHsgfScsCi0gICAgJyIiLCBudWxsLCBudWxsLCBudWxsJywKLSAgICAnIiIsIG51bGwsIG51
bGwsIHVuZGVmaW5lZCcsCi0gICAgJyIiLCBudWxsLCBudWxsLCB7IH0nLAotXTsKLQotdmFyIGV4
cGVjdEV4Y2VwdGlvbiA9IFsKLSAgICAnJywKLSAgICAndGhyb3dPblRvU3RyaW5nT2JqZWN0JywK
LSAgICAnIiIsIHRocm93T25HZXRMZW5ndGhPYmplY3QnLAotICAgICciIiwgdGhyb3dPbkdldFpl
cm9PYmplY3QnLAotICAgICciIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXScsCi0gICAgJyIi
LCAwJywKLSAgICAnIiIsICIiJywKLSAgICAnIiIsIG51bGwsIDAnLAotICAgICciIiwgbnVsbCwg
IiInLAotICAgICciIiwgbnVsbCwgbnVsbCwgMCcsCi0gICAgJyIiLCBudWxsLCBudWxsLCAiIics
Ci1dOwotCi1mdW5jdGlvbiB3cml0ZU1lc3NhZ2VUb0xvZyhtZXNzYWdlKQorZnVuY3Rpb24gbG9n
KG1lc3NhZ2UpCiB7CiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5pbm5l
clRleHQgKz0gbWVzc2FnZSArICJcbiI7CiB9CiAKLWZ1bmN0aW9uIHRyeUV4ZWN1dGVTcWwodHJh
bnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpCi17Ci0gICAgdHJ5IHsKLSAgICAgICAgZXZhbCgndHJh
bnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsgcGFyYW1ldGVyTGlzdCArICcpJyk7Ci0gICAgICAgIHJl
dHVybiBudWxsOwotICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgewotICAgICAgICByZXR1cm4gZXhj
ZXB0aW9uOwotICAgIH0KLX0KLQotZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0
aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBlY3RFeGNlcHRpb24pCi17Ci0gICAgdmFyIGV4Y2VwdGlv
biA9IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpOwotICAgIGlmIChl
eHBlY3RFeGNlcHRpb24pIHsKLSAgICAgICAgaWYgKGV4Y2VwdGlvbikKLSAgICAgICAgICAgIHdy
aXRlTWVzc2FnZVRvTG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikg
dGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJM
aXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIipGQUlM
Ki4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4Y2VwdGlvbjog
IiArIGV4Y2VwdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlTWVzc2FnZVRv
TG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJv
dyBhbiBleGNlcHRpb24iKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVz
dHModHJhbnNhY3Rpb24pCi17Ci0gICAgZm9yIChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQotICAg
ICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ld
LCBmYWxzZSk7Ci0gICAgZm9yIChpIGluIGV4cGVjdEV4Y2VwdGlvbikKLSAgICAgICAgcnVuVHJh
bnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3RFeGNlcHRpb25baV0sIHRydWUpOwotCi0g
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKLSAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOwotfQotCi1mdW5jdGlvbiBydW5UZXN0KCkKK2Z1bmN0aW9u
IHNldHVwQW5kUnVuVGVzdCgpCiB7CiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgewogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICB9Ci0KLSAgICB2YXIg
ZGIgPSBvcGVuRGF0YWJhc2UoIkV4ZWN1dGVTUUxBcmdzVGVzdCIsICIxLjAiLCAiVGVzdCBvZiBo
YW5kbGluZyBvZiB0aGUgYXJndW1lbnRzIHRvIFNRTFRyYW5zYWN0aW9uLmV4ZWN1dGVTcWwiLCAx
KTsKLSAgICBkYi50cmFuc2FjdGlvbihydW5UcmFuc2FjdGlvblRlc3RzKTsKKyAgICBydW5UZXN0
KCk7CiB9CiAKIDwvc2NyaXB0PgogPC9oZWFkPgogCi08Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+
Cis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KIDxwcmUgaWQ9ImNvbnNvbGUiPjwv
cHJlPgogPC9ib2R5PgogCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFy
Z3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdz
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdz
LmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACit2YXIgdGhyb3dPblRvU3RyaW5nT2Jq
ZWN0ID0geyB9OwordGhyb3dPblRvU3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkg
eyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9OworCit2YXIg
dGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKK3Rocm93T25HZXRMZW5ndGhPYmplY3QuX19k
ZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCBs
ZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciB0aHJvd09uR2V0WmVyb09iamVjdCA9
IHsgbGVuZ3RoOiAxIH07Cit0aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdldHRlcl9fKCIw
IiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9mIHRoaXMgb2Jq
ZWN0LiI7IH0pOworCit2YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCisgICAgJ251bGwnLAorICAg
ICd1bmRlZmluZWQnLAorICAgICcwJywKKyAgICAnIiInLAorICAgICciIiwgbnVsbCcsCisgICAg
JyIiLCB1bmRlZmluZWQnLAorICAgICciIiwgW10nLAorICAgICciIiwgWyAiYXJnMCIgXScsCisg
ICAgJyIiLCB7IH0nLAorICAgICciIiwgeyBsZW5ndGg6IDAgfScsCisgICAgJyIiLCB7IGxlbmd0
aDogMSwgMDogImFyZzAiIH0nLAorICAgICciIiwgbnVsbCwgbnVsbCcsCisgICAgJyIiLCBudWxs
LCB1bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgeyB9JywKKyAgICAnIiIsIG51bGwsIG51bGws
IG51bGwnLAorICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkJywKKyAgICAnIiIsIG51bGws
IG51bGwsIHsgfScsCitdOworCit2YXIgZXhwZWN0RXhjZXB0aW9uID0gWworICAgICcnLAorICAg
ICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAorICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVj
dCcsCisgICAgJyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCisgICAgJyIiLCBbIHRocm93T25U
b1N0cmluZ09iamVjdCBdJywKKyAgICAnIiIsIDAnLAorICAgICciIiwgIiInLAorICAgICciIiwg
bnVsbCwgMCcsCisgICAgJyIiLCBudWxsLCAiIicsCisgICAgJyIiLCBudWxsLCBudWxsLCAwJywK
KyAgICAnIiIsIG51bGwsIG51bGwsICIiJywKK107CisKK2Z1bmN0aW9uIHRyeUV4ZWN1dGVTcWwo
dHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZXZhbCgn
dHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCgnICsgcGFyYW1ldGVyTGlzdCArICcpJyk7CisgICAgICAg
IHJldHVybiBudWxsOworICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbikgeworICAgICAgICByZXR1cm4g
ZXhjZXB0aW9uOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5z
YWN0aW9uLCBwYXJhbWV0ZXJMaXN0LCBleHBlY3RFeGNlcHRpb24pCit7CisgICAgdmFyIGV4Y2Vw
dGlvbiA9IHRyeUV4ZWN1dGVTcWwodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QpOworICAgIGlm
IChleHBlY3RFeGNlcHRpb24pIHsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAg
IGxvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRocmV3IGFuIGV4
Y2VwdGlvbiBhcyBleHBlY3RlZC4iKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCIq
RkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChleGNlcHRpb24pCisgICAg
ICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIHRo
cmV3IGFuIGV4Y2VwdGlvbjogIiArIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGxvZygiUEFTUy4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3Qg
dGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfQorfQorCitmdW5jdGlvbiBydW5UcmFuc2FjdGlv
blRlc3RzKHRyYW5zYWN0aW9uKQoreworICAgIGZvciAoaSBpbiBleHBlY3ROb0V4Y2VwdGlvbikK
KyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBleHBlY3ROb0V4Y2VwdGlv
bltpXSwgZmFsc2UpOworICAgIGZvciAoaSBpbiBleHBlY3RFeGNlcHRpb24pCisgICAgICAgIHJ1
blRyYW5zYWN0aW9uVGVzdCh0cmFuc2FjdGlvbiwgZXhwZWN0RXhjZXB0aW9uW2ldLCB0cnVlKTsK
KworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisK
KyAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkV4ZWN1dGVTUUxBcmdzVGVzdCIgKyBEQl9URVNU
X1NVRkZJWCwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FM
VHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOworICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRyYW5z
YWN0aW9uVGVzdHMpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55737</attachid>
            <date>2010-05-11 12:42:17 -0700</date>
            <delta_ts>2010-05-11 19:44:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34992-20100511124215.patch</filename>
            <type>text/plain</type>
            <size>28429</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDUtMTEgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA1LTEx
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBH
dXN0YXZvIE5vcm9uaGEuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNv
bnRleHRDdXN0b20uY3BwCShyZXZpc2lvbiA1OTE1OSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBA
QAogI2luY2x1ZGUgIkpTV29ya2VyQ29udGV4dC5oIgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQor
I2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiSlNEYXRhYmFzZS5oIgogI2luY2x1ZGUg
IkpTRGF0YWJhc2VDYWxsYmFjay5oIgogI2luY2x1ZGUgIkpTRGF0YWJhc2VTeW5jLmgiCiAjZW5k
aWYKQEAgLTE0Nyw2ICsxNDksNDYgQEAgSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6Om1lc3NhZ2VD
aGFubmVsKAogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCitKU1ZhbHVlIEpTV29ya2Vy
Q29udGV4dDo6b3BlbkRhdGFiYXNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJn
cykgCit7IAorICAgIGlmIChhcmdzLnNpemUoKSA8IDQpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIFNZTlRBWF9FUlIpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgbmFtZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDApLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworCisgICAgU3RyaW5nIHZlcnNpb24gPSB1c3RyaW5nVG9TdHJpbmco
YXJncy5hdCgxKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFN0cmluZyBkaXNwbGF5TmFt
ZSA9IHVzdHJpbmdUb1N0cmluZyhhcmdzLmF0KDIpLnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisg
ICAgLy8gYXJncy5hdCgzKSA9IGVzdGltYXRlZCBzaXplCisgICAgdW5zaWduZWQgbG9uZyBlc3Rp
bWF0ZWRTaXplID0gYXJncy5hdCgzKS50b1VJbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgUmVmUHRy
PERhdGFiYXNlQ2FsbGJhY2s+IGNyZWF0aW9uQ2FsbGJhY2s7CisgICAgaWYgKGFyZ3Muc2l6ZSgp
ID49IDUpIHsKKyAgICAgICAgaWYgKCFhcmdzLmF0KDQpLmlzT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENIX0VSUik7CisgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGNyZWF0aW9uQ2Fs
bGJhY2sgPSBKU0RhdGFiYXNlQ2FsbGJhY2s6OmNyZWF0ZShhc09iamVjdChhcmdzLmF0KDQpKSwg
Z2xvYmFsT2JqZWN0KCkpOworICAgIH0KKyAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsgCisg
ICAgSlNWYWx1ZSByZXN1bHQgPSB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBXVEY6OmdldFB0
cihpbXBsKCktPm9wZW5EYXRhYmFzZShuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSwgY3JlYXRpb25DYWxsYmFjay5yZWxlYXNlKCksIGVjKSkpOyAKKyAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOyAKKyAgICByZXR1cm4gcmVzdWx0OyAKK30gCisgCiBKU1ZhbHVl
IEpTV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgNCkgewpJbmRleDogV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20u
Y3BwCShyZXZpc2lvbiA1OTExMCkKKysrIFdlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29y
a2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJWOFdvcmtlckNvbnRleHQuaCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkKKyNpbmNs
dWRlICJWOERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiVjhEYXRhYmFzZUNhbGxiYWNrLmgiCiAjaW5j
bHVkZSAiVjhEYXRhYmFzZVN5bmMuaCIKICNlbmRpZgpAQCAtMTQyLDYgKzE0MywxMyBAQCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChXb3JrZXJDb250ZXh0CiB9CiAKICNpZiBFTkFCTEUoREFU
QUJBU0UpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJh
c2VDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKSAKK3sgCisgICAgSU5DX1NUQVRT
KCJET00uV29ya2VyQ29udGV4dC5vcGVuRGF0YWJhc2UoKSIpOyAKKyAgICAvLyBJbXBsZW1lbnRh
dGlvbiBjb21pbmcgc29vbi4KKyAgICByZXR1cm4gdGhyb3dFcnJvcihOT1RfU1VQUE9SVEVEX0VS
Uik7Cit9IAorCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXb3JrZXJDb250ZXh0OjpvcGVuRGF0
YWJhc2VTeW5jQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5WOFdvcmtlckNvbnRleHQub3BlbkRhdGFiYXNlU3luYygpIik7CkluZGV4OiBX
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCShyZXZpc2lvbiA1OTExMCkKKysrIFdlYkNvcmUvd29y
a2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlVHJhY2tlci5oIgogI2luY2x1ZGUgIkRPTVRpbWVyLmgiCiAj
aW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKQEAgLTI3MCwxOCAr
MjcxLDIzIEBAIE5vdGlmaWNhdGlvbkNlbnRlciogV29ya2VyQ29udGV4dDo6d2Via2kKICNpZiBF
TkFCTEUoREFUQUJBU0UpCiBQYXNzUmVmUHRyPERhdGFiYXNlPiBXb3JrZXJDb250ZXh0OjpvcGVu
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0
IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1Jl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpIHsK
KyAgICBpZiAoIXNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkgfHwgIURhdGFi
YXNlOjppc0F2YWlsYWJsZSgpKSB7CiAgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBBU1NFUlQoRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkp
OwotICAgIGlmICghRGF0YWJhc2U6OmlzQXZhaWxhYmxlKCkpCi0gICAgICAgIHJldHVybiAwOwot
CiAgICAgcmV0dXJuIERhdGFiYXNlOjpvcGVuRGF0YWJhc2UodGhpcywgbmFtZSwgdmVyc2lvbiwg
ZGlzcGxheU5hbWUsIGVzdGltYXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2ssIGVjKTsKIH0KIAor
dm9pZCBXb3JrZXJDb250ZXh0OjpkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29uc3QgU3RyaW5nJikK
K3sKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgYSBy
ZWFsIGltcGxlbWVudGF0aW9uOyB0aGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIGZvciB0ZXN0
aW5nLgorICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgbG9uZyBkZWZhdWx0UXVvdGEgPSA1ICogMTAy
NCAqIDEwMjQ7CisgICAgRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkuc2V0UXVvdGEoc2VjdXJp
dHlPcmlnaW4oKSwgZGVmYXVsdFF1b3RhKTsKKyNlbmRpZgorfQorCiBQYXNzUmVmUHRyPERhdGFi
YXNlU3luYz4gV29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNlU3luYyhjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwgdW5z
aWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBQYXNzUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+IGNy
ZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghc2VjdXJpdHlP
cmlnaW4oKS0+Y2FuQWNjZXNzRGF0YWJhc2UoKSkgewpJbmRleDogV2ViQ29yZS93b3JrZXJzL1dv
cmtlckNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4
dC5oCShyZXZpc2lvbiA1OTExMCkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw4ICsxMTAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICAgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KICAgICAgICAgdmlydHVhbCBib29sIGlz
RGF0YWJhc2VSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIC8vIE5v
dCBpbXBsZW1lbnRlZCB5ZXQuCi0gICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUV4Y2VlZGVk
UXVvdGEoY29uc3QgU3RyaW5nJikgeyB9CisgICAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZCBmb3Ig
cmVhbCB5ZXQuCisgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhYmFzZUV4Y2VlZGVkUXVvdGEoY29u
c3QgU3RyaW5nJik7CiAjZW5kaWYKICAgICAgICAgdmlydHVhbCBib29sIGlzQ29udGV4dFRocmVh
ZCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNKU0V4ZWN1dGlvblRlcm1pbmF0ZWQo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwJKHJldmlzaW9uIDU5MTEw
KQorKysgV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBA
IC00OSwxMCArNDksMTAgQEAgbW9kdWxlIHRocmVhZHMgewogICAgICAgICAvLyBXb3JrZXJVdGls
cwogICAgICAgICBbQ3VzdG9tXSB2b2lkIGltcG9ydFNjcmlwdHMoLypbVmFyaWFkaWNdIGluIERP
TVN0cmluZyB1cmxzICovKTsKICAgICAgICAgICAgICAgICAgYXR0cmlidXRlIFtSZXBsYWNlYWJs
ZV0gV29ya2VyTmF2aWdhdG9yIG5hdmlnYXRvcjsKLQogI2lmIGRlZmluZWQoRU5BQkxFX0RBVEFC
QVNFKSAmJiBFTkFCTEVfREFUQUJBU0UKLSAgICAgICAgLy8gRGF0YWJhc2Ugb3BlbkRhdGFiYXNl
KGluIERPTVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRp
c3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUpOwotICAgICAgICBbRW5h
YmxlQXRSdW50aW1lLCBDdXN0b21dIERhdGFiYXNlU3luYyBvcGVuRGF0YWJhc2VTeW5jKGluIERP
TVN0cmluZyBuYW1lLCBpbiBET01TdHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlO
YW1lLCBpbiB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIGluIERhdGFiYXNlQ2FsbGJhY2sg
Y3JlYXRpb25DYWxsYmFjayk7CisgICAgICAgIFtFbmFibGVkQXRSdW50aW1lLCBDdXN0b21dIERh
dGFiYXNlIG9wZW5EYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNp
b24sIGluIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRT
aXplLCBpbiBEYXRhYmFzZUNhbGxiYWNrIGNyZWF0aW9uQ2FsbGJhY2spCisgICAgICAgICAgICBy
YWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICAgICAgW0VuYWJsZWRBdFJ1bnRpbWUsIEN1c3RvbV0g
RGF0YWJhc2VTeW5jIG9wZW5EYXRhYmFzZVN5bmMoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0
cmluZyB2ZXJzaW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcg
ZXN0aW1hdGVkU2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKTsKICNl
bmRpZgogCiAgICAgICAgIC8vIFRpbWVycwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTkxMTApCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNiBAQAorMjAx
MC0wNS0xMSAgRXJpYyBVaHJoYW5lICA8ZXJpY3VAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBiaW5kaW5ncyBmb3IgYXN5
bmMgREIgQVBJIGluIFdvcmtlcnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDk5MgorCisgICAgICAgICogc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2UuaHRtbDogUmVmYWN0b3JlZCB0byBzaGFyZSBjb2RlIHdpdGggdGhlIHdvcmtl
ciB2ZXJzaW9uIG9mIHRoZSB0ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24t
aGFuZGxlLXJldXNlLWV4cGVjdGVkLmh0bWw6IFJlbW92ZWQgcmVmZXJlbmNlIHRvIHJlbG9hZGlu
Zywgd2hpY2ggdGhpcyB0ZXN0IGRvZXNuJ3QgZG8uCisgICAgICAgICogc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuanM6IFRoaXMgaXMgdGhlIGV4dHJhY3RlZCBzaGFyZWQgY29y
ZSBvZiB0aGUgdGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuaHRtbDog
UmVmYWN0b3JlZCB0byBzaGFyZSBjb2RlIHdpdGggdGhlIHdvcmtlciB2ZXJzaW9uIG9mIHRoZSB0
ZXN0LgorICAgICAgICAqIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qczogVGhpcyBpcyB0aGUg
ZXh0cmFjdGVkIHNoYXJlZCBjb3JlIG9mIHRoZSB0ZXN0LgorCisgICAgICAgIFRoZXNlIGFyZSB0
aGUgd29ya2VyIHZlcnNpb25zIG9mIHRoZSB0ZXN0czsgdGhleSdyZSB0aW55IHNoaW1zIGFyb3Vu
ZCBzaGFyZWQgY29kZS4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNx
bC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvd29ya2Vy
cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXIt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWw6IEFkZGVkLgorICAgICAgICBUaGlz
IGZpbGUgZ2V0cyBpbmNsdWRlZCBmcm9tIHdvcmtlciBkYXRhYmFzZSB0ZXN0czsgaXQgZG9lcyBh
bGwgdGhlIGJvaWxlcnBsYXRlIHRoYXQncyBuZWVkZWQgb24gdGhlIERPTSBzaWRlLgorICAgICAg
ICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdlL3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJv
bGxlci5qczogQWRkZWQuCisgICAgICAgIFRoaXMgZmlsZSBpcyB0aGUgYm9pbGVycGxhdGUgZm9y
IHRoZSB3b3JrZXIgc2lkZSBvZiB0aGUgZGF0YWJhc2UgdGVzdHMuICBJdCB3aWxsIGltcG9ydCBh
bmQgcnVuIHRoZSBhY3R1YWwgdGVzdCBvbiBjb21tYW5kLCBhbmQgd2lsbCByZXBvcnQgYmFjayBj
b21wbGV0aW9uIGFuZCBleGNlcHRpb25zLgorICAgICAgICAqIGZhc3Qvd29ya2Vycy9zdG9yYWdl
L3Jlc291cmNlcy9kYXRhYmFzZS13b3JrZXIuanM6IEFkZGVkLgorCiAyMDEwLTA1LTEwICBTYW0g
V2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRs
ZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lv
bi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29y
a2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vy
cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNl
IGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBz
ZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hp
bmcgdmVyc2lvbnMuCitjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFjaworY2hhbmdl
VmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawordHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBj
YWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCitURVNUIENPTVBMRVRFLgorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1
c2Utd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1IEBACis8aHRt
bD4gCis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRy
b2xsZXIuanMiPjwvc2NyaXB0PiAKKzxzY3JpcHQ+IAorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRl
c3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorIAorICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CisgICAgZGF0YWJhc2VXb3JrZXIucG9z
dE1lc3NhZ2UoImltcG9ydFNjcmlwdHM6Li4vLi4vLi4vc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2UuanMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVzc2FnZSgicnVuVGVz
dCIpOworfQorPC9zY3JpcHQ+IAorPC9oZWFkPiAKKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5U
ZXN0KCkiPiAKKzxkaXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2Vk
IGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91
dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KKzxw
cmUgaWQ9ImNvbnNvbGUiPiAKK0ZBSUxVUkU6IHRlc3QgZGlkbid0IHJ1bi4KKzwvcHJlPiAKKzwv
Ym9keT4gCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9l
eGVjdXRlLXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2Uv
ZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0
aW9uCitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRp
b24KK1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1Mu
IGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNx
bCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0
ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3Fs
KCIiLCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0
ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNx
bCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4
ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfSkgZGlkIG5vdCB0aHJvdyBhbiBl
eGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwpIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCB1bmRlZmluZWQpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCB7IH0pIGRp
ZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxs
LCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwg
bnVsbCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BB
U1MuIGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24g
YXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0
KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0
aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgMCkgdGhyZXcgYW4gZXhj
ZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgIiIpIHRocmV3IGFuIGV4
Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIDApIHRocmV3
IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsICIi
KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCBu
dWxsLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVj
dXRlU3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVk
LgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLXdvcmtlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd29ya2Vycy9z
dG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
CisgICAgfQorICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJpbXBvcnRTY3JpcHRzOi4u
Ly4uLy4uL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcyIpOworICAgIGRhdGFiYXNlV29ya2Vy
LnBvc3RNZXNzYWdlKCJydW5UZXN0Iik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9k
eSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgor
PC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtl
ci1jb250cm9sbGVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIzIEBACit2YXIgZGF0YWJhc2VXb3JrZXIgPSBuZXcgV29ya2VyKCdy
ZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzJyk7CisKK2RhdGFiYXNlV29ya2VyLm9uZXJyb3Ig
PSBmdW5jdGlvbihldmVudCkgeworICAgIGxvZygiQ2F1Z2h0IGFuIGVycm9yIGZyb20gdGhlIHdv
cmtlciEiKTsKKyAgICBsb2coZXZlbnQpOworICAgIGZvciAodmFyIGkgaW4gZXZlbnQpCisgICAg
ICAgIGxvZygiZXZlbnRbIiArIGkgKyAiXTogIiArIGV2ZW50W2ldKTsKK307CisKK2RhdGFiYXNl
V29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2ZW50LmRhdGEu
aW5kZXhPZignbG9nOicpID09IDApCisgICAgICAgIGxvZyhldmVudC5kYXRhLnN1YnN0cmluZyg0
KSk7CisgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PSAnbm90aWZ5RG9uZScpIHsKKyAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJVbnJlY29nbml6ZWQgbWVzc2FnZTogIiArIGV2ZW50KTsKK307CisKK2Z1bmN0aW9uIGxv
ZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5u
ZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93b3Jr
ZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2Vy
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVz
b3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAor
dmFyIHdpbmRvdyA9IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlcjogeworICAgICAgICBub3Rp
ZnlEb25lOiBmdW5jdGlvbigpIHsgcG9zdE1lc3NhZ2UoIm5vdGlmeURvbmUiKTsgfQorICAgIH0K
K307Cit2YXIgbGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXI7CisKK2Z1bmN0aW9uIGxvZyhzKSB7CisgICAgcG9zdE1lc3NhZ2UoImxvZzoiICsgcyk7Cit9
CisKK29ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdHJ5IHsKKyAgICAgICAgaWYg
KGV2ZW50LmRhdGEuaW5kZXhPZigiaW1wb3J0U2NyaXB0czoiKSA9PSAwKSB7CisgICAgICAgICAg
ICB2YXIgc2NyaXB0cyA9IGV2ZW50LmRhdGEuc3Vic3RyaW5nKCJpbXBvcnRTY3JpcHRzOiIubGVu
Z3RoKS5zcGxpdCgiLCIpOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzY3JpcHRzKQorICAg
ICAgICAgICAgICAgIHNjcmlwdHNbaV0gPSAiLi4vIiArIHNjcmlwdHNbaV07CisgICAgICAgICAg
ICBpbXBvcnRTY3JpcHRzKHNjcmlwdHMpOworICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEg
PT0gInJ1blRlc3QiKQorICAgICAgICAgICAgcnVuVGVzdCgpOyAvLyBNdXN0IGJlIGRlZmluZWQg
Ynkgc29tZSBpbXBvcnRlZCBzY3JpcHQuCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxvZygi
UmVjZWl2ZWQgdW5leHBlY3RlZCBtZXNzYWdlOiAiICsgZXZlbnQuZGF0YSk7CisgICAgfSBjYXRj
aCAoZXgpIHsKKyAgICAgICAgbG9nKCJXb3JrZXIgY2F1Z2h0IGV4Y2VwdGlvbjogIiArIGV4KTsK
KyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9
Cit9OworCit2YXIgREJfVEVTVF9TVUZGSVggPSAiX3dvcmtlciI7CkluZGV4OiBMYXlvdXRUZXN0
cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Ut
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTExMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvY2hh
bmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MSw0ICsxLDQgQEAKLVRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBh
ZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQg
Rm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28s
IHJlbG9hZGluZyB0aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlvbiBmYWlsdXJl
LgorVGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFmdGVyIGNoYW5n
aW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBGb29CYXIgdGFi
bGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KIGNoYW5nZVZlcnNpb246
IHRyYW5zYWN0aW9uIGNhbGxiYWNrCiBjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrCiB0
cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiBubyBzdWNoIHRhYmxlOiBGb29C
YXIKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2UuaHRtbAkocmV2aXNpb24gNTkxMTApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdl
L2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcw
ICsxLDMxIEBACiA8aHRtbD4gCiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJjaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4gCi1mdW5jdGlvbiBsb2cobWVzc2Fn
ZSkKLXsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ICs9
IG1lc3NhZ2UgKyAiXG4iOwotfQogCi1mdW5jdGlvbiBmaW5pc2hUZXN0KCkKLXsKLSAgICBsb2co
IlRFU1QgQ09NUExFVEUuIik7Cit2YXIgREJfVEVTVF9TVUZGSVggPSAiX2RvbSI7CiAKLSAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsK
IH0KIAotZnVuY3Rpb24gcnVuVGVzdCgpCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQogewog
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CiAgICAgfQogIAotICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJy
ZXN1bHQiKS5pbm5lclRleHQgPSAiIjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29u
c29sZSIpLmlubmVyVGV4dCA9ICIiOwogIAotICAgIHRyeSB7Ci0gICAgICAgIGRiID0gb3BlbkRh
dGFiYXNlKCJDaGFuZ2VWZXJzaW9uIiwgIiIsICJUZXN0IHRoYXQgY2hhbmdpbmcgYSBkYXRhYmFz
ZSB2ZXJzaW9uIGRvZXNuXCd0IGtpbGwgb3VyIGhhbmRsZSB0byBpdCIsIDEpOwotICAgICAgICB2
YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247Ci0gICAgICAgIHZhciBuZXdWZXJzaW9uID0gdmVyc2lv
biA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRvU3RyaW5nKCkgOiAiMSI7IAotICAgICAgICBk
Yi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4KSB7Ci0gICAg
ICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9uIGNhbGxiYWNrIik7Ci0gICAg
ICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246
IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Ci0gICAgICAgIH0sIGZ1bmN0aW9u
KCkgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNhbGxiYWNrIik7
Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgc2V0VGltZW91dChydW5UZXN0MiwgMTAw
MCk7Ci0gICAgICAgIAotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJjaGFuZ2VWZXJz
aW9uIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgICBmaW5pc2hUZXN0KCk7Ci0gICAgfQotfQot
IAotZnVuY3Rpb24gcnVuVGVzdDIoKQotewotICAgIHRyeSB7Ci0gICAgICAgIGRiLnRyYW5zYWN0
aW9uKGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgKiBm
cm9tIEZvb0JhciIsIFtdLCBmdW5jdGlvbih0eCkgewotICAgICAgICAgICAgICAgIGxvZygidHJh
bnNhY3Rpb246IHN0YXRlbWVudCBjYWxsYmFjayIpOwotICAgICAgICAgICAgICAgIGZpbmlzaFRl
c3QoKTsKLSAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4LCBlcnJvcikgewotICAgICAgICAgICAg
ICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazogIiArIGVycm9y
Lm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICAgICAgICAgIH0p
OwotICAgICAgICB9KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGxvZygidHJhbnNhY3Rp
b24gZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICB9CisgICAg
cnVuVGVzdCgpOwogfQogPC9zY3JpcHQ+IAogPC9oZWFkPiAKLTxib2R5IG9ubG9hZD0icnVuVGVz
dCgpIj4gCi08ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBh
ZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQg
Rm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuIEFsc28s
IHJlbG9hZGluZyB0aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlvbiBmYWlsdXJl
LgotPHByZSBpZD0icmVzdWx0Ij4gCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4g
Cis8ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBj
aGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFy
IHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCis8cHJlIGlkPSJj
b25zb2xlIj4gCiBGQUlMVVJFOiB0ZXN0IGRpZG4ndCBydW4uCiA8L3ByZT4gCiA8L2JvZHk+IApJ
bmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2UuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJz
aW9uLWhhbmRsZS1yZXVzZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorZnVuY3Rp
b24gZmluaXNoVGVzdCgpCit7CisgICAgbG9nKCJURVNUIENPTVBMRVRFLiIpOworCisgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICB0cnkgewor
ICAgICAgICBkYiA9IG9wZW5EYXRhYmFzZSgiQ2hhbmdlVmVyc2lvbiIgKyBEQl9URVNUX1NVRkZJ
WCwgIiIsICJUZXN0IHRoYXQgY2hhbmdpbmcgYSBkYXRhYmFzZSB2ZXJzaW9uIGRvZXNuJ3Qga2ls
bCBvdXIgaGFuZGxlIHRvIGl0IiwgMSk7CisgICAgICAgIHZhciB2ZXJzaW9uID0gZGIudmVyc2lv
bjsKKyAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBhcnNlSW50KHZlcnNpb24p
ICsgMSkudG9TdHJpbmcoKSA6ICIxIjsgCisgICAgICAgIGRiLmNoYW5nZVZlcnNpb24odmVyc2lv
biwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIGxvZygiY2hhbmdlVmVy
c2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2siKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3Ip
IHsKKyAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogZXJyb3IgY2FsbGJhY2s6ICIgKyBl
cnJvci5tZXNzYWdlKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBsb2co
ImNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2siKTsKKyAgICAgICAgICAgIHJ1blRlc3Qy
KCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxv
ZygiY2hhbmdlVmVyc2lvbiBleGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgZmluaXNoVGVzdCgp
OworICAgIH0KK30KKyAKK2Z1bmN0aW9uIHJ1blRlc3QyKCkKK3sKKyAgICB0cnkgeworICAgICAg
ICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHguZXhlY3V0ZVNx
bCgiU0VMRUNUICogZnJvbSBGb29CYXIiLCBbXSwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAg
ICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgY2FsbGJhY2siKTsKKyAgICAgICAgICAg
ICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJh
Y2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBs
b2coInRyYW5zYWN0aW9uIGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBmaW5pc2hUZXN0KCk7
CisgICAgfQorfQpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0
bWwJKHJldmlzaW9uIDU5MTEwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNxbC1h
cmdzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICsxLDI5IEBACiA8aHRtbD4KIAogPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iZXhlY3V0ZS1zcWwtYXJncy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
PgogCi12YXIgdGhyb3dPblRvU3RyaW5nT2JqZWN0ID0geyB9OwotdGhyb3dPblRvU3RyaW5nT2Jq
ZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwgdG9TdHJpbmcg
b24gdGhpcyBvYmplY3QuIiB9OwordmFyIERCX1RFU1RfU1VGRklYID0gIl9kb20iOwogCi12YXIg
dGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKLXRocm93T25HZXRMZW5ndGhPYmplY3QuX19k
ZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCBs
ZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7Ci0KLXZhciB0aHJvd09uR2V0WmVyb09iamVjdCA9
IHsgbGVuZ3RoOiAxIH07Ci10aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdldHRlcl9fKCIw
IiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9mIHRoaXMgb2Jq
ZWN0LiI7IH0pOwotCi12YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCi0gICAgJ251bGwnLAotICAg
ICd1bmRlZmluZWQnLAotICAgICcwJywKLSAgICAnIiInLAotICAgICciIiwgbnVsbCcsCi0gICAg
JyIiLCB1bmRlZmluZWQnLAotICAgICciIiwgW10nLAotICAgICciIiwgWyAiYXJnMCIgXScsCi0g
ICAgJyIiLCB7IH0nLAotICAgICciIiwgeyBsZW5ndGg6IDAgfScsCi0gICAgJyIiLCB7IGxlbmd0
aDogMSwgMDogImFyZzAiIH0nLAotICAgICciIiwgbnVsbCwgbnVsbCcsCi0gICAgJyIiLCBudWxs
LCB1bmRlZmluZWQnLAotICAgICciIiwgbnVsbCwgeyB9JywKLSAgICAnIiIsIG51bGwsIG51bGws
IG51bGwnLAotICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkJywKLSAgICAnIiIsIG51bGws
IG51bGwsIHsgfScsCi1dOwotCi12YXIgZXhwZWN0RXhjZXB0aW9uID0gWwotICAgICcnLAotICAg
ICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAotICAgICciIiwgdGhyb3dPbkdldExlbmd0aE9iamVj
dCcsCi0gICAgJyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCi0gICAgJyIiLCBbIHRocm93T25U
b1N0cmluZ09iamVjdCBdJywKLSAgICAnIiIsIDAnLAotICAgICciIiwgIiInLAotICAgICciIiwg
bnVsbCwgMCcsCi0gICAgJyIiLCBudWxsLCAiIicsCi0gICAgJyIiLCBudWxsLCBudWxsLCAwJywK
LSAgICAnIiIsIG51bGwsIG51bGwsICIiJywKLV07Ci0KLWZ1bmN0aW9uIHdyaXRlTWVzc2FnZVRv
TG9nKG1lc3NhZ2UpCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKIHsKICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxuIjsKIH0KIAot
ZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKLXsKLSAg
ICB0cnkgewotICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJhbWV0
ZXJMaXN0ICsgJyknKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBjYXRjaCAoZXhjZXB0
aW9uKSB7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgfQotfQotCi1mdW5jdGlvbiBy
dW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4Y2Vw
dGlvbikKLXsKLSAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwg
cGFyYW1ldGVyTGlzdCk7Ci0gICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgewotICAgICAgICBpZiAo
ZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVT
cWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQu
Iik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlTWVzc2FnZVRvTG9nKCIqRkFJTCou
IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2Vw
dGlvbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0gICAgICAgICAg
ICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0
ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwoIiArIHBhcmFt
ZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwotICAgIH0KLX0KLQot
ZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2FjdGlvbikKLXsKLSAgICBmb3IgKGkg
aW4gZXhwZWN0Tm9FeGNlcHRpb24pCi0gICAgICAgIHJ1blRyYW5zYWN0aW9uVGVzdCh0cmFuc2Fj
dGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsKLSAgICBmb3IgKGkgaW4gZXhwZWN0
RXhjZXB0aW9uKQotICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIGV4cGVj
dEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Ci19Ci0KLWZ1
bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsKICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGls
RG9uZSgpOwogICAgIH0KLQotICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhlY3V0ZVNRTEFy
Z3NUZXN0IiwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVudHMgdG8gU1FM
VHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOwotICAgIGRiLnRyYW5zYWN0aW9uKHJ1blRyYW5z
YWN0aW9uVGVzdHMpOworICAgIHJ1blRlc3QoKTsKIH0KIAogPC9zY3JpcHQ+CiA8L2hlYWQ+CiAK
LTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxib2R5IG9ubG9hZD0ic2V0dXBBbmRSdW5UZXN0
KCkiPgogPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiAKSW5kZXg6IExheW91dFRl
c3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYg
QEAKK3ZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Cit0aHJvd09uVG9TdHJpbmdPYmpl
Y3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0b1N0cmluZyBv
biB0aGlzIG9iamVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0ID0geyB9Owor
dGhyb3dPbkdldExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgiLCBmdW5jdGlv
biAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4iOyB9KTsKKwor
dmFyIHRocm93T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEgfTsKK3Rocm93T25HZXRaZXJv
T2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3Qg
Z2V0IDAgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciBleHBlY3ROb0V4Y2Vw
dGlvbiA9IFsKKyAgICAnbnVsbCcsCisgICAgJ3VuZGVmaW5lZCcsCisgICAgJzAnLAorICAgICci
IicsCisgICAgJyIiLCBudWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBbXScs
CisgICAgJyIiLCBbICJhcmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisgICAgJyIiLCB7IGxlbmd0
aDogMCB9JywKKyAgICAnIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCisgICAgJyIiLCBu
dWxsLCBudWxsJywKKyAgICAnIiIsIG51bGwsIHVuZGVmaW5lZCcsCisgICAgJyIiLCBudWxsLCB7
IH0nLAorICAgICciIiwgbnVsbCwgbnVsbCwgbnVsbCcsCisgICAgJyIiLCBudWxsLCBudWxsLCB1
bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgbnVsbCwgeyB9JywKK107CisKK3ZhciBleHBlY3RF
eGNlcHRpb24gPSBbCisgICAgJycsCisgICAgJ3Rocm93T25Ub1N0cmluZ09iamVjdCcsCisgICAg
JyIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0JywKKyAgICAnIiIsIHRocm93T25HZXRaZXJvT2Jq
ZWN0JywKKyAgICAnIiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0nLAorICAgICciIiwgMCcs
CisgICAgJyIiLCAiIicsCisgICAgJyIiLCBudWxsLCAwJywKKyAgICAnIiIsIG51bGwsICIiJywK
KyAgICAnIiIsIG51bGwsIG51bGwsIDAnLAorICAgICciIiwgbnVsbCwgbnVsbCwgIiInLAorXTsK
KworZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCkKK3sK
KyAgICB0cnkgeworICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcgKyBwYXJh
bWV0ZXJMaXN0ICsgJyknKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSBjYXRjaCAoZXhj
ZXB0aW9uKSB7CisgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorfQorCitmdW5jdGlv
biBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4cGVjdEV4
Y2VwdGlvbikKK3sKKyAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlv
biwgcGFyYW1ldGVyTGlzdCk7CisgICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgeworICAgICAgICBp
ZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBwYXJh
bWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsgcGFyYW1ldGVy
TGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGxvZygiKkZBSUwqLiBleGVjdXRlU3Fs
KCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9u
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3FsKCIgKyBw
YXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCit7CisgICAgZm9y
IChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJh
bnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7CisgICAgZm9yIChpIGluIGV4
cGVjdEV4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5zYWN0aW9uLCBl
eHBlY3RFeGNlcHRpb25baV0sIHRydWUpOworCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
CitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKworICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhl
Y3V0ZVNRTEFyZ3NUZXN0IiArIERCX1RFU1RfU1VGRklYLCAiMS4wIiwgIlRlc3Qgb2YgaGFuZGxp
bmcgb2YgdGhlIGFyZ3VtZW50cyB0byBTUUxUcmFuc2FjdGlvbi5leGVjdXRlU3FsIiwgMSk7Cisg
ICAgZGIudHJhbnNhY3Rpb24ocnVuVHJhbnNhY3Rpb25UZXN0cyk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55798</attachid>
            <date>2010-05-11 19:44:50 -0700</date>
            <delta_ts>2010-05-15 09:37:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34992-20100511194449.patch</filename>
            <type>text/plain</type>
            <size>28438</size>
            <attacher name="Eric U.">ericu</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1OTE5OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMTAtMDUtMTEgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgYmluZGluZ3MgZm9yIGFzeW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICBUZXN0czog
c3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKKyAgICAgICAg
ICAgICAgIHN0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXIuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDogQWRkIG9wZW5EYXRhYmFzZSBi
aW5kaW5nLgorICAgICAgICAoV2ViQ29yZTo6SlNXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2Up
OgorCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHA6IEFkZCBvcGVuRGF0YWJhc2Ugc3R1YjsgQ2hyb21pdW0gd2lsbCBuZWVkIHdvcmsgYm90aCBp
biBWOCBhbmQgaW4gdGhlIGJyb3dzZXIgcHJvY2VzcyBiZWZvcmUgd2UgY2FuIHR1cm4gdGhpcyBv
biB0aGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OlY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFiYXNl
Q2FsbGJhY2spOgorCisgICAgICAgIEFkZCBOb1N0YXRpY1RhYmxlcyBmbGFncyB0byBhbGwgb2Jq
ZWN0cyBub3cgc2hhcmVkIHdpdGggd29ya2Vycy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTEVycm9yLmlkbDoKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFJlc3VsdFNldC5pZGw6CisgICAgICAgICogc3RvcmFnZS9TUUxSZXN1bHRTZXRSb3dMaXN0
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmlkbDoKKyAgICAgICAgCisg
ICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0Lmg6IEFkZCBkYXRhYmFzZUV4Y2VlZGVkUXVv
dGEuCisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHQ6OmRhdGFiYXNlRXhjZWVkZWRRdW90YSk6IEFkZCBzdHViIGltcGxl
bWVudGF0aW9uIGZvciB0ZXN0aW5nOyB5b3UganVzdCBnZXQgNU1CIGZvciBub3cuCisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0OjpvcGVuRGF0YWJhc2UpOiBSZW1vdmUgaW52YWxpZCBh
c3NlcnRpb24uCisKKyAgICAgICAgQWRkIHRoZSBJREwgZm9yIHRoZSBjYWxsIHRvIG9wZW5EYXRh
YmFzZS4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsOgorCiAyMDEwLTA1LTEx
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgTWFyayBSb3dlLgpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRl
eHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJD
b250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gNTkxOTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDgg
QEAKICNpbmNsdWRlICJKU1dvcmtlckNvbnRleHQuaCIKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
KyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2luY2x1ZGUgIkpTRGF0YWJhc2UuaCIKICNpbmNsdWRl
ICJKU0RhdGFiYXNlQ2FsbGJhY2suaCIKICNpbmNsdWRlICJKU0RhdGFiYXNlU3luYy5oIgogI2Vu
ZGlmCkBAIC0xNDcsNiArMTQ5LDQ2IEBAIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjptZXNzYWdl
Q2hhbm5lbCgKICNlbmRpZgogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQorSlNWYWx1ZSBKU1dvcmtl
ckNvbnRleHQ6Om9wZW5EYXRhYmFzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpIAoreyAKKyAgICBpZiAoYXJncy5zaXplKCkgPCA0KSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBTWU5UQVhfRVJSKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorCisgICAgU3RyaW5nIG5hbWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgwKS50b1N0
cmluZyhleGVjKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKworICAgIFN0cmluZyB2ZXJzaW9uID0gdXN0cmluZ1RvU3RyaW5n
KGFyZ3MuYXQoMSkudG9TdHJpbmcoZXhlYykpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBTdHJpbmcgZGlzcGxheU5h
bWUgPSB1c3RyaW5nVG9TdHJpbmcoYXJncy5hdCgyKS50b1N0cmluZyhleGVjKSk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgIC8vIGFyZ3MuYXQoMykgPSBlc3RpbWF0ZWQgc2l6ZQorICAgIHVuc2lnbmVkIGxvbmcgZXN0
aW1hdGVkU2l6ZSA9IGFyZ3MuYXQoMykudG9VSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFJlZlB0
cjxEYXRhYmFzZUNhbGxiYWNrPiBjcmVhdGlvbkNhbGxiYWNrOworICAgIGlmIChhcmdzLnNpemUo
KSA+PSA1KSB7CisgICAgICAgIGlmICghYXJncy5hdCg0KS5pc09iamVjdCgpKSB7CisgICAgICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIH0KKworICAgICAgICBjcmVhdGlvbkNh
bGxiYWNrID0gSlNEYXRhYmFzZUNhbGxiYWNrOjpjcmVhdGUoYXNPYmplY3QoYXJncy5hdCg0KSks
IGdsb2JhbE9iamVjdCgpKTsKKyAgICB9CisgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7IAor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQ
dHIoaW1wbCgpLT5vcGVuRGF0YWJhc2UobmFtZSwgdmVyc2lvbiwgZGlzcGxheU5hbWUsIGVzdGlt
YXRlZFNpemUsIGNyZWF0aW9uQ2FsbGJhY2sucmVsZWFzZSgpLCBlYykpKTsgCisgICAgc2V0RE9N
RXhjZXB0aW9uKGV4ZWMsIGVjKTsgCisgICAgcmV0dXJuIHJlc3VsdDsgCit9IAorIAogSlNWYWx1
ZSBKU1dvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmMoRXhlY1N0YXRlKiBleGVjLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmIChhcmdzLnNpemUoKSA8IDQpIHsKSW5kZXg6IFdl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcAkocmV2aXNpb24gNTkxOTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdv
cmtlckNvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAj
aW5jbHVkZSAiVjhXb3JrZXJDb250ZXh0LmgiCiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCisjaW5j
bHVkZSAiVjhEYXRhYmFzZS5oIgogI2luY2x1ZGUgIlY4RGF0YWJhc2VDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIlY4RGF0YWJhc2VTeW5jLmgiCiAjZW5kaWYKQEAgLTE0Miw2ICsxNDMsMTMgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoV29ya2VyQ29udGV4dAogfQogCiAjaWYgRU5BQkxFKERB
VEFCQVNFKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRhdGFi
YXNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykgCit7IAorICAgIElOQ19TVEFU
UygiRE9NLldvcmtlckNvbnRleHQub3BlbkRhdGFiYXNlKCkiKTsgCisgICAgLy8gSW1wbGVtZW50
YXRpb24gY29taW5nIHNvb24uCisgICAgcmV0dXJuIHRocm93RXJyb3IoTk9UX1NVUFBPUlRFRF9F
UlIpOworfSAKKwogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4V29ya2VyQ29udGV4dDo6b3BlbkRh
dGFiYXNlU3luY0NhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uVjhXb3JrZXJDb250ZXh0Lm9wZW5EYXRhYmFzZVN5bmMoKSIpOwpJbmRleDog
V2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d29ya2Vycy9Xb3JrZXJDb250ZXh0LmNwcAkocmV2aXNpb24gNTkxOTgpCisrKyBXZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3Qu
aCIKKyNpbmNsdWRlICJEYXRhYmFzZVRyYWNrZXIuaCIKICNpbmNsdWRlICJET01UaW1lci5oIgog
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCkBAIC0yNzAsMTgg
KzI3MSwyMyBAQCBOb3RpZmljYXRpb25DZW50ZXIqIFdvcmtlckNvbnRleHQ6OndlYmtpCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogUGFzc1JlZlB0cjxEYXRhYmFzZT4gV29ya2VyQ29udGV4dDo6b3Bl
bkRhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBjb25z
dCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFBhc3NS
ZWZQdHI8RGF0YWJhc2VDYWxsYmFjaz4gY3JlYXRpb25DYWxsYmFjaywgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7Ci0gICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpKSB7
CisgICAgaWYgKCFzZWN1cml0eU9yaWdpbigpLT5jYW5BY2Nlc3NEYXRhYmFzZSgpIHx8ICFEYXRh
YmFzZTo6aXNBdmFpbGFibGUoKSkgewogICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgQVNTRVJUKERhdGFiYXNlOjppc0F2YWlsYWJsZSgp
KTsKLSAgICBpZiAoIURhdGFiYXNlOjppc0F2YWlsYWJsZSgpKQotICAgICAgICByZXR1cm4gMDsK
LQogICAgIHJldHVybiBEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKHRoaXMsIG5hbWUsIHZlcnNpb24s
IGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBjcmVhdGlvbkNhbGxiYWNrLCBlYyk7CiB9CiAK
K3ZvaWQgV29ya2VyQ29udGV4dDo6ZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNvbnN0IFN0cmluZyYp
Cit7CisjaWYgIVBMQVRGT1JNKENIUk9NSVVNKQorICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIGEg
cmVhbCBpbXBsZW1lbnRhdGlvbjsgdGhpcyBpcyBhIHRlbXBvcmFyeSBzb2x1dGlvbiBmb3IgdGVz
dGluZy4KKyAgICBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdFF1b3RhID0gNSAqIDEw
MjQgKiAxMDI0OworICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNldFF1b3RhKHNlY3Vy
aXR5T3JpZ2luKCksIGRlZmF1bHRRdW90YSk7CisjZW5kaWYKK30KKwogUGFzc1JlZlB0cjxEYXRh
YmFzZVN5bmM+IFdvcmtlckNvbnRleHQ6Om9wZW5EYXRhYmFzZVN5bmMoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVu
c2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgUGFzc1JlZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiBj
cmVhdGlvbkNhbGxiYWNrLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIXNlY3VyaXR5
T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKCkpIHsKSW5kZXg6IFdlYkNvcmUvd29ya2Vycy9X
b3JrZXJDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuaAkocmV2aXNpb24gNTkxOTgpCisrKyBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTAsOCArMTEwLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0RhdGFiYXNlUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgICAgICAvLyBO
b3QgaW1wbGVtZW50ZWQgeWV0LgotICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VFeGNlZWRl
ZFF1b3RhKGNvbnN0IFN0cmluZyYpIHsgfQorICAgICAgICAvLyBOb3QgaW1wbGVtZW50ZWQgZm9y
IHJlYWwgeWV0LgorICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YWJhc2VFeGNlZWRlZFF1b3RhKGNv
bnN0IFN0cmluZyYpOwogI2VuZGlmCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRleHRUaHJl
YWQoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGlzSlNFeGVjdXRpb25UZXJtaW5hdGVk
KCkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCShyZXZpc2lvbiA1OTE5
OCkKKysrIFdlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtNDksMTAgKzQ5LDEwIEBAIG1vZHVsZSB0aHJlYWRzIHsKICAgICAgICAgLy8gV29ya2VyVXRp
bHMKICAgICAgICAgW0N1c3RvbV0gdm9pZCBpbXBvcnRTY3JpcHRzKC8qW1ZhcmlhZGljXSBpbiBE
T01TdHJpbmcgdXJscyAqLyk7CiAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSBbUmVwbGFjZWFi
bGVdIFdvcmtlck5hdmlnYXRvciBuYXZpZ2F0b3I7Ci0KICNpZiBkZWZpbmVkKEVOQUJMRV9EQVRB
QkFTRSkgJiYgRU5BQkxFX0RBVEFCQVNFCi0gICAgICAgIC8vIERhdGFiYXNlIG9wZW5EYXRhYmFz
ZShpbiBET01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBk
aXNwbGF5TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplKTsKLSAgICAgICAgW0Vu
YWJsZUF0UnVudGltZSwgQ3VzdG9tXSBEYXRhYmFzZVN5bmMgb3BlbkRhdGFiYXNlU3luYyhpbiBE
T01TdHJpbmcgbmFtZSwgaW4gRE9NU3RyaW5nIHZlcnNpb24sIGluIERPTVN0cmluZyBkaXNwbGF5
TmFtZSwgaW4gdW5zaWduZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBpbiBEYXRhYmFzZUNhbGxiYWNr
IGNyZWF0aW9uQ2FsbGJhY2spOworICAgICAgICBbRW5hYmxlZEF0UnVudGltZSwgQ3VzdG9tXSBE
YXRhYmFzZSBvcGVuRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUsIGluIERPTVN0cmluZyB2ZXJz
aW9uLCBpbiBET01TdHJpbmcgZGlzcGxheU5hbWUsIGluIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVk
U2l6ZSwgaW4gRGF0YWJhc2VDYWxsYmFjayBjcmVhdGlvbkNhbGxiYWNrKQorICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtFbmFibGVkQXRSdW50aW1lLCBDdXN0b21d
IERhdGFiYXNlU3luYyBvcGVuRGF0YWJhc2VTeW5jKGluIERPTVN0cmluZyBuYW1lLCBpbiBET01T
dHJpbmcgdmVyc2lvbiwgaW4gRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCBpbiB1bnNpZ25lZCBsb25n
IGVzdGltYXRlZFNpemUsIGluIERhdGFiYXNlQ2FsbGJhY2sgY3JlYXRpb25DYWxsYmFjayk7CiAj
ZW5kaWYKIAogICAgICAgICAvLyBUaW1lcnMKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU5MTk4KQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjYgQEAKKzIw
MTAtMDUtMTEgIEVyaWMgVWhyaGFuZSAgPGVyaWN1QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYmluZGluZ3MgZm9yIGFz
eW5jIERCIEFQSSBpbiBXb3JrZXJzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MzQ5OTIKKworICAgICAgICAqIHN0b3JhZ2UvY2hhbmdlLXZlcnNpb24t
aGFuZGxlLXJldXNlLmh0bWw6IFJlZmFjdG9yZWQgdG8gc2hhcmUgY29kZSB3aXRoIHRoZSB3b3Jr
ZXIgdmVyc2lvbiBvZiB0aGUgdGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2NoYW5nZS12ZXJzaW9u
LWhhbmRsZS1yZXVzZS1leHBlY3RlZC5odG1sOiBSZW1vdmVkIHJlZmVyZW5jZSB0byByZWxvYWRp
bmcsIHdoaWNoIHRoaXMgdGVzdCBkb2Vzbid0IGRvLgorICAgICAgICAqIHN0b3JhZ2UvY2hhbmdl
LXZlcnNpb24taGFuZGxlLXJldXNlLmpzOiBUaGlzIGlzIHRoZSBleHRyYWN0ZWQgc2hhcmVkIGNv
cmUgb2YgdGhlIHRlc3QuCisgICAgICAgICogc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLmh0bWw6
IFJlZmFjdG9yZWQgdG8gc2hhcmUgY29kZSB3aXRoIHRoZSB3b3JrZXIgdmVyc2lvbiBvZiB0aGUg
dGVzdC4KKyAgICAgICAgKiBzdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanM6IFRoaXMgaXMgdGhl
IGV4dHJhY3RlZCBzaGFyZWQgY29yZSBvZiB0aGUgdGVzdC4KKworICAgICAgICBUaGVzZSBhcmUg
dGhlIHdvcmtlciB2ZXJzaW9ucyBvZiB0aGUgdGVzdHM7IHRoZXkncmUgdGlueSBzaGltcyBhcm91
bmQgc2hhcmVkIGNvZGUuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1z
cWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3dvcmtl
cnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2Vy
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hh
bmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sOiBBZGRlZC4KKyAgICAgICAgVGhp
cyBmaWxlIGdldHMgaW5jbHVkZWQgZnJvbSB3b3JrZXIgZGF0YWJhc2UgdGVzdHM7IGl0IGRvZXMg
YWxsIHRoZSBib2lsZXJwbGF0ZSB0aGF0J3MgbmVlZGVkIG9uIHRoZSBET00gc2lkZS4KKyAgICAg
ICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRy
b2xsZXIuanM6IEFkZGVkLgorICAgICAgICBUaGlzIGZpbGUgaXMgdGhlIGJvaWxlcnBsYXRlIGZv
ciB0aGUgd29ya2VyIHNpZGUgb2YgdGhlIGRhdGFiYXNlIHRlc3RzLiAgSXQgd2lsbCBpbXBvcnQg
YW5kIHJ1biB0aGUgYWN0dWFsIHRlc3Qgb24gY29tbWFuZCwgYW5kIHdpbGwgcmVwb3J0IGJhY2sg
Y29tcGxldGlvbiBhbmQgZXhjZXB0aW9ucy4KKyAgICAgICAgKiBmYXN0L3dvcmtlcnMvc3RvcmFn
ZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzOiBBZGRlZC4KKwogMjAxMC0wNS0xMSAgTU9S
SVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBE
aXJrIFNjaHVsemUuCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFu
Z2UtdmVyc2lvbi1oYW5kbGUtcmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2Utd29ya2VyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd29ya2Vycy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS13b3JrZXItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgdGVzdHMgdGhhdCBh
IGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91
IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQg
bWlzbWF0Y2hpbmcgdmVyc2lvbnMuCitjaGFuZ2VWZXJzaW9uOiB0cmFuc2FjdGlvbiBjYWxsYmFj
aworY2hhbmdlVmVyc2lvbjogc3VjY2VzcyBjYWxsYmFjawordHJhbnNhY3Rpb246IHN0YXRlbWVu
dCBlcnJvciBjYWxsYmFjazogbm8gc3VjaCB0YWJsZTogRm9vQmFyCitURVNUIENPTVBMRVRFLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1o
YW5kbGUtcmV1c2Utd29ya2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvY2hhbmdlLXZl
cnNpb24taGFuZGxlLXJldXNlLXdvcmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI1
IEBACis8aHRtbD4gCis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGF0YWJhc2Utd29y
a2VyLWNvbnRyb2xsZXIuanMiPjwvc2NyaXB0PiAKKzxzY3JpcHQ+IAorCitmdW5jdGlvbiBzZXR1
cEFuZFJ1blRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgfQorIAorICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuaW5uZXJUZXh0ID0gIiI7CisgICAgZGF0YWJhc2VX
b3JrZXIucG9zdE1lc3NhZ2UoImltcG9ydFNjcmlwdHM6Li4vLi4vLi4vc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuanMiKTsKKyAgICBkYXRhYmFzZVdvcmtlci5wb3N0TWVzc2Fn
ZSgicnVuVGVzdCIpOworfQorPC9zY3JpcHQ+IAorPC9oZWFkPiAKKzxib2R5IG9ubG9hZD0ic2V0
dXBBbmRSdW5UZXN0KCkiPiAKKzxkaXY+VGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJl
IGFjY2Vzc2VkIGFmdGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBl
cnJvciBhYm91dCBGb29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJz
aW9ucy4KKzxwcmUgaWQ9ImNvbnNvbGUiPiAKK0ZBSUxVUkU6IHRlc3QgZGlkbid0IHJ1bi4KKzwv
cHJlPiAKKzwvYm9keT4gCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMv
c3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdvcmtlci1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3Jr
ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJz
L3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy13b3JrZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDI5IEBACitQQVNTLiBleGVjdXRlU3FsKG51bGwpIGRpZCBub3QgdGhyb3cg
YW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKHVuZGVmaW5lZCkgZGlkIG5vdCB0aHJvdyBh
biBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoMCkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRp
b24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNT
LiBleGVjdXRlU3FsKCIiLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgW10pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBl
eGVjdXRlU3FsKCIiLCBbICJhcmcwIiBdKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFT
Uy4gZXhlY3V0ZVNxbCgiIiwgeyB9KSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4g
ZXhlY3V0ZVNxbCgiIiwgeyBsZW5ndGg6IDAgfSkgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24K
K1BBU1MuIGV4ZWN1dGVTcWwoIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfSkgZGlkIG5vdCB0
aHJvdyBhbiBleGNlcHRpb24KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGwsIG51bGwpIGRpZCBu
b3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCB1bmRlZmlu
ZWQpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBudWxs
LCB7IH0pIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uCitQQVNTLiBleGVjdXRlU3FsKCIiLCBu
dWxsLCBudWxsLCBudWxsKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0
ZVNxbCgiIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlv
bgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgbnVsbCwgbnVsbCwgeyB9KSBkaWQgbm90IHRocm93IGFu
IGV4Y2VwdGlvbgorUEFTUy4gZXhlY3V0ZVNxbCgpIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBl
Y3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwodGhyb3dPblRvU3RyaW5nT2JqZWN0KSB0aHJldyBhbiBl
eGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRlU3FsKCIiLCB0aHJvd09uR2V0TGVu
Z3RoT2JqZWN0KSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRl
U3FsKCIiLCB0aHJvd09uR2V0WmVyb09iamVjdCkgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVj
dGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgWyB0aHJvd09uVG9TdHJpbmdPYmplY3QgXSkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgMCkgdGhy
ZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLgorUEFTUy4gZXhlY3V0ZVNxbCgiIiwgIiIpIHRo
cmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIsIG51bGws
IDApIHRocmV3IGFuIGV4Y2VwdGlvbiBhcyBleHBlY3RlZC4KK1BBU1MuIGV4ZWN1dGVTcWwoIiIs
IG51bGwsICIiKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQQVNTLiBleGVjdXRl
U3FsKCIiLCBudWxsLCBudWxsLCAwKSB0aHJldyBhbiBleGNlcHRpb24gYXMgZXhwZWN0ZWQuCitQ
QVNTLiBleGVjdXRlU3FsKCIiLCBudWxsLCBudWxsLCAiIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFz
IGV4cGVjdGVkLgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVj
dXRlLXNxbC1hcmdzLXdvcmtlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d29ya2Vycy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3Mtd29ya2VyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9leGVjdXRlLXNxbC1hcmdzLXdv
cmtlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9kYXRhYmFzZS13b3JrZXItY29udHJvbGxlci5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRlc3QoKQoreworICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgfQorICAgIGRhdGFiYXNlV29ya2VyLnBvc3RNZXNzYWdlKCJpbXBvcnRT
Y3JpcHRzOi4uLy4uLy4uL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcyIpOworICAgIGRhdGFi
YXNlV29ya2VyLnBvc3RNZXNzYWdlKCJydW5UZXN0Iik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFk
PgorCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVuVGVzdCgpIj4KKzxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dvcmtl
cnMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLWNvbnRyb2xsZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFi
YXNlLXdvcmtlci1jb250cm9sbGVyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci1jb250cm9sbGVyLmpz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACit2YXIgZGF0YWJhc2VXb3JrZXIgPSBuZXcg
V29ya2VyKCdyZXNvdXJjZXMvZGF0YWJhc2Utd29ya2VyLmpzJyk7CisKK2RhdGFiYXNlV29ya2Vy
Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkgeworICAgIGxvZygiQ2F1Z2h0IGFuIGVycm9yIGZy
b20gdGhlIHdvcmtlciEiKTsKKyAgICBsb2coZXZlbnQpOworICAgIGZvciAodmFyIGkgaW4gZXZl
bnQpCisgICAgICAgIGxvZygiZXZlbnRbIiArIGkgKyAiXTogIiArIGV2ZW50W2ldKTsKK307CisK
K2RhdGFiYXNlV29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGV2
ZW50LmRhdGEuaW5kZXhPZignbG9nOicpID09IDApCisgICAgICAgIGxvZyhldmVudC5kYXRhLnN1
YnN0cmluZyg0KSk7CisgICAgZWxzZSBpZiAoZXZlbnQuZGF0YSA9PSAnbm90aWZ5RG9uZScpIHsK
KyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgbWVzc2FnZTogIiArIGV2ZW50KTsKK307CisKK2Z1
bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25z
b2xlIikuaW5uZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOworfQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93b3JrZXJzL3N0b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dvcmtlcnMvc3RvcmFnZS9yZXNvdXJjZXMvZGF0YWJh
c2Utd29ya2VyLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93b3JrZXJzL3N0
b3JhZ2UvcmVzb3VyY2VzL2RhdGFiYXNlLXdvcmtlci5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwyOSBAQAordmFyIHdpbmRvdyA9IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlcjogeworICAg
ICAgICBub3RpZnlEb25lOiBmdW5jdGlvbigpIHsgcG9zdE1lc3NhZ2UoIm5vdGlmeURvbmUiKTsg
fQorICAgIH0KK307Cit2YXIgbGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXI7CisKK2Z1bmN0aW9uIGxvZyhzKSB7CisgICAgcG9zdE1lc3NhZ2UoImxvZzoi
ICsgcyk7Cit9CisKK29ubWVzc2FnZSA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgdHJ5IHsKKyAg
ICAgICAgaWYgKGV2ZW50LmRhdGEuaW5kZXhPZigiaW1wb3J0U2NyaXB0czoiKSA9PSAwKSB7Cisg
ICAgICAgICAgICB2YXIgc2NyaXB0cyA9IGV2ZW50LmRhdGEuc3Vic3RyaW5nKCJpbXBvcnRTY3Jp
cHRzOiIubGVuZ3RoKS5zcGxpdCgiLCIpOworICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBzY3Jp
cHRzKQorICAgICAgICAgICAgICAgIHNjcmlwdHNbaV0gPSAiLi4vIiArIHNjcmlwdHNbaV07Cisg
ICAgICAgICAgICBpbXBvcnRTY3JpcHRzKHNjcmlwdHMpOworICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LmRhdGEgPT0gInJ1blRlc3QiKQorICAgICAgICAgICAgcnVuVGVzdCgpOyAvLyBNdXN0IGJl
IGRlZmluZWQgYnkgc29tZSBpbXBvcnRlZCBzY3JpcHQuCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGxvZygiUmVjZWl2ZWQgdW5leHBlY3RlZCBtZXNzYWdlOiAiICsgZXZlbnQuZGF0YSk7Cisg
ICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgbG9nKCJXb3JrZXIgY2F1Z2h0IGV4Y2VwdGlvbjog
IiArIGV4KTsKKyAgICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUo
KTsKKyAgICB9Cit9OworCit2YXIgREJfVEVTVF9TVUZGSVggPSAiX3dvcmtlciI7CkluZGV4OiBM
YXlvdXRUZXN0cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5k
bGUtcmV1c2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1OTE5OCkKKysrIExheW91dFRlc3RzL3N0
b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFuZGxlLXJldXNlLWV4cGVjdGVkLnR4dAkod29ya2luZyBj
b3B5KQpAQCAtMSw0ICsxLDQgQEAKLVRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBh
Y2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJy
b3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lv
bnMuIEFsc28sIHJlbG9hZGluZyB0aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlv
biBmYWlsdXJlLgorVGhpcyB0ZXN0cyB0aGF0IGEgZGF0YWJhc2UgY2FuIGJlIGFjY2Vzc2VkIGFm
dGVyIGNoYW5naW5nIGl0cyB2ZXJzaW9uLiBZb3Ugc2hvdWxkIHNlZSBhbiBlcnJvciBhYm91dCBG
b29CYXIgdGFibGUgYmVsb3csIG5vdCBhYm91dCBtaXNtYXRjaGluZyB2ZXJzaW9ucy4KIGNoYW5n
ZVZlcnNpb246IHRyYW5zYWN0aW9uIGNhbGxiYWNrCiBjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNh
bGxiYWNrCiB0cmFuc2FjdGlvbjogc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrOiBubyBzdWNoIHRh
YmxlOiBGb29CYXIKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvY2hhbmdlLXZlcnNpb24taGFu
ZGxlLXJldXNlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuaHRtbAkocmV2aXNpb24gNTkxOTgpCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL2NoYW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcwICsxLDMxIEBACiA8aHRtbD4gCiA8aGVhZD4KKzxzY3JpcHQgc3JjPSJjaGFuZ2Ut
dmVyc2lvbi1oYW5kbGUtcmV1c2UuanMiPjwvc2NyaXB0PgogPHNjcmlwdD4gCi1mdW5jdGlvbiBs
b2cobWVzc2FnZSkKLXsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5u
ZXJUZXh0ICs9IG1lc3NhZ2UgKyAiXG4iOwotfQogCi1mdW5jdGlvbiBmaW5pc2hUZXN0KCkKLXsK
LSAgICBsb2coIlRFU1QgQ09NUExFVEUuIik7Cit2YXIgREJfVEVTVF9TVUZGSVggPSAiX2RvbSI7
CiAKLSAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdl
ICsgIlxuIjsKIH0KIAotZnVuY3Rpb24gcnVuVGVzdCgpCitmdW5jdGlvbiBzZXR1cEFuZFJ1blRl
c3QoKQogewogICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgfQogIAotICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJyZXN1bHQiKS5pbm5lclRleHQgPSAiIjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCA9ICIiOwogIAotICAgIHRyeSB7Ci0gICAgICAgIGRi
ID0gb3BlbkRhdGFiYXNlKCJDaGFuZ2VWZXJzaW9uIiwgIiIsICJUZXN0IHRoYXQgY2hhbmdpbmcg
YSBkYXRhYmFzZSB2ZXJzaW9uIGRvZXNuXCd0IGtpbGwgb3VyIGhhbmRsZSB0byBpdCIsIDEpOwot
ICAgICAgICB2YXIgdmVyc2lvbiA9IGRiLnZlcnNpb247Ci0gICAgICAgIHZhciBuZXdWZXJzaW9u
ID0gdmVyc2lvbiA/IChwYXJzZUludCh2ZXJzaW9uKSArIDEpLnRvU3RyaW5nKCkgOiAiMSI7IAot
ICAgICAgICBkYi5jaGFuZ2VWZXJzaW9uKHZlcnNpb24sIG5ld1ZlcnNpb24sIGZ1bmN0aW9uKHR4
KSB7Ci0gICAgICAgICAgICBsb2coImNoYW5nZVZlcnNpb246IHRyYW5zYWN0aW9uIGNhbGxiYWNr
Iik7Ci0gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7Ci0gICAgICAgICAgICBsb2coImNoYW5n
ZVZlcnNpb246IGVycm9yIGNhbGxiYWNrOiAiICsgZXJyb3IubWVzc2FnZSk7Ci0gICAgICAgIH0s
IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgbG9nKCJjaGFuZ2VWZXJzaW9uOiBzdWNjZXNzIGNh
bGxiYWNrIik7Ci0gICAgICAgIH0pOwotICAgICAgICAKLSAgICAgICAgc2V0VGltZW91dChydW5U
ZXN0MiwgMTAwMCk7Ci0gICAgICAgIAotICAgIH0gY2F0Y2ggKGUpIHsKLSAgICAgICAgbG9nKCJj
aGFuZ2VWZXJzaW9uIGV4Y2VwdGlvbjogIiArIGUpOwotICAgICAgICBmaW5pc2hUZXN0KCk7Ci0g
ICAgfQotfQotIAotZnVuY3Rpb24gcnVuVGVzdDIoKQotewotICAgIHRyeSB7Ci0gICAgICAgIGRi
LnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7Ci0gICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJT
RUxFQ1QgKiBmcm9tIEZvb0JhciIsIFtdLCBmdW5jdGlvbih0eCkgewotICAgICAgICAgICAgICAg
IGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBjYWxsYmFjayIpOwotICAgICAgICAgICAgICAg
IGZpbmlzaFRlc3QoKTsKLSAgICAgICAgICAgIH0sIGZ1bmN0aW9uKHR4LCBlcnJvcikgewotICAg
ICAgICAgICAgICAgIGxvZygidHJhbnNhY3Rpb246IHN0YXRlbWVudCBlcnJvciBjYWxsYmFjazog
IiArIGVycm9yLm1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKLSAgICAg
ICAgICAgIH0pOwotICAgICAgICB9KTsKLSAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgIGxvZygi
dHJhbnNhY3Rpb24gZXhjZXB0aW9uOiAiICsgZSk7Ci0gICAgICAgIGZpbmlzaFRlc3QoKTsKLSAg
ICB9CisgICAgcnVuVGVzdCgpOwogfQogPC9zY3JpcHQ+IAogPC9oZWFkPiAKLTxib2R5IG9ubG9h
ZD0icnVuVGVzdCgpIj4gCi08ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBh
Y2Nlc3NlZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJy
b3IgYWJvdXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lv
bnMuIEFsc28sIHJlbG9hZGluZyB0aGUgcGFnZSBzaG91bGQgbm90IGNhdXNlIGFuIGFzc2VydGlv
biBmYWlsdXJlLgotPHByZSBpZD0icmVzdWx0Ij4gCis8Ym9keSBvbmxvYWQ9InNldHVwQW5kUnVu
VGVzdCgpIj4gCis8ZGl2PlRoaXMgdGVzdHMgdGhhdCBhIGRhdGFiYXNlIGNhbiBiZSBhY2Nlc3Nl
ZCBhZnRlciBjaGFuZ2luZyBpdHMgdmVyc2lvbi4gWW91IHNob3VsZCBzZWUgYW4gZXJyb3IgYWJv
dXQgRm9vQmFyIHRhYmxlIGJlbG93LCBub3QgYWJvdXQgbWlzbWF0Y2hpbmcgdmVyc2lvbnMuCis8
cHJlIGlkPSJjb25zb2xlIj4gCiBGQUlMVVJFOiB0ZXN0IGRpZG4ndCBydW4uCiA8L3ByZT4gCiA8
L2JvZHk+IApJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lvbi1oYW5kbGUt
cmV1c2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9jaGFuZ2UtdmVyc2lv
bi1oYW5kbGUtcmV1c2UuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL2No
YW5nZS12ZXJzaW9uLWhhbmRsZS1yZXVzZS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBA
QAorZnVuY3Rpb24gZmluaXNoVGVzdCgpCit7CisgICAgbG9nKCJURVNUIENPTVBMRVRFLiIpOwor
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAg
ICB0cnkgeworICAgICAgICBkYiA9IG9wZW5EYXRhYmFzZSgiQ2hhbmdlVmVyc2lvbiIgKyBEQl9U
RVNUX1NVRkZJWCwgIiIsICJUZXN0IHRoYXQgY2hhbmdpbmcgYSBkYXRhYmFzZSB2ZXJzaW9uIGRv
ZXNuJ3Qga2lsbCBvdXIgaGFuZGxlIHRvIGl0IiwgMSk7CisgICAgICAgIHZhciB2ZXJzaW9uID0g
ZGIudmVyc2lvbjsKKyAgICAgICAgdmFyIG5ld1ZlcnNpb24gPSB2ZXJzaW9uID8gKHBhcnNlSW50
KHZlcnNpb24pICsgMSkudG9TdHJpbmcoKSA6ICIxIjsgCisgICAgICAgIGRiLmNoYW5nZVZlcnNp
b24odmVyc2lvbiwgbmV3VmVyc2lvbiwgZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIGxvZygi
Y2hhbmdlVmVyc2lvbjogdHJhbnNhY3Rpb24gY2FsbGJhY2siKTsKKyAgICAgICAgfSwgZnVuY3Rp
b24oZXJyb3IpIHsKKyAgICAgICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbjogZXJyb3IgY2FsbGJh
Y2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICBsb2coImNoYW5nZVZlcnNpb246IHN1Y2Nlc3MgY2FsbGJhY2siKTsKKyAgICAgICAgICAg
IHJ1blRlc3QyKCk7CisgICAgICAgIH0pOworICAgICAgICAKKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGxvZygiY2hhbmdlVmVyc2lvbiBleGNlcHRpb246ICIgKyBlKTsKKyAgICAgICAgZmlu
aXNoVGVzdCgpOworICAgIH0KK30KKyAKK2Z1bmN0aW9uIHJ1blRlc3QyKCkKK3sKKyAgICB0cnkg
eworICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHgu
ZXhlY3V0ZVNxbCgiU0VMRUNUICogZnJvbSBGb29CYXIiLCBbXSwgZnVuY3Rpb24odHgpIHsKKyAg
ICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgY2FsbGJhY2siKTsKKyAg
ICAgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbih0eCwg
ZXJyb3IpIHsKKyAgICAgICAgICAgICAgICBsb2coInRyYW5zYWN0aW9uOiBzdGF0ZW1lbnQgZXJy
b3IgY2FsbGJhY2s6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBmaW5pc2hU
ZXN0KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICBsb2coInRyYW5zYWN0aW9uIGV4Y2VwdGlvbjogIiArIGUpOworICAgICAgICBmaW5p
c2hUZXN0KCk7CisgICAgfQorfQpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNx
bC1hcmdzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVjdXRlLXNx
bC1hcmdzLmh0bWwJKHJldmlzaW9uIDU5MTk4KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9leGVj
dXRlLXNxbC1hcmdzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA4ICsxLDI5IEBACiA8aHRt
bD4KIAogPGhlYWQ+Cis8c2NyaXB0IHNyYz0iZXhlY3V0ZS1zcWwtYXJncy5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0PgogCi12YXIgdGhyb3dPblRvU3RyaW5nT2JqZWN0ID0geyB9OwotdGhyb3dPblRv
U3RyaW5nT2JqZWN0LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGNhbGwg
dG9TdHJpbmcgb24gdGhpcyBvYmplY3QuIiB9OwordmFyIERCX1RFU1RfU1VGRklYID0gIl9kb20i
OwogCi12YXIgdGhyb3dPbkdldExlbmd0aE9iamVjdCA9IHsgfTsKLXRocm93T25HZXRMZW5ndGhP
YmplY3QuX19kZWZpbmVHZXR0ZXJfXygibGVuZ3RoIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fu
bm90IGdldCBsZW5ndGggb2YgdGhpcyBvYmplY3QuIjsgfSk7Ci0KLXZhciB0aHJvd09uR2V0WmVy
b09iamVjdCA9IHsgbGVuZ3RoOiAxIH07Ci10aHJvd09uR2V0WmVyb09iamVjdC5fX2RlZmluZUdl
dHRlcl9fKCIwIiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAiQ2Fubm90IGdldCAwIHByb3BlcnR5IG9m
IHRoaXMgb2JqZWN0LiI7IH0pOwotCi12YXIgZXhwZWN0Tm9FeGNlcHRpb24gPSBbCi0gICAgJ251
bGwnLAotICAgICd1bmRlZmluZWQnLAotICAgICcwJywKLSAgICAnIiInLAotICAgICciIiwgbnVs
bCcsCi0gICAgJyIiLCB1bmRlZmluZWQnLAotICAgICciIiwgW10nLAotICAgICciIiwgWyAiYXJn
MCIgXScsCi0gICAgJyIiLCB7IH0nLAotICAgICciIiwgeyBsZW5ndGg6IDAgfScsCi0gICAgJyIi
LCB7IGxlbmd0aDogMSwgMDogImFyZzAiIH0nLAotICAgICciIiwgbnVsbCwgbnVsbCcsCi0gICAg
JyIiLCBudWxsLCB1bmRlZmluZWQnLAotICAgICciIiwgbnVsbCwgeyB9JywKLSAgICAnIiIsIG51
bGwsIG51bGwsIG51bGwnLAotICAgICciIiwgbnVsbCwgbnVsbCwgdW5kZWZpbmVkJywKLSAgICAn
IiIsIG51bGwsIG51bGwsIHsgfScsCi1dOwotCi12YXIgZXhwZWN0RXhjZXB0aW9uID0gWwotICAg
ICcnLAotICAgICd0aHJvd09uVG9TdHJpbmdPYmplY3QnLAotICAgICciIiwgdGhyb3dPbkdldExl
bmd0aE9iamVjdCcsCi0gICAgJyIiLCB0aHJvd09uR2V0WmVyb09iamVjdCcsCi0gICAgJyIiLCBb
IHRocm93T25Ub1N0cmluZ09iamVjdCBdJywKLSAgICAnIiIsIDAnLAotICAgICciIiwgIiInLAot
ICAgICciIiwgbnVsbCwgMCcsCi0gICAgJyIiLCBudWxsLCAiIicsCi0gICAgJyIiLCBudWxsLCBu
dWxsLCAwJywKLSAgICAnIiIsIG51bGwsIG51bGwsICIiJywKLV07Ci0KLWZ1bmN0aW9uIHdyaXRl
TWVzc2FnZVRvTG9nKG1lc3NhZ2UpCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKIHsKICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmlubmVyVGV4dCArPSBtZXNzYWdlICsgIlxu
IjsKIH0KIAotZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlz
dCkKLXsKLSAgICB0cnkgewotICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3FsKCcg
KyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfSBjYXRj
aCAoZXhjZXB0aW9uKSB7Ci0gICAgICAgIHJldHVybiBleGNlcHRpb247Ci0gICAgfQotfQotCi1m
dW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3QsIGV4
cGVjdEV4Y2VwdGlvbikKLXsKLSAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0cmFu
c2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7Ci0gICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgewotICAg
ICAgICBpZiAoZXhjZXB0aW9uKQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1Mu
IGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSB0aHJldyBhbiBleGNlcHRpb24gYXMg
ZXhwZWN0ZWQuIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHdyaXRlTWVzc2FnZVRvTG9n
KCIqRkFJTCouIGV4ZWN1dGVTcWwoIiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93
IGFuIGV4Y2VwdGlvbiIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChleGNlcHRpb24pCi0g
ICAgICAgICAgICB3cml0ZU1lc3NhZ2VUb0xvZygiKkZBSUwqLiBleGVjdXRlU3FsKCIgKyBwYXJh
bWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsgZXhjZXB0aW9uKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgd3JpdGVNZXNzYWdlVG9Mb2coIlBBU1MuIGV4ZWN1dGVTcWwo
IiArIHBhcmFtZXRlckxpc3QgKyAiKSBkaWQgbm90IHRocm93IGFuIGV4Y2VwdGlvbiIpOwotICAg
IH0KLX0KLQotZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb25UZXN0cyh0cmFuc2FjdGlvbikKLXsKLSAg
ICBmb3IgKGkgaW4gZXhwZWN0Tm9FeGNlcHRpb24pCi0gICAgICAgIHJ1blRyYW5zYWN0aW9uVGVz
dCh0cmFuc2FjdGlvbiwgZXhwZWN0Tm9FeGNlcHRpb25baV0sIGZhbHNlKTsKLSAgICBmb3IgKGkg
aW4gZXhwZWN0RXhjZXB0aW9uKQotICAgICAgICBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rp
b24sIGV4cGVjdEV4Y2VwdGlvbltpXSwgdHJ1ZSk7Ci0KLSAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Ci19Ci0KLWZ1bmN0aW9uIHJ1blRlc3QoKQorZnVuY3Rpb24gc2V0dXBBbmRSdW5UZXN0KCkKIHsK
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CiAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOwogICAgIH0KLQotICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiRXhl
Y3V0ZVNRTEFyZ3NUZXN0IiwgIjEuMCIsICJUZXN0IG9mIGhhbmRsaW5nIG9mIHRoZSBhcmd1bWVu
dHMgdG8gU1FMVHJhbnNhY3Rpb24uZXhlY3V0ZVNxbCIsIDEpOwotICAgIGRiLnRyYW5zYWN0aW9u
KHJ1blRyYW5zYWN0aW9uVGVzdHMpOworICAgIHJ1blRlc3QoKTsKIH0KIAogPC9zY3JpcHQ+CiA8
L2hlYWQ+CiAKLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxib2R5IG9ubG9hZD0ic2V0dXBB
bmRSdW5UZXN0KCkiPgogPHByZSBpZD0iY29uc29sZSI+PC9wcmU+CiA8L2JvZHk+CiAKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvZXhlY3V0ZS1zcWwtYXJncy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL2V4ZWN1dGUtc3FsLWFyZ3MuanMJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODYgQEAKK3ZhciB0aHJvd09uVG9TdHJpbmdPYmplY3QgPSB7IH07Cit0aHJvd09uVG9T
dHJpbmdPYmplY3QudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgY2FsbCB0
b1N0cmluZyBvbiB0aGlzIG9iamVjdC4iIH07CisKK3ZhciB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0
ID0geyB9OwordGhyb3dPbkdldExlbmd0aE9iamVjdC5fX2RlZmluZUdldHRlcl9fKCJsZW5ndGgi
LCBmdW5jdGlvbiAoKSB7IHRocm93ICJDYW5ub3QgZ2V0IGxlbmd0aCBvZiB0aGlzIG9iamVjdC4i
OyB9KTsKKwordmFyIHRocm93T25HZXRaZXJvT2JqZWN0ID0geyBsZW5ndGg6IDEgfTsKK3Rocm93
T25HZXRaZXJvT2JqZWN0Ll9fZGVmaW5lR2V0dGVyX18oIjAiLCBmdW5jdGlvbiAoKSB7IHRocm93
ICJDYW5ub3QgZ2V0IDAgcHJvcGVydHkgb2YgdGhpcyBvYmplY3QuIjsgfSk7CisKK3ZhciBleHBl
Y3ROb0V4Y2VwdGlvbiA9IFsKKyAgICAnbnVsbCcsCisgICAgJ3VuZGVmaW5lZCcsCisgICAgJzAn
LAorICAgICciIicsCisgICAgJyIiLCBudWxsJywKKyAgICAnIiIsIHVuZGVmaW5lZCcsCisgICAg
JyIiLCBbXScsCisgICAgJyIiLCBbICJhcmcwIiBdJywKKyAgICAnIiIsIHsgfScsCisgICAgJyIi
LCB7IGxlbmd0aDogMCB9JywKKyAgICAnIiIsIHsgbGVuZ3RoOiAxLCAwOiAiYXJnMCIgfScsCisg
ICAgJyIiLCBudWxsLCBudWxsJywKKyAgICAnIiIsIG51bGwsIHVuZGVmaW5lZCcsCisgICAgJyIi
LCBudWxsLCB7IH0nLAorICAgICciIiwgbnVsbCwgbnVsbCwgbnVsbCcsCisgICAgJyIiLCBudWxs
LCBudWxsLCB1bmRlZmluZWQnLAorICAgICciIiwgbnVsbCwgbnVsbCwgeyB9JywKK107CisKK3Zh
ciBleHBlY3RFeGNlcHRpb24gPSBbCisgICAgJycsCisgICAgJ3Rocm93T25Ub1N0cmluZ09iamVj
dCcsCisgICAgJyIiLCB0aHJvd09uR2V0TGVuZ3RoT2JqZWN0JywKKyAgICAnIiIsIHRocm93T25H
ZXRaZXJvT2JqZWN0JywKKyAgICAnIiIsIFsgdGhyb3dPblRvU3RyaW5nT2JqZWN0IF0nLAorICAg
ICciIiwgMCcsCisgICAgJyIiLCAiIicsCisgICAgJyIiLCBudWxsLCAwJywKKyAgICAnIiIsIG51
bGwsICIiJywKKyAgICAnIiIsIG51bGwsIG51bGwsIDAnLAorICAgICciIiwgbnVsbCwgbnVsbCwg
IiInLAorXTsKKworZnVuY3Rpb24gdHJ5RXhlY3V0ZVNxbCh0cmFuc2FjdGlvbiwgcGFyYW1ldGVy
TGlzdCkKK3sKKyAgICB0cnkgeworICAgICAgICBldmFsKCd0cmFuc2FjdGlvbi5leGVjdXRlU3Fs
KCcgKyBwYXJhbWV0ZXJMaXN0ICsgJyknKTsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfSBj
YXRjaCAoZXhjZXB0aW9uKSB7CisgICAgICAgIHJldHVybiBleGNlcHRpb247CisgICAgfQorfQor
CitmdW5jdGlvbiBydW5UcmFuc2FjdGlvblRlc3QodHJhbnNhY3Rpb24sIHBhcmFtZXRlckxpc3Qs
IGV4cGVjdEV4Y2VwdGlvbikKK3sKKyAgICB2YXIgZXhjZXB0aW9uID0gdHJ5RXhlY3V0ZVNxbCh0
cmFuc2FjdGlvbiwgcGFyYW1ldGVyTGlzdCk7CisgICAgaWYgKGV4cGVjdEV4Y2VwdGlvbikgewor
ICAgICAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRlU3Fs
KCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uIGFzIGV4cGVjdGVkLiIp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb2coIipGQUlMKi4gZXhlY3V0ZVNxbCgiICsg
cGFyYW1ldGVyTGlzdCArICIpIGRpZCBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgICAgIGxvZygiKkZBSUwqLiBl
eGVjdXRlU3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgdGhyZXcgYW4gZXhjZXB0aW9uOiAiICsg
ZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9nKCJQQVNTLiBleGVjdXRl
U3FsKCIgKyBwYXJhbWV0ZXJMaXN0ICsgIikgZGlkIG5vdCB0aHJvdyBhbiBleGNlcHRpb24iKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uVGVzdHModHJhbnNhY3Rpb24pCit7
CisgICAgZm9yIChpIGluIGV4cGVjdE5vRXhjZXB0aW9uKQorICAgICAgICBydW5UcmFuc2FjdGlv
blRlc3QodHJhbnNhY3Rpb24sIGV4cGVjdE5vRXhjZXB0aW9uW2ldLCBmYWxzZSk7CisgICAgZm9y
IChpIGluIGV4cGVjdEV4Y2VwdGlvbikKKyAgICAgICAgcnVuVHJhbnNhY3Rpb25UZXN0KHRyYW5z
YWN0aW9uLCBleHBlY3RFeGNlcHRpb25baV0sIHRydWUpOworCisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKworICAgIHZhciBkYiA9IG9wZW5EYXRh
YmFzZSgiRXhlY3V0ZVNRTEFyZ3NUZXN0IiArIERCX1RFU1RfU1VGRklYLCAiMS4wIiwgIlRlc3Qg
b2YgaGFuZGxpbmcgb2YgdGhlIGFyZ3VtZW50cyB0byBTUUxUcmFuc2FjdGlvbi5leGVjdXRlU3Fs
IiwgMSk7CisgICAgZGIudHJhbnNhY3Rpb24ocnVuVHJhbnNhY3Rpb25UZXN0cyk7Cit9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>