<?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>28918</bug_id>
          
          <creation_ts>2009-09-02 13:17:33 -0700</creation_ts>
          <short_desc>Add support for Database.readTransaction()</short_desc>
          <delta_ts>2009-09-09 14:35:37 -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>New Bugs</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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>144280</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-02 13:17:33 -0700</bug_when>
    <thetext>The spec says that the Database class should have a readTransaction() method. We should add bindings + other necessary support for this method to WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144637</commentid>
    <comment_count>1</comment_count>
      <attachid>39018</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-03 16:28:01 -0700</bug_when>
    <thetext>Created attachment 39018
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144639</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-03 16:37:17 -0700</bug_when>
    <thetext>Haven&apos;t looked thru the whole patch yet... but in the v8 custom bindings, CALLBACK_FUNC_DECL(DatabaseTransaction) has some early returns that are not v8::Undefined(). Looks like the new code eats those return values and always returns undefined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144655</commentid>
    <comment_count>3</comment_count>
      <attachid>39023</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-03 17:49:25 -0700</bug_when>
    <thetext>Created attachment 39023
patch

Same patch with minor fixes to V8 bindings (forgot to port them from my Chromium client).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144688</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-03 22:21:33 -0700</bug_when>
    <thetext>This looks pretty nice. So the method is available, and a flag is plumbed throughout, and the authorizer enforces readonly&apos;ness. I take it you&apos;re saving allowing concurrent r/o transactions on the same db thread for a later patch?

http://www.sqlite.org/lang_reindex.html
It looks like REINDEX is a write operation, but I think its being allowed for readOnly transactions... is this what you intended and why?

What does the HTML5 draft say about the behavior of a readOnly transaction when a write operation is attempted? As coded, looks like the statement fails, but the transaction is left open and other statements can be executed in that transaction. Does that match the spec&apos;d behavior? I can imagine another behavior, the transaction fails and is closed when a write operation is attempted... just checking.

7979     void transaction(PassRefPtr&lt;SQLTransactionCallback&gt; callback, PassRefPtr&lt;SQLTransactionErrorCallback&gt; errorCallback,
80                       PassRefPtr&lt;VoidCallback&gt; successCallback);
 80                      PassRefPtr&lt;VoidCallback&gt; successCallback, bool readOnly = false);

Are there any callsites that don&apos;t explicitly pass a value for the readOnly parameter? Consider removing the default param value.

BTW... have you seen the SAVEPOINT statement in newer versions of SQLite? Looks like support in sqlite3  for transaction nesting. Wondering if that capability should be reflected in the HTML5 api in some way?
http://www.sqlite.org/lang_savepoint.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144886</commentid>
    <comment_count>5</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-04 12:06:25 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; This looks pretty nice. So the method is available, and a flag is plumbed
&gt; throughout, and the authorizer enforces readonly&apos;ness. I take it you&apos;re saving
&gt; allowing concurrent r/o transactions on the same db thread for a later patch?

Yes. The goal is to be able to allow multiple read transactions at the same time.

&gt; http://www.sqlite.org/lang_reindex.html
&gt; It looks like REINDEX is a write operation, but I think its being allowed for
&gt; readOnly transactions... is this what you intended and why?

I wasn&apos;t sure what to do with REINDEX. On one hand, it seems to just recreate some existing indexes (and it doesn&apos;t seem to trigger any other &quot;write&quot; operations like DELETE, or UPDATE; at least not for the SQL statement I have in the test). On the other hand, it does look like a write operation.

I changed the authorizer to not allow REINDEX in read-only transactions.

&gt; What does the HTML5 draft say about the behavior of a readOnly transaction when
&gt; a write operation is attempted? As coded, looks like the statement fails, but
&gt; the transaction is left open and other statements can be executed in that
&gt; transaction. Does that match the spec&apos;d behavior? I can imagine another
&gt; behavior, the transaction fails and is closed when a write operation is
&gt; attempted... just checking.

Here&apos;s what the spec says about statements that fail:

1. If the statement had an associated error callback, then queue a task to invoke that error callback with the SQLTransaction object and a newly constructed SQLError object that represents the error that caused these substeps to be run as the two arguments, respectively, and wait for the task to be run.
2. If the error callback returns false, then move on to the next statement, if any, or onto the next overall step otherwise.
3. Otherwise, the error callback did not return false, or there was no error callback. Jump to the last step in the overall steps.

So it seems to me like the read transactions in the test should&apos;ve failed after the first statement with an error. I&apos;m not sure why it didn&apos;t happen (at the first look the code seems to do what the spec says); I&apos;m looking into it.

&gt; 7979     void transaction(PassRefPtr&lt;SQLTransactionCallback&gt; callback,
&gt; PassRefPtr&lt;SQLTransactionErrorCallback&gt; errorCallback,
&gt; 80                       PassRefPtr&lt;VoidCallback&gt; successCallback);
&gt;  80                      PassRefPtr&lt;VoidCallback&gt; successCallback, bool
&gt; readOnly = false);
&gt; 
&gt; Are there any callsites that don&apos;t explicitly pass a value for the readOnly
&gt; parameter? Consider removing the default param value.

done.

&gt; BTW... have you seen the SAVEPOINT statement in newer versions of SQLite? Looksf that capability
&gt; like support in sqlite3  for transaction nesting. Wondering i
&gt; should be reflected in the HTML5 api in some way?
&gt; http://www.sqlite.org/lang_savepoint.html

Michael and I talked a bit about this, and I think the conclusions were:
1. It&apos;s not in the SQLite version we currently use.
2. Doesn&apos;t seem to add anything new (could be replaced by multiple transactions?), but might be useful to app developers anyway.
3. Should probably talk to app developers first before proposing to add it to the spec.
4. Might be better to wait until all other issues are resolved and we have a more &quot;final&quot; version of the spec that&apos;s approved by everybody.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144895</commentid>
    <comment_count>6</comment_count>
      <attachid>39085</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-04 12:26:05 -0700</bug_when>
    <thetext>Created attachment 39085
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>144951</commentid>
    <comment_count>7</comment_count>
      <attachid>39098</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-04 16:41:54 -0700</bug_when>
    <thetext>Created attachment 39098
patch

Updated the test to not fail transactions when a statement fails (used to have the same behavior before because of a bug in JSC and V8 that will be fixed in another bug).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145058</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-09-06 12:24:43 -0700</bug_when>
    <thetext>With this change we&apos;re changing the semantics of what &apos;readOnly&apos; currently means to the authorizer. 

The existing behavior is to support safari&apos;s private browsing mode and generally (but no exactly) constrains any side effects of a statement to not be visible outside of the connection to the database. Accordingly, creating and deleting &apos;temp&apos; objects only visible on that connection are allowable for private browsing. The new readonly transaction semantics constrain any side effects to not be visible outside of a transaction, which also excludes creating and deleting &apos;temp&apos; objects. There are also differences in how VIEWS are treated, for private browsing purposes these can be created and deleted, but in readonly transaction semantics these schema changes can&apos;t be made. 

Unless we can reconcile the two meanings of &apos;readOnly&apos;, we may need two separate flags.


91 static JSValue DatabaseTransactionHelper(... RefPtr&lt;Database&gt; database, bool readOnly)

I think Database* would be better.

104     executeStatement(tx, &quot;DROP TABLE TestTempTable;&quot;, &quot;SQLITE_DROP_TEMP_TABLE&quot;);
105     executeStatement(tx, &quot;DROP TRIGGER TestTempTrigger;&quot;, &quot;SQLITE_DROP_TEMP_TRIGGER&quot;);
106     executeStatement(tx, &quot;DROP VIEW TestTempView;&quot;, &quot;SQLITE_DROP_TEMP_VIEW&quot;);

These lines look like they intend to operate on TEMP objects, but I don&apos;t think they actually do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145523</commentid>
    <comment_count>9</comment_count>
      <attachid>39209</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-08 13:51:06 -0700</bug_when>
    <thetext>Created attachment 39209
patch

Same patch, with resolved ChangeLog files.

(In reply to comment #8)
&gt; With this change we&apos;re changing the semantics of what &apos;readOnly&apos; currently
&gt; means to the authorizer. 
&gt; 
&gt; The existing behavior is to support safari&apos;s private browsing mode and
&gt; generally (but no exactly) constrains any side effects of a statement to not be
&gt; visible outside of the connection to the database. Accordingly, creating and
&gt; deleting &apos;temp&apos; objects only visible on that connection are allowable for
&gt; private browsing. The new readonly transaction semantics constrain any side
&gt; effects to not be visible outside of a transaction, which also excludes
&gt; creating and deleting &apos;temp&apos; objects. There are also differences in how VIEWS
&gt; are treated, for private browsing purposes these can be created and deleted,
&gt; but in readonly transaction semantics these schema changes can&apos;t be made. 
&gt; 
&gt; Unless we can reconcile the two meanings of &apos;readOnly&apos;, we may need two
&gt; separate flags.

I talked to Brady about this. The only differences were the REINDEX and (CREATE|DROP) [TEMP] VIEW commands. According to Brady, REINDEX was an omission and should&apos;ve been fixed, and since VIEWs result in new temp files, they have no place in private browsing. Basically, as the flag (readOnlyMode) in the code suggests, private browsing should really be a read-only mode. So I believe the subsets of allowed operations in readTransaction() and private browsing are identical.

&gt; 91 static JSValue DatabaseTransactionHelper(... RefPtr&lt;Database&gt; database, bool
&gt; readOnly)
&gt; 
&gt; I think Database* would be better.

done.

&gt; 104     executeStatement(tx, &quot;DROP TABLE TestTempTable;&quot;,
&gt; &quot;SQLITE_DROP_TEMP_TABLE&quot;);
&gt; 105     executeStatement(tx, &quot;DROP TRIGGER TestTempTrigger;&quot;,
&gt; &quot;SQLITE_DROP_TEMP_TRIGGER&quot;);
&gt; 106     executeStatement(tx, &quot;DROP VIEW TestTempView;&quot;,
&gt; &quot;SQLITE_DROP_TEMP_VIEW&quot;);
&gt; 
&gt; These lines look like they intend to operate on TEMP objects, but I don&apos;t think
&gt; they actually do.

They do, these entities are created using &apos;CREATE TEMP &lt;something&gt;&apos;. The syntax for dropping TEMP tables/triggers/views is the same as the syntax for dropping permanent entities.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145563</commentid>
    <comment_count>10</comment_count>
      <attachid>39219</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-08 15:11:29 -0700</bug_when>
    <thetext>Created attachment 39219
patch

Making it more obvious that SQLITE_CREATE_TEMP_* are not allowed in read-only transactions and private browsing mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145582</commentid>
    <comment_count>11</comment_count>
      <attachid>39219</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-08 16:22:22 -0700</bug_when>
    <thetext>Comment on attachment 39219
patch

These are all style nits. Overall, looks great!

&gt; +        * bindings/js/JSDatabaseCustom.cpp:
&gt; +        (WebCore::DatabaseTransactionHelper):
&gt; +        (WebCore::JSDatabase::transaction):
&gt; +        (WebCore::JSDatabase::readTransaction):
&gt; +        * bindings/v8/custom/V8CustomBinding.h:
&gt; +        * bindings/v8/custom/V8DatabaseCustom.cpp:
&gt; +        (WebCore::DatabaseTransactionHelper):
&gt; +        (WebCore::DatabaseReadTransaction):
&gt; +        * storage/Database.cpp:
&gt; +        (WebCore::Database::changeVersion):
&gt; +        (WebCore::Database::transaction):
&gt; +        * storage/Database.h:
&gt; +        * storage/Database.idl:
&gt; +        * storage/DatabaseAuthorizer.cpp:
&gt; +        (WebCore::DatabaseAuthorizer::createView):
&gt; +        (WebCore::DatabaseAuthorizer::createTempView):
&gt; +        (WebCore::DatabaseAuthorizer::dropView):
&gt; +        (WebCore::DatabaseAuthorizer::dropTempView):
&gt; +        * storage/DatabaseAuthorizer.h:
&gt; +        * storage/SQLTransaction.cpp:
&gt; +        (WebCore::SQLTransaction::create):
&gt; +        (WebCore::SQLTransaction::SQLTransaction):
&gt; +        (WebCore::SQLTransaction::executeSQL):
&gt; +        (WebCore::SQLTransaction::acquireLock):
&gt; +        * storage/SQLTransaction.h:
&gt; +        * storage/SQLTransactionCoordinator.cpp:
&gt; +        (WebCore::SQLTransactionCoordinator::acquireLock):
&gt; +        * storage/SQLTransactionCoordinator.h:

Would be good to have short descriptions in the ChangeLog.

&gt; -JSValue JSDatabase::transaction(ExecState* exec, const ArgList&amp; args)
&gt; +static JSValue DatabaseTransactionHelper(ExecState* exec, const ArgList&amp; args, Database* database, bool readOnly)

camelCase, and badName :)

How about createTransaction?

&gt;  
&gt; -CALLBACK_FUNC_DECL(DatabaseTransaction)
&gt; +static v8::Handle&lt;v8::Value&gt; DatabaseTransactionHelper(const v8::Arguments&amp; args, bool readOnly)

Ditto.

&gt; +    m_transactionQueue.append(SQLTransaction::create(this, callback, errorCallback, successCallback, ChangeVersionWrapper::create(oldVersion, newVersion), false));

It&apos;s not obvious what &quot;false&quot; is for here. How about we just make readOnly a default param and omit the &quot;false&quot; here?

&gt; +    static PassRefPtr&lt;SQLTransaction&gt; create(Database*, PassRefPtr&lt;SQLTransactionCallback&gt;, PassRefPtr&lt;SQLTransactionErrorCallback&gt;,
&gt; +                                             PassRefPtr&lt;VoidCallback&gt;, PassRefPtr&lt;SQLTransactionWrapper&gt;, bool readOnly);

bool readOnly = false

&gt; -void SQLTransactionCoordinator::acquireLock(SQLTransaction* transaction)
&gt; +void SQLTransactionCoordinator::acquireLock(SQLTransaction* transaction, bool)

use UNUSED_PARAM here, bool by itself is lonely.

&gt; +function runTest() {

brace on new line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145594</commentid>
    <comment_count>12</comment_count>
      <attachid>39231</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-08 17:12:35 -0700</bug_when>
    <thetext>Created attachment 39231
patch

Addressed Dimitri&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145636</commentid>
    <comment_count>13</comment_count>
      <attachid>39231</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-08 20:09:50 -0700</bug_when>
    <thetext>Comment on attachment 39231
patch

r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145638</commentid>
    <comment_count>14</comment_count>
      <attachid>39231</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-08 20:19:31 -0700</bug_when>
    <thetext>Comment on attachment 39231
patch

Rejecting patch 39231 from commit-queue.

This patch will require manual commit. WebKitTools/Scripts/build-webkit failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145792</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-09 09:35:05 -0700</bug_when>
    <thetext>It appears this does not build on the Mac in release mode.  Sadly build logs are not yet available from the commit-bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145820</commentid>
    <comment_count>16</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-09 10:26:48 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; It appears this does not build on the Mac in release mode.  Sadly build logs
&gt; are not yet available from the commit-bot.

I&apos;ll upload another version once I fix it for Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145871</commentid>
    <comment_count>17</comment_count>
      <attachid>39285</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-09-09 11:40:39 -0700</bug_when>
    <thetext>Created attachment 39285
patch

Mac complained that a few named parameters were not used. Should be fixed now, I managed to successfully build WebKit on Mac in release mode with this patch patched in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145875</commentid>
    <comment_count>18</comment_count>
      <attachid>39285</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2009-09-09 11:42:30 -0700</bug_when>
    <thetext>Comment on attachment 39285
patch

ookay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145924</commentid>
    <comment_count>19</comment_count>
      <attachid>39285</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-09 14:16:37 -0700</bug_when>
    <thetext>Comment on attachment 39285
patch

Rejecting patch 39285 from commit-queue.

This patch will require manual commit. [&apos;WebKitTools/Scripts/run-webkit-tests&apos;, &apos;--no-launch-safari&apos;, &apos;--quiet&apos;, &apos;--exit-after-n-failures=1&apos;] failed with exit code 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145925</commentid>
    <comment_count>20</comment_count>
      <attachid>39285</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-09 14:18:00 -0700</bug_when>
    <thetext>Comment on attachment 39285
patch

Have I mentioned I&apos;m starting to hate our media support? ;)
compositing/self-painting-layers.html -&gt; crashed
You&apos;ve been bitten by bug 28845.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145927</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-09-09 14:18:39 -0700</bug_when>
    <thetext>I jest about the media support hatred... but I do really look forward to having stable tests again. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145940</commentid>
    <comment_count>22</comment_count>
      <attachid>39285</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-09 14:35:31 -0700</bug_when>
    <thetext>Comment on attachment 39285
patch

Clearing flags on attachment: 39285

Committed r48227: &lt;http://trac.webkit.org/changeset/48227&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>145941</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-09-09 14:35:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39018</attachid>
            <date>2009-09-03 16:28:01 -0700</date>
            <delta_ts>2009-09-03 17:49:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27542</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODAzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgYmluZGluZ3Mvc3VwcG9ydCBmb3IgdGhlIERhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oKQorICAgICAgICBtZXRob2QuCisgICAgICAgIDIuIENoYW5naW5nIHRoZSBhdXRob3Jp
emVyIGNvZGUgdG8gYWxsb3cgKENSRUFURXxEUk9QKSBbVEVNUF0gVklFVworICAgICAgICBzdGF0
ZW1lbnRzIGluIHJlYWQtd3JpdGUgbW9kZSBvbmx5LgorICAgICAgICAzLiBBZGRpbmcgYSBEYXRh
YmFzZUF1dGhvcml6ZXIgdGVzdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAgICAgICBUZXN0OiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
YXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVJlYWRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hh
bmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0w
MyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRh
YmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1Zh
bHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgRGF0YWJhc2VUcmFuc2Fj
dGlvbkhlbHBlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFJlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2UsIGJvb2wgcmVhZE9ubHkpCiB7CiAgICAgSlNPYmplY3QqIG9iamVj
dDsKICAgICAKQEAgLTEyMiwxMCArMTIyLDE5IEBAIEpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24oRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBtX2ltcGwtPnRyYW5z
YWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nl
c3NDYWxsYmFjay5yZWxlYXNlKCkpOwotCisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxi
YWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5y
ZWxlYXNlKCksIHJlYWRPbmx5KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KKworSlNW
YWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywg
YXJncywgbV9pbXBsLCBmYWxzZSk7Cit9CisgICAgCitKU1ZhbHVlIEpTRGF0YWJhc2U6OnJlYWRU
cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywgYXJncywgbV9pbXBsLCB0cnVl
KTsKK30KICAgICAKIH0KICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNDgwMzEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc3LDYgKzQ3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlQ2hhbmdlVmVyc2lvbik7CiAgICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soRGF0YWJhc2VUcmFuc2FjdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soRGF0YWJhc2VSZWFkVHJhbnNhY3Rpb24pOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNR
TFRyYW5zYWN0aW9uRXhlY3V0ZVNxbCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soU1FMUmVz
dWx0U2V0Um93TGlzdEl0ZW0pOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTAgKzQ4LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlQ2hhbmdlVmVyc2lvbgog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChEYXRh
YmFzZVRyYW5zYWN0aW9uKQorc3RhdGljIHZvaWQgRGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBlcihj
b25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHJlYWRPbmx5KQogewotICAgIElOQ19TVEFU
UygiRE9NLkRhdGFiYXNlLnRyYW5zYWN0aW9uKCkiKTsKLQogICAgIGlmICghYXJncy5MZW5ndGgo
KSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRyYW5zYWN0aW9uIGNhbGxiYWNrIGlzIHJl
cXVpcmVkLiIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKIApAQCAtODIsMTIgKzgwLDI1IEBAIENB
TExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVRyYW5zYWN0aW9uKQogICAgICAgICBzdWNjZXNzQ2Fs
bGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFyZ3NbMl0sIGZyYW1lKTsKICAg
ICB9CiAKLSAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJv
ckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSk7CisgICAgZGF0
YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxl
YXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNlKCksIHJlYWRPbmx5KTsKK30KKworQ0FMTEJB
Q0tfRlVOQ19ERUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCit7CisgICAgSU5DX1NUQVRTKCJET00u
RGF0YWJhc2UudHJhbnNhY3Rpb24oKSIpOworCisgICAgRGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cihhcmdzLCBmYWxzZSk7CisgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKK30KIAorQ0FMTEJB
Q0tfRlVOQ19ERUNMKERhdGFiYXNlUmVhZFRyYW5zYWN0aW9uKQoreworICAgIElOQ19TVEFUUygi
RE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigpIik7CisKKyAgICBEYXRhYmFzZVRyYW5zYWN0
aW9uSGVscGVyKGFyZ3MsIHRydWUpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTQsMTYgKzUxNCwxNiBAQCB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQogewotICAgIG1f
dHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBl
cjo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pKSk7CisgICAgbV90cmFuc2FjdGlvblF1
ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIENoYW5nZVZlcnNpb25XcmFwcGVyOjpjcmVhdGUob2xk
VmVyc2lvbiwgbmV3VmVyc2lvbiksIGZhbHNlKSk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwogICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJv
Z3Jlc3MpCiAgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSkKIHsKLSAgICBtX3RyYW5z
YWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCkpOworICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCByZWFkT25seSkpOwogICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKICAgICBpZiAoIW1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzKQogICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuaAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5ID0gZmFsc2UpOwogCiAv
LyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAogICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCShyZXZpc2lvbiA0ODAz
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHZlcnNpb247CiAgICAgICAgIFtDdXN0b21dIHZvaWQgY2hhbmdlVmVyc2lvbihp
biBET01TdHJpbmcgb2xkVmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKICAgICAg
ICAgW0N1c3RvbV0gdm9pZCB0cmFuc2FjdGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNh
bGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4g
Vm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVh
ZFRyYW5zYWN0aW9uKGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrKTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VB
dXRob3JpemVyLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywyNiBAQCBpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRyaWdnZXIoCiAgICAgcmV0dXJuIGRlbnlCYXNl
ZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNy
ZWF0ZVZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9u
bHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9
CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYg
dmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVk
ID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjpkcm9wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKQoreworICAgIHJldHVybiAobV9y
ZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93
KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KGNvbnN0IFN0cmlu
ZyYgdmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFi
bGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCiBpbnQgRGF0YWJhc2VBdXRo
b3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlQXV0aG9yaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAg
cHVibGljOgogICAgIGludCBkcm9wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGRyb3BUZW1wVHJpZ2dlcihjb25zdCBT
dHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAKLSAgICBpbnQg
Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFs
bG93OyB9Ci0gICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSov
KSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5n
JiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQotICAgIGludCBkcm9wVGVt
cFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsg
fQorICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpOworICAgIGludCBj
cmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAgICBpbnQgZHJvcFZpZXco
Y29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJp
bmcmIHZpZXdOYW1lKTsKIAogICAgIGludCBjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7CiAgICAgaW50IGRyb3BWVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTMgKzYwLDEz
IEBAIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXMKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FMVHJhbnNhY3Rpb246OmNy
ZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2Fs
bGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCByZWFkT25seSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRiLCBjYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1
Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsKIH0KIAogU1FMVHJhbnNhY3Rpb246
OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bldyYXBwZXI+IHdyYXBwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCiAgICAg
OiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAgICAgLCBtX2V4ZWN1
dGVTcWxBbGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKQEAgLTc3LDYgKzc3LDcg
QEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKgogICAgICwgbV9zaG91
bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX21vZGlmaWVkRGF0YWJhc2Uo
ZmFsc2UpCiAgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKKyAgICAsIG1fcmVhZE9ubHkocmVh
ZE9ubHkpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOwogfQpAQCAtOTIsMTAgKzkzLDEyIEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gZmFsc2U7Ci0gICAgUGFnZSogcGFn
ZSA9IG1fZGF0YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UgfHwgcGFn
ZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZWFkT25s
eU1vZGUgPSB0cnVlOworICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25seTsKKyAgICBp
ZiAoIXJlYWRPbmx5TW9kZSkgeworICAgICAgICBQYWdlKiBwYWdlID0gbV9kYXRhYmFzZS0+ZG9j
dW1lbnQoKS0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmVhZE9ubHlNb2RlID0gdHJ1
ZTsKKyAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0
ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNr
RXJyb3IsIHJlYWRPbmx5TW9kZSk7CiAKQEAgLTIwNCw3ICsyMDcsNyBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmFjcXVp
cmVMb2NrKCkKIHsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmFj
cXVpcmVMb2NrKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+YWNxdWlyZUxvY2sodGhpcywgbV9yZWFkT25seSk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmxvY2tBY3F1aXJlZCgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNp
b24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb24+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFiYXNlKiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+
IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKIAogICAgIH5T
UUxUcmFuc2FjdGlvbigpOwogCkBAIC04MCw3ICs4MSw4IEBAIHB1YmxpYzoKICAgICBEYXRhYmFz
ZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+KTsKKyAg
ICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKICAgICB0eXBlZGVmIHZvaWQgKFNRTFRy
YW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOwogICAgIFRyYW5zYWN0aW9uU3Rl
cE1ldGhvZCBtX25leHRTdGVwOwpAQCAtMTIzLDYgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRh
YmFzZTsKICAgICBib29sIG1fbG9ja0FjcXVpcmVkOworICAgIGJvb2wgbV9yZWFkT25seTsKIAog
ICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVu
dD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVAogICAgIHJl
dHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
K3ZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBib29sKQogewogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXRE
YXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgYWNxdWlyZUxvY2so
U1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlv
biosIGJvb2wgcmVhZE9ubHkpOwogICAgICAgICB2b2lkIHJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0
aW9uKik7CiAgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKICAgICBwcml2YXRlOgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNDgwMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxMiBAQAorMjAwOS0wOS0wMyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE5lZWQgYSBzaG9ydCBkZXNjcmlwdGlvbiBhbmQgYnVnIFVSTCAoT09QUyEpCisKKyAgICAg
ICAgKiBzdG9yYWdlL3N1Y2Nlc3MtY2FsbGJhY2suaHRtbDoKKyAgICAgICAgKiBzdG9yYWdlL3Rl
c3QtYXV0aG9yaXplci5odG1sOiBBZGRlZCB3aXRoIHByb3BlcnR5IHN2bjpleGVjdXRhYmxlLgor
CiAyMDA5LTA5LTAzICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGF2ZSBMZXZpbi4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uvc3Vj
Y2Vzcy1jYWxsYmFjay5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2Uvc3Vj
Y2Vzcy1jYWxsYmFjay5odG1sCShyZXZpc2lvbiA0ODAzMSkKKysrIExheW91dFRlc3RzL3N0b3Jh
Z2Uvc3VjY2Vzcy1jYWxsYmFjay5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBA
IGZ1bmN0aW9uIHN1Y2Nlc3NGdW5jdGlvbihtZXNzYWdlKQogZnVuY3Rpb24gcnVuVGVzdCgpCiB7
CiAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5jbGVhckFsbERhdGFiYXNlcygpOwogICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CiAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsKICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0
LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Rv
cmFnZS90ZXN0LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY4IEBACitUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCitTUUxJVEVf
Q1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1
Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6
IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1VQREFU
RSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQgZmFpbGVkOiBu
b3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9UUkFOU0FDVElP
TiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FUVEFDSCBzdGF0ZW1l
bnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVk
OiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NR
TElURV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJP
UF9JTkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9EUk9QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1ZJRVcgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitXcml0ZSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRl
bWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBh
dXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6
IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVk
OiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6
IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBh
dXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVf
VEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklF
VyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVf
UkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FM
SVRFX0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1VQREFU
RSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1BSQUdNQSBzdGF0ZW1l
bnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBm
YWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxl
ZDogbm8gc3VjaCB0YWJsZTogVGVzdFRhYmxlCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50
IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDog
bm90IGF1dGhvcml6ZWQKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhv
cml6ZWQKK1NRTElURV9SRUlOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQU5BTFla
RSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfSU5ERVggc3Rh
dGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBfVEFCTEUgc3Rh
dGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBz
dGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEVNUF9WSUVXIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UUklHR0VSIHN0YXRl
bWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9WSUVXIHN0YXRlbWVudCBm
YWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVk
OiBub3QgYXV0aG9yaXplZAorUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgorCkluZGV4OiBM
YXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyht
ZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJy
PiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKworZnVuY3Rpb24gbG9nQW5kVGVybWluYXRlVGVzdChtZXNzYWdlLCBlcnJvcikK
K3sKKyAgICBsb2cobWVzc2FnZSArICI6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICB0ZXJtaW5h
dGVUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVEFCTEUg
SUYgRVhJU1RTIFRlc3Q7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9QIElOREVY
IElGIEVYSVNUUyBUZXN0SW5kZXg7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9Q
IFZJRVcgSUYgRVhJU1RTIFRlc3RWaWV3OyIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgi
RFJPUCBUUklHR0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlcjsiKTsKKyAgICAgICAgfSwgZnVuY3Rp
b24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiQ2xlYW51cCBmYWlsZWQiLCBlcnJvcik7
IH0pOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2soc3RhdGVtZW50VHlw
ZSkKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IHN1Y2NlZWRlZC4iKTsK
K30KKworZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjayhzdGF0ZW1lbnRUeXBlLCBlcnJv
cikKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IGZhaWxlZDogIiArIGVy
cm9yLm1lc3NhZ2UpOworfQorCitmdW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1l
bnQsIG9wZXJhdGlvbikKK3sKKyAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCwgW10sCisgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNr
KG9wZXJhdGlvbik7IH0sCisgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsg
c3RhdGVtZW50RXJyb3JDYWxsYmFjayhvcGVyYXRpb24sIGVycm9yKTsgfSk7Cit9CisKK2Z1bmN0
aW9uIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkNSRUFURSBUQUJMRSBUZXN0IChGb28gaW50KTsiLCAiU1FMSVRFX0NSRUFURV9UQUJMRSIpOwor
fQorCitmdW5jdGlvbiBjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBJTkRFWCBUZXN0SW5kZXggT04gVGVzdCAoRm9vKTsiLCAi
U1FMSVRFX0NSRUFURV9JTkRFWCIpOworCisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGZvbGxvd2lu
ZyBxdWVyeSBzaG91bGQgdHJpZ2dlciBhIFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBvcGVyYXRp
b24KKyAgICAvLyAoYWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy90ZW1wZmlsZXMu
aHRtbCksIGl0IGRvZXNuJ3QsIGFuZCBJJ20gbm90IGF3YXJlCisgICAgLy8gb2YgYW55IG90aGVy
IHdheSB0byB0cmlnZ2VyIHRoaXMgb3BlcmF0aW9uLiBTbyB3ZSdsbCBza2lwIGl0IGZvciBub3cu
CisgICAgLy9leGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUICogRlJPTSBUZXN0IFdIRVJFIEZv
byBJTiAoMSwgMiwgMyk7IiwgIlNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCIpOworCisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBURU1QIFRBQkxFIFRlc3RUZW1wVGFibGUgKEZvbyBp
bnQpOyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiQ1JFQVRFIFRFTVAgVFJJR0dFUiBUZXN0VGVtcFRyaWdnZXIgSU5TRVJUIE9OIFRlc3Qg
QkVHSU4gU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsgRU5EOyIsICJTUUxJVEVfQ1JFQVRFX1RF
TVBfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBWSUVX
IFRlc3RUZW1wVmlldyBBUyBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsICJTUUxJVEVfQ1JF
QVRFX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVFJJR0dF
UiBUZXN0VHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBU
ZXN0OyBFTkQ7IiwgIlNRTElURV9DUkVBVEVfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQodHgsICJDUkVBVEUgVklFVyBUZXN0VmlldyBBUyBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0
OyIsICJTUUxJVEVfQ1JFQVRFX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JF
QVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZpcnR1YWxUYWJsZSBVU0lORyBNaXNzaW5nTW9kdWxlOyIs
ICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIpOworfQorCitmdW5jdGlvbiBvdGhlclN0YXRlbWVudHND
YWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCop
IEZST00gVGVzdDsiLCAiU1FMSVRFX1JFQUQiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAi
U0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FMSVRFX1NFTEVDVCIpOworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsICJERUxFVEUgRlJPTSBUZXN0OyIsICJTUUxJVEVfREVMRVRFIik7Cisg
ICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxKTsiLCAi
U1FMSVRFX0lOU0VSVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJVUERBVEUgVGVzdCBT
RVQgRm9vID0gMiBXSEVSRSBGb28gPSAxOyIsICJTUUxJVEVfVVBEQVRFIik7CisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIlBSQUdNQSBjYWNoZV9zaXplOyIsICJTUUxJVEVfUFJBR01BIik7CisK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIgVEFCTEUgVGVzdCBSRU5BTUUgVE8gVGVz
dFRhYmxlOyIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKyAgICAvLyBSZW5hbWUgdGhlIHRhYmxl
IGJhY2sgdG8gaXRzIG9yaWdpbmFsIG5hbWUKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxU
RVIgVEFCTEUgVGVzdFRhYmxlIFJFTkFNRSBUbyBUZXN0OyIsICJTUUxJVEVfQUxURVJfVEFCTEUi
KTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJCRUdJTiBUUkFOU0FDVElPTjsiLCAiU1FM
SVRFX1RSQU5TQUNUSU9OIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFUVEFDSCBtYWlu
IEFTIFRlc3RNYWluOyIsICJTUUxJVEVfQVRUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkRFVEFDSCBUZXN0TWFpbjsiLCAiU1FMSVRFX0RFVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJSRUlOREVYOyIsICJTUUxJVEVfUkVJTkRFWCIpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJBTkFMWVpFOyIsICJTUUxJVEVfQU5BTFlaRSIpOworCisgICAgLy8gU1FMSVRF
X0ZVTkNUSU9OOiBhbGxvd2VkIHdyaXRlIG1vZGUKKyAgICAvLyBUaGVyZSBpcyBubyBTUUwvSmF2
YXNjcmlwdCBBUEkgdG8gYWRkIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgdG8gU1FMaXRlLAorICAg
IC8vIHNvIHdlIGNhbm5vdCB0ZXN0IHRoaXMgb3BlcmF0aW9uCit9CisKK2Z1bmN0aW9uIGRyb3BT
dGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1Ag
SU5ERVggVGVzdEluZGV4OyIsICJTUUxJVEVfRFJPUF9JTkRFWCIpOworCisgICAgLy8gU1FMSVRF
X0RST1BfVEVNUF9JTkRFWDogYWxsb3dlZCBpbiB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUg
aG93IHRvIHRlc3QgdGhpczogdGVtcCBpbmRleGVzIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQg
d2hlbgorICAgIC8vIHRoZSBkYXRhYmFzZSBpcyBjbG9zZWQsIGJ1dCBIVE1MNSBkb2Vzbid0IHNw
ZWNpZnkgYSBjbG9zZURhdGFiYXNlKCkgY2FsbC4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJEUk9QIFRBQkxFIFRlc3RUZW1wVGFibGU7IiwgIlNRTElURV9EUk9QX1RFTVBfVEFCTEUiKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlcjsi
LCAiU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkRST1AgVklFVyBUZXN0VGVtcFZpZXc7IiwgIlNRTElURV9EUk9QX1RFTVBfVklFVyIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRSSUdHRVIgVGVzdFRyaWdnZXI7IiwgIlNRTElU
RV9EUk9QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRl
c3RWaWV3OyIsICJTUUxJVEVfRFJPUF9WSUVXIik7CisKKyAgICAvLyBTUUxJVEVfRFJPUF9WVEFC
TEU6IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRo
aXM6IHdlIGNhbm5vdCBjcmVhdGUgYSB2aXJ0dWFsIHRhYmxlIGJlY2F1c2Ugd2UgZG8gbm90Cisg
ICAgLy8gaGF2ZSBTUUwvSmF2YXNjcmlwdCBBUElzIHRvIHJlZ2lzdGVyIGEgbW9kdWxlIHRoYXQg
aW1wbGVtZW50cyBhIHZpcnR1YWwgdGFibGUuCisgICAgLy8gVGhlcmVmb3JlLCB0cnlpbmcgdG8g
ZHJvcCBhIHZpcnR1YWwgdGFibGUgd2lsbCBhbHdheXMgZmFpbCAobm8gc3VjaCB0YWJsZSkKKyAg
ICAvLyBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIHRoZSBhdXRob3JpemVyLgorCisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkRST1AgVEFCTEUgVGVzdDsiLCAiU1FMSVRFX0RST1BfVEFCTEUiKTsK
K30KKworZnVuY3Rpb24gdGVzdFJlYWRXcml0ZU1vZGUoZGIpCit7CisgICAgZGIudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpOwor
ICAgICAgICAgICAgY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgICAgIG90
aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2Fs
bGJhY2sodHgpOworICAgICAgICB9LAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRU
ZXJtaW5hdGVUZXN0KCJXcml0ZSB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0sCisgICAg
ICAgIGZ1bmN0aW9uKCkgeyBsb2coIldyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4iKTsgfSk7
Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkT25seU1vZGUoZGIpCit7CisgICAgLy8gVGVzdCB0aGUg
J0NSRUFURSBUQUJMRScgb3BlcmF0aW9uOyBpdCBzaG91bGQgYmUgZGlzYWxsb3dlZAorICAgIGRi
LnJlYWRUcmFuc2FjdGlvbihjcmVhdGVUYWJsZUNhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihl
cnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFkICdDUkVBVEUgVEFCTEUnIHRyYW5zYWN0
aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisKKyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IGFsbCBv
dGhlciAnQ1JFQVRFJyBvcGVyYXRpb25zLCB3ZSBtdXN0IGNyZWF0ZSB0aGUgdGFibGUgZmlyc3QK
KyAgICBkYi50cmFuc2FjdGlvbihjcmVhdGVUYWJsZUNhbGxiYWNrLAorICAgICAgICBmdW5jdGlv
bihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJXcml0ZSAnQ1JFQVRFIFRBQkxFJyB0cmFu
c2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihjcmVh
dGVTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRl
cm1pbmF0ZVRlc3QoIlJlYWQgJ0NSRUFURScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9
KTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgdGhlICdEUk9QJyBhbmQgJ290aGVyJyBvcGVy
YXRpb25zLCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0ZSB0aGUgcmVzcGVjdGl2ZSBlbnRpdGllcwor
ICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjaywKKyAgICAgICAgZnVu
Y3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiV3JpdGUgJ0NSRUFURScgdHJhbnNh
Y3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24ob3RoZXJT
dGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1p
bmF0ZVRlc3QoIlJlYWQgJ290aGVyJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOwor
CisgICAgLy8gSGFjazogaW5zZXJ0IGFuIGVtcHR5IHdyaXRlIHRyYW5zYWN0aW9uIHRvIGd1YXJh
dGVlIHRoYXQgdGhlc2UgdHJhbnNhY3Rpb25zIGFyZSBleGVjdXRlZCBzZXF1ZW50aWFsbHkKKyAg
ICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeyB9KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rp
b24oZHJvcFN0YXRlbWVudHNDYWxsYmFjaywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9n
QW5kVGVybWluYXRlVGVzdCgiUmVhZCAnRFJPUCcgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3Ip
OyB9LAorICAgICAgICBmdW5jdGlvbigpIHsgbG9nKCJSZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVk
ZWQuIik7IHRlcm1pbmF0ZVRlc3QoKTsgfSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICB2YXIgZGIgPSBvcGVu
RGF0YWJhc2UoIkF1dGhvcml6ZXJUZXN0IiwgIjEuMCIsICJUZXN0cyB0aGUgZGF0YWJhc2UgYXV0
aG9yaXplci4iLCAzMjc2OCk7CisgICAgICAgIGNsZWFudXAoZGIpOworICAgICAgICB0ZXN0UmVh
ZFdyaXRlTW9kZShkYik7CisgICAgICAgIHRlc3RSZWFkT25seU1vZGUoZGIpOworICAgIH0gY2F0
Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+Cis8aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgp
OyI+CitUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuPGJyPgorPC9ib2R5
PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39023</attachid>
            <date>2009-09-03 17:49:25 -0700</date>
            <delta_ts>2009-09-04 12:26:05 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27618</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODAzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgYmluZGluZ3Mvc3VwcG9ydCBmb3IgdGhlIERhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oKQorICAgICAgICBtZXRob2QuCisgICAgICAgIDIuIENoYW5naW5nIHRoZSBhdXRob3Jp
emVyIGNvZGUgdG8gYWxsb3cgKENSRUFURXxEUk9QKSBbVEVNUF0gVklFVworICAgICAgICBzdGF0
ZW1lbnRzIGluIHJlYWQtd3JpdGUgbW9kZSBvbmx5LgorICAgICAgICAzLiBBZGRpbmcgYSBEYXRh
YmFzZUF1dGhvcml6ZXIgdGVzdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAgICAgICBUZXN0OiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
YXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVJlYWRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hh
bmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0w
MyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRh
YmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1Zh
bHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgRGF0YWJhc2VUcmFuc2Fj
dGlvbkhlbHBlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFJlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2UsIGJvb2wgcmVhZE9ubHkpCiB7CiAgICAgSlNPYmplY3QqIG9iamVj
dDsKICAgICAKQEAgLTEyMiwxMCArMTIyLDE5IEBAIEpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24oRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBtX2ltcGwtPnRyYW5z
YWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nl
c3NDYWxsYmFjay5yZWxlYXNlKCkpOwotCisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxi
YWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5y
ZWxlYXNlKCksIHJlYWRPbmx5KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KKworSlNW
YWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywg
YXJncywgbV9pbXBsLCBmYWxzZSk7Cit9CisgICAgCitKU1ZhbHVlIEpTRGF0YWJhc2U6OnJlYWRU
cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywgYXJncywgbV9pbXBsLCB0cnVl
KTsKK30KICAgICAKIH0KICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNDgwMzEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc3LDYgKzQ3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlQ2hhbmdlVmVyc2lvbik7CiAgICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soRGF0YWJhc2VUcmFuc2FjdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soRGF0YWJhc2VSZWFkVHJhbnNhY3Rpb24pOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNR
TFRyYW5zYWN0aW9uRXhlY3V0ZVNxbCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soU1FMUmVz
dWx0U2V0Um93TGlzdEl0ZW0pOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTAgKzQ4LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlQ2hhbmdlVmVyc2lvbgog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChEYXRh
YmFzZVRyYW5zYWN0aW9uKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBEYXRhYmFzZVRy
YW5zYWN0aW9uSGVscGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsIGJvb2wgcmVhZE9ubHkp
CiB7Ci0gICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2UudHJhbnNhY3Rpb24oKSIpOwotCiAgICAg
aWYgKCFhcmdzLkxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHJhbnNhY3Rp
b24gY2FsbGJhY2sgaXMgcmVxdWlyZWQuIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwogCkBAIC04
MiwxMiArODAsMjIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCiAg
ICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJn
c1syXSwgZnJhbWUpOwogICAgIH0KIAotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFj
ay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVs
ZWFzZSgpKTsKLQorICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCks
IGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCByZWFk
T25seSk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAorQ0FMTEJBQ0tfRlVOQ19E
RUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCit7CisgICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2Uu
dHJhbnNhY3Rpb24oKSIpOworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGFy
Z3MsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlUmVhZFRyYW5zYWN0
aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigpIik7
CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoYXJncywgdHJ1ZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTQsMTYgKzUxNCwxNiBAQCB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQogewotICAgIG1f
dHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBl
cjo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pKSk7CisgICAgbV90cmFuc2FjdGlvblF1
ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIENoYW5nZVZlcnNpb25XcmFwcGVyOjpjcmVhdGUob2xk
VmVyc2lvbiwgbmV3VmVyc2lvbiksIGZhbHNlKSk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwogICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJv
Z3Jlc3MpCiAgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSkKIHsKLSAgICBtX3RyYW5z
YWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCkpOworICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCByZWFkT25seSkpOwogICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKICAgICBpZiAoIW1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzKQogICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuaAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5ID0gZmFsc2UpOwogCiAv
LyBJbnRlcm5hbCBlbmdpbmUgc3VwcG9ydAogICAgIHN0YXRpYyBjb25zdCBTdHJpbmcmIGRhdGFi
YXNlSW5mb1RhYmxlTmFtZSgpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCShyZXZpc2lvbiA0ODAz
MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHZlcnNpb247CiAgICAgICAgIFtDdXN0b21dIHZvaWQgY2hhbmdlVmVyc2lvbihp
biBET01TdHJpbmcgb2xkVmVyc2lvbiwgaW4gRE9NU3RyaW5nIG5ld1ZlcnNpb24sIGluIFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2FsbGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKICAgICAg
ICAgW0N1c3RvbV0gdm9pZCB0cmFuc2FjdGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNh
bGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4g
Vm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcmVh
ZFRyYW5zYWN0aW9uKGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ssIGluIFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2FsbGJhY2sgc3Vj
Y2Vzc0NhbGxiYWNrKTsKICAgICB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VB
dXRob3JpemVyLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VBdXRob3JpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDYgKzEzNywyNiBAQCBpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRyaWdnZXIoCiAgICAgcmV0dXJuIGRlbnlCYXNl
ZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNy
ZWF0ZVZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9u
bHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9
CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYg
dmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVk
ID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjpkcm9wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKQoreworICAgIHJldHVybiAobV9y
ZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93
KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KGNvbnN0IFN0cmlu
ZyYgdmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFi
bGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCiBpbnQgRGF0YWJhc2VBdXRo
b3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKIHsKICAg
ICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKSW5kZXg6IFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlQXV0aG9yaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMCArNTksMTAgQEAg
cHVibGljOgogICAgIGludCBkcm9wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBj
b25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGRyb3BUZW1wVHJpZ2dlcihjb25zdCBT
dHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAKLSAgICBpbnQg
Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFs
bG93OyB9Ci0gICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSov
KSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5n
JiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQotICAgIGludCBkcm9wVGVt
cFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsg
fQorICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpOworICAgIGludCBj
cmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAgICBpbnQgZHJvcFZpZXco
Y29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJp
bmcmIHZpZXdOYW1lKTsKIAogICAgIGludCBjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJs
ZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7CiAgICAgaW50IGRyb3BWVGFibGUoY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTMgKzYwLDEz
IEBAIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXMKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FMVHJhbnNhY3Rpb246OmNy
ZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2Fs
bGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxi
YWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCByZWFkT25seSkK
IHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRiLCBjYWxsYmFjaywg
ZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1
Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsKIH0KIAogU1FMVHJhbnNhY3Rpb246
OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bldyYXBwZXI+IHdyYXBwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVhZE9ubHkpCiAgICAg
OiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAgICAgLCBtX2V4ZWN1
dGVTcWxBbGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKQEAgLTc3LDYgKzc3LDcg
QEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKgogICAgICwgbV9zaG91
bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX21vZGlmaWVkRGF0YWJhc2Uo
ZmFsc2UpCiAgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKKyAgICAsIG1fcmVhZE9ubHkocmVh
ZE9ubHkpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOwogfQpAQCAtOTIsMTAgKzkzLDEyIEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gZmFsc2U7Ci0gICAgUGFnZSogcGFn
ZSA9IG1fZGF0YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAoIXBhZ2UgfHwgcGFn
ZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAgICAgICByZWFkT25s
eU1vZGUgPSB0cnVlOworICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFkT25seTsKKyAgICBp
ZiAoIXJlYWRPbmx5TW9kZSkgeworICAgICAgICBQYWdlKiBwYWdlID0gbV9kYXRhYmFzZS0+ZG9j
dW1lbnQoKS0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS0+
cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmVhZE9ubHlNb2RlID0gdHJ1
ZTsKKyAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBTUUxTdGF0
ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNr
RXJyb3IsIHJlYWRPbmx5TW9kZSk7CiAKQEAgLTIwNCw3ICsyMDcsNyBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmFjcXVp
cmVMb2NrKCkKIHsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmFj
cXVpcmVMb2NrKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KS0+YWNxdWlyZUxvY2sodGhpcywgbV9yZWFkT25seSk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmxvY2tBY3F1aXJlZCgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNp
b24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNjYsNyArNjYsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIFNRTFRyYW5zYWN0aW9uIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb24+IHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFiYXNlKiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+
IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5KTsKIAogICAgIH5T
UUxUcmFuc2FjdGlvbigpOwogCkBAIC04MCw3ICs4MSw4IEBAIHB1YmxpYzoKICAgICBEYXRhYmFz
ZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+KTsKKyAg
ICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKICAgICB0eXBlZGVmIHZvaWQgKFNRTFRy
YW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOwogICAgIFRyYW5zYWN0aW9uU3Rl
cE1ldGhvZCBtX25leHRTdGVwOwpAQCAtMTIzLDYgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRh
YmFzZTsKICAgICBib29sIG1fbG9ja0FjcXVpcmVkOworICAgIGJvb2wgbV9yZWFkT25seTsKIAog
ICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVu
dD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcg
KzQ3LDcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVAogICAgIHJl
dHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQogCi12b2lkIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
K3ZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rp
b24qIHRyYW5zYWN0aW9uLCBib29sKQogewogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXRE
YXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
NDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQgYWNxdWlyZUxvY2so
U1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlv
biosIGJvb2wgcmVhZE9ubHkpOwogICAgICAgICB2b2lkIHJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0
aW9uKik7CiAgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKICAgICBwcml2YXRlOgpJbmRleDogTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwko
cmV2aXNpb24gNDgwMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNSBAQAorMjAwOS0wOS0wMyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEFkZGluZyBhIHRlc3QgZm9yIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLCBhbmQgZml4aW5n
IHRoZSBlcnJvcnMKKyAgICAgICAgaW4gc3VjY2Vzcy1jYWxsYmFjay5odG1sLgorCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODkxOAorCisgICAgICAg
ICogc3RvcmFnZS9zdWNjZXNzLWNhbGxiYWNrLmh0bWw6CisgICAgICAgICogc3RvcmFnZS90ZXN0
LWF1dGhvcml6ZXIuaHRtbDoKKwogMjAwOS0wOS0wMyAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBn
b29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgTGV2aW4uCkluZGV4OiBMYXlv
dXRUZXN0cy9zdG9yYWdlL3N1Y2Nlc3MtY2FsbGJhY2suaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9zdG9yYWdlL3N1Y2Nlc3MtY2FsbGJhY2suaHRtbAkocmV2aXNpb24gNDgwMzEpCisr
KyBMYXlvdXRUZXN0cy9zdG9yYWdlL3N1Y2Nlc3MtY2FsbGJhY2suaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNiBAQCBmdW5jdGlvbiBzdWNjZXNzRnVuY3Rpb24obWVzc2FnZSkKIGZ1
bmN0aW9uIHJ1blRlc3QoKQogewogICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgfQpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OCBAQAorVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBh
dXRob3JpemVyLgorU1FMSVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1Q
X1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1
Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX0NSRUFURV9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJM
RSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1JFQUQgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9E
RUxFVEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9JTlNFUlQgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9VUERBVEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9QUkFHTUEg
c3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NR
TElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9ERVRB
Q0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9SRUlOREVYIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0
aG9yaXplZAorU1FMSVRFX0RST1BfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9E
Uk9QX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVFJJ
R0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9WSUVXIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfRFJPUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9UQUJMRSBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorV3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLgorU1FMSVRF
X0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NS
RUFURV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0
ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dF
UiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9URU1QX1ZJ
RVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVFJJR0dF
UiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9WSUVXIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0
ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVf
VFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxF
Q1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IGZhaWxlZDog
bm90IGF1dGhvcml6ZWQKK1NRTElURV9JTlNFUlQgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhv
cml6ZWQKK1NRTElURV9VUERBVEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NR
TElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BTFRF
Ul9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RB
QkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vIHN1Y2ggdGFibGU6IFRlc3RUYWJsZQorU1FMSVRFX1RS
QU5TQUNUSU9OIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQVRUQUNI
IHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfREVUQUNIIHN0YXRlbWVu
dCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NR
TElURV9EUk9QX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVf
RFJPUF9URU1QX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVf
RFJPUF9URU1QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElU
RV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRF
X0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RS
T1BfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEFC
TEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1JlYWQgdHJhbnNhY3Rpb25zIHN1
Y2NlZWRlZC4KKwpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzMgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
PgorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRN
TCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCitmdW5jdGlvbiB0ZXJtaW5hdGVUZXN0KCkKK3sK
KyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZ0FuZFRlcm1pbmF0ZVRl
c3QobWVzc2FnZSwgZXJyb3IpCit7CisgICAgbG9nKG1lc3NhZ2UgKyAiOiAiICsgZXJyb3IubWVz
c2FnZSk7CisgICAgdGVybWluYXRlVGVzdCgpOworfQorCitmdW5jdGlvbiBjbGVhbnVwKGRiKQor
eworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVj
dXRlU3FsKCJEUk9QIFRBQkxFIElGIEVYSVNUUyBUZXN0OyIpOworICAgICAgICAgICAgdHguZXhl
Y3V0ZVNxbCgiRFJPUCBJTkRFWCBJRiBFWElTVFMgVGVzdEluZGV4OyIpOworICAgICAgICAgICAg
dHguZXhlY3V0ZVNxbCgiRFJPUCBWSUVXIElGIEVYSVNUUyBUZXN0VmlldzsiKTsKKyAgICAgICAg
ICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVFJJR0dFUiBJRiBFWElTVFMgVGVzdFRyaWdnZXI7Iik7
CisgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIkNsZWFu
dXAgZmFpbGVkIiwgZXJyb3IpOyB9KTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50U3VjY2Vzc0Nh
bGxiYWNrKHN0YXRlbWVudFR5cGUpCit7CisgICAgbG9nKHN0YXRlbWVudFR5cGUgKyAiIHN0YXRl
bWVudCBzdWNjZWVkZWQuIik7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVudEVycm9yQ2FsbGJhY2so
c3RhdGVtZW50VHlwZSwgZXJyb3IpCit7CisgICAgbG9nKHN0YXRlbWVudFR5cGUgKyAiIHN0YXRl
bWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKK30KKworZnVuY3Rpb24gZXhlY3V0ZVN0
YXRlbWVudCh0eCwgc3RhdGVtZW50LCBvcGVyYXRpb24pCit7CisgICAgdHguZXhlY3V0ZVNxbChz
dGF0ZW1lbnQsIFtdLAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7IHN0YXRl
bWVudFN1Y2Nlc3NDYWxsYmFjayhvcGVyYXRpb24pOyB9LAorICAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24odHgsIGVycm9yKSB7IHN0YXRlbWVudEVycm9yQ2FsbGJhY2sob3BlcmF0aW9uLCBlcnJv
cik7IH0pOworfQorCitmdW5jdGlvbiBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KQoreworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEFCTEUgVGVzdCAoRm9vIGludCk7IiwgIlNRTElU
RV9DUkVBVEVfVEFCTEUiKTsKK30KKworZnVuY3Rpb24gY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNr
KHR4KQoreworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgSU5ERVggVGVzdEluZGV4
IE9OIFRlc3QgKEZvbyk7IiwgIlNRTElURV9DUkVBVEVfSU5ERVgiKTsKKworICAgIC8vIEV2ZW4g
dGhvdWdoIHRoZSBmb2xsb3dpbmcgcXVlcnkgc2hvdWxkIHRyaWdnZXIgYSBTUUxJVEVfQ1JFQVRF
X1RFTVBfSU5ERVggb3BlcmF0aW9uCisgICAgLy8gKGFjY29yZGluZyB0byBodHRwOi8vd3d3LnNx
bGl0ZS5vcmcvdGVtcGZpbGVzLmh0bWwpLCBpdCBkb2Vzbid0LCBhbmQgSSdtIG5vdCBhd2FyZQor
ICAgIC8vIG9mIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dlciB0aGlzIG9wZXJhdGlvbi4gU28gd2Un
bGwgc2tpcCBpdCBmb3Igbm93LgorICAgIC8vZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCAq
IEZST00gVGVzdCBXSEVSRSBGb28gSU4gKDEsIDIsIDMpOyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBf
SU5ERVgiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUQUJMRSBU
ZXN0VGVtcFRhYmxlIChGb28gaW50KTsiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIik7Cisg
ICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBURU1QIFRSSUdHRVIgVGVzdFRlbXBUcmln
Z2VyIElOU0VSVCBPTiBUZXN0IEJFR0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORDsi
LCAiU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQ1JFQVRFIFRFTVAgVklFVyBUZXN0VGVtcFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZST00g
VGVzdDsiLCAiU1FMSVRFX0NSRUFURV9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiQ1JFQVRFIFRSSUdHRVIgVGVzdFRyaWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VM
RUNUIENPVU5UKCopIEZST00gVGVzdDsgRU5EOyIsICJTUUxJVEVfQ1JFQVRFX1RSSUdHRVIiKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJRVcgVGVzdFZpZXcgQVMgU0VMRUNU
IENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FMSVRFX0NSRUFURV9WSUVXIik7CisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSVJUVUFMIFRBQkxFIFRlc3RWaXJ0dWFsVGFibGUgVVNJ
TkcgTWlzc2luZ01vZHVsZTsiLCAiU1FMSVRFX0NSRUFURV9WVEFCTEUiKTsKK30KKworZnVuY3Rp
b24gb3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9SRUFEIik7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9T
RUxFQ1QiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVMRVRFIEZST00gVGVzdDsiLCAi
U1FMSVRFX0RFTEVURSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJJTlNFUlQgSU5UTyBU
ZXN0IFZBTFVFUyAoMSk7IiwgIlNRTElURV9JTlNFUlQiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50
KHR4LCAiVVBEQVRFIFRlc3QgU0VUIEZvbyA9IDIgV0hFUkUgRm9vID0gMTsiLCAiU1FMSVRFX1VQ
REFURSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJQUkFHTUEgY2FjaGVfc2l6ZTsiLCAi
U1FMSVRFX1BSQUdNQSIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxF
IFRlc3QgUkVOQU1FIFRPIFRlc3RUYWJsZTsiLCAiU1FMSVRFX0FMVEVSX1RBQkxFIik7CisgICAg
Ly8gUmVuYW1lIHRoZSB0YWJsZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBuYW1lCisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3RUYWJsZSBSRU5BTUUgVG8gVGVzdDsiLCAi
U1FMSVRFX0FMVEVSX1RBQkxFIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQkVHSU4g
VFJBTlNBQ1RJT047IiwgIlNRTElURV9UUkFOU0FDVElPTiIpOworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQodHgsICJBVFRBQ0ggbWFpbiBBUyBUZXN0TWFpbjsiLCAiU1FMSVRFX0FUVEFDSCIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERVRBQ0ggVGVzdE1haW47IiwgIlNRTElURV9ERVRBQ0gi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiUkVJTkRFWDsiLCAiU1FMSVRFX1JFSU5ERVgi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQU5BTFlaRTsiLCAiU1FMSVRFX0FOQUxZWkUi
KTsKKworICAgIC8vIFNRTElURV9GVU5DVElPTjogYWxsb3dlZCB3cml0ZSBtb2RlCisgICAgLy8g
VGhlcmUgaXMgbm8gU1FML0phdmFzY3JpcHQgQVBJIHRvIGFkZCB1c2VyLWRlZmluZWQgZnVuY3Rp
b25zIHRvIFNRTGl0ZSwKKyAgICAvLyBzbyB3ZSBjYW5ub3QgdGVzdCB0aGlzIG9wZXJhdGlvbgor
fQorCitmdW5jdGlvbiBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1dGVT
dGF0ZW1lbnQodHgsICJEUk9QIElOREVYIFRlc3RJbmRleDsiLCAiU1FMSVRFX0RST1BfSU5ERVgi
KTsKKworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9k
ZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0
b21hdGljYWxseSBkcm9wcGVkIHdoZW4KKyAgICAvLyB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBi
dXQgSFRNTDUgZG9lc24ndCBzcGVjaWZ5IGEgY2xvc2VEYXRhYmFzZSgpIGNhbGwuCisKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0VGVtcFRhYmxlOyIsICJTUUxJVEVf
RFJPUF9URU1QX1RBQkxFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVFJJR0dF
UiBUZXN0VGVtcFRyaWdnZXI7IiwgIlNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFRlbXBWaWV3OyIsICJTUUxJVEVfRFJP
UF9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRl
c3RUcmlnZ2VyOyIsICJTUUxJVEVfRFJPUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgIkRST1AgVklFVyBUZXN0VmlldzsiLCAiU1FMSVRFX0RST1BfVklFVyIpOworCisgICAg
Ly8gU1FMSVRFX0RST1BfVlRBQkxFOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qg
c3VyZSBob3cgdG8gdGVzdCB0aGlzOiB3ZSBjYW5ub3QgY3JlYXRlIGEgdmlydHVhbCB0YWJsZSBi
ZWNhdXNlIHdlIGRvIG5vdAorICAgIC8vIGhhdmUgU1FML0phdmFzY3JpcHQgQVBJcyB0byByZWdp
c3RlciBhIG1vZHVsZSB0aGF0IGltcGxlbWVudHMgYSB2aXJ0dWFsIHRhYmxlLgorICAgIC8vIFRo
ZXJlZm9yZSwgdHJ5aW5nIHRvIGRyb3AgYSB2aXJ0dWFsIHRhYmxlIHdpbGwgYWx3YXlzIGZhaWwg
KG5vIHN1Y2ggdGFibGUpCisgICAgLy8gYmVmb3JlIGV2ZW4gZ2V0dGluZyB0byB0aGUgYXV0aG9y
aXplci4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3Q7IiwgIlNR
TElURV9EUk9QX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkV3JpdGVNb2RlKGRiKQor
eworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBjcmVhdGVU
YWJsZUNhbGxiYWNrKHR4KTsKKyAgICAgICAgICAgIGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0
eCk7CisgICAgICAgICAgICBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgICAg
ICBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rp
b24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiV3JpdGUgdHJhbnNhY3Rpb24gZmFpbGVk
IiwgZXJyb3IpOyB9LAorICAgICAgICBmdW5jdGlvbigpIHsgbG9nKCJXcml0ZSB0cmFuc2FjdGlv
biBzdWNjZWVkZWQuIik7IH0pOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZE9ubHlNb2RlKGRiKQor
eworICAgIC8vIFRlc3QgdGhlICdDUkVBVEUgVEFCTEUnIG9wZXJhdGlvbjsgaXQgc2hvdWxkIGJl
IGRpc2FsbG93ZWQKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjaywK
KyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnQ1JF
QVRFIFRBQkxFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworCisgICAgLy8gSW4g
b3JkZXIgdG8gdGVzdCBhbGwgb3RoZXIgJ0NSRUFURScgb3BlcmF0aW9ucywgd2UgbXVzdCBjcmVh
dGUgdGhlIHRhYmxlIGZpcnN0CisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFj
aywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiV3JpdGUg
J0NSRUFURSBUQUJMRScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKyAgICBkYi5y
ZWFkVHJhbnNhY3Rpb24oY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrLAorICAgICAgICBmdW5jdGlv
bihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFkICdDUkVBVEUnIHRyYW5zYWN0aW9u
IGZhaWxlZCIsIGVycm9yKTsgfSk7CisKKyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IHRoZSAnRFJP
UCcgYW5kICdvdGhlcicgb3BlcmF0aW9ucywgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgdGhlIHJl
c3BlY3RpdmUgZW50aXRpZXMKKyAgICBkYi50cmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2Fs
bGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIldy
aXRlICdDUkVBVEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisgICAgZGIucmVh
ZFRyYW5zYWN0aW9uKG90aGVyU3RhdGVtZW50c0NhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihl
cnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFkICdvdGhlcicgdHJhbnNhY3Rpb24gZmFp
bGVkIiwgZXJyb3IpOyB9KTsKKworICAgIC8vIEhhY2s6IGluc2VydCBhbiBlbXB0eSB3cml0ZSB0
cmFuc2FjdGlvbiB0byBndWFyYXRlZSB0aGF0IHRoZXNlIHRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0
ZWQgc2VxdWVudGlhbGx5CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSk7Cisg
ICAgZGIucmVhZFRyYW5zYWN0aW9uKGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1
bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIlJlYWQgJ0RST1AnIHRyYW5zYWN0
aW9uIGZhaWxlZCIsIGVycm9yKTsgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7IGxvZygiUmVhZCB0
cmFuc2FjdGlvbnMgc3VjY2VlZGVkLiIpOyB0ZXJtaW5hdGVUZXN0KCk7IH0pOworfQorCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdHJ5IHsKKyAg
ICAgICAgdmFyIGRiID0gb3BlbkRhdGFiYXNlKCJBdXRob3JpemVyVGVzdCIsICIxLjAiLCAiVGVz
dHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuIiwgMzI3NjgpOworICAgICAgICBjbGVhbnVwKGRi
KTsKKyAgICAgICAgdGVzdFJlYWRXcml0ZU1vZGUoZGIpOworICAgICAgICB0ZXN0UmVhZE9ubHlN
b2RlKGRiKTsKKyAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0PgorPGhlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBhdXRo
b3JpemVyLjxicj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39085</attachid>
            <date>2009-09-04 12:26:05 -0700</date>
            <delta_ts>2009-09-04 16:41:54 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27854</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODAzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgYmluZGluZ3Mvc3VwcG9ydCBmb3IgdGhlIERhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oKQorICAgICAgICBtZXRob2QuCisgICAgICAgIDIuIENoYW5naW5nIHRoZSBhdXRob3Jp
emVyIGNvZGUgdG8gYWxsb3cgKENSRUFURXxEUk9QKSBbVEVNUF0gVklFVworICAgICAgICBzdGF0
ZW1lbnRzIGluIHJlYWQtd3JpdGUgbW9kZSBvbmx5LgorICAgICAgICAzLiBBZGRpbmcgYSBEYXRh
YmFzZUF1dGhvcml6ZXIgdGVzdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAgICAgICBUZXN0OiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
YXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVJlYWRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hh
bmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0w
MyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRh
YmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1Zh
bHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgRGF0YWJhc2VUcmFuc2Fj
dGlvbkhlbHBlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFJlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2UsIGJvb2wgcmVhZE9ubHkpCiB7CiAgICAgSlNPYmplY3QqIG9iamVj
dDsKICAgICAKQEAgLTEyMiwxMCArMTIyLDE5IEBAIEpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24oRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBtX2ltcGwtPnRyYW5z
YWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nl
c3NDYWxsYmFjay5yZWxlYXNlKCkpOwotCisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxi
YWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5y
ZWxlYXNlKCksIHJlYWRPbmx5KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KKworSlNW
YWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywg
YXJncywgbV9pbXBsLCBmYWxzZSk7Cit9CisgICAgCitKU1ZhbHVlIEpTRGF0YWJhc2U6OnJlYWRU
cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywgYXJncywgbV9pbXBsLCB0cnVl
KTsKK30KICAgICAKIH0KICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNDgwMzEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc3LDYgKzQ3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlQ2hhbmdlVmVyc2lvbik7CiAgICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soRGF0YWJhc2VUcmFuc2FjdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soRGF0YWJhc2VSZWFkVHJhbnNhY3Rpb24pOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNR
TFRyYW5zYWN0aW9uRXhlY3V0ZVNxbCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soU1FMUmVz
dWx0U2V0Um93TGlzdEl0ZW0pOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTAgKzQ4LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlQ2hhbmdlVmVyc2lvbgog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChEYXRh
YmFzZVRyYW5zYWN0aW9uKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBEYXRhYmFzZVRy
YW5zYWN0aW9uSGVscGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsIGJvb2wgcmVhZE9ubHkp
CiB7Ci0gICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2UudHJhbnNhY3Rpb24oKSIpOwotCiAgICAg
aWYgKCFhcmdzLkxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHJhbnNhY3Rp
b24gY2FsbGJhY2sgaXMgcmVxdWlyZWQuIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwogCkBAIC04
MiwxMiArODAsMjIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCiAg
ICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJn
c1syXSwgZnJhbWUpOwogICAgIH0KIAotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFj
ay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVs
ZWFzZSgpKTsKLQorICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCks
IGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCByZWFk
T25seSk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAorQ0FMTEJBQ0tfRlVOQ19E
RUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCit7CisgICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2Uu
dHJhbnNhY3Rpb24oKSIpOworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGFy
Z3MsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlUmVhZFRyYW5zYWN0
aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigpIik7
CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoYXJncywgdHJ1ZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTQsMTYgKzUxNCwxNiBAQCB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQogewotICAgIG1f
dHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBl
cjo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pKSk7CisgICAgbV90cmFuc2FjdGlvblF1
ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIENoYW5nZVZlcnNpb25XcmFwcGVyOjpjcmVhdGUob2xk
VmVyc2lvbiwgbmV3VmVyc2lvbiksIGZhbHNlKSk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwogICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJv
Z3Jlc3MpCiAgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSkKIHsKLSAgICBtX3RyYW5z
YWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCkpOworICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCByZWFkT25seSkpOwogICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKICAgICBpZiAoIW1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzKQogICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuaAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5KTsKIAogLy8gSW50ZXJu
YWwgZW5naW5lIHN1cHBvcnQKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkocmV2aXNpb24gNDgwMzEpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyB2ZXJzaW9uOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3Ry
aW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdWZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgICAgIFtDdXN0
b21dIHZvaWQgdHJhbnNhY3Rpb24oaW4gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywg
aW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlYWRUcmFuc2Fj
dGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjayk7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXpl
ci5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsMjYgQEAgaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKAogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOwogfQogCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWaWV3
KGNvbnN0IFN0cmluZyYgdmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1f
c2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1l
KQoreworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1
dGhEZW55IDogU1FMQXV0aEFsbG93KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJv
cFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkg
JiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisK
K2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdO
YW1lKQoreworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNR
TEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsKK30KKwogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
Y3JlYXRlVlRhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCkBAIC0xOTEsNiArMjExLDExIEBAIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93UmVhZChjb25zdCAKICAgICByZXR1cm4gZGVueUJhc2Vk
T25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxs
b3dSZWluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIHJldHVybiAobV9yZWFk
T25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsK
K30KKwogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBbmFseXplKGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQogewogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUp
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNpb24gNDgwMzEp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGRyb3BUcmlnZ2VyKGNvbnN0IFN0
cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKICAgICBpbnQgZHJv
cFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKTsKIAotICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSov
KSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgY3JlYXRlVGVtcFZpZXcoY29uc3Qg
U3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQotICAgIGludCBk
cm9wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFsbG93
OyB9Ci0gICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyBy
ZXR1cm4gU1FMQXV0aEFsbG93OyB9CisgICAgaW50IGNyZWF0ZVZpZXcoY29uc3QgU3RyaW5nJiB2
aWV3TmFtZSk7CisgICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUp
OworICAgIGludCBkcm9wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAgICBpbnQgZHJv
cFRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpOwogCiAgICAgaW50IGNyZWF0ZVZUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKTsKICAg
ICBpbnQgZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBt
b2R1bGVOYW1lKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIGludCBhbGxvd1NlbGVj
dCgpIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQogICAgIGludCBhbGxvd1JlYWQoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29sdW1uTmFtZSk7CiAKLSAgICBpbnQgYWxs
b3dSZWluZGV4KGNvbnN0IFN0cmluZyYgLyppbmRleE5hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFs
bG93OyB9CisgICAgaW50IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CiAg
ICAgaW50IGFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGFs
bG93RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwogICAgIGludCBhbGxvd1By
YWdtYShjb25zdCBTdHJpbmcmIHByYWdtYU5hbWUsIGNvbnN0IFN0cmluZyYgZmlyc3RBcmd1bWVu
dCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDQ4MDMxKQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsMTMgKzYwLDEzIEBAIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXMK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FMVHJh
bnNhY3Rpb246OmNyZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9v
bCByZWFkT25seSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRi
LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsKIH0KIAogU1FM
VHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVh
ZE9ubHkpCiAgICAgOiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAg
ICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKQEAg
LTc3LDYgKzc3LDcgQEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKgog
ICAgICwgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX21vZGlm
aWVkRGF0YWJhc2UoZmFsc2UpCiAgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKKyAgICAsIG1f
cmVhZE9ubHkocmVhZE9ubHkpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOwogfQpAQCAtOTIs
MTAgKzkzLDEyIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gZmFsc2U7Ci0g
ICAgUGFnZSogcGFnZSA9IG1fZGF0YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAo
IXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAg
ICAgICByZWFkT25seU1vZGUgPSB0cnVlOworICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFk
T25seTsKKyAgICBpZiAoIXJlYWRPbmx5TW9kZSkgeworICAgICAgICBQYWdlKiBwYWdlID0gbV9k
YXRhYmFzZS0+ZG9jdW1lbnQoKS0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2UgfHwgcGFnZS0+
c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmVhZE9u
bHlNb2RlID0gdHJ1ZTsKKyAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1l
bnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJh
Y2ssIGNhbGxiYWNrRXJyb3IsIHJlYWRPbmx5TW9kZSk7CiAKQEAgLTIwNCw3ICsyMDcsNyBAQCB2
b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiCiAKIHZvaWQgU1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKCkKIHsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCktPmFjcXVpcmVMb2NrKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcywgbV9yZWFkT25seSk7CiB9CiAKIHZvaWQg
U1FMVHJhbnNhY3Rpb246OmxvY2tBY3F1aXJlZCgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b24uaAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb24+IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFi
YXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5
KTsKIAogICAgIH5TUUxUcmFuc2FjdGlvbigpOwogCkBAIC04MCw3ICs4MSw4IEBAIHB1YmxpYzoK
ICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAK
IHByaXZhdGU6Ci0gICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldy
YXBwZXI+KTsKKyAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiwKKyAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKICAgICB0eXBlZGVm
IHZvaWQgKFNRTFRyYW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOwogICAgIFRy
YW5zYWN0aW9uU3RlcE1ldGhvZCBtX25leHRTdGVwOwpAQCAtMTIzLDYgKzEyNSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1f
bW9kaWZpZWREYXRhYmFzZTsKICAgICBib29sIG1fbG9ja0FjcXVpcmVkOworICAgIGJvb2wgbV9y
ZWFkT25seTsKIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRy
PFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIo
U1FMVAogICAgIHJldHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQogCi12b2lk
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2so
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sKQogewogICAgIFN0cmluZyBkYklkZW50
aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4MDMx
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQg
YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9pZCBhY3F1aXJlTG9jayhT
UUxUcmFuc2FjdGlvbiosIGJvb2wgcmVhZE9ubHkpOwogICAgICAgICB2b2lkIHJlbGVhc2VMb2Nr
KFNRTFRyYW5zYWN0aW9uKik7CiAgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKICAgICBwcml2YXRl
OgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNDgwMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0wOS0wMyAgRHVtaXRydSBEYW5pbGl1
YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyBhIHRlc3QgZm9yIHRoZSBkYXRhYmFzZSBhdXRob3JpemVy
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODkx
OAorCisgICAgICAgICogc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbDoKKwogMjAwOS0wOS0w
MyAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhdmUgTGV2aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXpl
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1
dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS90ZXN0LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4
IEBACitUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCitTUUxJVEVfQ1JF
QVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFU
RV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NF
TEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1VQREFURSBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9UUkFOU0FDVElPTiBz
dGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FUVEFDSCBzdGF0ZW1lbnQg
ZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBu
b3QgYXV0aG9yaXplZAorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9J
TkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9E
Uk9QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitX
cml0ZSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVu
dCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRo
b3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBu
b3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRo
b3JpemVkCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
Q1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9D
UkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVB
RCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRF
X0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1VQREFURSBz
dGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQg
ZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWls
ZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDog
bm8gc3VjaCB0YWJsZTogVGVzdFRhYmxlCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6
ZWQKK1NRTElURV9SRUlOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJ
VEVfQU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1Bf
SU5ERVggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBf
VEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBf
VFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEVN
UF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UUklH
R0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9WSUVXIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1l
bnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE3NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3Nh
Z2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nQW5kVGVybWluYXRlVGVzdChtZXNzYWdl
LCBlcnJvcikKK3sKKyAgICBsb2cobWVzc2FnZSArICI6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAg
ICB0ZXJtaW5hdGVUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIu
dHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRS
T1AgVEFCTEUgSUYgRVhJU1RTIFRlc3Q7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJE
Uk9QIElOREVYIElGIEVYSVNUUyBUZXN0SW5kZXg7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRl
U3FsKCJEUk9QIFZJRVcgSUYgRVhJU1RTIFRlc3RWaWV3OyIpOworICAgICAgICAgICAgdHguZXhl
Y3V0ZVNxbCgiRFJPUCBUUklHR0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlcjsiKTsKKyAgICAgICAg
fSwgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiQ2xlYW51cCBmYWlsZWQi
LCBlcnJvcik7IH0pOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2soc3Rh
dGVtZW50VHlwZSkKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4iKTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjayhzdGF0ZW1lbnRU
eXBlLCBlcnJvcikKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IGZhaWxl
ZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBl
eGVjdXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1lbnQsIG9wZXJhdGlvbikKK3sKKyAgICB0eC5leGVj
dXRlU3FsKHN0YXRlbWVudCwgW10sCisgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQp
IHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKG9wZXJhdGlvbik7IH0sCisgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgc3RhdGVtZW50RXJyb3JDYWxsYmFjayhvcGVyYXRp
b24sIGVycm9yKTsgfSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpCit7
CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUQUJMRSBUZXN0IChGb28gaW50KTsi
LCAiU1FMSVRFX0NSRUFURV9UQUJMRSIpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdGF0ZW1lbnRz
Q2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBJTkRFWCBU
ZXN0SW5kZXggT04gVGVzdCAoRm9vKTsiLCAiU1FMSVRFX0NSRUFURV9JTkRFWCIpOworCisgICAg
Ly8gRXZlbiB0aG91Z2ggdGhlIGZvbGxvd2luZyBxdWVyeSBzaG91bGQgdHJpZ2dlciBhIFNRTElU
RV9DUkVBVEVfVEVNUF9JTkRFWCBvcGVyYXRpb24KKyAgICAvLyAoYWNjb3JkaW5nIHRvIGh0dHA6
Ly93d3cuc3FsaXRlLm9yZy90ZW1wZmlsZXMuaHRtbCksIGl0IGRvZXNuJ3QsIGFuZCBJJ20gbm90
IGF3YXJlCisgICAgLy8gb2YgYW55IG90aGVyIHdheSB0byB0cmlnZ2VyIHRoaXMgb3BlcmF0aW9u
LiBTbyB3ZSdsbCBza2lwIGl0IGZvciBub3cuCisgICAgLy9leGVjdXRlU3RhdGVtZW50KHR4LCAi
U0VMRUNUICogRlJPTSBUZXN0IFdIRVJFIEZvbyBJTiAoMSwgMiwgMyk7IiwgIlNRTElURV9DUkVB
VEVfVEVNUF9JTkRFWCIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBURU1Q
IFRBQkxFIFRlc3RUZW1wVGFibGUgKEZvbyBpbnQpOyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVEFC
TEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVFJJR0dFUiBUZXN0
VGVtcFRyaWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNUIENPVU5UKCopIEZST00gVGVz
dDsgRU5EOyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBWSUVXIFRlc3RUZW1wVmlldyBBUyBTRUxFQ1QgQ09VTlQo
KikgRlJPTSBUZXN0OyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVT
dGF0ZW1lbnQodHgsICJDUkVBVEUgVFJJR0dFUiBUZXN0VHJpZ2dlciBJTlNFUlQgT04gVGVzdCBC
RUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyBFTkQ7IiwgIlNRTElURV9DUkVBVEVfVFJJ
R0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklFVyBUZXN0VmlldyBB
UyBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsICJTUUxJVEVfQ1JFQVRFX1ZJRVciKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZpcnR1YWxU
YWJsZSBVU0lORyBNaXNzaW5nTW9kdWxlOyIsICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIpOworfQor
CitmdW5jdGlvbiBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3Rh
dGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FMSVRFX1JFQUQiKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAi
U1FMSVRFX1NFTEVDVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERUxFVEUgRlJPTSBU
ZXN0OyIsICJTUUxJVEVfREVMRVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIklOU0VS
VCBJTlRPIFRlc3QgVkFMVUVTICgxKTsiLCAiU1FMSVRFX0lOU0VSVCIpOworICAgIGV4ZWN1dGVT
dGF0ZW1lbnQodHgsICJVUERBVEUgVGVzdCBTRVQgRm9vID0gMiBXSEVSRSBGb28gPSAxOyIsICJT
UUxJVEVfVVBEQVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlBSQUdNQSBjYWNoZV9z
aXplOyIsICJTUUxJVEVfUFJBR01BIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxU
RVIgVEFCTEUgVGVzdCBSRU5BTUUgVE8gVGVzdFRhYmxlOyIsICJTUUxJVEVfQUxURVJfVEFCTEUi
KTsKKyAgICAvLyBSZW5hbWUgdGhlIHRhYmxlIGJhY2sgdG8gaXRzIG9yaWdpbmFsIG5hbWUKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIgVEFCTEUgVGVzdFRhYmxlIFJFTkFNRSBUbyBU
ZXN0OyIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJCRUdJTiBUUkFOU0FDVElPTjsiLCAiU1FMSVRFX1RSQU5TQUNUSU9OIik7CisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkFUVEFDSCBtYWluIEFTIFRlc3RNYWluOyIsICJTUUxJVEVfQVRUQUNI
Iik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRFVEFDSCBUZXN0TWFpbjsiLCAiU1FMSVRF
X0RFVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJSRUlOREVYOyIsICJTUUxJVEVf
UkVJTkRFWCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTkFMWVpFOyIsICJTUUxJVEVf
QU5BTFlaRSIpOworCisgICAgLy8gU1FMSVRFX0ZVTkNUSU9OOiBhbGxvd2VkIHdyaXRlIG1vZGUK
KyAgICAvLyBUaGVyZSBpcyBubyBTUUwvSmF2YXNjcmlwdCBBUEkgdG8gYWRkIHVzZXItZGVmaW5l
ZCBmdW5jdGlvbnMgdG8gU1FMaXRlLAorICAgIC8vIHNvIHdlIGNhbm5vdCB0ZXN0IHRoaXMgb3Bl
cmF0aW9uCit9CisKK2Z1bmN0aW9uIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgSU5ERVggVGVzdEluZGV4OyIsICJTUUxJVEVfRFJP
UF9JTkRFWCIpOworCisgICAgLy8gU1FMSVRFX0RST1BfVEVNUF9JTkRFWDogYWxsb3dlZCBpbiB3
cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogdGVtcCBpbmRleGVz
IGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbgorICAgIC8vIHRoZSBkYXRhYmFzZSBpcyBj
bG9zZWQsIGJ1dCBIVE1MNSBkb2Vzbid0IHNwZWNpZnkgYSBjbG9zZURhdGFiYXNlKCkgY2FsbC4K
KworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3RUZW1wVGFibGU7Iiwg
IlNRTElURV9EUk9QX1RFTVBfVEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJP
UCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlcjsiLCAiU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIik7
CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVklFVyBUZXN0VGVtcFZpZXc7IiwgIlNR
TElURV9EUk9QX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRS
SUdHRVIgVGVzdFRyaWdnZXI7IiwgIlNRTElURV9EUk9QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RWaWV3OyIsICJTUUxJVEVfRFJPUF9WSUVXIik7
CisKKyAgICAvLyBTUUxJVEVfRFJPUF9WVEFCTEU6IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAg
IC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHdlIGNhbm5vdCBjcmVhdGUgYSB2aXJ0dWFs
IHRhYmxlIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgLy8gaGF2ZSBTUUwvSmF2YXNjcmlwdCBBUElz
IHRvIHJlZ2lzdGVyIGEgbW9kdWxlIHRoYXQgaW1wbGVtZW50cyBhIHZpcnR1YWwgdGFibGUuCisg
ICAgLy8gVGhlcmVmb3JlLCB0cnlpbmcgdG8gZHJvcCBhIHZpcnR1YWwgdGFibGUgd2lsbCBhbHdh
eXMgZmFpbCAobm8gc3VjaCB0YWJsZSkKKyAgICAvLyBiZWZvcmUgZXZlbiBnZXR0aW5nIHRvIHRo
ZSBhdXRob3JpemVyLgorCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVEFCTEUgVGVz
dDsiLCAiU1FMSVRFX0RST1BfVEFCTEUiKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRXcml0ZU1v
ZGUoZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAg
IGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpOworICAgICAgICAgICAgY3JlYXRlU3RhdGVtZW50c0Nh
bGxiYWNrKHR4KTsKKyAgICAgICAgICAgIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAg
ICAgICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICB9LAorICAgICAg
ICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJXcml0ZSB0cmFuc2FjdGlv
biBmYWlsZWQiLCBlcnJvcik7IH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeyBsb2coIldyaXRlIHRy
YW5zYWN0aW9uIHN1Y2NlZWRlZC4iKTsgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkT25seU1v
ZGUoZGIpCit7CisgICAgLy8gVGVzdCB0aGUgJ0NSRUFURSBUQUJMRScgb3BlcmF0aW9uOyBpdCBz
aG91bGQgYmUgZGlzYWxsb3dlZAorICAgIGRiLnJlYWRUcmFuc2FjdGlvbihjcmVhdGVUYWJsZUNh
bGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJS
ZWFkICdDUkVBVEUgVEFCTEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisKKyAg
ICAvLyBJbiBvcmRlciB0byB0ZXN0IGFsbCBvdGhlciAnQ1JFQVRFJyBvcGVyYXRpb25zLCB3ZSBt
dXN0IGNyZWF0ZSB0aGUgdGFibGUgZmlyc3QKKyAgICBkYi50cmFuc2FjdGlvbihjcmVhdGVUYWJs
ZUNhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0
KCJXcml0ZSAnQ1JFQVRFIFRBQkxFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOwor
ICAgIGRiLnJlYWRUcmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAg
IGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIlJlYWQgJ0NSRUFURScgdHJh
bnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3Qg
dGhlICdEUk9QJyBhbmQgJ290aGVyJyBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIGZpcnN0IGNyZWF0
ZSB0aGUgcmVzcGVjdGl2ZSBlbnRpdGllcworICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRl
bWVudHNDYWxsYmFjaywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRl
VGVzdCgiV3JpdGUgJ0NSRUFURScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKyAg
ICBkYi5yZWFkVHJhbnNhY3Rpb24ob3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1
bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIlJlYWQgJ290aGVyJyB0cmFuc2Fj
dGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworCisgICAgLy8gSGFjazogaW5zZXJ0IGFuIGVtcHR5
IHdyaXRlIHRyYW5zYWN0aW9uIHRvIGd1YXJhdGVlIHRoYXQgdGhlc2UgdHJhbnNhY3Rpb25zIGFy
ZSBleGVjdXRlZCBzZXF1ZW50aWFsbHkKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkg
eyB9KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oZHJvcFN0YXRlbWVudHNDYWxsYmFjaywKKyAg
ICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnRFJPUCcg
dHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9LAorICAgICAgICBmdW5jdGlvbigpIHsgbG9n
KCJSZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuIik7IHRlcm1pbmF0ZVRlc3QoKTsgfSk7Cit9
CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0
cnkgeworICAgICAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkF1dGhvcml6ZXJUZXN0IiwgIjEu
MCIsICJUZXN0cyB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAzMjc2OCk7CisgICAgICAgIGNs
ZWFudXAoZGIpOworICAgICAgICB0ZXN0UmVhZFdyaXRlTW9kZShkYik7CisgICAgICAgIHRlc3RS
ZWFkT25seU1vZGUoZGIpOworICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+Cis8aGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFi
YXNlIGF1dGhvcml6ZXIuPGJyPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39098</attachid>
            <date>2009-09-04 16:41:54 -0700</date>
            <delta_ts>2009-09-08 13:51:06 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27862</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODAzMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgYmluZGluZ3Mvc3VwcG9ydCBmb3IgdGhlIERhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oKQorICAgICAgICBtZXRob2QuCisgICAgICAgIDIuIENoYW5naW5nIHRoZSBhdXRob3Jp
emVyIGNvZGUgdG8gYWxsb3cgKENSRUFURXxEUk9QKSBbVEVNUF0gVklFVworICAgICAgICBzdGF0
ZW1lbnRzIGluIHJlYWQtd3JpdGUgbW9kZSBvbmx5LgorICAgICAgICAzLiBBZGRpbmcgYSBEYXRh
YmFzZUF1dGhvcml6ZXIgdGVzdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAgICAgICBUZXN0OiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
YXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVJlYWRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hh
bmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0w
MyAgS2V2aW4gV2F0dGVycyAgPGtldmlud2F0dGVyc0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2V2aW4gT2xsaXZpZXIuCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YWJhc2VDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRh
YmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0RhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgsNyBAQCBKU1Zh
bHVlIEpTRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oRXhlY1N0CiAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CiB9CiAKLUpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQorc3RhdGljIEpTVmFsdWUgRGF0YWJhc2VUcmFuc2Fj
dGlvbkhlbHBlcihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MsIFJlZlB0cjxE
YXRhYmFzZT4gZGF0YWJhc2UsIGJvb2wgcmVhZE9ubHkpCiB7CiAgICAgSlNPYmplY3QqIG9iamVj
dDsKICAgICAKQEAgLTEyMiwxMCArMTIyLDE5IEBAIEpTVmFsdWUgSlNEYXRhYmFzZTo6dHJhbnNh
Y3Rpb24oRXhlY1N0YXQKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBtX2ltcGwtPnRyYW5z
YWN0aW9uKGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nl
c3NDYWxsYmFjay5yZWxlYXNlKCkpOwotCisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxi
YWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5y
ZWxlYXNlKCksIHJlYWRPbmx5KTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KKworSlNW
YWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywg
YXJncywgbV9pbXBsLCBmYWxzZSk7Cit9CisgICAgCitKU1ZhbHVlIEpTRGF0YWJhc2U6OnJlYWRU
cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
cmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoZXhlYywgYXJncywgbV9pbXBsLCB0cnVl
KTsKK30KICAgICAKIH0KICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkocmV2aXNpb24gNDgwMzEp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDc3LDYgKzQ3Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlQ2hhbmdlVmVyc2lvbik7CiAgICAgICAgIERFQ0xB
UkVfQ0FMTEJBQ0soRGF0YWJhc2VUcmFuc2FjdGlvbik7CisgICAgICAgIERFQ0xBUkVfQ0FMTEJB
Q0soRGF0YWJhc2VSZWFkVHJhbnNhY3Rpb24pOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNR
TFRyYW5zYWN0aW9uRXhlY3V0ZVNxbCk7CiAgICAgICAgIERFQ0xBUkVfQ0FMTEJBQ0soU1FMUmVz
dWx0U2V0Um93TGlzdEl0ZW0pOwogCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OERhdGFiYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDgsMTAgKzQ4LDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlQ2hhbmdlVmVyc2lvbgog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKLUNBTExCQUNLX0ZVTkNfREVDTChEYXRh
YmFzZVRyYW5zYWN0aW9uKQorc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBEYXRhYmFzZVRy
YW5zYWN0aW9uSGVscGVyKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MsIGJvb2wgcmVhZE9ubHkp
CiB7Ci0gICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2UudHJhbnNhY3Rpb24oKSIpOwotCiAgICAg
aWYgKCFhcmdzLkxlbmd0aCgpKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiVHJhbnNhY3Rp
b24gY2FsbGJhY2sgaXMgcmVxdWlyZWQuIiwgVjhQcm94eTo6U3ludGF4RXJyb3IpOwogCkBAIC04
MiwxMiArODAsMjIgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCiAg
ICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IFY4Q3VzdG9tVm9pZENhbGxiYWNrOjpjcmVhdGUoYXJn
c1syXSwgZnJhbWUpOwogICAgIH0KIAotICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFj
ay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVs
ZWFzZSgpKTsKLQorICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNlKCks
IGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCByZWFk
T25seSk7CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAorQ0FMTEJBQ0tfRlVOQ19E
RUNMKERhdGFiYXNlVHJhbnNhY3Rpb24pCit7CisgICAgSU5DX1NUQVRTKCJET00uRGF0YWJhc2Uu
dHJhbnNhY3Rpb24oKSIpOworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGFy
Z3MsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlUmVhZFRyYW5zYWN0
aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigpIik7
CisgICAgcmV0dXJuIERhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIoYXJncywgdHJ1ZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCi0KSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNw
cAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MTQsMTYgKzUxNCwxNiBAQCB2b2lkIERhdGFiYXNlOjpjaGFuZ2VWZXJz
aW9uKGNvbnN0IFN0cmluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQogewotICAgIG1f
dHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxs
YmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBl
cjo6Y3JlYXRlKG9sZFZlcnNpb24sIG5ld1ZlcnNpb24pKSk7CisgICAgbV90cmFuc2FjdGlvblF1
ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIENoYW5nZVZlcnNpb25XcmFwcGVyOjpjcmVhdGUob2xk
VmVyc2lvbiwgbmV3VmVyc2lvbiksIGZhbHNlKSk7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
dHJhbnNhY3Rpb25JblByb2dyZXNzTXV0ZXgpOwogICAgIGlmICghbV90cmFuc2FjdGlvbkluUHJv
Z3Jlc3MpCiAgICAgICAgIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKIH0KIAogdm9pZCBEYXRhYmFz
ZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
aywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lk
Q2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSkKIHsKLSAgICBtX3RyYW5z
YWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ss
IGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCkpOworICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCByZWFkT25seSkpOwogICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKICAgICBpZiAoIW1fdHJhbnNh
Y3Rpb25JblByb2dyZXNzKQogICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuaAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxs
YmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBl
cnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29sIHJlYWRPbmx5KTsKIAogLy8gSW50ZXJu
YWwgZW5naW5lIHN1cHBvcnQKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nJiBkYXRhYmFzZUluZm9U
YWJsZU5hbWUoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkocmV2aXNpb24gNDgwMzEpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3
IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmlu
ZyB2ZXJzaW9uOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIGNoYW5nZVZlcnNpb24oaW4gRE9NU3Ry
aW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdWZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlv
bkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JD
YWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgICAgIFtDdXN0
b21dIHZvaWQgdHJhbnNhY3Rpb24oaW4gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywg
aW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxs
YmFjayBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICBbQ3VzdG9tXSB2b2lkIHJlYWRUcmFuc2Fj
dGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxs
YmFjayk7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXpl
ci5jcHAJKHJldmlzaW9uIDQ4MDMxKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9y
aXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNyw2ICsxMzcsMjYgQEAgaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKAogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxl
TmFtZSh0YWJsZU5hbWUpOwogfQogCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWaWV3
KGNvbnN0IFN0cmluZyYgdmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1f
c2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1l
KQoreworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1
dGhEZW55IDogU1FMQXV0aEFsbG93KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJv
cFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkg
JiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisK
K2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdO
YW1lKQoreworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNR
TEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsKK30KKwogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6
Y3JlYXRlVlRhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgaWYgKG1f
cmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCkBAIC0xOTEsNiArMjExLDExIEBAIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93UmVhZChjb25zdCAKICAgICByZXR1cm4gZGVueUJhc2Vk
T25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxs
b3dSZWluZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKQoreworICAgIHJldHVybiAobV9yZWFk
T25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsK
K30KKwogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBbmFseXplKGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQogewogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUp
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNpb24gNDgwMzEp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGRyb3BUcmlnZ2VyKGNvbnN0IFN0
cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKICAgICBpbnQgZHJv
cFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKTsKIAotICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSov
KSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgY3JlYXRlVGVtcFZpZXcoY29uc3Qg
U3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQotICAgIGludCBk
cm9wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFsbG93
OyB9Ci0gICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyBy
ZXR1cm4gU1FMQXV0aEFsbG93OyB9CisgICAgaW50IGNyZWF0ZVZpZXcoY29uc3QgU3RyaW5nJiB2
aWV3TmFtZSk7CisgICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUp
OworICAgIGludCBkcm9wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAgICBpbnQgZHJv
cFRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpOwogCiAgICAgaW50IGNyZWF0ZVZUYWJs
ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVOYW1lKTsKICAg
ICBpbnQgZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBt
b2R1bGVOYW1lKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIGludCBhbGxvd1NlbGVj
dCgpIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQogICAgIGludCBhbGxvd1JlYWQoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29sdW1uTmFtZSk7CiAKLSAgICBpbnQgYWxs
b3dSZWluZGV4KGNvbnN0IFN0cmluZyYgLyppbmRleE5hbWUqLykgeyByZXR1cm4gU1FMQXV0aEFs
bG93OyB9CisgICAgaW50IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSk7CiAg
ICAgaW50IGFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGFs
bG93RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwogICAgIGludCBhbGxvd1By
YWdtYShjb25zdCBTdHJpbmcmIHByYWdtYU5hbWUsIGNvbnN0IFN0cmluZyYgZmlyc3RBcmd1bWVu
dCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDQ4MDMxKQor
KysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsMTMgKzYwLDEzIEBAIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXMK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FMVHJh
bnNhY3Rpb246OmNyZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9v
bCByZWFkT25seSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRi
LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsKIH0KIAogU1FM
VHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxT
UUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wgcmVh
ZE9ubHkpCiAgICAgOiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAg
ICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKQEAg
LTc3LDYgKzc3LDcgQEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKgog
ICAgICwgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX21vZGlm
aWVkRGF0YWJhc2UoZmFsc2UpCiAgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKKyAgICAsIG1f
cmVhZE9ubHkocmVhZE9ubHkpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOwogfQpAQCAtOTIs
MTAgKzkzLDEyIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gZmFsc2U7Ci0g
ICAgUGFnZSogcGFnZSA9IG1fZGF0YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsKLSAgICBpZiAo
IXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQotICAg
ICAgICByZWFkT25seU1vZGUgPSB0cnVlOworICAgIGJvb2wgcmVhZE9ubHlNb2RlID0gbV9yZWFk
T25seTsKKyAgICBpZiAoIXJlYWRPbmx5TW9kZSkgeworICAgICAgICBQYWdlKiBwYWdlID0gbV9k
YXRhYmFzZS0+ZG9jdW1lbnQoKS0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2UgfHwgcGFnZS0+
c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmVhZE9u
bHlNb2RlID0gdHJ1ZTsKKyAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1l
bnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJh
Y2ssIGNhbGxiYWNrRXJyb3IsIHJlYWRPbmx5TW9kZSk7CiAKQEAgLTIwNCw3ICsyMDcsNyBAQCB2
b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiCiAKIHZvaWQgU1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKCkKIHsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3Jk
aW5hdG9yKCktPmFjcXVpcmVMb2NrKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcywgbV9yZWFkT25seSk7CiB9CiAKIHZvaWQg
U1FMVHJhbnNhY3Rpb246OmxvY2tBY3F1aXJlZCgpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b24uaAkocmV2aXNpb24gNDgwMzEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24u
aAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCBwdWJsaWM6CiAKIGNsYXNzIFNRTFRy
YW5zYWN0aW9uIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rpb24+IHsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFi
YXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5
KTsKIAogICAgIH5TUUxUcmFuc2FjdGlvbigpOwogCkBAIC04MCw3ICs4MSw4IEBAIHB1YmxpYzoK
ICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgpOyB9CiAK
IHByaXZhdGU6Ci0gICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldy
YXBwZXI+KTsKKyAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiwKKyAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKICAgICB0eXBlZGVm
IHZvaWQgKFNRTFRyYW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOwogICAgIFRy
YW5zYWN0aW9uU3RlcE1ldGhvZCBtX25leHRTdGVwOwpAQCAtMTIzLDYgKzEyNSw3IEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1f
bW9kaWZpZWREYXRhYmFzZTsKICAgICBib29sIG1fbG9ja0FjcXVpcmVkOworICAgIGJvb2wgbV9y
ZWFkT25seTsKIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRy
PFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gNDgwMzEpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDcgKzQ3LDcgQEAgc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIo
U1FMVAogICAgIHJldHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOwogfQogCi12b2lk
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0
cmFuc2FjdGlvbikKK3ZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2so
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sKQogewogICAgIFN0cmluZyBkYklkZW50
aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwogCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4MDMx
KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZvaWQg
YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9pZCBhY3F1aXJlTG9jayhT
UUxUcmFuc2FjdGlvbiosIGJvb2wgcmVhZE9ubHkpOwogICAgICAgICB2b2lkIHJlbGVhc2VMb2Nr
KFNRTFRyYW5zYWN0aW9uKik7CiAgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKICAgICBwcml2YXRl
OgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNDgwMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAwOS0wOS0wMyAgRHVtaXRydSBEYW5pbGl1
YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyBhIHRlc3QgZm9yIHRoZSBkYXRhYmFzZSBhdXRob3JpemVy
LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODkx
OAorCisgICAgICAgICogc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbDoKKwogMjAwOS0wOS0w
MyAgRHJldyBXaWxzb24gIDxhdHdpbHNvbkBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhdmUgTGV2aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXpl
ci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1
dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFn
ZS90ZXN0LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4
IEBACitUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCitTUUxJVEVfQ1JF
QVRFX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFU
RV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NF
TEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1VQREFURSBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9UUkFOU0FDVElPTiBz
dGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FUVEFDSCBzdGF0ZW1lbnQg
ZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBu
b3QgYXV0aG9yaXplZAorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElU
RV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9J
TkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9E
Uk9QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitX
cml0ZSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVu
dCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRo
b3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBu
b3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRo
b3JpemVkCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
Q1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9D
UkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVB
RCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRF
X0lOU0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1VQREFURSBz
dGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQg
ZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWls
ZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDog
bm8gc3VjaCB0YWJsZTogVGVzdFRhYmxlCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6
ZWQKK1NRTElURV9SRUlOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJ
VEVfQU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1Bf
SU5ERVggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBf
VEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBf
VFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEVN
UF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UUklH
R0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9WSUVXIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1l
bnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgor
CkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE3NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0
aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3Nh
Z2UgKyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nQW5kVGVybWluYXRlVGVzdChtZXNzYWdl
LCBlcnJvcikKK3sKKyAgICBsb2cobWVzc2FnZSArICI6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAg
ICB0ZXJtaW5hdGVUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIu
dHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRS
T1AgVEFCTEUgSUYgRVhJU1RTIFRlc3Q7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJE
Uk9QIElOREVYIElGIEVYSVNUUyBUZXN0SW5kZXg7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRl
U3FsKCJEUk9QIFZJRVcgSUYgRVhJU1RTIFRlc3RWaWV3OyIpOworICAgICAgICAgICAgdHguZXhl
Y3V0ZVNxbCgiRFJPUCBUUklHR0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlcjsiKTsKKyAgICAgICAg
fSwgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiQ2xlYW51cCBmYWlsZWQi
LCBlcnJvcik7IH0pOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2soc3Rh
dGVtZW50VHlwZSkKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4iKTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjayhzdGF0ZW1lbnRU
eXBlLCBlcnJvcikKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IGZhaWxl
ZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24g
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgc3RhdGVtZW50LCBvcGVyYXRpb24pCit7CisgICAgdHguZXhl
Y3V0ZVNxbChzdGF0ZW1lbnQsIFtdLAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0
KSB7IHN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayhvcGVyYXRpb24pOyB9LAorICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IHJldHVybiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNr
KG9wZXJhdGlvbiwgZXJyb3IpOyB9KTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGFibGVDYWxsYmFj
ayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRBQkxFIFRlc3QgKEZv
byBpbnQpOyIsICJTUUxJVEVfQ1JFQVRFX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVN0
YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRF
IElOREVYIFRlc3RJbmRleCBPTiBUZXN0IChGb28pOyIsICJTUUxJVEVfQ1JFQVRFX0lOREVYIik7
CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUgZm9sbG93aW5nIHF1ZXJ5IHNob3VsZCB0cmlnZ2Vy
IGEgU1FMSVRFX0NSRUFURV9URU1QX0lOREVYIG9wZXJhdGlvbgorICAgIC8vIChhY2NvcmRpbmcg
dG8gaHR0cDovL3d3dy5zcWxpdGUub3JnL3RlbXBmaWxlcy5odG1sKSwgaXQgZG9lc24ndCwgYW5k
IEknbSBub3QgYXdhcmUKKyAgICAvLyBvZiBhbnkgb3RoZXIgd2F5IHRvIHRyaWdnZXIgdGhpcyBv
cGVyYXRpb24uIFNvIHdlJ2xsIHNraXAgaXQgZm9yIG5vdy4KKyAgICAvL2V4ZWN1dGVTdGF0ZW1l
bnQodHgsICJTRUxFQ1QgKiBGUk9NIFRlc3QgV0hFUkUgRm9vIElOICgxLCAyLCAzKTsiLCAiU1FM
SVRFX0NSRUFURV9URU1QX0lOREVYIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JF
QVRFIFRFTVAgVEFCTEUgVGVzdFRlbXBUYWJsZSAoRm9vIGludCk7IiwgIlNRTElURV9DUkVBVEVf
VEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUUklH
R0VSIFRlc3RUZW1wVHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikg
RlJPTSBUZXN0OyBFTkQ7IiwgIlNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIik7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBURU1QIFZJRVcgVGVzdFRlbXBWaWV3IEFTIFNFTEVD
VCBDT1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9DUkVBVEVfVEVNUF9WSUVXIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUUklHR0VSIFRlc3RUcmlnZ2VyIElOU0VSVCBP
TiBUZXN0IEJFR0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORDsiLCAiU1FMSVRFX0NS
RUFURV9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSUVXIFRl
c3RWaWV3IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9DUkVBVEVfVklF
VyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklSVFVBTCBUQUJMRSBUZXN0
VmlydHVhbFRhYmxlIFVTSU5HIE1pc3NpbmdNb2R1bGU7IiwgIlNRTElURV9DUkVBVEVfVlRBQkxF
Iik7Cit9CisKK2Z1bmN0aW9uIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsICJTUUxJVEVf
UkVBRCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBU
ZXN0OyIsICJTUUxJVEVfU0VMRUNUIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRFTEVU
RSBGUk9NIFRlc3Q7IiwgIlNRTElURV9ERUxFVEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpOyIsICJTUUxJVEVfSU5TRVJUIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlVQREFURSBUZXN0IFNFVCBGb28gPSAyIFdIRVJFIEZvbyA9
IDE7IiwgIlNRTElURV9VUERBVEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiUFJBR01B
IGNhY2hlX3NpemU7IiwgIlNRTElURV9QUkFHTUEiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQo
dHgsICJBTFRFUiBUQUJMRSBUZXN0IFJFTkFNRSBUTyBUZXN0VGFibGU7IiwgIlNRTElURV9BTFRF
Ul9UQUJMRSIpOworICAgIC8vIFJlbmFtZSB0aGUgdGFibGUgYmFjayB0byBpdHMgb3JpZ2luYWwg
bmFtZQorICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTFRFUiBUQUJMRSBUZXN0VGFibGUgUkVO
QU1FIFRvIFRlc3Q7IiwgIlNRTElURV9BTFRFUl9UQUJMRSIpOworCisgICAgZXhlY3V0ZVN0YXRl
bWVudCh0eCwgIkJFR0lOIFRSQU5TQUNUSU9OOyIsICJTUUxJVEVfVFJBTlNBQ1RJT04iKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQVRUQUNIIG1haW4gQVMgVGVzdE1haW47IiwgIlNRTElU
RV9BVFRBQ0giKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVUQUNIIFRlc3RNYWluOyIs
ICJTUUxJVEVfREVUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlJFSU5ERVg7Iiwg
IlNRTElURV9SRUlOREVYIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFOQUxZWkU7Iiwg
IlNRTElURV9BTkFMWVpFIik7CisKKyAgICAvLyBTUUxJVEVfRlVOQ1RJT046IGFsbG93ZWQgd3Jp
dGUgbW9kZQorICAgIC8vIFRoZXJlIGlzIG5vIFNRTC9KYXZhc2NyaXB0IEFQSSB0byBhZGQgdXNl
ci1kZWZpbmVkIGZ1bmN0aW9ucyB0byBTUUxpdGUsCisgICAgLy8gc28gd2UgY2Fubm90IHRlc3Qg
dGhpcyBvcGVyYXRpb24KK30KKworZnVuY3Rpb24gZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCkK
K3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBJTkRFWCBUZXN0SW5kZXg7IiwgIlNR
TElURV9EUk9QX0lOREVYIik7CisKKyAgICAvLyBTUUxJVEVfRFJPUF9URU1QX0lOREVYOiBhbGxv
d2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qgc3VyZSBob3cgdG8gdGVzdCB0aGlzOiB0ZW1w
IGluZGV4ZXMgYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCB3aGVuCisgICAgLy8gdGhlIGRhdGFi
YXNlIGlzIGNsb3NlZCwgYnV0IEhUTUw1IGRvZXNuJ3Qgc3BlY2lmeSBhIGNsb3NlRGF0YWJhc2Uo
KSBjYWxsLgorCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVEFCTEUgVGVzdFRlbXBU
YWJsZTsiLCAiU1FMSVRFX0RST1BfVEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQo
dHgsICJEUk9QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyOyIsICJTUUxJVEVfRFJPUF9URU1QX1RS
SUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RUZW1wVmll
dzsiLCAiU1FMSVRFX0RST1BfVEVNUF9WSUVXIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IkRST1AgVFJJR0dFUiBUZXN0VHJpZ2dlcjsiLCAiU1FMSVRFX0RST1BfVFJJR0dFUiIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFZpZXc7IiwgIlNRTElURV9EUk9Q
X1ZJRVciKTsKKworICAgIC8vIFNRTElURV9EUk9QX1ZUQUJMRTogYWxsb3dlZCBpbiB3cml0ZSBt
b2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogd2UgY2Fubm90IGNyZWF0ZSBh
IHZpcnR1YWwgdGFibGUgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAvLyBoYXZlIFNRTC9KYXZhc2Ny
aXB0IEFQSXMgdG8gcmVnaXN0ZXIgYSBtb2R1bGUgdGhhdCBpbXBsZW1lbnRzIGEgdmlydHVhbCB0
YWJsZS4KKyAgICAvLyBUaGVyZWZvcmUsIHRyeWluZyB0byBkcm9wIGEgdmlydHVhbCB0YWJsZSB3
aWxsIGFsd2F5cyBmYWlsIChubyBzdWNoIHRhYmxlKQorICAgIC8vIGJlZm9yZSBldmVuIGdldHRp
bmcgdG8gdGhlIGF1dGhvcml6ZXIuCisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBU
QUJMRSBUZXN0OyIsICJTUUxJVEVfRFJPUF9UQUJMRSIpOworfQorCitmdW5jdGlvbiB0ZXN0UmVh
ZFdyaXRlTW9kZShkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAg
ICAgICAgICAgY3JlYXRlVGFibGVDYWxsYmFjayh0eCk7CisgICAgICAgICAgICBjcmVhdGVTdGF0
ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICAgICAgb3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2so
dHgpOworICAgICAgICAgICAgZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgIH0s
CisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIldyaXRlIHRy
YW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7IGxvZygi
V3JpdGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLiIpOyB9KTsKK30KKworZnVuY3Rpb24gdGVzdFJl
YWRPbmx5TW9kZShkYikKK3sKKyAgICAvLyBUZXN0IHRoZSAnQ1JFQVRFIFRBQkxFJyBvcGVyYXRp
b247IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0
ZVRhYmxlQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0
ZVRlc3QoIlJlYWQgJ0NSRUFURSBUQUJMRScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9
KTsKKworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgYWxsIG90aGVyICdDUkVBVEUnIG9wZXJhdGlv
bnMsIHdlIG11c3QgY3JlYXRlIHRoZSB0YWJsZSBmaXJzdAorICAgIGRiLnRyYW5zYWN0aW9uKGNy
ZWF0ZVRhYmxlQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1p
bmF0ZVRlc3QoIldyaXRlICdDUkVBVEUgVEFCTEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9y
KTsgfSk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjaywK
KyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnQ1JF
QVRFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworCisgICAgLy8gSW4gb3JkZXIg
dG8gdGVzdCB0aGUgJ0RST1AnIGFuZCAnb3RoZXInIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gZmly
c3QgY3JlYXRlIHRoZSByZXNwZWN0aXZlIGVudGl0aWVzCisgICAgZGIudHJhbnNhY3Rpb24oY3Jl
YXRlU3RhdGVtZW50c0NhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRU
ZXJtaW5hdGVUZXN0KCJXcml0ZSAnQ1JFQVRFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7
IH0pOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihvdGhlclN0YXRlbWVudHNDYWxsYmFjaywKKyAg
ICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnb3RoZXIn
IHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisKKyAgICAvLyBIYWNrOiBpbnNlcnQg
YW4gZW1wdHkgd3JpdGUgdHJhbnNhY3Rpb24gdG8gZ3VhcmF0ZWUgdGhhdCB0aGVzZSB0cmFuc2Fj
dGlvbnMgYXJlIGV4ZWN1dGVkIHNlcXVlbnRpYWxseQorICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0
aW9uKHR4KSB7IH0pOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihkcm9wU3RhdGVtZW50c0NhbGxi
YWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFk
ICdEUk9QJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0sCisgICAgICAgIGZ1bmN0aW9u
KCkgeyBsb2coIlJlYWQgdHJhbnNhY3Rpb25zIHN1Y2NlZWRlZC4iKTsgdGVybWluYXRlVGVzdCgp
OyB9KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgIH0K
KworICAgIHRyeSB7CisgICAgICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiQXV0aG9yaXplclRl
c3QiLCAiMS4wIiwgIlRlc3RzIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLiIsIDMyNzY4KTsKKyAg
ICAgICAgY2xlYW51cChkYik7CisgICAgICAgIHRlc3RSZWFkV3JpdGVNb2RlKGRiKTsKKyAgICAg
ICAgdGVzdFJlYWRPbmx5TW9kZShkYik7CisgICAgfSBjYXRjaChlcnIpIHt9Cit9Cis8L3Njcmlw
dD4KKzxoZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVzdCB0ZXN0cyB0
aGUgZGF0YWJhc2UgYXV0aG9yaXplci48YnI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39209</attachid>
            <date>2009-09-08 13:51:06 -0700</date>
            <delta_ts>2009-09-08 15:11:29 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27860</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgYmluZGluZ3Mvc3VwcG9ydCBmb3IgdGhlIERhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oKQorICAgICAgICBtZXRob2QuCisgICAgICAgIDIuIENoYW5naW5nIHRoZSBhdXRob3Jp
emVyIGNvZGUgdG8gYWxsb3cgKENSRUFURXxEUk9QKSBbVEVNUF0gVklFVworICAgICAgICBzdGF0
ZW1lbnRzIGluIHJlYWQtd3JpdGUgbW9kZSBvbmx5LgorICAgICAgICAzLiBBZGRpbmcgYSBEYXRh
YmFzZUF1dGhvcml6ZXIgdGVzdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAgICAgICBUZXN0OiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
YXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVJlYWRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hh
bmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0w
OCAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFz
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNl
Q3VzdG9tLmNwcAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUg
SlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihFeGVjU3QKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBEYXRhYmFzZVRyYW5zYWN0aW9u
SGVscGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgRGF0YWJhc2UqIGRh
dGFiYXNlLCBib29sIHJlYWRPbmx5KQogewogICAgIEpTT2JqZWN0KiBvYmplY3Q7CiAgICAgCkBA
IC0xMjIsMTAgKzEyMiwxOSBAQCBKU1ZhbHVlIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4ZWNT
dGF0CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgbV9pbXBsLT50cmFuc2FjdGlvbihjYWxs
YmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2su
cmVsZWFzZSgpKTsKLQorICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNl
KCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCBy
ZWFkT25seSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CisKK0pTVmFsdWUgSlNEYXRh
YmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
eworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGV4ZWMsIGFyZ3MsIG1faW1w
bC5nZXQoKSwgZmFsc2UpOworfQorICAgIAorSlNWYWx1ZSBKU0RhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVy
biBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGV4ZWMsIGFyZ3MsIG1faW1wbC5nZXQoKSwgdHJ1
ZSk7Cit9CiAgICAgCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgJKHJldmlzaW9uIDQ4MTc1
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3Nyw2ICs0NzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhEYXRhYmFzZUNoYW5nZVZlcnNpb24pOwogICAgICAgICBERUNM
QVJFX0NBTExCQUNLKERhdGFiYXNlVHJhbnNhY3Rpb24pOworICAgICAgICBERUNMQVJFX0NBTExC
QUNLKERhdGFiYXNlUmVhZFRyYW5zYWN0aW9uKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhT
UUxUcmFuc2FjdGlvbkV4ZWN1dGVTcWwpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNRTFJl
c3VsdFNldFJvd0xpc3RJdGVtKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEwICs0OCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZUNoYW5nZVZlcnNpb24K
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woRGF0
YWJhc2VUcmFuc2FjdGlvbikKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRGF0YWJhc2VU
cmFuc2FjdGlvbkhlbHBlcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHJlYWRPbmx5
KQogewotICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnRyYW5zYWN0aW9uKCkiKTsKLQogICAg
IGlmICghYXJncy5MZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRyYW5zYWN0
aW9uIGNhbGxiYWNrIGlzIHJlcXVpcmVkLiIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKIApAQCAt
ODIsMTIgKzgwLDIyIEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVRyYW5zYWN0aW9uKQog
ICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMl0sIGZyYW1lKTsKICAgICB9CiAKLSAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJh
Y2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJl
bGVhc2UoKSk7Ci0KKyAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgp
LCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgcmVh
ZE9ubHkpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK0NBTExCQUNLX0ZVTkNf
REVDTChEYXRhYmFzZVRyYW5zYWN0aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNl
LnRyYW5zYWN0aW9uKCkiKTsKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBlcihh
cmdzLCBmYWxzZSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVJlYWRUcmFuc2Fj
dGlvbikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZS5yZWFkVHJhbnNhY3Rpb24oKSIp
OworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGFyZ3MsIHRydWUpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE0LDE2ICs1MTQsMTYgQEAgdm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVy
c2lvbihjb25zdCBTdHJpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKIHsKLSAgICBt
X3RyYW5zYWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgQ2hhbmdlVmVyc2lvbldyYXBw
ZXI6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKSkpOworICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6Y3JlYXRlKG9s
ZFZlcnNpb24sIG5ld1ZlcnNpb24pLCBmYWxzZSkpOwogICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKICAgICBpZiAoIW1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzKQogICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiB9CiAKIHZvaWQgRGF0YWJh
c2U6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJh
Y2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCiB7Ci0gICAgbV90cmFu
c2FjdGlvblF1ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNr
LCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIDApKTsKKyAgICBtX3RyYW5zYWN0aW9u
UXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCwgcmVhZE9ubHkpKTsKICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CiAgICAgaWYgKCFtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1bGVUcmFuc2FjdGlvbigpOwpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmgJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjayk7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSk7CiAKIC8vIEludGVy
bmFsIGVuZ2luZSBzdXBwb3J0CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZv
VGFibGVOYW1lKCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHJldmlzaW9uIDQ4MTc1KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgdmVyc2lvbjsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBjaGFuZ2VWZXJzaW9uKGluIERPTVN0
cmluZyBvbGRWZXJzaW9uLCBpbiBET01TdHJpbmcgbmV3VmVyc2lvbiwgaW4gU1FMVHJhbnNhY3Rp
b25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOwogICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHRyYW5zYWN0aW9uKGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ss
IGluIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCByZWFkVHJhbnNh
Y3Rpb24oaW4gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2spOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhv
cml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6
ZXIuY3BwCShyZXZpc2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhv
cml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsNiArMTM3LDI2IEBAIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVHJpZ2dlcigKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJs
ZU5hbWUodGFibGVOYW1lKTsKIH0KIAoraW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmll
dyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKQoreworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBt
X3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsKK30KKworaW50
IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFt
ZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxB
dXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRy
b3BWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5
ICYmIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQor
CitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3
TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBT
UUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6
OmNyZWF0ZVZUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQogewogICAgIGlmICht
X3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQpAQCAtMTkxLDYgKzIxMSwxMSBAQCBpbnQg
RGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1JlYWQoY29uc3QgCiAgICAgcmV0dXJuIGRlbnlCYXNl
ZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFs
bG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVh
ZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7
Cit9CisKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcm
IHRhYmxlTmFtZSkKIHsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1l
KTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDQ4MTc1
KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgIGludCBkcm9wVHJpZ2dlcihjb25zdCBT
dHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGRy
b3BUZW1wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSk7CiAKLSAgICBpbnQgY3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUq
LykgeyByZXR1cm4gU1FMQXV0aEFsbG93OyB9Ci0gICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0
IFN0cmluZyYgLyp2aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQg
ZHJvcFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxv
dzsgfQotICAgIGludCBkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsg
cmV0dXJuIFNRTEF1dGhBbGxvdzsgfQorICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYg
dmlld05hbWUpOworICAgIGludCBjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1l
KTsKKyAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGRy
b3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKIAogICAgIGludCBjcmVhdGVWVGFi
bGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7CiAg
ICAgaW50IGRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYg
bW9kdWxlTmFtZSk7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBpbnQgYWxsb3dTZWxl
Y3QoKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KICAgICBpbnQgYWxsb3dSZWFkKGNvbnN0IFN0
cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbHVtbk5hbWUpOwogCi0gICAgaW50IGFs
bG93UmVpbmRleChjb25zdCBTdHJpbmcmIC8qaW5kZXhOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhB
bGxvdzsgfQorICAgIGludCBhbGxvd1JlaW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwog
ICAgIGludCBhbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBh
bGxvd0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKICAgICBpbnQgYWxsb3dQ
cmFnbWEoY29uc3QgU3RyaW5nJiBwcmFnbWFOYW1lLCBjb25zdCBTdHJpbmcmIGZpcnN0QXJndW1l
bnQpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA0ODE3NSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYwLDEzICs2MCwxMyBAQCBzdGF0aWMgY29uc3QgaW50IERlZmF1bHRRdW90YVNpemVJbmNyZWFz
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IFNRTFRy
YW5zYWN0aW9uOjpjcmVhdGUoRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4gZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nl
c3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJv
b2wgcmVhZE9ubHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihk
YiwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlcikpOwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNhbGxiYWNrLCBlcnJv
ckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5KSk7CiB9CiAKIFNR
TFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJl
YWRPbmx5KQogICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQog
ICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkKICAgICAsIG1fZGF0YWJhc2UoZGIpCkBA
IC03Nyw2ICs3Nyw3IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSoK
ICAgICAsIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2Rp
ZmllZERhdGFiYXNlKGZhbHNlKQogICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCisgICAgLCBt
X3JlYWRPbmx5KHJlYWRPbmx5KQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKIH0KQEAgLTky
LDEwICs5MywxMiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHJlYWRPbmx5TW9kZSA9IGZhbHNlOwot
ICAgIFBhZ2UqIHBhZ2UgPSBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYg
KCFwYWdlIHx8IHBhZ2UtPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKLSAg
ICAgICAgcmVhZE9ubHlNb2RlID0gdHJ1ZTsKKyAgICBib29sIHJlYWRPbmx5TW9kZSA9IG1fcmVh
ZE9ubHk7CisgICAgaWYgKCFyZWFkT25seU1vZGUpIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1f
ZGF0YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlIHx8IHBhZ2Ut
PnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJlYWRP
bmx5TW9kZSA9IHRydWU7CisgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVt
ZW50ID0gU1FMU3RhdGVtZW50OjpjcmVhdGUoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxi
YWNrLCBjYWxsYmFja0Vycm9yLCByZWFkT25seU1vZGUpOwogCkBAIC0yMDQsNyArMjA3LDcgQEAg
dm9pZCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxsYgogCiB2b2lkIFNRTFRyYW5z
YWN0aW9uOjphY3F1aXJlTG9jaygpCiB7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpLT5hY3F1aXJlTG9jayh0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmFjcXVpcmVMb2NrKHRoaXMsIG1fcmVhZE9ubHkpOwogfQogCiB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpsb2NrQWNxdWlyZWQoKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uLmgJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgcHVibGljOgogCiBjbGFzcyBTUUxU
cmFuc2FjdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFRyYW5zYWN0aW9uPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRh
YmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uPiBjcmVhdGUoRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25s
eSk7CiAKICAgICB+U1FMVHJhbnNhY3Rpb24oKTsKIApAQCAtODAsNyArODEsOCBAQCBwdWJsaWM6
CiAgICAgRGF0YWJhc2UqIGRhdGFiYXNlKCkgeyByZXR1cm4gbV9kYXRhYmFzZS5nZXQoKTsgfQog
CiBwcml2YXRlOgotICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25X
cmFwcGVyPik7CisgICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
az4sCisgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wgcmVhZE9ubHkpOwogCiAgICAgdHlwZWRl
ZiB2b2lkIChTUUxUcmFuc2FjdGlvbjo6KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCkoKTsKICAgICBU
cmFuc2FjdGlvblN0ZXBNZXRob2QgbV9uZXh0U3RlcDsKQEAgLTEyMyw2ICsxMjUsNyBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQ7CiAgICAgYm9vbCBt
X21vZGlmaWVkRGF0YWJhc2U7CiAgICAgYm9vbCBtX2xvY2tBY3F1aXJlZDsKKyAgICBib29sIG1f
cmVhZE9ubHk7CiAKICAgICBNdXRleCBtX3N0YXRlbWVudE11dGV4OwogICAgIERlcXVlPFJlZlB0
cjxTUUxTdGF0ZW1lbnQ+ID4gbV9zdGF0ZW1lbnRRdWV1ZTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDQ4MTc1KQorKysg
V2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVy
KFNRTFQKICAgICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKIH0KIAotdm9p
ZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2Nr
KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCkKIHsKICAgICBTdHJpbmcgZGJJZGVu
dGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKIApJbmRleDogV2Vi
Q29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiA0ODE3
NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciB7CiAgICAgcHVibGljOgotICAgICAgICB2b2lk
IGFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKik7CisgICAgICAgIHZvaWQgYWNxdWlyZUxvY2so
U1FMVHJhbnNhY3Rpb24qLCBib29sIHJlYWRPbmx5KTsKICAgICAgICAgdm9pZCByZWxlYXNlTG9j
ayhTUUxUcmFuc2FjdGlvbiopOwogICAgICAgICB2b2lkIHNodXRkb3duKCk7CiAgICAgcHJpdmF0
ZToKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ4MTc1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxp
dWMgIDxkdW1pQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRpbmcgYSB0ZXN0IGZvciB0aGUgZGF0YWJhc2UgYXV0aG9yaXpl
ci4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg5
MTgKKworICAgICAgICAqIHN0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWw6CisKIDIwMDktMDkt
MDggIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhdmlkIExldmluLgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRo
b3JpemVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
dGVzdC1hdXRob3JpemVyLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2OCBA
QAorVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLgorU1FMSVRFX0NSRUFU
RV9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FM
SVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVf
VFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX1JFQUQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxF
Q1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9ERUxFVEUgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9JTlNFUlQgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9VUERBVEUgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRF
X0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfVFJBTlNBQ1RJT04gc3Rh
dGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9SRUlOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
QU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfSU5E
RVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVEFCTEUgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX0RST1BfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJP
UF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9WSUVXIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorV3Jp
dGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQg
ZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9UQUJMRSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9y
aXplZAorU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRo
b3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVFJJR0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRo
b3JpemVkCitTUUxJVEVfQ1JFQVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9y
aXplZAorU1FMSVRFX0NSRUFURV9JTkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBf
VFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0NSRUFURV9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JF
QVRFX1ZUQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1JFQUQg
c3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9TRUxFQ1Qgc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1NRTElURV9ERUxFVEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9J
TlNFUlQgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9VUERBVEUgc3Rh
dGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9QUkFHTUEgc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVk
OiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5v
IHN1Y2ggdGFibGU6IFRlc3RUYWJsZQorU1FMSVRFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBmYWls
ZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBh
dXRob3JpemVkCitTUUxJVEVfREVUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVk
CitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRF
X0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX0lO
REVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9URU1QX1RB
QkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9URU1QX1RS
SUdHRVIgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBf
VklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVFJJR0dF
UiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVklFVyBzdGF0
ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50
IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1JlYWQgdHJhbnNhY3Rpb25zIHN1Y2NlZWRlZC4KKwpJ
bmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0PgorCitmdW5jdGlv
biBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5ib2R5LmlubmVySFRNTCArPSBtZXNzYWdl
ICsgIjxicj4iOworfQorCitmdW5jdGlvbiB0ZXJtaW5hdGVUZXN0KCkKK3sKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZ0FuZFRlcm1pbmF0ZVRlc3QobWVzc2FnZSwg
ZXJyb3IpCit7CisgICAgbG9nKG1lc3NhZ2UgKyAiOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAg
dGVybWluYXRlVGVzdCgpOworfQorCitmdW5jdGlvbiBjbGVhbnVwKGRiKQoreworICAgIGRiLnRy
YW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9Q
IFRBQkxFIElGIEVYSVNUUyBUZXN0OyIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJP
UCBJTkRFWCBJRiBFWElTVFMgVGVzdEluZGV4OyIpOworICAgICAgICAgICAgdHguZXhlY3V0ZVNx
bCgiRFJPUCBWSUVXIElGIEVYSVNUUyBUZXN0VmlldzsiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1
dGVTcWwoIkRST1AgVFJJR0dFUiBJRiBFWElTVFMgVGVzdFRyaWdnZXI7Iik7CisgICAgICAgIH0s
IGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIkNsZWFudXAgZmFpbGVkIiwg
ZXJyb3IpOyB9KTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKHN0YXRl
bWVudFR5cGUpCit7CisgICAgbG9nKHN0YXRlbWVudFR5cGUgKyAiIHN0YXRlbWVudCBzdWNjZWVk
ZWQuIik7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVudEVycm9yQ2FsbGJhY2soc3RhdGVtZW50VHlw
ZSwgZXJyb3IpCit7CisgICAgbG9nKHN0YXRlbWVudFR5cGUgKyAiIHN0YXRlbWVudCBmYWlsZWQ6
ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Z1bmN0aW9uIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsIHN0YXRlbWVudCwgb3BlcmF0aW9uKQoreworICAgIHR4LmV4ZWN1
dGVTcWwoc3RhdGVtZW50LCBbXSwKKyAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkg
eyBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2sob3BlcmF0aW9uKTsgfSwKKyAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyByZXR1cm4gc3RhdGVtZW50RXJyb3JDYWxsYmFjayhv
cGVyYXRpb24sIGVycm9yKTsgfSk7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVRhYmxlQ2FsbGJhY2so
dHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUQUJMRSBUZXN0IChGb28g
aW50KTsiLCAiU1FMSVRFX0NSRUFURV9UQUJMRSIpOworfQorCitmdW5jdGlvbiBjcmVhdGVTdGF0
ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBJ
TkRFWCBUZXN0SW5kZXggT04gVGVzdCAoRm9vKTsiLCAiU1FMSVRFX0NSRUFURV9JTkRFWCIpOwor
CisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGZvbGxvd2luZyBxdWVyeSBzaG91bGQgdHJpZ2dlciBh
IFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBvcGVyYXRpb24KKyAgICAvLyAoYWNjb3JkaW5nIHRv
IGh0dHA6Ly93d3cuc3FsaXRlLm9yZy90ZW1wZmlsZXMuaHRtbCksIGl0IGRvZXNuJ3QsIGFuZCBJ
J20gbm90IGF3YXJlCisgICAgLy8gb2YgYW55IG90aGVyIHdheSB0byB0cmlnZ2VyIHRoaXMgb3Bl
cmF0aW9uLiBTbyB3ZSdsbCBza2lwIGl0IGZvciBub3cuCisgICAgLy9leGVjdXRlU3RhdGVtZW50
KHR4LCAiU0VMRUNUICogRlJPTSBUZXN0IFdIRVJFIEZvbyBJTiAoMSwgMiwgMyk7IiwgIlNRTElU
RV9DUkVBVEVfVEVNUF9JTkRFWCIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFU
RSBURU1QIFRBQkxFIFRlc3RUZW1wVGFibGUgKEZvbyBpbnQpOyIsICJTUUxJVEVfQ1JFQVRFX1RF
TVBfVEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVFJJR0dF
UiBUZXN0VGVtcFRyaWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNUIENPVU5UKCopIEZS
T00gVGVzdDsgRU5EOyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVFJJR0dFUiIpOworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBWSUVXIFRlc3RUZW1wVmlldyBBUyBTRUxFQ1Qg
Q09VTlQoKikgRlJPTSBUZXN0OyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVFJJR0dFUiBUZXN0VHJpZ2dlciBJTlNFUlQgT04g
VGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyBFTkQ7IiwgIlNRTElURV9DUkVB
VEVfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklFVyBUZXN0
VmlldyBBUyBTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsICJTUUxJVEVfQ1JFQVRFX1ZJRVci
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJUlRVQUwgVEFCTEUgVGVzdFZp
cnR1YWxUYWJsZSBVU0lORyBNaXNzaW5nTW9kdWxlOyIsICJTUUxJVEVfQ1JFQVRFX1ZUQUJMRSIp
OworfQorCitmdW5jdGlvbiBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FMSVRFX1JF
QUQiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiU0VMRUNUIENPVU5UKCopIEZST00gVGVz
dDsiLCAiU1FMSVRFX1NFTEVDVCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERUxFVEUg
RlJPTSBUZXN0OyIsICJTUUxJVEVfREVMRVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwg
IklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICgxKTsiLCAiU1FMSVRFX0lOU0VSVCIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJVUERBVEUgVGVzdCBTRVQgRm9vID0gMiBXSEVSRSBGb28gPSAx
OyIsICJTUUxJVEVfVVBEQVRFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlBSQUdNQSBj
YWNoZV9zaXplOyIsICJTUUxJVEVfUFJBR01BIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiQUxURVIgVEFCTEUgVGVzdCBSRU5BTUUgVE8gVGVzdFRhYmxlOyIsICJTUUxJVEVfQUxURVJf
VEFCTEUiKTsKKyAgICAvLyBSZW5hbWUgdGhlIHRhYmxlIGJhY2sgdG8gaXRzIG9yaWdpbmFsIG5h
bWUKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQUxURVIgVEFCTEUgVGVzdFRhYmxlIFJFTkFN
RSBUbyBUZXN0OyIsICJTUUxJVEVfQUxURVJfVEFCTEUiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQodHgsICJCRUdJTiBUUkFOU0FDVElPTjsiLCAiU1FMSVRFX1RSQU5TQUNUSU9OIik7CisgICAg
ZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFUVEFDSCBtYWluIEFTIFRlc3RNYWluOyIsICJTUUxJVEVf
QVRUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRFVEFDSCBUZXN0TWFpbjsiLCAi
U1FMSVRFX0RFVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJSRUlOREVYOyIsICJT
UUxJVEVfUkVJTkRFWCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTkFMWVpFOyIsICJT
UUxJVEVfQU5BTFlaRSIpOworCisgICAgLy8gU1FMSVRFX0ZVTkNUSU9OOiBhbGxvd2VkIHdyaXRl
IG1vZGUKKyAgICAvLyBUaGVyZSBpcyBubyBTUUwvSmF2YXNjcmlwdCBBUEkgdG8gYWRkIHVzZXIt
ZGVmaW5lZCBmdW5jdGlvbnMgdG8gU1FMaXRlLAorICAgIC8vIHNvIHdlIGNhbm5vdCB0ZXN0IHRo
aXMgb3BlcmF0aW9uCit9CisKK2Z1bmN0aW9uIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7
CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgSU5ERVggVGVzdEluZGV4OyIsICJTUUxJ
VEVfRFJPUF9JTkRFWCIpOworCisgICAgLy8gU1FMSVRFX0RST1BfVEVNUF9JTkRFWDogYWxsb3dl
ZCBpbiB3cml0ZSBtb2RlCisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogdGVtcCBp
bmRleGVzIGFyZSBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgd2hlbgorICAgIC8vIHRoZSBkYXRhYmFz
ZSBpcyBjbG9zZWQsIGJ1dCBIVE1MNSBkb2Vzbid0IHNwZWNpZnkgYSBjbG9zZURhdGFiYXNlKCkg
Y2FsbC4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3RUZW1wVGFi
bGU7IiwgIlNRTElURV9EUk9QX1RFTVBfVEFCTEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiRFJPUCBUUklHR0VSIFRlc3RUZW1wVHJpZ2dlcjsiLCAiU1FMSVRFX0RST1BfVEVNUF9UUklH
R0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVklFVyBUZXN0VGVtcFZpZXc7
IiwgIlNRTElURV9EUk9QX1RFTVBfVklFVyIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJE
Uk9QIFRSSUdHRVIgVGVzdFRyaWdnZXI7IiwgIlNRTElURV9EUk9QX1RSSUdHRVIiKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RWaWV3OyIsICJTUUxJVEVfRFJPUF9W
SUVXIik7CisKKyAgICAvLyBTUUxJVEVfRFJPUF9WVEFCTEU6IGFsbG93ZWQgaW4gd3JpdGUgbW9k
ZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHdlIGNhbm5vdCBjcmVhdGUgYSB2
aXJ0dWFsIHRhYmxlIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgLy8gaGF2ZSBTUUwvSmF2YXNjcmlw
dCBBUElzIHRvIHJlZ2lzdGVyIGEgbW9kdWxlIHRoYXQgaW1wbGVtZW50cyBhIHZpcnR1YWwgdGFi
bGUuCisgICAgLy8gVGhlcmVmb3JlLCB0cnlpbmcgdG8gZHJvcCBhIHZpcnR1YWwgdGFibGUgd2ls
bCBhbHdheXMgZmFpbCAobm8gc3VjaCB0YWJsZSkKKyAgICAvLyBiZWZvcmUgZXZlbiBnZXR0aW5n
IHRvIHRoZSBhdXRob3JpemVyLgorCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVEFC
TEUgVGVzdDsiLCAiU1FMSVRFX0RST1BfVEFCTEUiKTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRX
cml0ZU1vZGUoZGIpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAg
ICAgICAgIGNyZWF0ZVRhYmxlQ2FsbGJhY2sodHgpOworICAgICAgICAgICAgY3JlYXRlU3RhdGVt
ZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgICAgIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4
KTsKKyAgICAgICAgICAgIGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpOworICAgICAgICB9LAor
ICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJXcml0ZSB0cmFu
c2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0sCisgICAgICAgIGZ1bmN0aW9uKCkgeyBsb2coIldy
aXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4iKTsgfSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFk
T25seU1vZGUoZGIpCit7CisgICAgLy8gVGVzdCB0aGUgJ0NSRUFURSBUQUJMRScgb3BlcmF0aW9u
OyBpdCBzaG91bGQgYmUgZGlzYWxsb3dlZAorICAgIGRiLnJlYWRUcmFuc2FjdGlvbihjcmVhdGVU
YWJsZUNhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVU
ZXN0KCJSZWFkICdDUkVBVEUgVEFCTEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7
CisKKyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IGFsbCBvdGhlciAnQ1JFQVRFJyBvcGVyYXRpb25z
LCB3ZSBtdXN0IGNyZWF0ZSB0aGUgdGFibGUgZmlyc3QKKyAgICBkYi50cmFuc2FjdGlvbihjcmVh
dGVUYWJsZUNhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5h
dGVUZXN0KCJXcml0ZSAnQ1JFQVRFIFRBQkxFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7
IH0pOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2ssCisg
ICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIlJlYWQgJ0NSRUFU
RScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKworICAgIC8vIEluIG9yZGVyIHRv
IHRlc3QgdGhlICdEUk9QJyBhbmQgJ290aGVyJyBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIGZpcnN0
IGNyZWF0ZSB0aGUgcmVzcGVjdGl2ZSBlbnRpdGllcworICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0
ZVN0YXRlbWVudHNDYWxsYmFjaywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVy
bWluYXRlVGVzdCgiV3JpdGUgJ0NSRUFURScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9
KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24ob3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAg
ICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIlJlYWQgJ290aGVyJyB0
cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworCisgICAgLy8gSGFjazogaW5zZXJ0IGFu
IGVtcHR5IHdyaXRlIHRyYW5zYWN0aW9uIHRvIGd1YXJhdGVlIHRoYXQgdGhlc2UgdHJhbnNhY3Rp
b25zIGFyZSBleGVjdXRlZCBzZXF1ZW50aWFsbHkKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeyB9KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oZHJvcFN0YXRlbWVudHNDYWxsYmFj
aywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAn
RFJPUCcgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9LAorICAgICAgICBmdW5jdGlvbigp
IHsgbG9nKCJSZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuIik7IHRlcm1pbmF0ZVRlc3QoKTsg
fSk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisK
KyAgICB0cnkgeworICAgICAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkF1dGhvcml6ZXJUZXN0
IiwgIjEuMCIsICJUZXN0cyB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAzMjc2OCk7CisgICAg
ICAgIGNsZWFudXAoZGIpOworICAgICAgICB0ZXN0UmVhZFdyaXRlTW9kZShkYik7CisgICAgICAg
IHRlc3RSZWFkT25seU1vZGUoZGIpOworICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+
Cis8aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgdGVzdHMgdGhl
IGRhdGFiYXNlIGF1dGhvcml6ZXIuPGJyPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39219</attachid>
            <date>2009-09-08 15:11:29 -0700</date>
            <delta_ts>2009-09-08 17:12:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>31083</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDktMDMgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgYmluZGluZ3Mvc3VwcG9ydCBmb3IgdGhlIERhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oKQorICAgICAgICBtZXRob2QuCisgICAgICAgIDIuIENoYW5naW5nIHRoZSBhdXRob3Jp
emVyIGNvZGUgdG8gYWxsb3cgKENSRUFURXxEUk9QKSBbVEVNUF0gVklFVworICAgICAgICBzdGF0
ZW1lbnRzIGluIHJlYWQtd3JpdGUgbW9kZSBvbmx5LgorICAgICAgICAzLiBBZGRpbmcgYSBEYXRh
YmFzZUF1dGhvcml6ZXIgdGVzdC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAgICAgICBUZXN0OiBzdG9yYWdlL3Rlc3QtYXV0aG9y
aXplci5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlVHJhbnNhY3Rpb25IZWxwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SlNE
YXRhYmFzZTo6cmVhZFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBl
cik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVJlYWRUcmFuc2FjdGlvbik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6Y2hh
bmdlVmVyc2lvbik6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOgor
ICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNl
LmlkbDoKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZpZXcpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6CisgICAgICAgIChXZWJD
b3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6
CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKToKKyAg
ICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDoKKwogMjAwOS0wOS0w
OCAgTWljaGFlbCBOb3JkbWFuICA8bWljaGFlbG5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFz
ZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNl
Q3VzdG9tLmNwcAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0
YWJhc2VDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUg
SlNEYXRhYmFzZTo6Y2hhbmdlVmVyc2lvbihFeGVjU3QKICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKIH0KIAotSlNWYWx1ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitzdGF0aWMgSlNWYWx1ZSBEYXRhYmFzZVRyYW5zYWN0aW9u
SGVscGVyKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncywgRGF0YWJhc2UqIGRh
dGFiYXNlLCBib29sIHJlYWRPbmx5KQogewogICAgIEpTT2JqZWN0KiBvYmplY3Q7CiAgICAgCkBA
IC0xMjIsMTAgKzEyMiwxOSBAQCBKU1ZhbHVlIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4ZWNT
dGF0CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgbV9pbXBsLT50cmFuc2FjdGlvbihjYWxs
YmFjay5yZWxlYXNlKCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2su
cmVsZWFzZSgpKTsKLQorICAgIGRhdGFiYXNlLT50cmFuc2FjdGlvbihjYWxsYmFjay5yZWxlYXNl
KCksIGVycm9yQ2FsbGJhY2sucmVsZWFzZSgpLCBzdWNjZXNzQ2FsbGJhY2sucmVsZWFzZSgpLCBy
ZWFkT25seSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CisKK0pTVmFsdWUgSlNEYXRh
YmFzZTo6dHJhbnNhY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQor
eworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGV4ZWMsIGFyZ3MsIG1faW1w
bC5nZXQoKSwgZmFsc2UpOworfQorICAgIAorSlNWYWx1ZSBKU0RhdGFiYXNlOjpyZWFkVHJhbnNh
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIHJldHVy
biBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGV4ZWMsIGFyZ3MsIG1faW1wbC5nZXQoKSwgdHJ1
ZSk7Cit9CiAgICAgCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgJKHJldmlzaW9uIDQ4MTc1
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ3Nyw2ICs0NzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgREVDTEFSRV9DQUxMQkFDSyhEYXRhYmFzZUNoYW5nZVZlcnNpb24pOwogICAgICAgICBERUNM
QVJFX0NBTExCQUNLKERhdGFiYXNlVHJhbnNhY3Rpb24pOworICAgICAgICBERUNMQVJFX0NBTExC
QUNLKERhdGFiYXNlUmVhZFRyYW5zYWN0aW9uKTsKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhT
UUxUcmFuc2FjdGlvbkV4ZWN1dGVTcWwpOwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKFNRTFJl
c3VsdFNldFJvd0xpc3RJdGVtKTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEwICs0OCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZUNoYW5nZVZlcnNpb24K
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1DQUxMQkFDS19GVU5DX0RFQ0woRGF0
YWJhc2VUcmFuc2FjdGlvbikKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gRGF0YWJhc2VU
cmFuc2FjdGlvbkhlbHBlcihjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzLCBib29sIHJlYWRPbmx5
KQogewotICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnRyYW5zYWN0aW9uKCkiKTsKLQogICAg
IGlmICghYXJncy5MZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIlRyYW5zYWN0
aW9uIGNhbGxiYWNrIGlzIHJlcXVpcmVkLiIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKIApAQCAt
ODIsMTIgKzgwLDIyIEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVRyYW5zYWN0aW9uKQog
ICAgICAgICBzdWNjZXNzQ2FsbGJhY2sgPSBWOEN1c3RvbVZvaWRDYWxsYmFjazo6Y3JlYXRlKGFy
Z3NbMl0sIGZyYW1lKTsKICAgICB9CiAKLSAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJh
Y2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJl
bGVhc2UoKSk7Ci0KKyAgICBkYXRhYmFzZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgp
LCBlcnJvckNhbGxiYWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgcmVh
ZE9ubHkpOwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CiAKK0NBTExCQUNLX0ZVTkNf
REVDTChEYXRhYmFzZVRyYW5zYWN0aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNl
LnRyYW5zYWN0aW9uKCkiKTsKKyAgICByZXR1cm4gRGF0YWJhc2VUcmFuc2FjdGlvbkhlbHBlcihh
cmdzLCBmYWxzZSk7Cit9CisKK0NBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVJlYWRUcmFuc2Fj
dGlvbikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZS5yZWFkVHJhbnNhY3Rpb24oKSIp
OworICAgIHJldHVybiBEYXRhYmFzZVRyYW5zYWN0aW9uSGVscGVyKGFyZ3MsIHRydWUpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTE0LDE2ICs1MTQsMTYgQEAgdm9pZCBEYXRhYmFzZTo6Y2hhbmdlVmVy
c2lvbihjb25zdCBTdHJpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaykKIHsKLSAgICBt
X3RyYW5zYWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2Fs
bGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgQ2hhbmdlVmVyc2lvbldyYXBw
ZXI6OmNyZWF0ZShvbGRWZXJzaW9uLCBuZXdWZXJzaW9uKSkpOworICAgIG1fdHJhbnNhY3Rpb25R
dWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JD
YWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCBDaGFuZ2VWZXJzaW9uV3JhcHBlcjo6Y3JlYXRlKG9s
ZFZlcnNpb24sIG5ld1ZlcnNpb24pLCBmYWxzZSkpOwogICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4KTsKICAgICBpZiAoIW1fdHJhbnNhY3Rpb25JblBy
b2dyZXNzKQogICAgICAgICBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiB9CiAKIHZvaWQgRGF0YWJh
c2U6OnRyYW5zYWN0aW9uKFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJh
Y2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1
Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9p
ZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIGJvb2wgcmVhZE9ubHkpCiB7Ci0gICAgbV90cmFu
c2FjdGlvblF1ZXVlLmFwcGVuZChTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMsIGNhbGxiYWNr
LCBlcnJvckNhbGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIDApKTsKKyAgICBtX3RyYW5zYWN0aW9u
UXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIGVycm9y
Q2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgMCwgcmVhZE9ubHkpKTsKICAgICBNdXRleExvY2tl
ciBsb2NrZXIobV90cmFuc2FjdGlvbkluUHJvZ3Jlc3NNdXRleCk7CiAgICAgaWYgKCFtX3RyYW5z
YWN0aW9uSW5Qcm9ncmVzcykKICAgICAgICAgc2NoZWR1bGVUcmFuc2FjdGlvbigpOwpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmgJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogICAgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywKICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxs
YmFjayk7CiAgICAgdm9pZCB0cmFuc2FjdGlvbihQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxW
b2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCByZWFkT25seSk7CiAKIC8vIEludGVy
bmFsIGVuZ2luZSBzdXBwb3J0CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJbmZv
VGFibGVOYW1lKCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5pZGwJKHJldmlzaW9uIDQ4MTc1KQorKysg
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQs
NyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJp
bmcgdmVyc2lvbjsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBjaGFuZ2VWZXJzaW9uKGluIERPTVN0
cmluZyBvbGRWZXJzaW9uLCBpbiBET01TdHJpbmcgbmV3VmVyc2lvbiwgaW4gU1FMVHJhbnNhY3Rp
b25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVycm9y
Q2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOwogICAgICAgICBbQ3Vz
dG9tXSB2b2lkIHRyYW5zYWN0aW9uKGluIFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2sgY2FsbGJhY2ss
IGluIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayBlcnJvckNhbGxiYWNrLCBpbiBWb2lkQ2Fs
bGJhY2sgc3VjY2Vzc0NhbGxiYWNrKTsKKyAgICAgICAgW0N1c3RvbV0gdm9pZCByZWFkVHJhbnNh
Y3Rpb24oaW4gU1FMVHJhbnNhY3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rp
b25FcnJvckNhbGxiYWNrIGVycm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2Fs
bGJhY2spOwogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhv
cml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6
ZXIuY3BwCShyZXZpc2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhv
cml6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwxMiBAQCBpbnQgRGF0YWJhc2VB
dXRob3JpemVyOjpjcmVhdGVUYWJsZShjb25zCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNy
ZWF0ZVRlbXBUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKKyAgICAvLyBTUUxJVEVf
Q1JFQVRFX1RFTVBfVEFCTEUgcmVzdWx0cyBpbiBhIFVQREFURSBvcGVyYXRpb24sIHdoaWNoIGlz
IG5vdAorICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRl
IGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcworICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NS
RUFURV9URU1QX1RBQkxFIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9z
ZWN1cml0eUVuYWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKwogICAgIHJldHVy
biBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCkBAIC03MSw2ICs3NywxMiBA
QCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGFibGUoY29uc3QgCiAKIGludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7Cisg
ICAgLy8gU1FMSVRFX0RST1BfVEVNUF9UQUJMRSByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlv
biwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25z
IG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCisgICAgLy8gd2VsbCBkaXNhbGxv
dyBTUUxJVEVfRFJPUF9URU1QX1RBQkxFIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKG1fcmVhZE9u
bHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKwog
ICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCkBAIC05NCw2
ICsxMDYsMTIgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlSW5kZXgoY29ucwogCiBp
bnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wSW5kZXgoY29uc3QgU3RyaW5nJiwgY29u
c3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CisgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX0lOREVY
IHNob3VsZCByZXN1bHQgaW4gYSBVUERBVEUgb3IgSU5TRVJUIG9wZXJhdGlvbiwKKyAgICAvLyB3
aGljaCBpcyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUg
YnJvd3NpbmcsCisgICAgLy8gc28gd2UgbWlnaHQgYXMgd2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JF
QVRFX1RFTVBfSU5ERVggaW4gdGhlc2UgY2FzZXMKKyAgICBpZiAobV9yZWFkT25seSAmJiBtX3Nl
Y3VyaXR5RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJu
IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKQEAgLTEwNyw2ICsxMjUsMTIg
QEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcEluZGV4KGNvbnN0IAogCiBpbnQgRGF0YWJh
c2VBdXRob3JpemVyOjpkcm9wVGVtcEluZGV4KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
dGFibGVOYW1lKQogeworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5ERVggc2hvdWxkIHJlc3Vs
dCBpbiBhIERFTEVURSBvcGVyYXRpb24sIHdoaWNoIGlzCisgICAgLy8gbm90IGFsbG93ZWQgaW4g
cmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodAor
ICAgIC8vIGFzIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0RST1BfVEVNUF9JTkRFWCBpbiB0aGVzZSBj
YXNlcworICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICBy
ZXR1cm4gU1FMQXV0aERlbnk7CisKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFi
bGVOYW1lKTsKIH0KIApAQCAtMTIxLDYgKzE0NSwxMiBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVy
OjpjcmVhdGVUcmlnZ2VyKGNvCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBU
cmlnZ2VyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogeworICAgIC8v
IFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHJlc3VsdHMgaW4gYSBJTlNFUlQgb3BlcmF0aW9u
LCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93
IFNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKG1fcmVh
ZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsK
KwogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCkBAIC0x
MzQsOSArMTY0LDQxIEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUcmlnZ2VyKGNvbnMK
IAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYs
IGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQogeworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVFJJ
R0dFUiByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8g
YWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNv
IHdlIG1pZ2h0IGFzCisgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1RSSUdH
RVIgaW4gdGhlc2UgY2FzZXMKKyAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxl
ZCkKKyAgICAgICAgcmV0dXJuIFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9u
VGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0
ZVZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkg
JiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisK
K2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmll
d05hbWUpCit7CisgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIFVQ
REFURSBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5
IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcworICAgIC8v
IHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKKyAg
ICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6
IFNRTEF1dGhBbGxvdyk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KGNv
bnN0IFN0cmluZyYgdmlld05hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1fc2Vj
dXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCitpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sK
KyAgICAvLyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgcmVzdWx0cyBpbiBhIERFTEVURSBvcGVyYXRp
b24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4gcmVhZC1vbmx5IHRyYW5zYWN0aW9u
cyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBhcworICAgIC8vIHdlbGwgZGlzYWxs
b3cgU1FMSVRFX0RST1BfVEVNUF9WSUVXIGluIHRoZXNlIGNhc2VzCisgICAgcmV0dXJuIChtX3Jl
YWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cp
OworfQorCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVWVGFibGUoY29uc3QgU3RyaW5n
JiwgY29uc3QgU3RyaW5nJikKIHsKICAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5h
YmxlZCkKQEAgLTE5MSw2ICsyNTMsMTEgQEAgaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dS
ZWFkKGNvbnN0IAogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwog
fQogCitpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1JlaW5kZXgoY29uc3QgU3RyaW5nJiBp
bmRleE5hbWUpCit7CisgICAgcmV0dXJuIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVk
ID8gU1FMQXV0aERlbnkgOiBTUUxBdXRoQWxsb3cpOworfQorCiBpbnQgRGF0YWJhc2VBdXRob3Jp
emVyOjphbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CiAgICAgcmV0dXJu
IGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VBdXRob3JpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlQXV0aG9yaXplci5oCShyZXZpc2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZUF1dGhvcml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTksMTAgKzU5LDEwIEBAIHB1Ymxp
YzoKICAgICBpbnQgZHJvcFRyaWdnZXIoY29uc3QgU3RyaW5nJiB0cmlnZ2VyTmFtZSwgY29uc3Qg
U3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBkcm9wVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5n
JiB0cmlnZ2VyTmFtZSwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogCi0gICAgaW50IGNyZWF0
ZVZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsg
fQotICAgIGludCBjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyBy
ZXR1cm4gU1FMQXV0aEFsbG93OyB9Ci0gICAgaW50IGRyb3BWaWV3KGNvbnN0IFN0cmluZyYgLyp2
aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgZHJvcFRlbXBWaWV3
KGNvbnN0IFN0cmluZyYgLyp2aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KKyAg
ICBpbnQgY3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAgICBpbnQgY3JlYXRl
VGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGRyb3BWaWV3KGNvbnN0
IFN0cmluZyYgdmlld05hbWUpOworICAgIGludCBkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiB2
aWV3TmFtZSk7CiAKICAgICBpbnQgY3JlYXRlVlRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVOYW1l
LCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpOwogICAgIGludCBkcm9wVlRhYmxlKGNvbnN0IFN0
cmluZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIG1vZHVsZU5hbWUpOwpAQCAtNzUsNyArNzUs
NyBAQCBwdWJsaWM6CiAgICAgaW50IGFsbG93U2VsZWN0KCkgeyByZXR1cm4gU1FMQXV0aEFsbG93
OyB9CiAgICAgaW50IGFsbG93UmVhZChjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3Ry
aW5nJiBjb2x1bW5OYW1lKTsKIAotICAgIGludCBhbGxvd1JlaW5kZXgoY29uc3QgU3RyaW5nJiAv
KmluZGV4TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KKyAgICBpbnQgYWxsb3dSZWlu
ZGV4KGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lKTsKICAgICBpbnQgYWxsb3dBbmFseXplKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKTsKICAgICBpbnQgYWxsb3dGdW5jdGlvbihjb25zdCBTdHJpbmcm
IGZ1bmN0aW9uTmFtZSk7CiAgICAgaW50IGFsbG93UHJhZ21hKGNvbnN0IFN0cmluZyYgcHJhZ21h
TmFtZSwgY29uc3QgU3RyaW5nJiBmaXJzdEFyZ3VtZW50KTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MCwxMyArNjAsMTMgQEAgc3RhdGljIGNv
bnN0IGludCBEZWZhdWx0UXVvdGFTaXplSW5jcmVhcwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlvbjo6Y3JlYXRlKERhdGFiYXNl
KiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+IHN1Y2Nlc3NDYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdy
YXBwZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRPbmx5KQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNr
LCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNR
TFRyYW5zYWN0aW9uKGRiLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNr
LCB3cmFwcGVyLCByZWFkT25seSkpOwogfQogCiBTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rp
b24oRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxi
YWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFj
aywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3Jh
cHBlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uV3JhcHBlcj4gd3JhcHBlciwgYm9vbCByZWFkT25seSkKICAgICA6IG1fbmV4dFN0ZXAo
JlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaykKICAgICAsIG1fZXhlY3V0ZVNxbEFsbG93ZWQo
ZmFsc2UpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQpAQCAtNzcsNiArNzcsNyBAQCBTUUxUcmFuc2Fj
dGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqCiAgICAgLCBtX3Nob3VsZFJldHJ5Q3VycmVu
dFN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkKICAgICAs
IG1fbG9ja0FjcXVpcmVkKGZhbHNlKQorICAgICwgbV9yZWFkT25seShyZWFkT25seSkKIHsKICAg
ICBBU1NFUlQobV9kYXRhYmFzZSk7CiB9CkBAIC05MiwxMCArOTMsMTIgQEAgdm9pZCBTUUxUcmFu
c2FjdGlvbjo6ZXhlY3V0ZVNRTChjb25zdCBTdAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYm9vbCByZWFkT25seU1vZGUgPSBmYWxzZTsKLSAgICBQYWdlKiBwYWdlID0gbV9kYXRhYmFz
ZS0+ZG9jdW1lbnQoKS0+cGFnZSgpOwotICAgIGlmICghcGFnZSB8fCBwYWdlLT5zZXR0aW5ncygp
LT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCkpCi0gICAgICAgIHJlYWRPbmx5TW9kZSA9IHRydWU7
CisgICAgYm9vbCByZWFkT25seU1vZGUgPSBtX3JlYWRPbmx5OworICAgIGlmICghcmVhZE9ubHlN
b2RlKSB7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5wYWdl
KCk7CisgICAgICAgIGlmICghcGFnZSB8fCBwYWdlLT5zZXR0aW5ncygpLT5wcml2YXRlQnJvd3Np
bmdFbmFibGVkKCkpCisgICAgICAgICAgICByZWFkT25seU1vZGUgPSB0cnVlOworICAgIH0KIAog
ICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRl
KHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcmVhZE9u
bHlNb2RlKTsKIApAQCAtMjA0LDcgKzIwNyw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZv
cm1QZW5kaW5nQ2FsbGIKIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2soKQogewot
ICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhp
cyk7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1aXJlTG9j
ayh0aGlzLCBtX3JlYWRPbmx5KTsKIH0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVp
cmVkKCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA0ODE3NSkKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw3
ICs2Niw4IEBAIHB1YmxpYzoKIAogY2xhc3MgU1FMVHJhbnNhY3Rpb24gOiBwdWJsaWMgVGhyZWFk
U2FmZVNoYXJlZDxTUUxUcmFuc2FjdGlvbj4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uPiBjcmVhdGUoRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4s
IFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBw
ZXI+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFi
YXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uV3JhcHBlcj4sIGJvb2wgcmVhZE9ubHkpOwogCiAgICAgflNRTFRyYW5zYWN0aW9u
KCk7CiAKQEAgLTgwLDcgKzgxLDggQEAgcHVibGljOgogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgp
IHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBTUUxUcmFuc2Fj
dGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJh
Y2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4pOworICAgIFNRTFRyYW5zYWN0
aW9uKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LAorICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+
LCBib29sIHJlYWRPbmx5KTsKIAogICAgIHR5cGVkZWYgdm9pZCAoU1FMVHJhbnNhY3Rpb246OipU
cmFuc2FjdGlvblN0ZXBNZXRob2QpKCk7CiAgICAgVHJhbnNhY3Rpb25TdGVwTWV0aG9kIG1fbmV4
dFN0ZXA7CkBAIC0xMjMsNiArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkUmV0
cnlDdXJyZW50U3RhdGVtZW50OwogICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwogICAgIGJv
b2wgbV9sb2NrQWNxdWlyZWQ7CisgICAgYm9vbCBtX3JlYWRPbmx5OwogCiAgICAgTXV0ZXggbV9z
dGF0ZW1lbnRNdXRleDsKICAgICBEZXF1ZTxSZWZQdHI8U1FMU3RhdGVtZW50PiA+IG1fc3RhdGVt
ZW50UXVldWU7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwCShyZXZpc2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBzdGF0
aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRpZmllcihTUUxUCiAgICAgcmV0dXJuIGRhdGFiYXNl
LT5zdHJpbmdJZGVudGlmaWVyKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQordm9pZCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24sIGJvb2wpCiB7CiAgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRp
Zmllcih0cmFuc2FjdGlvbik7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlv
biopOworICAgICAgICB2b2lkIGFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiwgYm9vbCByZWFk
T25seSk7CiAgICAgICAgIHZvaWQgcmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKICAgICAg
ICAgdm9pZCBzaHV0ZG93bigpOwogICAgIHByaXZhdGU6CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0ODE3
NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDA5LTA5LTAzICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEg
dGVzdCBmb3IgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI4OTE4CisKKyAgICAgICAgKiBzdG9yYWdlL3Rl
c3QtYXV0aG9yaXplci5odG1sOgorCiAyMDA5LTA5LTA4ICBKaWFuIExpICA8amlhbmxpQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IExheW91
dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKK1RoaXMgdGVzdCB0ZXN0cyB0aGUgZGF0
YWJhc2UgYXV0aG9yaXplci4KK1NRTElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVB
VEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RS
SUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0YXRl
bWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFU
RV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9SRUFEIHN0
YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfU0VMRUNUIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfREVMRVRFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfSU5TRVJUIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
UFJBR01BIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFC
TEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkLgorU1FMSVRFX1RSQU5TQUNUSU9OIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3Jp
emVkCitTUUxJVEVfQVRUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJ
VEVfREVUQUNIIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVJTkRF
WCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDog
bm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfRFJPUF9URU1QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9U
RU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVklFVyBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkLgorU1FMSVRFX0RST1BfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1Bf
VEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1dyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4K
K1NRTElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NR
TElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5E
RVggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9U
QUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9URU1Q
X1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVf
VEVNUF9WSUVXIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRF
X1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVf
VklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9WVEFC
TEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfSU5ERVgg
c3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQg
c3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
Q1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxl
ZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9SRUFEIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfU0VMRUNUIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfREVMRVRFIHN0YXRlbWVudCBm
YWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfSU5TRVJUIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfVVBEQVRFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3Jp
emVkCitTUUxJVEVfUFJBR01BIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJ
VEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9B
TFRFUl9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBubyBzdWNoIHRhYmxlOiBUZXN0VGFibGUKK1NR
TElURV9UUkFOU0FDVElPTiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRF
X0FUVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RFVEFDSCBz
dGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50
IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6
IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9JTkRFWCBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5v
dCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90
IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6
ZWQKK1NRTElURV9EUk9QX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitS
ZWFkIHRyYW5zYWN0aW9ucyBzdWNjZWVkZWQuCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2Uv
dGVzdC1hdXRob3JpemVyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90
ZXN0LWF1dGhvcml6ZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2Uv
dGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc0IEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9j
dW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rpb24g
dGVybWluYXRlVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlv
biBsb2dBbmRUZXJtaW5hdGVUZXN0KG1lc3NhZ2UsIGVycm9yKQoreworICAgIGxvZyhtZXNzYWdl
ICsgIjogIiArIGVycm9yLm1lc3NhZ2UpOworICAgIHRlcm1pbmF0ZVRlc3QoKTsKK30KKworZnVu
Y3Rpb24gY2xlYW51cChkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgewor
ICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgVGVzdDsiKTsK
KyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgSU5ERVggSUYgRVhJU1RTIFRlc3RJbmRl
eDsiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1AgVklFVyBJRiBFWElTVFMgVGVz
dFZpZXc7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9QIFRSSUdHRVIgSUYgRVhJ
U1RTIFRlc3RUcmlnZ2VyOyIpOworICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRU
ZXJtaW5hdGVUZXN0KCJDbGVhbnVwIGZhaWxlZCIsIGVycm9yKTsgfSk7Cit9CisKK2Z1bmN0aW9u
IHN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayhzdGF0ZW1lbnRUeXBlKQoreworICAgIGxvZyhzdGF0
ZW1lbnRUeXBlICsgIiBzdGF0ZW1lbnQgc3VjY2VlZGVkLiIpOworfQorCitmdW5jdGlvbiBzdGF0
ZW1lbnRFcnJvckNhbGxiYWNrKHN0YXRlbWVudFR5cGUsIGVycm9yKQoreworICAgIGxvZyhzdGF0
ZW1lbnRUeXBlICsgIiBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1l
bnQsIG9wZXJhdGlvbikKK3sKKyAgICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCwgW10sCisgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNr
KG9wZXJhdGlvbik7IH0sCisgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsg
cmV0dXJuIHN0YXRlbWVudEVycm9yQ2FsbGJhY2sob3BlcmF0aW9uLCBlcnJvcik7IH0pOworfQor
CitmdW5jdGlvbiBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQodHgsICJDUkVBVEUgVEFCTEUgVGVzdCAoRm9vIGludCk7IiwgIlNRTElURV9DUkVBVEVfVEFC
TEUiKTsKK30KKworZnVuY3Rpb24gY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgSU5ERVggVGVzdEluZGV4IE9OIFRlc3QgKEZv
byk7IiwgIlNRTElURV9DUkVBVEVfSU5ERVgiKTsKKworICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBm
b2xsb3dpbmcgcXVlcnkgc2hvdWxkIHRyaWdnZXIgYSBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVgg
b3BlcmF0aW9uCisgICAgLy8gKGFjY29yZGluZyB0byBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdGVt
cGZpbGVzLmh0bWwpLCBpdCBkb2Vzbid0LCBhbmQgSSdtIG5vdCBhd2FyZQorICAgIC8vIG9mIGFu
eSBvdGhlciB3YXkgdG8gdHJpZ2dlciB0aGlzIG9wZXJhdGlvbi4gU28gd2UnbGwgc2tpcCBpdCBm
b3Igbm93LgorICAgIC8vZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCAqIEZST00gVGVzdCBX
SEVSRSBGb28gSU4gKDEsIDIsIDMpOyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVgiKTsKKwor
ICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUQUJMRSBUZXN0VGVtcFRhYmxl
IChGb28gaW50KTsiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RBQkxFIik7CisgICAgZXhlY3V0ZVN0
YXRlbWVudCh0eCwgIkNSRUFURSBURU1QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyIElOU0VSVCBP
TiBUZXN0IEJFR0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORDsiLCAiU1FMSVRFX0NS
RUFURV9URU1QX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRF
TVAgVklFVyBUZXN0VGVtcFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FM
SVRFX0NSRUFURV9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRF
IFRSSUdHRVIgVGVzdFRyaWdnZXIgSU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNUIENPVU5UKCop
IEZST00gVGVzdDsgRU5EOyIsICJTUUxJVEVfQ1JFQVRFX1RSSUdHRVIiKTsKKyAgICBleGVjdXRl
U3RhdGVtZW50KHR4LCAiQ1JFQVRFIFZJRVcgVGVzdFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZS
T00gVGVzdDsiLCAiU1FMSVRFX0NSRUFURV9WSUVXIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkNSRUFURSBWSVJUVUFMIFRBQkxFIFRlc3RWaXJ0dWFsVGFibGUgVVNJTkcgTWlzc2luZ01v
ZHVsZTsiLCAiU1FMSVRFX0NSRUFURV9WVEFCTEUiKTsKK30KKworZnVuY3Rpb24gb3RoZXJTdGF0
ZW1lbnRzQ2FsbGJhY2sodHgpCit7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9SRUFEIik7CisgICAgZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9TRUxFQ1QiKTsKKyAg
ICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVMRVRFIEZST00gVGVzdDsiLCAiU1FMSVRFX0RFTEVU
RSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAo
MSk7IiwgIlNRTElURV9JTlNFUlQiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiVVBEQVRF
IFRlc3QgU0VUIEZvbyA9IDIgV0hFUkUgRm9vID0gMTsiLCAiU1FMSVRFX1VQREFURSIpOworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJQUkFHTUEgY2FjaGVfc2l6ZTsiLCAiU1FMSVRFX1BSQUdN
QSIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3QgUkVOQU1F
IFRPIFRlc3RUYWJsZTsiLCAiU1FMSVRFX0FMVEVSX1RBQkxFIik7CisgICAgLy8gUmVuYW1lIHRo
ZSB0YWJsZSBiYWNrIHRvIGl0cyBvcmlnaW5hbCBuYW1lCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0
eCwgIkFMVEVSIFRBQkxFIFRlc3RUYWJsZSBSRU5BTUUgVG8gVGVzdDsiLCAiU1FMSVRFX0FMVEVS
X1RBQkxFIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQkVHSU4gVFJBTlNBQ1RJT047
IiwgIlNRTElURV9UUkFOU0FDVElPTiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBVFRB
Q0ggbWFpbiBBUyBUZXN0TWFpbjsiLCAiU1FMSVRFX0FUVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJERVRBQ0ggVGVzdE1haW47IiwgIlNRTElURV9ERVRBQ0giKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiUkVJTkRFWDsiLCAiU1FMSVRFX1JFSU5ERVgiKTsKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiQU5BTFlaRTsiLCAiU1FMSVRFX0FOQUxZWkUiKTsKKworICAgIC8v
IFNRTElURV9GVU5DVElPTjogYWxsb3dlZCB3cml0ZSBtb2RlCisgICAgLy8gVGhlcmUgaXMgbm8g
U1FML0phdmFzY3JpcHQgQVBJIHRvIGFkZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIHRvIFNRTGl0
ZSwKKyAgICAvLyBzbyB3ZSBjYW5ub3QgdGVzdCB0aGlzIG9wZXJhdGlvbgorfQorCitmdW5jdGlv
biBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJEUk9QIElOREVYIFRlc3RJbmRleDsiLCAiU1FMSVRFX0RST1BfSU5ERVgiKTsKKworICAgIC8v
IFNRTElURV9EUk9QX1RFTVBfSU5ERVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIE5v
dCBzdXJlIGhvdyB0byB0ZXN0IHRoaXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0b21hdGljYWxseSBk
cm9wcGVkIHdoZW4KKyAgICAvLyB0aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBidXQgSFRNTDUgZG9l
c24ndCBzcGVjaWZ5IGEgY2xvc2VEYXRhYmFzZSgpIGNhbGwuCisKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCAiRFJPUCBUQUJMRSBUZXN0VGVtcFRhYmxlOyIsICJTUUxJVEVfRFJPUF9URU1QX1RB
QkxFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVFJJR0dFUiBUZXN0VGVtcFRy
aWdnZXI7IiwgIlNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1l
bnQodHgsICJEUk9QIFZJRVcgVGVzdFRlbXBWaWV3OyIsICJTUUxJVEVfRFJPUF9URU1QX1ZJRVci
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUcmlnZ2VyOyIs
ICJTUUxJVEVfRFJPUF9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1Ag
VklFVyBUZXN0VmlldzsiLCAiU1FMSVRFX0RST1BfVklFVyIpOworCisgICAgLy8gU1FMSVRFX0RS
T1BfVlRBQkxFOiBhbGxvd2VkIGluIHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qgc3VyZSBob3cgdG8g
dGVzdCB0aGlzOiB3ZSBjYW5ub3QgY3JlYXRlIGEgdmlydHVhbCB0YWJsZSBiZWNhdXNlIHdlIGRv
IG5vdAorICAgIC8vIGhhdmUgU1FML0phdmFzY3JpcHQgQVBJcyB0byByZWdpc3RlciBhIG1vZHVs
ZSB0aGF0IGltcGxlbWVudHMgYSB2aXJ0dWFsIHRhYmxlLgorICAgIC8vIFRoZXJlZm9yZSwgdHJ5
aW5nIHRvIGRyb3AgYSB2aXJ0dWFsIHRhYmxlIHdpbGwgYWx3YXlzIGZhaWwgKG5vIHN1Y2ggdGFi
bGUpCisgICAgLy8gYmVmb3JlIGV2ZW4gZ2V0dGluZyB0byB0aGUgYXV0aG9yaXplci4KKworICAg
IGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFRBQkxFIFRlc3Q7IiwgIlNRTElURV9EUk9QX1RB
QkxFIik7Cit9CisKK2Z1bmN0aW9uIHRlc3RSZWFkV3JpdGVNb2RlKGRiKQoreworICAgIGRiLnRy
YW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICBjcmVhdGVUYWJsZUNhbGxiYWNr
KHR4KTsKKyAgICAgICAgICAgIGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAg
ICAgICBvdGhlclN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgICAgICBkcm9wU3RhdGVt
ZW50c0NhbGxiYWNrKHR4KTsKKyAgICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsg
bG9nQW5kVGVybWluYXRlVGVzdCgiV3JpdGUgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9
LAorICAgICAgICBmdW5jdGlvbigpIHsgbG9nKCJXcml0ZSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQu
Iik7IH0pOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZE9ubHlNb2RlKGRiKQoreworICAgIC8vIFRl
c3QgdGhlICdDUkVBVEUgVEFCTEUnIG9wZXJhdGlvbjsgaXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQK
KyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjaywKKyAgICAgICAgZnVu
Y3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnQ1JFQVRFIFRBQkxFJyB0
cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworCisgICAgLy8gSW4gb3JkZXIgdG8gdGVz
dCBhbGwgb3RoZXIgJ0NSRUFURScgb3BlcmF0aW9ucywgd2UgbXVzdCBjcmVhdGUgdGhlIHRhYmxl
IGZpcnN0CisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjaywKKyAgICAgICAg
ZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiV3JpdGUgJ0NSRUFURSBUQUJM
RScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rp
b24oY3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBs
b2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFkICdDUkVBVEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVy
cm9yKTsgfSk7CisKKyAgICAvLyBJbiBvcmRlciB0byB0ZXN0IHRoZSAnRFJPUCcgYW5kICdvdGhl
cicgb3BlcmF0aW9ucywgd2UgbmVlZCB0byBmaXJzdCBjcmVhdGUgdGhlIHJlc3BlY3RpdmUgZW50
aXRpZXMKKyAgICBkYi50cmFuc2FjdGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAg
ICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIldyaXRlICdDUkVBVEUn
IHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9u
KG90aGVyU3RhdGVtZW50c0NhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dB
bmRUZXJtaW5hdGVUZXN0KCJSZWFkICdvdGhlcicgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3Ip
OyB9KTsKKworICAgIC8vIEhhY2s6IGluc2VydCBhbiBlbXB0eSB3cml0ZSB0cmFuc2FjdGlvbiB0
byBndWFyYXRlZSB0aGF0IHRoZXNlIHRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgc2VxdWVudGlh
bGx5CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsgfSk7CisgICAgZGIucmVhZFRy
YW5zYWN0aW9uKGRyb3BTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9y
KSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIlJlYWQgJ0RST1AnIHRyYW5zYWN0aW9uIGZhaWxlZCIs
IGVycm9yKTsgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7IGxvZygiUmVhZCB0cmFuc2FjdGlvbnMg
c3VjY2VlZGVkLiIpOyB0ZXJtaW5hdGVUZXN0KCk7IH0pOworfQorCitmdW5jdGlvbiBydW5UZXN0
KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGRi
ID0gb3BlbkRhdGFiYXNlKCJBdXRob3JpemVyVGVzdCIsICIxLjAiLCAiVGVzdHMgdGhlIGRhdGFi
YXNlIGF1dGhvcml6ZXIuIiwgMzI3NjgpOworICAgICAgICBjbGVhbnVwKGRiKTsKKyAgICAgICAg
dGVzdFJlYWRXcml0ZU1vZGUoZGIpOworICAgICAgICB0ZXN0UmVhZE9ubHlNb2RlKGRiKTsKKyAg
ICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0PgorPGhlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1
blRlc3QoKTsiPgorVGhpcyB0ZXN0IHRlc3RzIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLjxicj4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="20284"
          type_id="1"
          status="-"
          setter="dglazkov"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39231</attachid>
            <date>2009-09-08 17:12:35 -0700</date>
            <delta_ts>2009-09-09 11:40:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>32021</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODE5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDktMDktMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgc3VwcG9ydC9iaW5kaW5ncyBmb3IgcmVhZC1vbmx5IHRyYW5zYWN0aW9ucy4K
KyAgICAgICAgMi4gRGlzYWxsb3dpbmcgdGhlIFNRTElURV8qX1ZJRVcgYW5kIFJFSU5ERVggb3Bl
cmF0aW9ucyBpbiB0aGUKKyAgICAgICAgcHJpdmF0ZSBicm93c2luZyBtb2RlLgorICAgICAgICAz
LiBBZGRpbmcgYW4gYXV0aG9yaXplciB0ZXN0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODkxOAorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvdGVz
dC1hdXRob3JpemVyLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOiBQYXJzZXMgYWxs
IGFyZ3VtZW50cyBhbmQgZXhlY3V0ZXMgYQorICAgICAgICB0cmFuc2FjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKTogUmVmYWN0b3JlZCB0byB1c2UKKyAg
ICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oKS4KKyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6
OnJlYWRUcmFuc2FjdGlvbik6IEFkZGVkIHRvIGV4ZWN1dGUgcmVhZC1vbmx5CisgICAgICAgIHRy
YW5zYWN0aW9ucyB1c2luZyBjcmVhdGVUcmFuc2FjdGlvbigpLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDogQWRkZWQgdGhlIGJpbmRpbmcgZm9yCisgICAg
ICAgIERhdGFiYXNlOjpyZWFkVHJhbnNhY3Rpb24oKS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6IFBhcnNlcyBhbGwgYXJndW1lbnRzIGFuZCBleGVjdXRlcyBhCisgICAgICAgIHRy
YW5zYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNhY3Rpb24pOiBSZWZhY3RvcmVkIHRv
IHVzZSBjcmVhdGVUcmFuc2FjdGlvbigpLgorICAgICAgICAoV2ViQ29yZTo6cmVhZFRyYW5zYWN0
aW9uKTogQWRkZWQgdG8gZXhlY3V0ZSByZWFkLW9ubHkKKyAgICAgICAgdHJhbnNhY3Rpb25zIHVz
aW5nIGNyZWF0ZVRyYW5zYWN0aW9uKCkuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOiBBZGRlZCBzdXBwb3J0
IGZvciByZWFkLW9ubHkKKyAgICAgICAgdHJhbnNhY3Rpb25zLgorICAgICAgICAqIHN0b3JhZ2Uv
RGF0YWJhc2UuaDogQWRkZWQgc3VwcG9ydCBmb3IgcmVhZC1vbmx5IHRyYW5zYWN0aW9ucy4KKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmlkbDogQWRkZWQgc3VwcG9ydCBmb3IgcmVhZC1vbmx5
IHRyYW5zYWN0aW9ucy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZSk6
IE1ha2UgaXQgb2J2aW91cworICAgICAgICB0aGF0IHRoZSBzdGF0ZW1lbnQgd2lsbCBiZSBkZW5p
ZWQgaW4gcHJpdmF0ZSBicm93c2luZyBtb2RlIGFuZAorICAgICAgICByZWFkLW9ubHkgdHJhbnNh
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRh
YmxlKTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRl
VGVtcEluZGV4KTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6
ZHJvcFRlbXBJbmRleCk6IFNhbWUuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZVRlbXBUcmlnZ2VyKTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyk6IERlbnkgaW4gcHJpdmF0ZQorICAgICAgICBi
cm93c2luZyBtb2RlIGFuZCByZWFkLW9ubHkgdHJhbnNhY3Rpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6IFNhbWUuCisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KTogU2FtZS4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KTogU2FtZS4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWluZGV4KTogU2FtZS4KKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uY3BwOiBBZGRlZCBzdXBwb3J0IGZvciByZWFkLW9ubHkKKyAgICAgICAgdHJh
bnNhY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVp
cmVMb2NrKTogQWRkZWQgYSBuZXcKKyAgICAgICAgcGFyYW1ldGVyIGluIHByZXBhcmF0aW9uIGZv
ciBhIGNoYW5nZSB0aGF0IHdpbGwgYWxsb3cgbXVsdGlwbGUKKyAgICAgICAgcmVhZC1vbmx5IHRy
YW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBEQiB0byBydW4gY29uY3VycmVudGx5LgorICAgICAgICAq
IHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOgorCiAyMDA5LTA5LTA4ICBEYXZl
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93
ZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNp
b24gNDgxNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUgSlNEYXRhYmFzZTo6Y2hhbmdl
VmVyc2lvbihFeGVjU3QKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBK
U0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MsIERhdGFiYXNlKiBkYXRhYmFzZSwgYm9vbCByZWFkT25seSkKIHsK
ICAgICBKU09iamVjdCogb2JqZWN0OwogICAgIApAQCAtMTIyLDEwICsxMjIsMTkgQEAgSlNWYWx1
ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdAogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIG1faW1wbC0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxi
YWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSk7Ci0KKyAgICBkYXRhYmFz
ZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2Uo
KSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHkpOwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQorCitKU1ZhbHVlIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNh
Y3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBmYWxzZSk7Cit9CisgICAgCitKU1ZhbHVl
IEpTRGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIGFyZ3MsIG1f
aW1wbC5nZXQoKSwgdHJ1ZSk7Cit9CiAgICAgCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNF
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgJ
KHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21C
aW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw2ICs0NzcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhEYXRhYmFzZUNoYW5nZVZlcnNpb24p
OwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlVHJhbnNhY3Rpb24pOworICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlUmVhZFRyYW5zYWN0aW9uKTsKICAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhTUUxUcmFuc2FjdGlvbkV4ZWN1dGVTcWwpOwogICAgICAgICBERUNMQVJF
X0NBTExCQUNLKFNRTFJlc3VsdFNldFJvd0xpc3RJdGVtKTsKIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MTc1
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFz
ZUNoYW5nZVZlcnNpb24KICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1DQUxMQkFD
S19GVU5DX0RFQ0woRGF0YWJhc2VUcmFuc2FjdGlvbikKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY3JlYXRlVHJhbnNhY3Rpb24oY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgYm9vbCBy
ZWFkT25seSkKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZS50cmFuc2FjdGlvbigpIik7
Ci0KICAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJU
cmFuc2FjdGlvbiBjYWxsYmFjayBpcyByZXF1aXJlZC4iLCBWOFByb3h5OjpTeW50YXhFcnJvcik7
CiAKQEAgLTgyLDEyICs4MCwyMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRGF0YWJhc2VUcmFuc2Fj
dGlvbikKICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmNy
ZWF0ZShhcmdzWzJdLCBmcmFtZSk7CiAgICAgfQogCi0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9u
KGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxs
YmFjay5yZWxlYXNlKCkpOwotCisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJl
bGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNl
KCksIHJlYWRPbmx5KTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCitDQUxMQkFD
S19GVU5DX0RFQ0woRGF0YWJhc2VUcmFuc2FjdGlvbikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5E
YXRhYmFzZS50cmFuc2FjdGlvbigpIik7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFy
Z3MsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlUmVhZFRyYW5zYWN0
aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigpIik7
CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFyZ3MsIHRydWUpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIxLDkgKzUyMSw5IEBAIHZvaWQgRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3Qg
U3RyaW4KIH0KIAogdm9pZCBEYXRhYmFzZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
UmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCBy
ZWFkT25seSkKIHsKLSAgICBtX3RyYW5zYWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9u
OjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywg
MCkpOworICAgIG1fdHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0
ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCByZWFk
T25seSkpOwogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011
dGV4KTsKICAgICBpZiAoIW1fdHJhbnNhY3Rpb25JblByb2dyZXNzKQogICAgICAgICBzY2hlZHVs
ZVRyYW5zYWN0aW9uKCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNDgxNzUpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29s
IHJlYWRPbmx5KTsKIAogLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKICAgICBzdGF0aWMgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlk
bAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwogICAgICAgICBbQ3VzdG9tXSB2b2lk
IGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdW
ZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjayk7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgdHJhbnNhY3Rpb24oaW4gU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVy
cm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHJlYWRUcmFuc2FjdGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNh
bGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4g
Vm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYg
KzU4LDEyIEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRhYmxlKGNvbnMKIAogaW50
IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogeworICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSByZXN1bHRzIGluIGEgVVBE
QVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkg
dHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCisgICAgLy8g
d2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgaW4gdGhlc2UgY2FzZXMKKyAg
ICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7
CiB9CiAKQEAgLTcxLDYgKzc3LDEyIEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJs
ZShjb25zdCAKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUYWJsZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSkKIHsKKyAgICAvLyBTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHJlc3Vs
dHMgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGlu
IHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQg
YXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9EUk9QX1RFTVBfVEFCTEUgaW4gdGhlc2Ug
Y2FzZXMKKyAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7CiB9CiAKQEAgLTk0LDYgKzEwNiwxMiBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVy
OjpjcmVhdGVJbmRleChjb25zCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBJ
bmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKKyAgICAvLyBT
UUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBpbiBhIFVQREFURSBvciBJTlNF
UlQgb3BlcmF0aW9uLAorICAgIC8vIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSB0
cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywKKyAgICAvLyBzbyB3ZSBtaWdodCBhcyB3
ZWxsIGRpc2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBpbiB0aGVzZSBjYXNlcworICAg
IGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1cm4gU1FM
QXV0aERlbnk7CisKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsK
IH0KIApAQCAtMTA3LDYgKzEyNSwxMiBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wSW5k
ZXgoY29uc3QgCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wSW5kZXgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CisgICAgLy8gU1FMSVRFX0RST1Bf
VEVNUF9JTkRFWCBzaG91bGQgcmVzdWx0IGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMK
KyAgICAvLyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUg
YnJvd3NpbmcsIHNvIHdlIG1pZ2h0CisgICAgLy8gYXMgd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJP
UF9URU1QX0lOREVYIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1
cml0eUVuYWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKwogICAgIHJldHVybiBk
ZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCkBAIC0xMjEsNiArMTQ1LDEyIEBA
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRyaWdnZXIoY28KIAogaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCiB7CisgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgcmVzdWx0
cyBpbiBhIElOU0VSVCBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4g
cmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBh
cworICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgaW4gdGhl
c2UgY2FzZXMKKyAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuIFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7CiB9CiAKQEAgLTEzNCw5ICsxNjQsNDEgQEAgaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFRyaWdnZXIoY29ucwogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVt
cFRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CisgICAg
Ly8gU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHJlc3VsdHMgaW4gYSBERUxFVEUgb3BlcmF0aW9u
LCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93
IFNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBpbiB0aGVzZSBjYXNlcworICAgIGlmIChtX3JlYWRP
bmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisK
ICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAoraW50IERh
dGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKQorewor
ICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55
IDogU1FMQXV0aEFsbG93KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVt
cFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICAvLyBTUUxJVEVfQ1JFQVRFX1RF
TVBfVklFVyByZXN1bHRzIGluIGEgVVBEQVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAg
Ly8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3Npbmcs
IHNvIHdlIG1pZ2h0IGFzCisgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JFQVRFX1RFTVBf
VklFVyBpbiB0aGVzZSBjYXNlcworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5
RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0aEFsbG93KTsKK30KKworaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSkKK3sKKyAgICByZXR1
cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1
dGhBbGxvdyk7Cit9CisKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wVmlldyhjb25z
dCBTdHJpbmcmIHZpZXdOYW1lKQoreworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfVklFVyByZXN1
bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBp
biByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0
IGFzCisgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJPUF9URU1QX1ZJRVcgaW4gdGhlc2Ug
Y2FzZXMKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxB
dXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNy
ZWF0ZVZUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQogewogICAgIGlmIChtX3Jl
YWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQpAQCAtMTkxLDYgKzI1MywxMSBAQCBpbnQgRGF0
YWJhc2VBdXRob3JpemVyOjphbGxvd1JlYWQoY29uc3QgCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9u
VGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKK2ludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93
UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4TmFtZSkKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9u
bHkgJiYgbV9zZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9
CisKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRh
YmxlTmFtZSkKIHsKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHJldmlzaW9uIDQ4MTc1KQor
KysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCSh3b3JraW5nIGNvcHkpCkBA
IC01OSwxMCArNTksMTAgQEAgcHVibGljOgogICAgIGludCBkcm9wVHJpZ2dlcihjb25zdCBTdHJp
bmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAgICAgaW50IGRyb3BU
ZW1wVHJpZ2dlcihjb25zdCBTdHJpbmcmIHRyaWdnZXJOYW1lLCBjb25zdCBTdHJpbmcmIHRhYmxl
TmFtZSk7CiAKLSAgICBpbnQgY3JlYXRlVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykg
eyByZXR1cm4gU1FMQXV0aEFsbG93OyB9Ci0gICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0
cmluZyYgLyp2aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgZHJv
cFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsg
fQotICAgIGludCBkcm9wVGVtcFZpZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0
dXJuIFNRTEF1dGhBbGxvdzsgfQorICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYgdmll
d05hbWUpOworICAgIGludCBjcmVhdGVUZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsK
KyAgICBpbnQgZHJvcFZpZXcoY29uc3QgU3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGRyb3BU
ZW1wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKIAogICAgIGludCBjcmVhdGVWVGFibGUo
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9kdWxlTmFtZSk7CiAgICAg
aW50IGRyb3BWVGFibGUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgbW9k
dWxlTmFtZSk7CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICBpbnQgYWxsb3dTZWxlY3Qo
KSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KICAgICBpbnQgYWxsb3dSZWFkKGNvbnN0IFN0cmlu
ZyYgdGFibGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbHVtbk5hbWUpOwogCi0gICAgaW50IGFsbG93
UmVpbmRleChjb25zdCBTdHJpbmcmIC8qaW5kZXhOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxv
dzsgfQorICAgIGludCBhbGxvd1JlaW5kZXgoY29uc3QgU3RyaW5nJiBpbmRleE5hbWUpOwogICAg
IGludCBhbGxvd0FuYWx5emUoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpOwogICAgIGludCBhbGxv
d0Z1bmN0aW9uKGNvbnN0IFN0cmluZyYgZnVuY3Rpb25OYW1lKTsKICAgICBpbnQgYWxsb3dQcmFn
bWEoY29uc3QgU3RyaW5nJiBwcmFnbWFOYW1lLCBjb25zdCBTdHJpbmcmIGZpcnN0QXJndW1lbnQp
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA0ODE3NSkKKysr
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
LDEzICs2MCwxMyBAQCBzdGF0aWMgY29uc3QgaW50IERlZmF1bHRRdW90YVNpemVJbmNyZWFzCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IFNRTFRyYW5z
YWN0aW9uOjpjcmVhdGUoRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3ND
YWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIsIGJvb2wg
cmVhZE9ubHkpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwg
Y2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlcikpOworICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU1FMVHJhbnNhY3Rpb24oZGIsIGNhbGxiYWNrLCBlcnJvckNh
bGxiYWNrLCBzdWNjZXNzQ2FsbGJhY2ssIHdyYXBwZXIsIHJlYWRPbmx5KSk7CiB9CiAKIFNRTFRy
YW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyLCBib29sIHJlYWRP
bmx5KQogICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQogICAg
ICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkKICAgICAsIG1fZGF0YWJhc2UoZGIpCkBAIC03
Nyw2ICs3Nyw3IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSoKICAg
ICAsIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmll
ZERhdGFiYXNlKGZhbHNlKQogICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCisgICAgLCBtX3Jl
YWRPbmx5KHJlYWRPbmx5KQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKIH0KQEAgLTkyLDEw
ICs5MywxMiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBib29sIHJlYWRPbmx5TW9kZSA9IGZhbHNlOwotICAg
IFBhZ2UqIHBhZ2UgPSBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5wYWdlKCk7Ci0gICAgaWYgKCFw
YWdlIHx8IHBhZ2UtPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKLSAgICAg
ICAgcmVhZE9ubHlNb2RlID0gdHJ1ZTsKKyAgICBib29sIHJlYWRPbmx5TW9kZSA9IG1fcmVhZE9u
bHk7CisgICAgaWYgKCFyZWFkT25seU1vZGUpIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fZGF0
YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICAgICAgaWYgKCFwYWdlIHx8IHBhZ2UtPnNl
dHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJlYWRPbmx5
TW9kZSA9IHRydWU7CisgICAgfQogCiAgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50
ID0gU1FMU3RhdGVtZW50OjpjcmVhdGUoc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNr
LCBjYWxsYmFja0Vycm9yLCByZWFkT25seU1vZGUpOwogCkBAIC0yMDQsNyArMjA3LDcgQEAgdm9p
ZCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxsYgogCiB2b2lkIFNRTFRyYW5zYWN0
aW9uOjphY3F1aXJlTG9jaygpCiB7Ci0gICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGlu
YXRvcigpLT5hY3F1aXJlTG9jayh0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCktPmFjcXVpcmVMb2NrKHRoaXMsIG1fcmVhZE9ubHkpOwogfQogCiB2b2lkIFNR
TFRyYW5zYWN0aW9uOjpsb2NrQWNxdWlyZWQoKQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmgJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDggQEAgcHVibGljOgogCiBjbGFzcyBTUUxUcmFu
c2FjdGlvbiA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFRyYW5zYWN0aW9uPiB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFz
ZSosIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiBjcmVhdGUoRGF0YWJhc2UqLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxs
YmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSA9
IGZhbHNlKTsKIAogICAgIH5TUUxUcmFuc2FjdGlvbigpOwogCkBAIC04MCw3ICs4MSw4IEBAIHB1
YmxpYzoKICAgICBEYXRhYmFzZSogZGF0YWJhc2UoKSB7IHJldHVybiBtX2RhdGFiYXNlLmdldCgp
OyB9CiAKIHByaXZhdGU6Ci0gICAgU1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjaz4sIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbldyYXBwZXI+KTsKKyAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSosIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrPiwKKyAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiwgYm9vbCByZWFkT25seSk7CiAKICAgICB0
eXBlZGVmIHZvaWQgKFNRTFRyYW5zYWN0aW9uOjoqVHJhbnNhY3Rpb25TdGVwTWV0aG9kKSgpOwog
ICAgIFRyYW5zYWN0aW9uU3RlcE1ldGhvZCBtX25leHRTdGVwOwpAQCAtMTIzLDYgKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBi
b29sIG1fbW9kaWZpZWREYXRhYmFzZTsKICAgICBib29sIG1fbG9ja0FjcXVpcmVkOworICAgIGJv
b2wgbV9yZWFkT25seTsKIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8
UmVmUHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gNDgxNzUp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvVW51c2VkUGFyYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw4ICs0OCwx
MCBAQCBzdGF0aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRpZmllcihTUUxUCiAgICAgcmV0dXJu
IGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCk7CiB9CiAKLXZvaWQgU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQordm9p
ZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24sIGJvb2wgcmVhZE9ubHkpCiB7CisgICAgVU5VU0VEX1BBUkFNKHJlYWRPbmx5
KTsKKwogICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJh
bnNhY3Rpb24pOwogCiAgICAgVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Bl
bmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIpOwpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiA0ODE3NSkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvciB7CiAgICAgcHVibGljOgotICAgICAgICB2b2lkIGFjcXVpcmVM
b2NrKFNRTFRyYW5zYWN0aW9uKik7CisgICAgICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJhbnNh
Y3Rpb24qLCBib29sIHJlYWRPbmx5KTsKICAgICAgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFu
c2FjdGlvbiopOwogICAgICAgICB2b2lkIHNodXRkb3duKCk7CiAgICAgcHJpdmF0ZToKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDQ4MTkzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDktMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1p
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBBZGRpbmcgYSB0ZXN0IGZvciB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg5MTgKKworICAg
ICAgICAqIHN0b3JhZ2UvdGVzdC1hdXRob3JpemVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbDogQWRkZWQuCisKIDIwMDktMDktMDgg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1v
dGh5IEhhdGNoZXIuCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhv
cml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS90
ZXN0LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBA
CitUaGlzIHRlc3QgdGVzdHMgdGhlIGRhdGFiYXNlIGF1dGhvcml6ZXIuCitTUUxJVEVfQ1JFQVRF
X1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9U
UklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBh
dXRob3JpemVkCitTUUxJVEVfUkVBRCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NFTEVD
VCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX0lOU0VSVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1VQREFURSBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0
aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
QUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9UUkFOU0FDVElPTiBzdGF0
ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FUVEFDSCBzdGF0ZW1lbnQgZmFp
bGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9B
TkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9JTkRF
WCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQg
c3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQu
CitTUUxJVEVfRFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9Q
X1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1ZJRVcgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RBQkxFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitXcml0
ZSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBm
YWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RBQkxFIHN0YXRlbWVudCBzdWNj
ZWVkZWQuCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3Jp
emVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhv
cml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBh
dXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBh
dXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhv
cml6ZWQKK1NRTElURV9DUkVBVEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3Jp
emVkCitTUUxJVEVfQ1JFQVRFX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JF
QVRFX1RFTVBfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9U
UklHR0VSIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBzdGF0
ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9UUklHR0VSIHN0YXRlbWVudCBzdWNjZWVk
ZWQuCitTUUxJVEVfQ1JFQVRFX1ZJRVcgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVB
VEVfVlRBQkxFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVBRCBz
dGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1NFTEVDVCBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0RFTEVURSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0lO
U0VSVCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1VQREFURSBzdGF0
ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX1BSQUdNQSBzdGF0ZW1lbnQgZmFp
bGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FMVEVSX1RBQkxFIHN0YXRlbWVudCBmYWlsZWQ6
IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm8g
c3VjaCB0YWJsZTogVGVzdFRhYmxlCitTUUxJVEVfVFJBTlNBQ1RJT04gc3RhdGVtZW50IGZhaWxl
ZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BVFRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1
dGhvcml6ZWQKK1NRTElURV9ERVRBQ0ggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQK
K1NRTElURV9SRUlOREVYIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVf
QU5BTFlaRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfSU5E
RVggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBfVEFC
TEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RFTVBfVFJJ
R0dFUiBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RST1BfVEVNUF9W
SUVXIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UUklHR0VS
IHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9WSUVXIHN0YXRl
bWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfRFJPUF9UQUJMRSBzdGF0ZW1lbnQg
ZmFpbGVkOiBub3QgYXV0aG9yaXplZAorUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLgorCklu
ZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3NSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9u
IGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9IG1lc3NhZ2Ug
KyAiPGJyPiI7Cit9CisKK2Z1bmN0aW9uIHRlcm1pbmF0ZVRlc3QoKQoreworICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nQW5kVGVybWluYXRlVGVzdChtZXNzYWdlLCBl
cnJvcikKK3sKKyAgICBsb2cobWVzc2FnZSArICI6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICB0
ZXJtaW5hdGVUZXN0KCk7Cit9CisKK2Z1bmN0aW9uIGNsZWFudXAoZGIpCit7CisgICAgZGIudHJh
bnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkRST1Ag
VEFCTEUgSUYgRVhJU1RTIFRlc3Q7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJEUk9Q
IElOREVYIElGIEVYSVNUUyBUZXN0SW5kZXg7Iik7CisgICAgICAgICAgICB0eC5leGVjdXRlU3Fs
KCJEUk9QIFZJRVcgSUYgRVhJU1RTIFRlc3RWaWV3OyIpOworICAgICAgICAgICAgdHguZXhlY3V0
ZVNxbCgiRFJPUCBUUklHR0VSIElGIEVYSVNUUyBUZXN0VHJpZ2dlcjsiKTsKKyAgICAgICAgfSwg
ZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiQ2xlYW51cCBmYWlsZWQiLCBl
cnJvcik7IH0pOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2soc3RhdGVt
ZW50VHlwZSkKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4iKTsKK30KKworZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjayhzdGF0ZW1lbnRUeXBl
LCBlcnJvcikKK3sKKyAgICBsb2coc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IGZhaWxlZDog
IiArIGVycm9yLm1lc3NhZ2UpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24gZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgc3RhdGVtZW50LCBvcGVyYXRpb24pCit7CisgICAgdHguZXhlY3V0
ZVNxbChzdGF0ZW1lbnQsIFtdLAorICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7
IHN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayhvcGVyYXRpb24pOyB9LAorICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IHJldHVybiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrKG9w
ZXJhdGlvbiwgZXJyb3IpOyB9KTsKK30KKworZnVuY3Rpb24gY3JlYXRlVGFibGVDYWxsYmFjayh0
eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRBQkxFIFRlc3QgKEZvbyBp
bnQpOyIsICJTUUxJVEVfQ1JFQVRFX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9uIGNyZWF0ZVN0YXRl
bWVudHNDYWxsYmFjayh0eCkKK3sKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIElO
REVYIFRlc3RJbmRleCBPTiBUZXN0IChGb28pOyIsICJTUUxJVEVfQ1JFQVRFX0lOREVYIik7CisK
KyAgICAvLyBFdmVuIHRob3VnaCB0aGUgZm9sbG93aW5nIHF1ZXJ5IHNob3VsZCB0cmlnZ2VyIGEg
U1FMSVRFX0NSRUFURV9URU1QX0lOREVYIG9wZXJhdGlvbgorICAgIC8vIChhY2NvcmRpbmcgdG8g
aHR0cDovL3d3dy5zcWxpdGUub3JnL3RlbXBmaWxlcy5odG1sKSwgaXQgZG9lc24ndCwgYW5kIEkn
bSBub3QgYXdhcmUKKyAgICAvLyBvZiBhbnkgb3RoZXIgd2F5IHRvIHRyaWdnZXIgdGhpcyBvcGVy
YXRpb24uIFNvIHdlJ2xsIHNraXAgaXQgZm9yIG5vdy4KKyAgICAvL2V4ZWN1dGVTdGF0ZW1lbnQo
dHgsICJTRUxFQ1QgKiBGUk9NIFRlc3QgV0hFUkUgRm9vIElOICgxLCAyLCAzKTsiLCAiU1FMSVRF
X0NSRUFURV9URU1QX0lOREVYIik7CisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRF
IFRFTVAgVEFCTEUgVGVzdFRlbXBUYWJsZSAoRm9vIGludCk7IiwgIlNRTElURV9DUkVBVEVfVEVN
UF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEVNUCBUUklHR0VS
IFRlc3RUZW1wVHJpZ2dlciBJTlNFUlQgT04gVGVzdCBCRUdJTiBTRUxFQ1QgQ09VTlQoKikgRlJP
TSBUZXN0OyBFTkQ7IiwgIlNRTElURV9DUkVBVEVfVEVNUF9UUklHR0VSIik7CisgICAgZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBURU1QIFZJRVcgVGVzdFRlbXBWaWV3IEFTIFNFTEVDVCBD
T1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9DUkVBVEVfVEVNUF9WSUVXIik7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBUUklHR0VSIFRlc3RUcmlnZ2VyIElOU0VSVCBPTiBU
ZXN0IEJFR0lOIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IEVORDsiLCAiU1FMSVRFX0NSRUFU
RV9UUklHR0VSIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSUVXIFRlc3RW
aWV3IEFTIFNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7IiwgIlNRTElURV9DUkVBVEVfVklFVyIp
OworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVklSVFVBTCBUQUJMRSBUZXN0Vmly
dHVhbFRhYmxlIFVTSU5HIE1pc3NpbmdNb2R1bGU7IiwgIlNRTElURV9DUkVBVEVfVlRBQkxFIik7
Cit9CisKK2Z1bmN0aW9uIG90aGVyU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1
dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsICJTUUxJVEVfUkVB
RCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0
OyIsICJTUUxJVEVfU0VMRUNUIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRFTEVURSBG
Uk9NIFRlc3Q7IiwgIlNRTElURV9ERUxFVEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAi
SU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDEpOyIsICJTUUxJVEVfSU5TRVJUIik7CisgICAgZXhl
Y3V0ZVN0YXRlbWVudCh0eCwgIlVQREFURSBUZXN0IFNFVCBGb28gPSAyIFdIRVJFIEZvbyA9IDE7
IiwgIlNRTElURV9VUERBVEUiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiUFJBR01BIGNh
Y2hlX3NpemU7IiwgIlNRTElURV9QUkFHTUEiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJBTFRFUiBUQUJMRSBUZXN0IFJFTkFNRSBUTyBUZXN0VGFibGU7IiwgIlNRTElURV9BTFRFUl9U
QUJMRSIpOworICAgIC8vIFJlbmFtZSB0aGUgdGFibGUgYmFjayB0byBpdHMgb3JpZ2luYWwgbmFt
ZQorICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBTFRFUiBUQUJMRSBUZXN0VGFibGUgUkVOQU1F
IFRvIFRlc3Q7IiwgIlNRTElURV9BTFRFUl9UQUJMRSIpOworCisgICAgZXhlY3V0ZVN0YXRlbWVu
dCh0eCwgIkJFR0lOIFRSQU5TQUNUSU9OOyIsICJTUUxJVEVfVFJBTlNBQ1RJT04iKTsKKyAgICBl
eGVjdXRlU3RhdGVtZW50KHR4LCAiQVRUQUNIIG1haW4gQVMgVGVzdE1haW47IiwgIlNRTElURV9B
VFRBQ0giKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiREVUQUNIIFRlc3RNYWluOyIsICJT
UUxJVEVfREVUQUNIIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlJFSU5ERVg7IiwgIlNR
TElURV9SRUlOREVYIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFOQUxZWkU7IiwgIlNR
TElURV9BTkFMWVpFIik7CisKKyAgICAvLyBTUUxJVEVfRlVOQ1RJT046IGFsbG93ZWQgd3JpdGUg
bW9kZQorICAgIC8vIFRoZXJlIGlzIG5vIFNRTC9KYXZhc2NyaXB0IEFQSSB0byBhZGQgdXNlci1k
ZWZpbmVkIGZ1bmN0aW9ucyB0byBTUUxpdGUsCisgICAgLy8gc28gd2UgY2Fubm90IHRlc3QgdGhp
cyBvcGVyYXRpb24KK30KKworZnVuY3Rpb24gZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCkKK3sK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBJTkRFWCBUZXN0SW5kZXg7IiwgIlNRTElU
RV9EUk9QX0lOREVYIik7CisKKyAgICAvLyBTUUxJVEVfRFJPUF9URU1QX0lOREVYOiBhbGxvd2Vk
IGluIHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qgc3VyZSBob3cgdG8gdGVzdCB0aGlzOiB0ZW1wIGlu
ZGV4ZXMgYXJlIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCB3aGVuCisgICAgLy8gdGhlIGRhdGFiYXNl
IGlzIGNsb3NlZCwgYnV0IEhUTUw1IGRvZXNuJ3Qgc3BlY2lmeSBhIGNsb3NlRGF0YWJhc2UoKSBj
YWxsLgorCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVEFCTEUgVGVzdFRlbXBUYWJs
ZTsiLCAiU1FMSVRFX0RST1BfVEVNUF9UQUJMRSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJEUk9QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyOyIsICJTUUxJVEVfRFJPUF9URU1QX1RSSUdH
RVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBWSUVXIFRlc3RUZW1wVmlldzsi
LCAiU1FMSVRFX0RST1BfVEVNUF9WSUVXIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRS
T1AgVFJJR0dFUiBUZXN0VHJpZ2dlcjsiLCAiU1FMSVRFX0RST1BfVFJJR0dFUiIpOworICAgIGV4
ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVzdFZpZXc7IiwgIlNRTElURV9EUk9QX1ZJ
RVciKTsKKworICAgIC8vIFNRTElURV9EUk9QX1ZUQUJMRTogYWxsb3dlZCBpbiB3cml0ZSBtb2Rl
CisgICAgLy8gTm90IHN1cmUgaG93IHRvIHRlc3QgdGhpczogd2UgY2Fubm90IGNyZWF0ZSBhIHZp
cnR1YWwgdGFibGUgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAvLyBoYXZlIFNRTC9KYXZhc2NyaXB0
IEFQSXMgdG8gcmVnaXN0ZXIgYSBtb2R1bGUgdGhhdCBpbXBsZW1lbnRzIGEgdmlydHVhbCB0YWJs
ZS4KKyAgICAvLyBUaGVyZWZvcmUsIHRyeWluZyB0byBkcm9wIGEgdmlydHVhbCB0YWJsZSB3aWxs
IGFsd2F5cyBmYWlsIChubyBzdWNoIHRhYmxlKQorICAgIC8vIGJlZm9yZSBldmVuIGdldHRpbmcg
dG8gdGhlIGF1dGhvcml6ZXIuCisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJM
RSBUZXN0OyIsICJTUUxJVEVfRFJPUF9UQUJMRSIpOworfQorCitmdW5jdGlvbiB0ZXN0UmVhZFdy
aXRlTW9kZShkYikKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAg
ICAgICAgY3JlYXRlVGFibGVDYWxsYmFjayh0eCk7CisgICAgICAgICAgICBjcmVhdGVTdGF0ZW1l
bnRzQ2FsbGJhY2sodHgpOworICAgICAgICAgICAgb3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2sodHgp
OworICAgICAgICAgICAgZHJvcFN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgIH0sCisg
ICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIldyaXRlIHRyYW5z
YWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSwKKyAgICAgICAgZnVuY3Rpb24oKSB7IGxvZygiV3Jp
dGUgdHJhbnNhY3Rpb24gc3VjY2VlZGVkLiIpOyB9KTsKK30KKworZnVuY3Rpb24gdGVzdFJlYWRP
bmx5TW9kZShkYikKK3sKKyAgICAvLyBUZXN0IHRoZSAnQ1JFQVRFIFRBQkxFJyBvcGVyYXRpb247
IGl0IHNob3VsZCBiZSBkaXNhbGxvd2VkCisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVRh
YmxlQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRl
c3QoIlJlYWQgJ0NSRUFURSBUQUJMRScgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsK
KworICAgIC8vIEluIG9yZGVyIHRvIHRlc3QgYWxsIG90aGVyICdDUkVBVEUnIG9wZXJhdGlvbnMs
IHdlIG11c3QgY3JlYXRlIHRoZSB0YWJsZSBmaXJzdAorICAgIGRiLnRyYW5zYWN0aW9uKGNyZWF0
ZVRhYmxlQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0
ZVRlc3QoIldyaXRlICdDUkVBVEUgVEFCTEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsg
fSk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGNyZWF0ZVN0YXRlbWVudHNDYWxsYmFjaywKKyAg
ICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnQ1JFQVRF
JyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0pOworCisgICAgLy8gSW4gb3JkZXIgdG8g
dGVzdCB0aGUgJ0RST1AnIGFuZCAnb3RoZXInIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gZmlyc3Qg
Y3JlYXRlIHRoZSByZXNwZWN0aXZlIGVudGl0aWVzCisgICAgZGIudHJhbnNhY3Rpb24oY3JlYXRl
U3RhdGVtZW50c0NhbGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJt
aW5hdGVUZXN0KCJXcml0ZSAnQ1JFQVRFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0p
OworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihvdGhlclN0YXRlbWVudHNDYWxsYmFjaywKKyAgICAg
ICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgiUmVhZCAnb3RoZXInIHRy
YW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisKKyAgICAvLyBIYWNrOiBpbnNlcnQgYW4g
ZW1wdHkgd3JpdGUgdHJhbnNhY3Rpb24gdG8gZ3VhcmF0ZWUgdGhhdCB0aGVzZSB0cmFuc2FjdGlv
bnMgYXJlIGV4ZWN1dGVkIHNlcXVlbnRpYWxseQorICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9u
KHR4KSB7IH0pOworICAgIGRiLnJlYWRUcmFuc2FjdGlvbihkcm9wU3RhdGVtZW50c0NhbGxiYWNr
LAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFkICdE
Uk9QJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBlcnJvcik7IH0sCisgICAgICAgIGZ1bmN0aW9uKCkg
eyBsb2coIlJlYWQgdHJhbnNhY3Rpb25zIHN1Y2NlZWRlZC4iKTsgdGVybWluYXRlVGVzdCgpOyB9
KTsKK30KKworZnVuY3Rpb24gcnVuVGVzdCgpCit7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisK
KyAgICB0cnkgeworICAgICAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIkF1dGhvcml6ZXJUZXN0
IiwgIjEuMCIsICJUZXN0cyB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4iLCAzMjc2OCk7CisgICAg
ICAgIGNsZWFudXAoZGIpOworICAgICAgICB0ZXN0UmVhZFdyaXRlTW9kZShkYik7CisgICAgICAg
IHRlc3RSZWFkT25seU1vZGUoZGIpOworICAgIH0gY2F0Y2goZXJyKSB7fQorfQorPC9zY3JpcHQ+
Cis8aGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIHRlc3QgdGVzdHMgdGhl
IGRhdGFiYXNlIGF1dGhvcml6ZXIuPGJyPgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="20297"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="20307"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>39285</attachid>
            <date>2009-09-09 11:40:39 -0700</date>
            <delta_ts>2009-09-09 14:35:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>31975</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0ODE5MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjUgQEAKKzIwMDktMDktMDggIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAxLiBBZGRpbmcgc3VwcG9ydC9iaW5kaW5ncyBmb3IgcmVhZC1vbmx5IHRyYW5zYWN0aW9ucy4K
KyAgICAgICAgMi4gRGlzYWxsb3dpbmcgdGhlIFNRTElURV8qX1ZJRVcgYW5kIFJFSU5ERVggb3Bl
cmF0aW9ucyBpbiB0aGUKKyAgICAgICAgcHJpdmF0ZSBicm93c2luZyBtb2RlLgorICAgICAgICAz
LiBBZGRpbmcgYW4gYXV0aG9yaXplciB0ZXN0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yODkxOAorCisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvdGVz
dC1hdXRob3JpemVyLmh0bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlVHJhbnNhY3Rpb24pOiBQYXJzZXMgYWxs
IGFyZ3VtZW50cyBhbmQgZXhlY3V0ZXMgYQorICAgICAgICB0cmFuc2FjdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKTogUmVmYWN0b3JlZCB0byB1c2UKKyAg
ICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oKS4KKyAgICAgICAgKFdlYkNvcmU6OkpTRGF0YWJhc2U6
OnJlYWRUcmFuc2FjdGlvbik6IEFkZGVkIHRvIGV4ZWN1dGUgcmVhZC1vbmx5CisgICAgICAgIHRy
YW5zYWN0aW9ucyB1c2luZyBjcmVhdGVUcmFuc2FjdGlvbigpLgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaDogQWRkZWQgdGhlIGJpbmRpbmcgZm9yCisgICAg
ICAgIERhdGFiYXNlOjpyZWFkVHJhbnNhY3Rpb24oKS4KKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6IFBhcnNlcyBhbGwgYXJndW1lbnRzIGFuZCBleGVjdXRlcyBhCisgICAgICAgIHRy
YW5zYWN0aW9uLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNhY3Rpb24pOiBSZWZhY3RvcmVkIHRv
IHVzZSBjcmVhdGVUcmFuc2FjdGlvbigpLgorICAgICAgICAoV2ViQ29yZTo6cmVhZFRyYW5zYWN0
aW9uKTogQWRkZWQgdG8gZXhlY3V0ZSByZWFkLW9ubHkKKyAgICAgICAgdHJhbnNhY3Rpb25zIHVz
aW5nIGNyZWF0ZVRyYW5zYWN0aW9uKCkuCisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb24pOiBBZGRlZCBzdXBwb3J0
IGZvciByZWFkLW9ubHkKKyAgICAgICAgdHJhbnNhY3Rpb25zLgorICAgICAgICAqIHN0b3JhZ2Uv
RGF0YWJhc2UuaDogQWRkZWQgc3VwcG9ydCBmb3IgcmVhZC1vbmx5IHRyYW5zYWN0aW9ucy4KKyAg
ICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlLmlkbDogQWRkZWQgc3VwcG9ydCBmb3IgcmVhZC1vbmx5
IHRyYW5zYWN0aW9ucy4KKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBUYWJsZSk6
IE1ha2UgaXQgb2J2aW91cworICAgICAgICB0aGF0IHRoZSBzdGF0ZW1lbnQgd2lsbCBiZSBkZW5p
ZWQgaW4gcHJpdmF0ZSBicm93c2luZyBtb2RlIGFuZAorICAgICAgICByZWFkLW9ubHkgdHJhbnNh
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVtcFRh
YmxlKTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRl
VGVtcEluZGV4KTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6
ZHJvcFRlbXBJbmRleCk6IFNhbWUuCisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6
ZXI6OmNyZWF0ZVRlbXBUcmlnZ2VyKTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFiYXNl
QXV0aG9yaXplcjo6ZHJvcFRlbXBUcmlnZ2VyKTogU2FtZS4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyk6IERlbnkgaW4gcHJpdmF0ZQorICAgICAgICBi
cm93c2luZyBtb2RlIGFuZCByZWFkLW9ubHkgdHJhbnNhY3Rpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2VBdXRob3JpemVyOjpjcmVhdGVUZW1wVmlldyk6IFNhbWUuCisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BWaWV3KTogU2FtZS4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBWaWV3KTogU2FtZS4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dSZWluZGV4KTogU2FtZS4KKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oOgorICAgICAgICAqIHN0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uY3BwOiBBZGRlZCBzdXBwb3J0IGZvciByZWFkLW9ubHkKKyAgICAgICAgdHJh
bnNhY3Rpb25zLgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVp
cmVMb2NrKTogQWRkZWQgYSBuZXcKKyAgICAgICAgcGFyYW1ldGVyIGluIHByZXBhcmF0aW9uIGZv
ciBhIGNoYW5nZSB0aGF0IHdpbGwgYWxsb3cgbXVsdGlwbGUKKyAgICAgICAgcmVhZC1vbmx5IHRy
YW5zYWN0aW9ucyBvbiB0aGUgc2FtZSBEQiB0byBydW4gY29uY3VycmVudGx5LgorICAgICAgICAq
IHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOgorCiAyMDA5LTA5LTA4ICBEYXZl
IEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcmsgUm93
ZS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RhdGFiYXNlQ3VzdG9tLmNwcAkocmV2aXNp
b24gNDgxNzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGF0YWJhc2VDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIEpTVmFsdWUgSlNEYXRhYmFzZTo6Y2hhbmdl
VmVyc2lvbihFeGVjU3QKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIH0KIAotSlNWYWx1ZSBK
U0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFy
Z3MpCitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEFyZ0xpc3QmIGFyZ3MsIERhdGFiYXNlKiBkYXRhYmFzZSwgYm9vbCByZWFkT25seSkKIHsK
ICAgICBKU09iamVjdCogb2JqZWN0OwogICAgIApAQCAtMTIyLDEwICsxMjIsMTkgQEAgSlNWYWx1
ZSBKU0RhdGFiYXNlOjp0cmFuc2FjdGlvbihFeGVjU3RhdAogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIG1faW1wbC0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxi
YWNrLnJlbGVhc2UoKSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSk7Ci0KKyAgICBkYXRhYmFz
ZS0+dHJhbnNhY3Rpb24oY2FsbGJhY2sucmVsZWFzZSgpLCBlcnJvckNhbGxiYWNrLnJlbGVhc2Uo
KSwgc3VjY2Vzc0NhbGxiYWNrLnJlbGVhc2UoKSwgcmVhZE9ubHkpOwogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQorCitKU1ZhbHVlIEpTRGF0YWJhc2U6OnRyYW5zYWN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNh
Y3Rpb24oZXhlYywgYXJncywgbV9pbXBsLmdldCgpLCBmYWxzZSk7Cit9CisgICAgCitKU1ZhbHVl
IEpTRGF0YWJhc2U6OnJlYWRUcmFuc2FjdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xp
c3QmIGFyZ3MpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGV4ZWMsIGFyZ3MsIG1f
aW1wbC5nZXQoKSwgdHJ1ZSk7Cit9CiAgICAgCiB9CiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNF
KQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgJ
KHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21C
aW5kaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3Nyw2ICs0NzcsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgREVDTEFSRV9DQUxMQkFDSyhEYXRhYmFzZUNoYW5nZVZlcnNpb24p
OwogICAgICAgICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlVHJhbnNhY3Rpb24pOworICAgICAg
ICBERUNMQVJFX0NBTExCQUNLKERhdGFiYXNlUmVhZFRyYW5zYWN0aW9uKTsKICAgICAgICAgREVD
TEFSRV9DQUxMQkFDSyhTUUxUcmFuc2FjdGlvbkV4ZWN1dGVTcWwpOwogICAgICAgICBERUNMQVJF
X0NBTExCQUNLKFNRTFJlc3VsdFNldFJvd0xpc3RJdGVtKTsKIApJbmRleDogV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHJldmlzaW9uIDQ4MTc1
KQorKysgV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEYXRhYmFzZUN1c3RvbS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDEwICs0OCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFz
ZUNoYW5nZVZlcnNpb24KICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCi1DQUxMQkFD
S19GVU5DX0RFQ0woRGF0YWJhc2VUcmFuc2FjdGlvbikKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gY3JlYXRlVHJhbnNhY3Rpb24oY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncywgYm9vbCBy
ZWFkT25seSkKIHsKLSAgICBJTkNfU1RBVFMoIkRPTS5EYXRhYmFzZS50cmFuc2FjdGlvbigpIik7
Ci0KICAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJU
cmFuc2FjdGlvbiBjYWxsYmFjayBpcyByZXF1aXJlZC4iLCBWOFByb3h5OjpTeW50YXhFcnJvcik7
CiAKQEAgLTgyLDEyICs4MCwyMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRGF0YWJhc2VUcmFuc2Fj
dGlvbikKICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrID0gVjhDdXN0b21Wb2lkQ2FsbGJhY2s6OmNy
ZWF0ZShhcmdzWzJdLCBmcmFtZSk7CiAgICAgfQogCi0gICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9u
KGNhbGxiYWNrLnJlbGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxs
YmFjay5yZWxlYXNlKCkpOwotCisgICAgZGF0YWJhc2UtPnRyYW5zYWN0aW9uKGNhbGxiYWNrLnJl
bGVhc2UoKSwgZXJyb3JDYWxsYmFjay5yZWxlYXNlKCksIHN1Y2Nlc3NDYWxsYmFjay5yZWxlYXNl
KCksIHJlYWRPbmx5KTsKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogfQogCitDQUxMQkFD
S19GVU5DX0RFQ0woRGF0YWJhc2VUcmFuc2FjdGlvbikKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5E
YXRhYmFzZS50cmFuc2FjdGlvbigpIik7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFy
Z3MsIGZhbHNlKTsKK30KKworQ0FMTEJBQ0tfRlVOQ19ERUNMKERhdGFiYXNlUmVhZFRyYW5zYWN0
aW9uKQoreworICAgIElOQ19TVEFUUygiRE9NLkRhdGFiYXNlLnJlYWRUcmFuc2FjdGlvbigpIik7
CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zYWN0aW9uKGFyZ3MsIHRydWUpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIxLDkgKzUyMSw5IEBAIHZvaWQgRGF0YWJhc2U6OmNoYW5nZVZlcnNpb24oY29uc3Qg
U3RyaW4KIH0KIAogdm9pZCBEYXRhYmFzZTo6dHJhbnNhY3Rpb24oUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
UmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgYm9vbCBy
ZWFkT25seSkKIHsKLSAgICBtX3RyYW5zYWN0aW9uUXVldWUuYXBwZW5kKFNRTFRyYW5zYWN0aW9u
OjpjcmVhdGUodGhpcywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywg
MCkpOworICAgIG1fdHJhbnNhY3Rpb25RdWV1ZS5hcHBlbmQoU1FMVHJhbnNhY3Rpb246OmNyZWF0
ZSh0aGlzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCAwLCByZWFk
T25seSkpOwogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011
dGV4KTsKICAgICBpZiAoIW1fdHJhbnNhY3Rpb25JblByb2dyZXNzKQogICAgICAgICBzY2hlZHVs
ZVRyYW5zYWN0aW9uKCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNDgxNzUpCisrKyBX
ZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAg
ICAgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgICAgICAg
ICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBib29s
IHJlYWRPbmx5KTsKIAogLy8gSW50ZXJuYWwgZW5naW5lIHN1cHBvcnQKICAgICBzdGF0aWMgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZUluZm9UYWJsZU5hbWUoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmlk
bAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaWRsCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyB2ZXJzaW9uOwogICAgICAgICBbQ3VzdG9tXSB2b2lk
IGNoYW5nZVZlcnNpb24oaW4gRE9NU3RyaW5nIG9sZFZlcnNpb24sIGluIERPTVN0cmluZyBuZXdW
ZXJzaW9uLCBpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNhbGxiYWNrLCBpbiBTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4gVm9pZENhbGxiYWNrIHN1Y2Nlc3ND
YWxsYmFjayk7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgdHJhbnNhY3Rpb24oaW4gU1FMVHJhbnNh
Y3Rpb25DYWxsYmFjayBjYWxsYmFjaywgaW4gU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGVy
cm9yQ2FsbGJhY2ssIGluIFZvaWRDYWxsYmFjayBzdWNjZXNzQ2FsbGJhY2spOworICAgICAgICBb
Q3VzdG9tXSB2b2lkIHJlYWRUcmFuc2FjdGlvbihpbiBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrIGNh
bGxiYWNrLCBpbiBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZXJyb3JDYWxsYmFjaywgaW4g
Vm9pZENhbGxiYWNrIHN1Y2Nlc3NDYWxsYmFjayk7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHJldmlzaW9uIDQ4MTc1KQorKysgV2ViQ29y
ZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYg
KzU4LDEyIEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRhYmxlKGNvbnMKIAogaW50
IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRhYmxlKGNvbnN0IFN0cmluZyYgdGFibGVO
YW1lKQogeworICAgIC8vIFNRTElURV9DUkVBVEVfVEVNUF9UQUJMRSByZXN1bHRzIGluIGEgVVBE
QVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkg
dHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCisgICAgLy8g
d2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JFQVRFX1RFTVBfVEFCTEUgaW4gdGhlc2UgY2FzZXMKKyAg
ICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAgICAgcmV0dXJuIFNR
TEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7
CiB9CiAKQEAgLTcxLDYgKzc3LDEyIEBAIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUYWJs
ZShjb25zdCAKIAogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFRlbXBUYWJsZShjb25zdCBT
dHJpbmcmIHRhYmxlTmFtZSkKIHsKKyAgICAvLyBTUUxJVEVfRFJPUF9URU1QX1RBQkxFIHJlc3Vs
dHMgaW4gYSBERUxFVEUgb3BlcmF0aW9uLCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGlu
IHJlYWQtb25seSB0cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQg
YXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93IFNRTElURV9EUk9QX1RFTVBfVEFCTEUgaW4gdGhlc2Ug
Y2FzZXMKKyAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAgICAg
cmV0dXJuIFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRh
YmxlTmFtZSk7CiB9CiAKQEAgLTk0LDYgKzEwNiwxMiBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVy
OjpjcmVhdGVJbmRleChjb25zCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRlbXBJ
bmRleChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKIHsKKyAgICAvLyBT
UUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggc2hvdWxkIHJlc3VsdCBpbiBhIFVQREFURSBvciBJTlNF
UlQgb3BlcmF0aW9uLAorICAgIC8vIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGluIHJlYWQtb25seSB0
cmFuc2FjdGlvbnMgb3IgcHJpdmF0ZSBicm93c2luZywKKyAgICAvLyBzbyB3ZSBtaWdodCBhcyB3
ZWxsIGRpc2FsbG93IFNRTElURV9DUkVBVEVfVEVNUF9JTkRFWCBpbiB0aGVzZSBjYXNlcworICAg
IGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1cm4gU1FM
QXV0aERlbnk7CisKICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsK
IH0KIApAQCAtMTA3LDYgKzEyNSwxMiBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wSW5k
ZXgoY29uc3QgCiAKIGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmRyb3BUZW1wSW5kZXgoY29uc3Qg
U3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CisgICAgLy8gU1FMSVRFX0RST1Bf
VEVNUF9JTkRFWCBzaG91bGQgcmVzdWx0IGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMK
KyAgICAvLyBub3QgYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUg
YnJvd3NpbmcsIHNvIHdlIG1pZ2h0CisgICAgLy8gYXMgd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJP
UF9URU1QX0lOREVYIGluIHRoZXNlIGNhc2VzCisgICAgaWYgKG1fcmVhZE9ubHkgJiYgbV9zZWN1
cml0eUVuYWJsZWQpCisgICAgICAgIHJldHVybiBTUUxBdXRoRGVueTsKKwogICAgIHJldHVybiBk
ZW55QmFzZWRPblRhYmxlTmFtZSh0YWJsZU5hbWUpOwogfQogCkBAIC0xMjEsNiArMTQ1LDEyIEBA
IGludCBEYXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVRyaWdnZXIoY28KIAogaW50IERhdGFiYXNl
QXV0aG9yaXplcjo6Y3JlYXRlVGVtcFRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5n
JiB0YWJsZU5hbWUpCiB7CisgICAgLy8gU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgcmVzdWx0
cyBpbiBhIElOU0VSVCBvcGVyYXRpb24sIHdoaWNoIGlzIG5vdAorICAgIC8vIGFsbG93ZWQgaW4g
cmVhZC1vbmx5IHRyYW5zYWN0aW9ucyBvciBwcml2YXRlIGJyb3dzaW5nLCBzbyB3ZSBtaWdodCBh
cworICAgIC8vIHdlbGwgZGlzYWxsb3cgU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgaW4gdGhl
c2UgY2FzZXMKKyAgICBpZiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCkKKyAgICAg
ICAgcmV0dXJuIFNRTEF1dGhEZW55OworCiAgICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1l
KHRhYmxlTmFtZSk7CiB9CiAKQEAgLTEzNCw5ICsxNjQsNDEgQEAgaW50IERhdGFiYXNlQXV0aG9y
aXplcjo6ZHJvcFRyaWdnZXIoY29ucwogCiBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjpkcm9wVGVt
cFRyaWdnZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCiB7CisgICAg
Ly8gU1FMSVRFX0RST1BfVEVNUF9UUklHR0VSIHJlc3VsdHMgaW4gYSBERUxFVEUgb3BlcmF0aW9u
LCB3aGljaCBpcyBub3QKKyAgICAvLyBhbGxvd2VkIGluIHJlYWQtb25seSB0cmFuc2FjdGlvbnMg
b3IgcHJpdmF0ZSBicm93c2luZywgc28gd2UgbWlnaHQgYXMKKyAgICAvLyB3ZWxsIGRpc2FsbG93
IFNRTElURV9EUk9QX1RFTVBfVFJJR0dFUiBpbiB0aGVzZSBjYXNlcworICAgIGlmIChtX3JlYWRP
bmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQorICAgICAgICByZXR1cm4gU1FMQXV0aERlbnk7CisK
ICAgICByZXR1cm4gZGVueUJhc2VkT25UYWJsZU5hbWUodGFibGVOYW1lKTsKIH0KIAoraW50IERh
dGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVmlldyhjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVy
biAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0
aEFsbG93KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6Y3JlYXRlVGVtcFZpZXcoY29u
c3QgU3RyaW5nJikKK3sKKyAgICAvLyBTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyByZXN1bHRzIGlu
IGEgVVBEQVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMgbm90CisgICAgLy8gYWxsb3dlZCBpbiByZWFk
LW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUgYnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCisg
ICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfQ1JFQVRFX1RFTVBfVklFVyBpbiB0aGVzZSBjYXNl
cworICAgIHJldHVybiAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhE
ZW55IDogU1FMQXV0aEFsbG93KTsKK30KKworaW50IERhdGFiYXNlQXV0aG9yaXplcjo6ZHJvcFZp
ZXcoY29uc3QgU3RyaW5nJikKK3sKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9zZWN1cml0
eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisKK2ludCBEYXRhYmFz
ZUF1dGhvcml6ZXI6OmRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmKQoreworICAgIC8vIFNRTElU
RV9EUk9QX1RFTVBfVklFVyByZXN1bHRzIGluIGEgREVMRVRFIG9wZXJhdGlvbiwgd2hpY2ggaXMg
bm90CisgICAgLy8gYWxsb3dlZCBpbiByZWFkLW9ubHkgdHJhbnNhY3Rpb25zIG9yIHByaXZhdGUg
YnJvd3NpbmcsIHNvIHdlIG1pZ2h0IGFzCisgICAgLy8gd2VsbCBkaXNhbGxvdyBTUUxJVEVfRFJP
UF9URU1QX1ZJRVcgaW4gdGhlc2UgY2FzZXMKKyAgICByZXR1cm4gKG1fcmVhZE9ubHkgJiYgbV9z
ZWN1cml0eUVuYWJsZWQgPyBTUUxBdXRoRGVueSA6IFNRTEF1dGhBbGxvdyk7Cit9CisKIGludCBE
YXRhYmFzZUF1dGhvcml6ZXI6OmNyZWF0ZVZUYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKQogewogICAgIGlmIChtX3JlYWRPbmx5ICYmIG1fc2VjdXJpdHlFbmFibGVkKQpAQCAtMTkx
LDYgKzI1MywxMSBAQCBpbnQgRGF0YWJhc2VBdXRob3JpemVyOjphbGxvd1JlYWQoY29uc3QgCiAg
ICAgcmV0dXJuIGRlbnlCYXNlZE9uVGFibGVOYW1lKHRhYmxlTmFtZSk7CiB9CiAKK2ludCBEYXRh
YmFzZUF1dGhvcml6ZXI6OmFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmKQoreworICAgIHJldHVy
biAobV9yZWFkT25seSAmJiBtX3NlY3VyaXR5RW5hYmxlZCA/IFNRTEF1dGhEZW55IDogU1FMQXV0
aEFsbG93KTsKK30KKwogaW50IERhdGFiYXNlQXV0aG9yaXplcjo6YWxsb3dBbmFseXplKGNvbnN0
IFN0cmluZyYgdGFibGVOYW1lKQogewogICAgIHJldHVybiBkZW55QmFzZWRPblRhYmxlTmFtZSh0
YWJsZU5hbWUpOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlQXV0aG9yaXplci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZUF1dGhvcml6ZXIuaAkocmV2aXNp
b24gNDgxNzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VBdXRob3JpemVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5LDEwICs1OSwxMCBAQCBwdWJsaWM6CiAgICAgaW50IGRyb3BUcmlnZ2Vy
KGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKTsKICAg
ICBpbnQgZHJvcFRlbXBUcmlnZ2VyKGNvbnN0IFN0cmluZyYgdHJpZ2dlck5hbWUsIGNvbnN0IFN0
cmluZyYgdGFibGVOYW1lKTsKIAotICAgIGludCBjcmVhdGVWaWV3KGNvbnN0IFN0cmluZyYgLyp2
aWV3TmFtZSovKSB7IHJldHVybiBTUUxBdXRoQWxsb3c7IH0KLSAgICBpbnQgY3JlYXRlVGVtcFZp
ZXcoY29uc3QgU3RyaW5nJiAvKnZpZXdOYW1lKi8pIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQot
ICAgIGludCBkcm9wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05hbWUqLykgeyByZXR1cm4gU1FM
QXV0aEFsbG93OyB9Ci0gICAgaW50IGRyb3BUZW1wVmlldyhjb25zdCBTdHJpbmcmIC8qdmlld05h
bWUqLykgeyByZXR1cm4gU1FMQXV0aEFsbG93OyB9CisgICAgaW50IGNyZWF0ZVZpZXcoY29uc3Qg
U3RyaW5nJiB2aWV3TmFtZSk7CisgICAgaW50IGNyZWF0ZVRlbXBWaWV3KGNvbnN0IFN0cmluZyYg
dmlld05hbWUpOworICAgIGludCBkcm9wVmlldyhjb25zdCBTdHJpbmcmIHZpZXdOYW1lKTsKKyAg
ICBpbnQgZHJvcFRlbXBWaWV3KGNvbnN0IFN0cmluZyYgdmlld05hbWUpOwogCiAgICAgaW50IGNy
ZWF0ZVZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3QgU3RyaW5nJiBtb2R1bGVO
YW1lKTsKICAgICBpbnQgZHJvcFZUYWJsZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBtb2R1bGVOYW1lKTsKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIGludCBh
bGxvd1NlbGVjdCgpIHsgcmV0dXJuIFNRTEF1dGhBbGxvdzsgfQogICAgIGludCBhbGxvd1JlYWQo
Y29uc3QgU3RyaW5nJiB0YWJsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29sdW1uTmFtZSk7CiAKLSAg
ICBpbnQgYWxsb3dSZWluZGV4KGNvbnN0IFN0cmluZyYgLyppbmRleE5hbWUqLykgeyByZXR1cm4g
U1FMQXV0aEFsbG93OyB9CisgICAgaW50IGFsbG93UmVpbmRleChjb25zdCBTdHJpbmcmIGluZGV4
TmFtZSk7CiAgICAgaW50IGFsbG93QW5hbHl6ZShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSk7CiAg
ICAgaW50IGFsbG93RnVuY3Rpb24oY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5hbWUpOwogICAgIGlu
dCBhbGxvd1ByYWdtYShjb25zdCBTdHJpbmcmIHByYWdtYU5hbWUsIGNvbnN0IFN0cmluZyYgZmly
c3RBcmd1bWVudCk7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9u
IDQ4MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjAsMTMgKzYwLDEzIEBAIHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6
ZUluY3JlYXMKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bj4gU1FMVHJhbnNhY3Rpb246OmNyZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBh
c3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3Jh
cHBlciwgYm9vbCByZWFkT25seSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFRyYW5z
YWN0aW9uKGRiLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgc3VjY2Vzc0NhbGxiYWNrLCB3cmFw
cGVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxUcmFuc2FjdGlvbihkYiwgY2FsbGJh
Y2ssIGVycm9yQ2FsbGJhY2ssIHN1Y2Nlc3NDYWxsYmFjaywgd3JhcHBlciwgcmVhZE9ubHkpKTsK
IH0KIAogU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxi
YWNrPiBzdWNjZXNzQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIs
IGJvb2wgcmVhZE9ubHkpCiAgICAgOiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWly
ZUxvY2spCiAgICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFz
ZShkYikKQEAgLTc3LDYgKzc3LDcgQEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERh
dGFiYXNlKgogICAgICwgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAg
LCBtX21vZGlmaWVkRGF0YWJhc2UoZmFsc2UpCiAgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkK
KyAgICAsIG1fcmVhZE9ubHkocmVhZE9ubHkpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOwog
fQpAQCAtOTIsMTAgKzkzLDEyIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29u
c3QgU3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGJvb2wgcmVhZE9ubHlNb2RlID0g
ZmFsc2U7Ci0gICAgUGFnZSogcGFnZSA9IG1fZGF0YWJhc2UtPmRvY3VtZW50KCktPnBhZ2UoKTsK
LSAgICBpZiAoIXBhZ2UgfHwgcGFnZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxl
ZCgpKQotICAgICAgICByZWFkT25seU1vZGUgPSB0cnVlOworICAgIGJvb2wgcmVhZE9ubHlNb2Rl
ID0gbV9yZWFkT25seTsKKyAgICBpZiAoIXJlYWRPbmx5TW9kZSkgeworICAgICAgICBQYWdlKiBw
YWdlID0gbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS0+cGFnZSgpOworICAgICAgICBpZiAoIXBhZ2Ug
fHwgcGFnZS0+c2V0dGluZ3MoKS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQorICAgICAgICAg
ICAgcmVhZE9ubHlNb2RlID0gdHJ1ZTsKKyAgICB9CiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50
PiBzdGF0ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50
cywgY2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHJlYWRPbmx5TW9kZSk7CiAKQEAgLTIwNCw3ICsy
MDcsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiCiAKIHZvaWQg
U1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKCkKIHsKLSAgICBtX2RhdGFiYXNlLT50cmFuc2Fj
dGlvbkNvb3JkaW5hdG9yKCktPmFjcXVpcmVMb2NrKHRoaXMpOworICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWlyZUxvY2sodGhpcywgbV9yZWFkT25seSk7CiB9
CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmxvY2tBY3F1aXJlZCgpCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uaAkocmV2aXNpb24gNDgxNzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsOCBAQCBwdWJsaWM6CiAKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uIDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMVHJhbnNhY3Rp
b24+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3Jl
YXRlKERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFj
az4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8U1FMVHJhbnNhY3Rpb24+IGNyZWF0ZShEYXRhYmFzZSosIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQ
dHI8Vm9pZENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29s
IHJlYWRPbmx5ID0gZmFsc2UpOwogCiAgICAgflNRTFRyYW5zYWN0aW9uKCk7CiAKQEAgLTgwLDcg
KzgxLDggQEAgcHVibGljOgogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0
YWJhc2UuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSos
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiwgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+LCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4pOworICAgIFNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiwg
UGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+LAorICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Vm9pZENh
bGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+LCBib29sIHJlYWRPbmx5
KTsKIAogICAgIHR5cGVkZWYgdm9pZCAoU1FMVHJhbnNhY3Rpb246OipUcmFuc2FjdGlvblN0ZXBN
ZXRob2QpKCk7CiAgICAgVHJhbnNhY3Rpb25TdGVwTWV0aG9kIG1fbmV4dFN0ZXA7CkBAIC0xMjMs
NiArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVt
ZW50OwogICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwogICAgIGJvb2wgbV9sb2NrQWNxdWly
ZWQ7CisgICAgYm9vbCBtX3JlYWRPbmx5OwogCiAgICAgTXV0ZXggbV9zdGF0ZW1lbnRNdXRleDsK
ICAgICBEZXF1ZTxSZWZQdHI8U1FMU3RhdGVtZW50PiA+IG1fc3RhdGVtZW50UXVldWU7CkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZp
c2lvbiA0ODE3NSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTQ3LDggKzQ4LDEwIEBAIHN0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVyKFNRTFQK
ICAgICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKIH0KIAotdm9pZCBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCByZWFkT25seSkKIHsKKyAgICBVTlVTRURfUEFS
QU0ocmVhZE9ubHkpOworCiAgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRl
bnRpZmllcih0cmFuc2FjdGlvbik7CiAKICAgICBUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRv
ciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7CkluZGV4OiBX
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDQ4
MTc1KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHZv
aWQgYWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9pZCBhY3F1aXJlTG9j
ayhTUUxUcmFuc2FjdGlvbiosIGJvb2wgcmVhZE9ubHkpOwogICAgICAgICB2b2lkIHJlbGVhc2VM
b2NrKFNRTFRyYW5zYWN0aW9uKik7CiAgICAgICAgIHZvaWQgc2h1dGRvd24oKTsKICAgICBwcml2
YXRlOgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDgxOTMpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wOS0wOCAgRHVtaXRydSBEYW5p
bGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIHRlc3QgZm9yIHRoZSBkYXRhYmFzZSBhdXRob3Jp
emVyLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
ODkxOAorCisgICAgICAgICogc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXItZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL3Rlc3QtYXV0aG9yaXplci5odG1sOiBBZGRlZC4KKwog
MjAwOS0wOS0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IFRpbW90aHkgSGF0Y2hlci4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1h
dXRob3JpemVyLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdl
L3Rlc3QtYXV0aG9yaXplci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9zdG9yYWdlL3Rlc3QtYXV0aG9yaXplci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjggQEAKK1RoaXMgdGVzdCB0ZXN0cyB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci4KK1NR
TElURV9DUkVBVEVfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5E
RVggc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1l
bnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJ
VEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklF
VyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9SRUFEIHN0YXRlbWVudCBzdWNjZWVkZWQuCitT
UUxJVEVfU0VMRUNUIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfREVMRVRFIHN0YXRlbWVu
dCBzdWNjZWVkZWQuCitTUUxJVEVfSU5TRVJUIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVf
VVBEQVRFIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfUFJBR01BIHN0YXRlbWVudCBmYWls
ZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVtZW50IHN1Y2NlZWRl
ZC4KK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX1RSQU5T
QUNUSU9OIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQVRUQUNIIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfREVUQUNIIHN0YXRlbWVudCBm
YWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUkVJTkRFWCBzdGF0ZW1lbnQgc3VjY2VlZGVk
LgorU1FMSVRFX0FOQUxZWkUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElU
RV9EUk9QX0lOREVYIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RBQkxF
IHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfRFJPUF9URU1QX1RSSUdHRVIgc3RhdGVtZW50
IHN1Y2NlZWRlZC4KK1NRTElURV9EUk9QX1RFTVBfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0RST1BfVFJJR0dFUiBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVklF
VyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0RST1BfVEFCTEUgc3RhdGVtZW50IHN1Y2Nl
ZWRlZC4KK1dyaXRlIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEFCTEUg
c3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEFCTEUgc3Rh
dGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IGZhaWxlZDog
bm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVk
OiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVEVNUF9WSUVXIHN0YXRlbWVudCBm
YWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVtZW50IGZh
aWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgZmFpbGVk
OiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDog
bm90IGF1dGhvcml6ZWQKK1NRTElURV9DUkVBVEVfSU5ERVggc3RhdGVtZW50IHN1Y2NlZWRlZC4K
K1NRTElURV9DUkVBVEVfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgc3VjY2VlZGVkLgorU1FMSVRFX0NS
RUFURV9URU1QX1RSSUdHRVIgc3RhdGVtZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVEVN
UF9WSUVXIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfQ1JFQVRFX1RSSUdHRVIgc3RhdGVt
ZW50IHN1Y2NlZWRlZC4KK1NRTElURV9DUkVBVEVfVklFVyBzdGF0ZW1lbnQgc3VjY2VlZGVkLgor
U1FMSVRFX0NSRUFURV9WVEFCTEUgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NR
TElURV9SRUFEIHN0YXRlbWVudCBzdWNjZWVkZWQuCitTUUxJVEVfU0VMRUNUIHN0YXRlbWVudCBz
dWNjZWVkZWQuCitTUUxJVEVfREVMRVRFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVk
CitTUUxJVEVfSU5TRVJUIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVf
VVBEQVRFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfUFJBR01BIHN0
YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVfQUxURVJfVEFCTEUgc3RhdGVt
ZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9BTFRFUl9UQUJMRSBzdGF0ZW1lbnQg
ZmFpbGVkOiBubyBzdWNoIHRhYmxlOiBUZXN0VGFibGUKK1NRTElURV9UUkFOU0FDVElPTiBzdGF0
ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0FUVEFDSCBzdGF0ZW1lbnQgZmFp
bGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RFVEFDSCBzdGF0ZW1lbnQgZmFpbGVkOiBub3Qg
YXV0aG9yaXplZAorU1FMSVRFX1JFSU5ERVggc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6
ZWQKK1NRTElURV9BTkFMWVpFIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJ
VEVfRFJPUF9JTkRFWCBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RS
T1BfVEVNUF9UQUJMRSBzdGF0ZW1lbnQgZmFpbGVkOiBub3QgYXV0aG9yaXplZAorU1FMSVRFX0RS
T1BfVEVNUF9UUklHR0VSIHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitTUUxJVEVf
RFJPUF9URU1QX1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9E
Uk9QX1RSSUdHRVIgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9Q
X1ZJRVcgc3RhdGVtZW50IGZhaWxlZDogbm90IGF1dGhvcml6ZWQKK1NRTElURV9EUk9QX1RBQkxF
IHN0YXRlbWVudCBmYWlsZWQ6IG5vdCBhdXRob3JpemVkCitSZWFkIHRyYW5zYWN0aW9ucyBzdWNj
ZWVkZWQuCisKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS90ZXN0LWF1dGhvcml6ZXIuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0b3JhZ2UvdGVzdC1hdXRob3JpemVyLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc1IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
KworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwg
Kz0gbWVzc2FnZSArICI8YnI+IjsKK30KKworZnVuY3Rpb24gdGVybWluYXRlVGVzdCgpCit7Cisg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCitmdW5jdGlvbiBsb2dBbmRUZXJtaW5hdGVUZXN0
KG1lc3NhZ2UsIGVycm9yKQoreworICAgIGxvZyhtZXNzYWdlICsgIjogIiArIGVycm9yLm1lc3Nh
Z2UpOworICAgIHRlcm1pbmF0ZVRlc3QoKTsKK30KKworZnVuY3Rpb24gY2xlYW51cChkYikKK3sK
KyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHguZXhlY3V0
ZVNxbCgiRFJPUCBUQUJMRSBJRiBFWElTVFMgVGVzdDsiKTsKKyAgICAgICAgICAgIHR4LmV4ZWN1
dGVTcWwoIkRST1AgSU5ERVggSUYgRVhJU1RTIFRlc3RJbmRleDsiKTsKKyAgICAgICAgICAgIHR4
LmV4ZWN1dGVTcWwoIkRST1AgVklFVyBJRiBFWElTVFMgVGVzdFZpZXc7Iik7CisgICAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJEUk9QIFRSSUdHRVIgSUYgRVhJU1RTIFRlc3RUcmlnZ2VyOyIpOwor
ICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJDbGVhbnVw
IGZhaWxlZCIsIGVycm9yKTsgfSk7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVudFN1Y2Nlc3NDYWxs
YmFjayhzdGF0ZW1lbnRUeXBlKQoreworICAgIGxvZyhzdGF0ZW1lbnRUeXBlICsgIiBzdGF0ZW1l
bnQgc3VjY2VlZGVkLiIpOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrKHN0
YXRlbWVudFR5cGUsIGVycm9yKQoreworICAgIGxvZyhzdGF0ZW1lbnRUeXBlICsgIiBzdGF0ZW1l
bnQgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitm
dW5jdGlvbiBleGVjdXRlU3RhdGVtZW50KHR4LCBzdGF0ZW1lbnQsIG9wZXJhdGlvbikKK3sKKyAg
ICB0eC5leGVjdXRlU3FsKHN0YXRlbWVudCwgW10sCisgICAgICAgICAgICAgICAgICBmdW5jdGlv
bihyZXN1bHQpIHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKG9wZXJhdGlvbik7IH0sCisgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgcmV0dXJuIHN0YXRlbWVudEVycm9y
Q2FsbGJhY2sob3BlcmF0aW9uLCBlcnJvcik7IH0pOworfQorCitmdW5jdGlvbiBjcmVhdGVUYWJs
ZUNhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJDUkVBVEUgVEFCTEUg
VGVzdCAoRm9vIGludCk7IiwgIlNRTElURV9DUkVBVEVfVEFCTEUiKTsKK30KKworZnVuY3Rpb24g
Y3JlYXRlU3RhdGVtZW50c0NhbGxiYWNrKHR4KQoreworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJDUkVBVEUgSU5ERVggVGVzdEluZGV4IE9OIFRlc3QgKEZvbyk7IiwgIlNRTElURV9DUkVBVEVf
SU5ERVgiKTsKKworICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBmb2xsb3dpbmcgcXVlcnkgc2hvdWxk
IHRyaWdnZXIgYSBTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVggb3BlcmF0aW9uCisgICAgLy8gKGFj
Y29yZGluZyB0byBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdGVtcGZpbGVzLmh0bWwpLCBpdCBkb2Vz
bid0LCBhbmQgSSdtIG5vdCBhd2FyZQorICAgIC8vIG9mIGFueSBvdGhlciB3YXkgdG8gdHJpZ2dl
ciB0aGlzIG9wZXJhdGlvbi4gU28gd2UnbGwgc2tpcCBpdCBmb3Igbm93LgorICAgIC8vZXhlY3V0
ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCAqIEZST00gVGVzdCBXSEVSRSBGb28gSU4gKDEsIDIsIDMp
OyIsICJTUUxJVEVfQ1JFQVRFX1RFTVBfSU5ERVgiKTsKKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQo
dHgsICJDUkVBVEUgVEVNUCBUQUJMRSBUZXN0VGVtcFRhYmxlIChGb28gaW50KTsiLCAiU1FMSVRF
X0NSRUFURV9URU1QX1RBQkxFIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBU
RU1QIFRSSUdHRVIgVGVzdFRlbXBUcmlnZ2VyIElOU0VSVCBPTiBUZXN0IEJFR0lOIFNFTEVDVCBD
T1VOVCgqKSBGUk9NIFRlc3Q7IEVORDsiLCAiU1FMSVRFX0NSRUFURV9URU1QX1RSSUdHRVIiKTsK
KyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRFTVAgVklFVyBUZXN0VGVtcFZpZXcg
QVMgU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FMSVRFX0NSRUFURV9URU1QX1ZJRVci
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRFIFRSSUdHRVIgVGVzdFRyaWdnZXIg
SU5TRVJUIE9OIFRlc3QgQkVHSU4gU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsgRU5EOyIsICJT
UUxJVEVfQ1JFQVRFX1RSSUdHRVIiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQ1JFQVRF
IFZJRVcgVGVzdFZpZXcgQVMgU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCAiU1FMSVRFX0NS
RUFURV9WSUVXIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkNSRUFURSBWSVJUVUFMIFRB
QkxFIFRlc3RWaXJ0dWFsVGFibGUgVVNJTkcgTWlzc2luZ01vZHVsZTsiLCAiU1FMSVRFX0NSRUFU
RV9WVEFCTEUiKTsKK30KKworZnVuY3Rpb24gb3RoZXJTdGF0ZW1lbnRzQ2FsbGJhY2sodHgpCit7
CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7Iiwg
IlNRTElURV9SRUFEIik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIFRlc3Q7IiwgIlNRTElURV9TRUxFQ1QiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4
LCAiREVMRVRFIEZST00gVGVzdDsiLCAiU1FMSVRFX0RFTEVURSIpOworICAgIGV4ZWN1dGVTdGF0
ZW1lbnQodHgsICJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMSk7IiwgIlNRTElURV9JTlNFUlQi
KTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiVVBEQVRFIFRlc3QgU0VUIEZvbyA9IDIgV0hF
UkUgRm9vID0gMTsiLCAiU1FMSVRFX1VQREFURSIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJQUkFHTUEgY2FjaGVfc2l6ZTsiLCAiU1FMSVRFX1BSQUdNQSIpOworCisgICAgZXhlY3V0ZVN0
YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3QgUkVOQU1FIFRPIFRlc3RUYWJsZTsiLCAiU1FM
SVRFX0FMVEVSX1RBQkxFIik7CisgICAgLy8gUmVuYW1lIHRoZSB0YWJsZSBiYWNrIHRvIGl0cyBv
cmlnaW5hbCBuYW1lCisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkFMVEVSIFRBQkxFIFRlc3RU
YWJsZSBSRU5BTUUgVG8gVGVzdDsiLCAiU1FMSVRFX0FMVEVSX1RBQkxFIik7CisKKyAgICBleGVj
dXRlU3RhdGVtZW50KHR4LCAiQkVHSU4gVFJBTlNBQ1RJT047IiwgIlNRTElURV9UUkFOU0FDVElP
TiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJBVFRBQ0ggbWFpbiBBUyBUZXN0TWFpbjsi
LCAiU1FMSVRFX0FUVEFDSCIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJERVRBQ0ggVGVz
dE1haW47IiwgIlNRTElURV9ERVRBQ0giKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiUkVJ
TkRFWDsiLCAiU1FMSVRFX1JFSU5ERVgiKTsKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiQU5B
TFlaRTsiLCAiU1FMSVRFX0FOQUxZWkUiKTsKKworICAgIC8vIFNRTElURV9GVU5DVElPTjogYWxs
b3dlZCB3cml0ZSBtb2RlCisgICAgLy8gVGhlcmUgaXMgbm8gU1FML0phdmFzY3JpcHQgQVBJIHRv
IGFkZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIHRvIFNRTGl0ZSwKKyAgICAvLyBzbyB3ZSBjYW5u
b3QgdGVzdCB0aGlzIG9wZXJhdGlvbgorfQorCitmdW5jdGlvbiBkcm9wU3RhdGVtZW50c0NhbGxi
YWNrKHR4KQoreworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIElOREVYIFRlc3RJbmRl
eDsiLCAiU1FMSVRFX0RST1BfSU5ERVgiKTsKKworICAgIC8vIFNRTElURV9EUk9QX1RFTVBfSU5E
RVg6IGFsbG93ZWQgaW4gd3JpdGUgbW9kZQorICAgIC8vIE5vdCBzdXJlIGhvdyB0byB0ZXN0IHRo
aXM6IHRlbXAgaW5kZXhlcyBhcmUgYXV0b21hdGljYWxseSBkcm9wcGVkIHdoZW4KKyAgICAvLyB0
aGUgZGF0YWJhc2UgaXMgY2xvc2VkLCBidXQgSFRNTDUgZG9lc24ndCBzcGVjaWZ5IGEgY2xvc2VE
YXRhYmFzZSgpIGNhbGwuCisKKyAgICBleGVjdXRlU3RhdGVtZW50KHR4LCAiRFJPUCBUQUJMRSBU
ZXN0VGVtcFRhYmxlOyIsICJTUUxJVEVfRFJPUF9URU1QX1RBQkxFIik7CisgICAgZXhlY3V0ZVN0
YXRlbWVudCh0eCwgIkRST1AgVFJJR0dFUiBUZXN0VGVtcFRyaWdnZXI7IiwgIlNRTElURV9EUk9Q
X1RFTVBfVFJJR0dFUiIpOworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgsICJEUk9QIFZJRVcgVGVz
dFRlbXBWaWV3OyIsICJTUUxJVEVfRFJPUF9URU1QX1ZJRVciKTsKKyAgICBleGVjdXRlU3RhdGVt
ZW50KHR4LCAiRFJPUCBUUklHR0VSIFRlc3RUcmlnZ2VyOyIsICJTUUxJVEVfRFJPUF9UUklHR0VS
Iik7CisgICAgZXhlY3V0ZVN0YXRlbWVudCh0eCwgIkRST1AgVklFVyBUZXN0VmlldzsiLCAiU1FM
SVRFX0RST1BfVklFVyIpOworCisgICAgLy8gU1FMSVRFX0RST1BfVlRBQkxFOiBhbGxvd2VkIGlu
IHdyaXRlIG1vZGUKKyAgICAvLyBOb3Qgc3VyZSBob3cgdG8gdGVzdCB0aGlzOiB3ZSBjYW5ub3Qg
Y3JlYXRlIGEgdmlydHVhbCB0YWJsZSBiZWNhdXNlIHdlIGRvIG5vdAorICAgIC8vIGhhdmUgU1FM
L0phdmFzY3JpcHQgQVBJcyB0byByZWdpc3RlciBhIG1vZHVsZSB0aGF0IGltcGxlbWVudHMgYSB2
aXJ0dWFsIHRhYmxlLgorICAgIC8vIFRoZXJlZm9yZSwgdHJ5aW5nIHRvIGRyb3AgYSB2aXJ0dWFs
IHRhYmxlIHdpbGwgYWx3YXlzIGZhaWwgKG5vIHN1Y2ggdGFibGUpCisgICAgLy8gYmVmb3JlIGV2
ZW4gZ2V0dGluZyB0byB0aGUgYXV0aG9yaXplci4KKworICAgIGV4ZWN1dGVTdGF0ZW1lbnQodHgs
ICJEUk9QIFRBQkxFIFRlc3Q7IiwgIlNRTElURV9EUk9QX1RBQkxFIik7Cit9CisKK2Z1bmN0aW9u
IHRlc3RSZWFkV3JpdGVNb2RlKGRiKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4
KSB7CisgICAgICAgICAgICBjcmVhdGVUYWJsZUNhbGxiYWNrKHR4KTsKKyAgICAgICAgICAgIGNy
ZWF0ZVN0YXRlbWVudHNDYWxsYmFjayh0eCk7CisgICAgICAgICAgICBvdGhlclN0YXRlbWVudHND
YWxsYmFjayh0eCk7CisgICAgICAgICAgICBkcm9wU3RhdGVtZW50c0NhbGxiYWNrKHR4KTsKKyAg
ICAgICAgfSwKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5kVGVybWluYXRlVGVzdCgi
V3JpdGUgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9LAorICAgICAgICBmdW5jdGlvbigp
IHsgbG9nKCJXcml0ZSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQuIik7IH0pOworfQorCitmdW5jdGlv
biB0ZXN0UmVhZE9ubHlNb2RlKGRiKQoreworICAgIC8vIFRlc3QgdGhlICdDUkVBVEUgVEFCTEUn
IG9wZXJhdGlvbjsgaXQgc2hvdWxkIGJlIGRpc2FsbG93ZWQKKyAgICBkYi5yZWFkVHJhbnNhY3Rp
b24oY3JlYXRlVGFibGVDYWxsYmFjaywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9nQW5k
VGVybWluYXRlVGVzdCgiUmVhZCAnQ1JFQVRFIFRBQkxFJyB0cmFuc2FjdGlvbiBmYWlsZWQiLCBl
cnJvcik7IH0pOworCisgICAgLy8gSW4gb3JkZXIgdG8gdGVzdCBhbGwgb3RoZXIgJ0NSRUFURScg
b3BlcmF0aW9ucywgd2UgbXVzdCBjcmVhdGUgdGhlIHRhYmxlIGZpcnN0CisgICAgZGIudHJhbnNh
Y3Rpb24oY3JlYXRlVGFibGVDYWxsYmFjaywKKyAgICAgICAgZnVuY3Rpb24oZXJyb3IpIHsgbG9n
QW5kVGVybWluYXRlVGVzdCgiV3JpdGUgJ0NSRUFURSBUQUJMRScgdHJhbnNhY3Rpb24gZmFpbGVk
IiwgZXJyb3IpOyB9KTsKKyAgICBkYi5yZWFkVHJhbnNhY3Rpb24oY3JlYXRlU3RhdGVtZW50c0Nh
bGxiYWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJS
ZWFkICdDUkVBVEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSk7CisKKyAgICAvLyBJ
biBvcmRlciB0byB0ZXN0IHRoZSAnRFJPUCcgYW5kICdvdGhlcicgb3BlcmF0aW9ucywgd2UgbmVl
ZCB0byBmaXJzdCBjcmVhdGUgdGhlIHJlc3BlY3RpdmUgZW50aXRpZXMKKyAgICBkYi50cmFuc2Fj
dGlvbihjcmVhdGVTdGF0ZW1lbnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7
IGxvZ0FuZFRlcm1pbmF0ZVRlc3QoIldyaXRlICdDUkVBVEUnIHRyYW5zYWN0aW9uIGZhaWxlZCIs
IGVycm9yKTsgfSk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKG90aGVyU3RhdGVtZW50c0NhbGxi
YWNrLAorICAgICAgICBmdW5jdGlvbihlcnJvcikgeyBsb2dBbmRUZXJtaW5hdGVUZXN0KCJSZWFk
ICdvdGhlcicgdHJhbnNhY3Rpb24gZmFpbGVkIiwgZXJyb3IpOyB9KTsKKworICAgIC8vIEhhY2s6
IGluc2VydCBhbiBlbXB0eSB3cml0ZSB0cmFuc2FjdGlvbiB0byBndWFyYXRlZSB0aGF0IHRoZXNl
IHRyYW5zYWN0aW9ucyBhcmUgZXhlY3V0ZWQgc2VxdWVudGlhbGx5CisgICAgZGIudHJhbnNhY3Rp
b24oZnVuY3Rpb24odHgpIHsgfSk7CisgICAgZGIucmVhZFRyYW5zYWN0aW9uKGRyb3BTdGF0ZW1l
bnRzQ2FsbGJhY2ssCisgICAgICAgIGZ1bmN0aW9uKGVycm9yKSB7IGxvZ0FuZFRlcm1pbmF0ZVRl
c3QoIlJlYWQgJ0RST1AnIHRyYW5zYWN0aW9uIGZhaWxlZCIsIGVycm9yKTsgfSwKKyAgICAgICAg
ZnVuY3Rpb24oKSB7IGxvZygiUmVhZCB0cmFuc2FjdGlvbnMgc3VjY2VlZGVkLiIpOyB0ZXJtaW5h
dGVUZXN0KCk7IH0pOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgiQXV0
aG9yaXplclRlc3QiLCAiMS4wIiwgIlRlc3RzIHRoZSBkYXRhYmFzZSBhdXRob3JpemVyLiIsIDMy
NzY4KTsKKyAgICAgICAgY2xlYW51cChkYik7CisgICAgICAgIHRlc3RSZWFkV3JpdGVNb2RlKGRi
KTsKKyAgICAgICAgdGVzdFJlYWRPbmx5TW9kZShkYik7CisgICAgfSBjYXRjaChlcnIpIHt9Cit9
Cis8L3NjcmlwdD4KKzxoZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgdGVz
dCB0ZXN0cyB0aGUgZGF0YWJhc2UgYXV0aG9yaXplci48YnI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>