<?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>62622</bug_id>
          
          <creation_ts>2011-06-14 00:21:00 -0700</creation_ts>
          <short_desc>Implement IDBFactory.deleteDatabase</short_desc>
          <delta_ts>2011-10-31 09:46:44 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to>jochen</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dgrogan</cc>
    
    <cc>fishd</cc>
    
    <cc>hans</cc>
    
    <cc>jsbell</cc>
    
    <cc>ojan</cc>
    
    <cc>pilgrim</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>420254</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-06-14 00:21:00 -0700</bug_when>
    <thetext>Implement IDBFactory.deleteDatabase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420255</commentid>
    <comment_count>1</comment_count>
      <attachid>97079</attachid>
    <who name="">jochen</who>
    <bug_when>2011-06-14 00:23:25 -0700</bug_when>
    <thetext>Created attachment 97079
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420258</commentid>
    <comment_count>2</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-06-14 00:26:22 -0700</bug_when>
    <thetext>This is what I have currently.

The remaining issue is that setVersion doesn&apos;t block opening new database connections. Consequently, I can&apos;t use a setVersion transaction to reliably close all existing connections (and thus the layout test doesn&apos;t work)

I guess I&apos;ll first fix that before I continue to work on this patch

Feedback on this one would be welcome nevertheless</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420312</commentid>
    <comment_count>3</comment_count>
      <attachid>97079</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-14 03:45:00 -0700</bug_when>
    <thetext>Comment on attachment 97079
Patch

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

&gt; LayoutTests/storage/indexeddb/database-delete.html:46
&gt; +    commitAndContinue();

I don&apos;t think commitAndContinue() is safe. It&apos;s better to use the .oncomplete handler on the transaction.

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:181
&gt; +    return deleteFile(path);

Whoa, that&apos;ll delete the LevelDB for the whole origin.

Feel free to not worry about the LevelDB back-end for now, and just stick a FIXME in here.

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:209
&gt; +    return deleteFile(path);

This also deletes the whole origin.

I think deleteDatabase() needs to take the database name as a parameter, and then only delete the right stuff from the backing store.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420814</commentid>
    <comment_count>4</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-06-14 16:18:44 -0700</bug_when>
    <thetext>(In reply to comment #2)

&gt; The remaining issue is that setVersion doesn&apos;t block opening new database connections. Consequently, I can&apos;t use a setVersion transaction to reliably close all existing connections (and thus the layout test doesn&apos;t work)

Doesn&apos;t the layout test open just one connection and wait for it to close before deleting the database?  Where does the layout test fail?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420818</commentid>
    <comment_count>5</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-06-14 16:22:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #2)
&gt; 
&gt; &gt; The remaining issue is that setVersion doesn&apos;t block opening new database connections. Consequently, I can&apos;t use a setVersion transaction to reliably close all existing connections (and thus the layout test doesn&apos;t work)
&gt; 
&gt; Doesn&apos;t the layout test open just one connection and wait for it to close before deleting the database?  Where does the layout test fail?

the internal error in IDBFactoryBackendImpl.cpp:115 is thrown</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420828</commentid>
    <comment_count>6</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-06-14 16:27:38 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #2)
&gt; &gt; 
&gt; &gt; &gt; The remaining issue is that setVersion doesn&apos;t block opening new database connections. Consequently, I can&apos;t use a setVersion transaction to reliably close all existing connections (and thus the layout test doesn&apos;t work)
&gt; &gt; 
&gt; &gt; Doesn&apos;t the layout test open just one connection and wait for it to close before deleting the database?  Where does the layout test fail?
&gt; 
&gt; the internal error in IDBFactoryBackendImpl.cpp:115 is thrown

That error is thrown as the layout test is in your patch now?  Not only if the window.setTimeout(deleteDatabase, 0) temporary hack is removed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421929</commentid>
    <comment_count>7</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-06-16 06:50:49 -0700</bug_when>
    <thetext>FYI, the spec seems to be getting an update for deleteDatabase: http://lists.w3.org/Archives/Public/public-webapps/2011AprJun/1064.html
Not sure if that affects this patch though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453050</commentid>
    <comment_count>8</comment_count>
      <attachid>104344</attachid>
    <who name="">jochen</who>
    <bug_when>2011-08-18 08:17:17 -0700</bug_when>
    <thetext>Created attachment 104344
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453056</commentid>
    <comment_count>9</comment_count>
      <attachid>104346</attachid>
    <who name="">jochen</who>
    <bug_when>2011-08-18 08:28:22 -0700</bug_when>
    <thetext>Created attachment 104346
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453060</commentid>
    <comment_count>10</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-08-18 08:31:09 -0700</bug_when>
    <thetext>I&apos;ve implemented this returning an IDBVersionChangeRequest.

Note that as long as the version change stuff isn&apos;t done asynchronously, i.e. we can&apos;t close all connections and do something when this is done, it&apos;s hardly possible to use deleteDatabase: as soon as you&apos;ve opened the database, the connection is cached and we cannot safely delete the database without first ensuring that it is closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453720</commentid>
    <comment_count>11</comment_count>
      <attachid>104346</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-08-19 02:46:00 -0700</bug_when>
    <thetext>Comment on attachment 104346
Patch

Thanks for sticking with this!


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

&gt; LayoutTests/storage/indexeddb/database-delete.html:18
&gt; +{

It seems the test deletes a database which doesn&apos;t exist in the first place. Shouldn&apos;t it be creating a database, then close it, delete it, and verify it&apos;s gone?
Oh, I suppose that this is the part that doesn&apos;t work?

&gt; LayoutTests/storage/indexeddb/database-delete.html:45
&gt; +function reopenSuccess()

nit: I think this function should come after deleteSuccess(), so they&apos;re lined up in the order they run basically.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:270
&gt; +        // FIXME: Close the database first. For now, we just chicken out, so we can do the delete further down synchronously.

hmm, I&apos;m not entirely sure how that stuff works, but shouldn&apos;t the transaction machinery be guaranteeing that all other connections to this database is closed when the setVersion transaction runs? Or is that the part that doesn&apos;t work yet?

It would be nice if we didn&apos;t need to replicate all the logic of IDBFactoryBackendImpl::open(), but could just call it, delete the database, and remove it from the m_databaseBackendMap.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:289
&gt; +        }

hmm, this is kind of weird...
If there is a SQLite database, we first migrate the database to LevelDB, and then delete it.
Only at the moment, we don&apos;t actually delete from SQLite after migration, so this ends up being a no-op.. we&apos;ll need to fix this.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:323
&gt; +        backingStore-&gt;deleteObjectStore(databaseId, *objectStoreId);

It would be better if IDBBackingStore had a deleteDatabase() function that deletes both the database meta-data, and all object stores, but this is fine for now. Maybe add a FIXME?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453723</commentid>
    <comment_count>12</comment_count>
      <attachid>104346</attachid>
    <who name="">jochen</who>
    <bug_when>2011-08-19 02:55:35 -0700</bug_when>
    <thetext>Comment on attachment 104346
Patch

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

&gt;&gt; LayoutTests/storage/indexeddb/database-delete.html:18
&gt;&gt; +{
&gt; 
&gt; It seems the test deletes a database which doesn&apos;t exist in the first place. Shouldn&apos;t it be creating a database, then close it, delete it, and verify it&apos;s gone?
&gt; Oh, I suppose that this is the part that doesn&apos;t work?

Right. 

It would work if there was a way to delete the IDBDatabase object from javascript. Just invoking db.close(); db=null; is not enough. I guess we&apos;d at least need to trigger a garbage collection or something

&gt;&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:270
&gt;&gt; +        // FIXME: Close the database first. For now, we just chicken out, so we can do the delete further down synchronously.
&gt; 
&gt; hmm, I&apos;m not entirely sure how that stuff works, but shouldn&apos;t the transaction machinery be guaranteeing that all other connections to this database is closed when the setVersion transaction runs? Or is that the part that doesn&apos;t work yet?
&gt; 
&gt; It would be nice if we didn&apos;t need to replicate all the logic of IDBFactoryBackendImpl::open(), but could just call it, delete the database, and remove it from the m_databaseBackendMap.

IDBFactoryBackendImpl::open doesn&apos;t check whether there&apos;s a transaction in flight, so you can create a new connection while the transaction runs

Also, there&apos;s no way to register a callback with the backing store for when the setversion transaction completes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453733</commentid>
    <comment_count>13</comment_count>
      <attachid>104487</attachid>
    <who name="">jochen</who>
    <bug_when>2011-08-19 04:12:03 -0700</bug_when>
    <thetext>Created attachment 104487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453734</commentid>
    <comment_count>14</comment_count>
      <attachid>104487</attachid>
    <who name="">jochen</who>
    <bug_when>2011-08-19 04:12:42 -0700</bug_when>
    <thetext>Comment on attachment 104487
Patch

Addressed all comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455189</commentid>
    <comment_count>15</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-08-22 21:36:11 -0700</bug_when>
    <thetext>Sorry for the delay, I&apos;m working on making pending setVersion calls block an open call.  Though I&apos;m a bit confused as to whether that will help you or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462766</commentid>
    <comment_count>16</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-09-06 12:53:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Sorry for the delay, I&apos;m working on making pending setVersion calls block an open call.  Though I&apos;m a bit confused as to whether that will help you or not.

My hope is that you will have a way to schedule a task to be executed when the setVersion transaction has finished.

For deleting a database, the steps start by firing a setVersion transaction at the database. I&apos;d then register a task that actually deletes the database for when the transaction is finished, using whatever means you used to schedule that task</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478670</commentid>
    <comment_count>17</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-05 14:07:29 -0700</bug_when>
    <thetext>*** Bug 62334 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478677</commentid>
    <comment_count>18</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-05 14:13:57 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; 
&gt; My hope is that you will have a way to schedule a task to be executed when the setVersion transaction has finished.
&gt; 
&gt; For deleting a database, the steps start by firing a setVersion transaction at the database. I&apos;d then register a task that actually deletes the database for when the transaction is finished, using whatever means you used to schedule that task

I&apos;ve picked up dgrogan&apos;s work on blocking actions until after setVersion. Patch in review at:

https://bugs.webkit.org/show_bug.cgi?id=69307

@jochen: can you see if that approach would be sufficient? It doesn&apos;t allow for arbitrary tasks to be scheduled for running after setVersions are processed (just other setVersion calls and other open calls). If deletes vs. opens need to have a specific order then a separate queue for each makes sense. Otherwise we can coalesce those into a queue of generic tasks, similar to what transactions have internally.

The setVersion mechanism is being replaced &quot;soon&quot;, so we don&apos;t want to get too clever right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478685</commentid>
    <comment_count>19</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-05 14:29:48 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #16)
&gt; &gt; 
&gt; &gt; My hope is that you will have a way to schedule a task to be executed when the setVersion transaction has finished.
&gt; &gt; 
&gt; &gt; For deleting a database, the steps start by firing a setVersion transaction at the database. I&apos;d then register a task that actually deletes the database for when the transaction is finished, using whatever means you used to schedule that task
&gt; 
&gt; I&apos;ve picked up dgrogan&apos;s work on blocking actions until after setVersion. Patch in review at:
&gt; 
&gt; https://bugs.webkit.org/show_bug.cgi?id=69307
&gt; 
&gt; @jochen: can you see if that approach would be sufficient? It doesn&apos;t allow for arbitrary tasks to be scheduled for running after setVersions are processed (just other setVersion calls and other open calls). If deletes vs. opens need to have a specific order then a separate queue for each makes sense. Otherwise we can coalesce those into a queue of generic tasks, similar to what transactions have internally.

The delete callbacks should come before the open calls, so two queues will be fine.

I think I can work on top of your patch, thanks!

&gt; 
&gt; The setVersion mechanism is being replaced &quot;soon&quot;, so we don&apos;t want to get too clever right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485648</commentid>
    <comment_count>20</comment_count>
      <attachid>111352</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-17 17:08:42 -0700</bug_when>
    <thetext>Created attachment 111352
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485649</commentid>
    <comment_count>21</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-17 17:11:31 -0700</bug_when>
    <thetext>After the setVersion/open changes are landed, here&apos;s the updated patch

Note that deleting the database doesn&apos;t actually work :(

the factory-deletedatabase.html test is demonstrating this

I guess IDBLevelDBBackingStore::deleteDatabase does something wrong, I verified it is invoked, and doesn&apos;t exit early

any idea what&apos;s going on, leveldb-knowledgable-ppl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485779</commentid>
    <comment_count>22</comment_count>
      <attachid>111352</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-17 21:16:27 -0700</bug_when>
    <thetext>Comment on attachment 111352
Patch

Attachment 111352 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10122113

New failing tests:
storage/indexeddb/factory-basics.html
storage/indexeddb/factory-cmp.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486212</commentid>
    <comment_count>23</comment_count>
      <attachid>111477</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-18 12:06:50 -0700</bug_when>
    <thetext>Created attachment 111477
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486337</commentid>
    <comment_count>24</comment_count>
      <attachid>111477</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-18 15:04:59 -0700</bug_when>
    <thetext>Comment on attachment 111477
Patch

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

Not a complete review, I&apos;ll spend more time on it. Just some initial observations.

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:281
&gt; +    while (!m_runningVersionChangeTransaction &amp;&amp; m_pendingSetVersionCalls.isEmpty() &amp;&amp; !m_deletePending &amp;&amp; !pendingDeleteCalls.isEmpty()) {

It shouldn&apos;t occur, but if m_runningVersionChangeTransaction or m_pendingSetVersionCalls became true during this loop, the pendingDeleteCalls that hadn&apos;t been requeued would be lost. Can you pull those clauses out to a surrounding if block and/or early exit?

What happens if several calls are in the queue and m_deletePending becomes true? Will the rest of the calls in the queue get lost and hence the callbacks never fire?

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:284
&gt; +        if (!m_pendingDeleteCalls.isEmpty()) {

Would it be cleaner to just let deleteBackingStore() requeue the pending calls? (If not, we should adjust the pendingOpenCall logic below)

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:327
&gt; +        m_pendingDeleteCalls.append(PendingDeleteCall::create(prpCallbacks));

Nit: Return early here so the rest of the method doesn&apos;t need to be in the else block.

&gt; Source/WebCore/storage/IDBRequest.cpp:299
&gt; +    // If the result was of type IDBCursor, or a onBlocked event, then we&apos;ll fire again.

I think we determined this shouldn&apos;t be necessary (onblocked shouldn&apos;t have a result), but haven&apos;t finished investigating why this occurs. Can you add a FIXME unless you made further discoveries?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486421</commentid>
    <comment_count>25</comment_count>
      <attachid>111524</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-18 16:28:03 -0700</bug_when>
    <thetext>Created attachment 111524
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486423</commentid>
    <comment_count>26</comment_count>
      <attachid>111477</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-18 16:30:08 -0700</bug_when>
    <thetext>Comment on attachment 111477
Patch

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

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:281
&gt;&gt; +    while (!m_runningVersionChangeTransaction &amp;&amp; m_pendingSetVersionCalls.isEmpty() &amp;&amp; !m_deletePending &amp;&amp; !pendingDeleteCalls.isEmpty()) {
&gt; 
&gt; It shouldn&apos;t occur, but if m_runningVersionChangeTransaction or m_pendingSetVersionCalls became true during this loop, the pendingDeleteCalls that hadn&apos;t been requeued would be lost. Can you pull those clauses out to a surrounding if block and/or early exit?
&gt; 
&gt; What happens if several calls are in the queue and m_deletePending becomes true? Will the rest of the calls in the queue get lost and hence the callbacks never fire?

I&apos;ve remodeled the section to be hopefully clearer

&gt;&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:327
&gt;&gt; +        m_pendingDeleteCalls.append(PendingDeleteCall::create(prpCallbacks));
&gt; 
&gt; Nit: Return early here so the rest of the method doesn&apos;t need to be in the else block.

done

&gt;&gt; Source/WebCore/storage/IDBRequest.cpp:299
&gt;&gt; +    // If the result was of type IDBCursor, or a onBlocked event, then we&apos;ll fire again.
&gt; 
&gt; I think we determined this shouldn&apos;t be necessary (onblocked shouldn&apos;t have a result), but haven&apos;t finished investigating why this occurs. Can you add a FIXME unless you made further discoveries?

If I fire an onBlocked event followed by an onSuccess event without the onBlocked event being processed in between, m_result is set when onBlocked is being dispatched

This happens in factory-deletedatabase-interactions test3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487034</commentid>
    <comment_count>27</comment_count>
      <attachid>111524</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-19 14:54:49 -0700</bug_when>
    <thetext>Comment on attachment 111524
Patch

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

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:324
&gt; +void IDBDatabaseBackendImpl::deleteBackingStore(PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks)

Nit: Suggest &quot;deleteDatabase&quot; as the method name, since the backing store is not what&apos;s being deleted

&gt; Source/WebCore/storage/IDBFactory.idl:35
&gt; +        [CallWith=ScriptExecutionContext] IDBVersionChangeRequest deleteDatabase(in DOMString anem)

Typo: &quot;anem&quot; -&gt; &quot;name&quot;

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:132
&gt; +        // then.

Nit: typo: &quot;then&quot; -&gt; &quot;them&quot;

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:263
&gt; +    m_db-&gt;remove(DatabaseMetaDataKey::encode(databaseId, DatabaseMetaDataKey::kUserVersion));

This doesn&apos;t remove the other database metadata (origin name, database name, maximum store ID, or add the databaseId to the free list. I&apos;m not sure how crucial the former are, or if the latter is actually used.

&gt; Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp:78
&gt; +    WebString path = dataDir;

Do you need this copy here?

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase.html:13
&gt; +description(&quot;Test IndexedDB&apos;s webkitIndexedDB.deleteDatabase().&quot;);

Please add a test that deletes a database that doesn&apos;t exist. (Unless I missed it)

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase.html:38
&gt; +    deleteAllObjectStores(db);

Don&apos;t need this in the test, since it will run fresh each time. Delete for clarity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489238</commentid>
    <comment_count>28</comment_count>
      <attachid>111524</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-24 02:24:20 -0700</bug_when>
    <thetext>Comment on attachment 111524
Patch

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

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:238
&gt; +{

I would go for a more low-level approach here. We should be able to just nuke everything that&apos;s prefixed with the database id:

KeyPrefix start(databaseId, 0, 0);
KeyPrefix stop(databaseId + 1, 0, 0);
deleteRange(start::encode(), stop::encode());

This covers the meta-data, object stores, indexes and anything we might add in the future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>489417</commentid>
    <comment_count>29</comment_count>
      <attachid>111524</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-24 10:33:08 -0700</bug_when>
    <thetext>Comment on attachment 111524
Patch

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

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:259
&gt; +        deleteObjectStore(databaseId, *objectStoreId);

+1 to Hans; also, deleteObjectStore asserts that m_currentTransaction is non-null whereas this method early-exits if m_currentTransaction is null, so that method isn&apos;t directly usable anyway</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490118</commentid>
    <comment_count>30</comment_count>
      <attachid>112356</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-25 10:29:57 -0700</bug_when>
    <thetext>Created attachment 112356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490120</commentid>
    <comment_count>31</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-25 10:31:34 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (From update of attachment 111524 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111524&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:324
&gt; &gt; +void IDBDatabaseBackendImpl::deleteBackingStore(PassRefPtr&lt;IDBCallbacks&gt; prpCallbacks)
&gt; 
&gt; Nit: Suggest &quot;deleteDatabase&quot; as the method name, since the backing store is not what&apos;s being deleted

done

&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactory.idl:35
&gt; &gt; +        [CallWith=ScriptExecutionContext] IDBVersionChangeRequest deleteDatabase(in DOMString anem)
&gt; 
&gt; Typo: &quot;anem&quot; -&gt; &quot;name&quot;

done

&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:132
&gt; &gt; +        // then.
&gt; 
&gt; Nit: typo: &quot;then&quot; -&gt; &quot;them&quot;

done

&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:263
&gt; &gt; +    m_db-&gt;remove(DatabaseMetaDataKey::encode(databaseId, DatabaseMetaDataKey::kUserVersion));
&gt; 
&gt; This doesn&apos;t remove the other database metadata (origin name, database name, maximum store ID, or add the databaseId to the free list. I&apos;m not sure how crucial the former are, or if the latter is actually used.

done

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebIDBFactoryImpl.cpp:78
&gt; &gt; +    WebString path = dataDir;
&gt; 
&gt; Do you need this copy here?

removed

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase.html:13
&gt; &gt; +description(&quot;Test IndexedDB&apos;s webkitIndexedDB.deleteDatabase().&quot;);
&gt; 
&gt; Please add a test that deletes a database that doesn&apos;t exist. (Unless I missed it)

done

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase.html:38
&gt; &gt; +    deleteAllObjectStores(db);
&gt; 
&gt; Don&apos;t need this in the test, since it will run fresh each time. Delete for clarity.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490121</commentid>
    <comment_count>32</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-25 10:32:24 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 111524 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111524&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:259
&gt; &gt; +        deleteObjectStore(databaseId, *objectStoreId);
&gt; 
&gt; +1 to Hans; also, deleteObjectStore asserts that m_currentTransaction is non-null whereas this method early-exits if m_currentTransaction is null, so that method isn&apos;t directly usable anyway

After chatting with Hans, I changed the implementation to what it is now.

Note that while I check that there&apos;s no current transaction, I create a new one in that function</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>490167</commentid>
    <comment_count>33</comment_count>
      <attachid>112362</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-25 11:16:07 -0700</bug_when>
    <thetext>Created attachment 112362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491571</commentid>
    <comment_count>34</comment_count>
      <attachid>112362</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-27 07:57:32 -0700</bug_when>
    <thetext>Comment on attachment 112362
Patch

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

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:132
&gt; +        // them.

is this comment right? isn&apos;t this just finding the database backend in the cache, calling delete on it, and then we can return?

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:13
&gt; +description(&quot;Test the deleteDatabase call and it&apos;s interaction with open/setVersion&quot;);

s/it&apos;s/its/


This looks good to me as far as I can tell (just the minor nits above), but there are some points I&apos;m not entirely sure of how they work; it would be great if Josh would take a look too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491597</commentid>
    <comment_count>35</comment_count>
      <attachid>112687</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-27 08:22:16 -0700</bug_when>
    <thetext>Created attachment 112687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491598</commentid>
    <comment_count>36</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-27 08:22:45 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; (From update of attachment 112362 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112362&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:132
&gt; &gt; +        // them.
&gt; 
&gt; is this comment right? isn&apos;t this just finding the database backend in the cache, calling delete on it, and then we can return?

updated comment

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:13
&gt; &gt; +description(&quot;Test the deleteDatabase call and it&apos;s interaction with open/setVersion&quot;);
&gt; 
&gt; s/it&apos;s/its/

done

&gt; 
&gt; 
&gt; This looks good to me as far as I can tell (just the minor nits above), but there are some points I&apos;m not entirely sure of how they work; it would be great if Josh would take a look too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491693</commentid>
    <comment_count>37</comment_count>
      <attachid>112687</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 10:31:43 -0700</bug_when>
    <thetext>Comment on attachment 112687
Patch

Attachment 112687 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10229559

New failing tests:
storage/indexeddb/factory-deletedatabase.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491712</commentid>
    <comment_count>38</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-27 10:49:23 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; (From update of attachment 112687 [details])
&gt; Attachment 112687 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/10229559
&gt; 
&gt; New failing tests:
&gt; storage/indexeddb/factory-deletedatabase.html

passes locally :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492108</commentid>
    <comment_count>39</comment_count>
      <attachid>112362</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2011-10-27 17:07:53 -0700</bug_when>
    <thetext>Comment on attachment 112362
Patch

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

The flow of the tests make sense to me. (cr-linux failure probably a bot hiccup, log doesn&apos;t show that the new test actually failed)

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:80
&gt; +    window.steps.push(evalAndLog(&quot;&apos;deleteDatabase&apos;&quot;));

For consistency, should include the database name in the &quot;step&quot; so we can distinguish ordering later on. Calls that go through Connection do this automagically e.g. &quot;h.open&quot; where &quot;h&quot; is the name. So &quot;deleteDatabase(h)&quot; or something.

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:84
&gt; +        if (opts &amp;&amp; opts.onsuccess) { opts.onsuccess.call(self); }

&quot;self&quot; doesn&apos;t refer to anything here. (Within a Connection object above, it&apos;s an alias for &quot;this&quot; captured in the closure, but this function isn&apos;t a method on an object)
It&apos;s harmless because it&apos;s only used to provide a value for &quot;this&quot; when the onXXX is fired, and that&apos;s never used the deleteDatabase calls. (In fact, it isn&apos;t used anywhere, all of these onXXX are plain functions rather than referring back to the connection)

So... just change call(self) to call(null) within deleteDatabase(). (As this test is written, the behavior should be identical if you make that change within function Connection as well, but there it does have a purpose, even if it&apos;s unused.)

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:120
&gt; +         function(doNext) { deleteDatabase(window.dbname, {

indentation

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:147
&gt; +         function(doNext) { deleteDatabase(window.dbname, {

indentation

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:206
&gt; +         function(doNext) { deleteDatabase(window.dbname); doNext(); },

indentation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492287</commentid>
    <comment_count>40</comment_count>
      <attachid>112823</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-28 00:33:57 -0700</bug_when>
    <thetext>Created attachment 112823
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492288</commentid>
    <comment_count>41</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-28 00:35:25 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 112362 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112362&amp;action=review
&gt; 
&gt; The flow of the tests make sense to me. (cr-linux failure probably a bot hiccup, log doesn&apos;t show that the new test actually failed)
&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:80
&gt; &gt; +    window.steps.push(evalAndLog(&quot;&apos;deleteDatabase&apos;&quot;));
&gt; 
&gt; For consistency, should include the database name in the &quot;step&quot; so we can distinguish ordering later on. Calls that go through Connection do this automagically e.g. &quot;h.open&quot; where &quot;h&quot; is the name. So &quot;deleteDatabase(h)&quot; or something.

as the name of the database to be deleted isn&apos;t necessarily unique across invocations (e.g. I once try to delete the same database twice), I&apos;ve added an extra id argument which is logged with all calls, so we can tell different invocations apart

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:84
&gt; &gt; +        if (opts &amp;&amp; opts.onsuccess) { opts.onsuccess.call(self); }
&gt; 
&gt; &quot;self&quot; doesn&apos;t refer to anything here. (Within a Connection object above, it&apos;s an alias for &quot;this&quot; captured in the closure, but this function isn&apos;t a method on an object)
&gt; It&apos;s harmless because it&apos;s only used to provide a value for &quot;this&quot; when the onXXX is fired, and that&apos;s never used the deleteDatabase calls. (In fact, it isn&apos;t used anywhere, all of these onXXX are plain functions rather than referring back to the connection)
&gt; 
&gt; So... just change call(self) to call(null) within deleteDatabase(). (As this test is written, the behavior should be identical if you make that change within function Connection as well, but there it does have a purpose, even if it&apos;s unused.)

done

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:120
&gt; &gt; +         function(doNext) { deleteDatabase(window.dbname, {
&gt; 
&gt; indentation

done

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:147
&gt; &gt; +         function(doNext) { deleteDatabase(window.dbname, {
&gt; 
&gt; indentation

done

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:206
&gt; &gt; +         function(doNext) { deleteDatabase(window.dbname); doNext(); },
&gt; 
&gt; indentation

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492302</commentid>
    <comment_count>42</comment_count>
      <attachid>112823</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-28 01:12:54 -0700</bug_when>
    <thetext>Comment on attachment 112823
Patch

Attachment 112823 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/10236200

New failing tests:
storage/indexeddb/factory-deletedatabase.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492359</commentid>
    <comment_count>43</comment_count>
      <attachid>112841</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-28 03:05:21 -0700</bug_when>
    <thetext>Created attachment 112841
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492513</commentid>
    <comment_count>44</comment_count>
      <attachid>112841</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-10-28 10:31:05 -0700</bug_when>
    <thetext>Comment on attachment 112841
Patch

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

Just some style nits.

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:293
&gt; +    if (m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty() || !m_pendingDeleteCalls.isEmpty())

Nit: Is the !m_pendingDeleteCalls.isEmpty() necessary at this point?

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:340
&gt; +    // FIXME: Only fire onVersionChange if there the connection isn&apos;t in
&gt; +    // the process of closing.
&gt; +    // http://crbug.com/100645

Nit: Would be nice to have webkit bugs here instead of chromium bugs.

&gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:345
&gt; +    // FIXME: Only fire onBlocked if there are open connections after the
&gt; +    // VersionChangeEvents are received, not just set up to fire.
&gt; +    // http://crbug.com/100123

ditto

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:228
&gt; +var successfullyParsed = true;

Nit: After https://bugs.webkit.org/show_bug.cgi?id=70784 , this is no longer required.

&gt; LayoutTests/storage/indexeddb/factory-deletedatabase.html:101
&gt; +var successfullyParsed = true;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492615</commentid>
    <comment_count>45</comment_count>
      <attachid>112897</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-28 12:55:24 -0700</bug_when>
    <thetext>Created attachment 112897
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492617</commentid>
    <comment_count>46</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-10-28 12:56:41 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; (From update of attachment 112841 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=112841&amp;action=review
&gt; 
&gt; Just some style nits.
&gt; 
&gt; &gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:293
&gt; &gt; +    if (m_runningVersionChangeTransaction || !m_pendingSetVersionCalls.isEmpty() || !m_pendingDeleteCalls.isEmpty())
&gt; 
&gt; Nit: Is the !m_pendingDeleteCalls.isEmpty() necessary at this point?

It can be non-empty. The loop above iterates over a copy, and some of the callbacks might get re-added.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:340
&gt; &gt; +    // FIXME: Only fire onVersionChange if there the connection isn&apos;t in
&gt; &gt; +    // the process of closing.
&gt; &gt; +    // http://crbug.com/100645
&gt; 
&gt; Nit: Would be nice to have webkit bugs here instead of chromium bugs.

done

&gt; 
&gt; &gt; Source/WebCore/storage/IDBDatabaseBackendImpl.cpp:345
&gt; &gt; +    // FIXME: Only fire onBlocked if there are open connections after the
&gt; &gt; +    // VersionChangeEvents are received, not just set up to fire.
&gt; &gt; +    // http://crbug.com/100123
&gt; 
&gt; ditto

done

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase-interactions.html:228
&gt; &gt; +var successfullyParsed = true;
&gt; 
&gt; Nit: After https://bugs.webkit.org/show_bug.cgi?id=70784 , this is no longer required.

done

&gt; 
&gt; &gt; LayoutTests/storage/indexeddb/factory-deletedatabase.html:101
&gt; &gt; +var successfullyParsed = true;
&gt; 
&gt; Ditto.

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492647</commentid>
    <comment_count>47</comment_count>
      <attachid>112897</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-28 13:46:43 -0700</bug_when>
    <thetext>Comment on attachment 112897
Patch

Rejecting attachment 112897 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
/indexeddb/factory-deletedatabase-interactions.html
patching file LayoutTests/storage/indexeddb/factory-deletedatabase.html
patching file LayoutTests/storage/indexeddb/open-close-version-expected.txt
patching file LayoutTests/storage/indexeddb/open-close-version.html
Hunk #1 succeeded at 137 (offset -1 lines).
Hunk #2 succeeded at 210 (offset -1 lines).
Hunk #3 succeeded at 290 (offset -1 lines).

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/10242126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492936</commentid>
    <comment_count>48</comment_count>
      <attachid>112969</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-29 08:11:02 -0700</bug_when>
    <thetext>Created attachment 112969
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492937</commentid>
    <comment_count>49</comment_count>
      <attachid>112969</attachid>
    <who name="">jochen</who>
    <bug_when>2011-10-29 08:12:02 -0700</bug_when>
    <thetext>Comment on attachment 112969
Patch

rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492943</commentid>
    <comment_count>50</comment_count>
      <attachid>112969</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-29 09:19:01 -0700</bug_when>
    <thetext>Comment on attachment 112969
Patch

Clearing flags on attachment: 112969

Committed r98806: &lt;http://trac.webkit.org/changeset/98806&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>492944</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-29 09:19:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>493369</commentid>
    <comment_count>52</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-10-31 09:46:44 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; All reviewed patches have been landed.  Closing bug.

Woot! Thanks Jochen!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97079</attachid>
            <date>2011-06-14 00:23:25 -0700</date>
            <delta_ts>2011-08-18 08:17:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20110614092322.patch</filename>
            <type>text/plain</type>
            <size>21904</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODc4MzQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1ZWQ5OGM2NGYxNDMzMDNhYWUzNTAw
MzMxNWZmMGI4YjhkNGU1NDZhLi5hOTRhOWJiNTcyNjg0Mzg5YjA1NTRjNTE4NTE3YTRhM2Q5Njkz
ZGQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDYtMTQgIEpvY2hlbiBFaXNpbmdlciAg
PGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbDogQWRkZWQu
CisKIDIwMTEtMDYtMDEgIEFubmllIFN1bGxpdmFuICA8c3VsbGl2YW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS5odG1sIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2UtZGVsZXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDJmZGQx
N2FhMTA5OWEzZWJmYWMzMmZhY2YxMzc2ZjE1ZmM2MjRhNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS5odG1sCkBAIC0wLDAg
KzEsMTE3IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgZGVsZXRlRGF0YWJh
c2UgY2FsbCBvZiBJbmRleGVkREIuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KSAKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9u
IHRlc3QoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3Bl
bignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IG9wZW5T
dWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBvcGVuU3VjY2VzcygpCit7CisgICAgd2luZG93LmRiID0gZXZhbEFuZExv
ZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExv
ZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gc2V0VmVyc2lvblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHNldFZlcnNpb25TdWNjZXNzKCkKK3sKKyAgICBk
ZWJ1Zygic2V0VmVyc2lvblN1Y2Nlc3MoKToiKTsKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5k
TG9nKCJ0cmFucyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRy
YW5zICE9PSBudWxsIik7CisgICAgdHJhbnMub25hYm9ydCA9IHVuZXhwZWN0ZWRBYm9ydENhbGxi
YWNrOworCisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKworICAgIGNoZWNrRGF0YWJh
c2VJc0VtcHR5KCJuZXcgdmVyc2lvbiIpOworCisgICAgb2JqZWN0U3RvcmUgPSBldmFsQW5kTG9n
KCdkYi5jcmVhdGVPYmplY3RTdG9yZSgidGVzdDEyMyIpJyk7CisgICAgY2hlY2tPYmplY3RTdG9y
ZSgpOworICAgIGNvbW1pdEFuZENvbnRpbnVlKCk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrRGF0YWJh
c2VJc0VtcHR5KHZlcnNpb24pCit7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYi52ZXJz
aW9uIiwgdmVyc2lvbik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYi5uYW1lIiwgImRh
dGFiYXNlLXRvLWRlbGV0ZSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzIiwg
IltdIik7CisgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3RoIiwgIjAiKTsK
KyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygnJykiLCAiZmFsc2Ui
KTsKKyAgICBzaG91bGRCZU51bGwoImRiLm9iamVjdFN0b3JlTmFtZXNbMF0iKTsKKyAgICBzaG91
bGRCZU51bGwoImRiLm9iamVjdFN0b3JlTmFtZXMuaXRlbSgwKSIpOworfQorCitmdW5jdGlvbiBj
aGVja09iamVjdFN0b3JlKCkKK3sKKyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVOYW1lcyIs
ICJbJ3Rlc3QxMjMnXSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0
aCIsICIxIik7CisgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoJycp
IiwgImZhbHNlIik7CisgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMo
J3Rlc3Q0NTYnKSIsICJmYWxzZSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVz
LmNvbnRhaW5zKCd0ZXN0MTIzJykiLCAidHJ1ZSIpOworfQorCitmdW5jdGlvbiBjb21taXRBbmRD
b250aW51ZSgpCit7CisgICAgd2luZG93LnNldFRpbWVvdXQoY2xvc2VEYXRhYmFzZSwgMCk7Cit9
CisKK2Z1bmN0aW9uIGNsb3NlRGF0YWJhc2UoKQoreworICAgIGV2YWxBbmRMb2coImRiLmNsb3Nl
KCkiKTsKKyAgICB3aW5kb3cuZGIgPSBudWxsOworICAgIGNsb3NlQW5kQ29udGludWUoKTsKK30K
KworZnVuY3Rpb24gY2xvc2VBbmRDb250aW51ZSgpCit7CisgICAgLy8gVGhpcyBpcyBhIHRlbXBv
cmFyeSBoYWNrIHVudGlsIHdlJ3ZlIGltcGxlbWVudGVkIGNsb3Npbmcgb3BlbiBkYXRhYmFzZXMg
YmVmb3JlIGRlbGV0aW5nIHRoZW0uCisgICAgd2luZG93LnNldFRpbWVvdXQoZGVsZXRlRGF0YWJh
c2UsIDApOworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZSgpCit7CisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8t
ZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZVN1Y2Nlc3M7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IGRlbGV0ZVN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJkZWxldGVTdWNjZXNzKCk6Iik7CisKKyAg
ICAvLyByZW9wZW4gdGhlIGRhdGFiYXNlLgorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJr
aXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IHJlb3BlblN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHJlb3BlblN1Y2Nlc3MoKQoreworICAgIHdp
bmRvdy5kYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworICAgIGNo
ZWNrRGF0YWJhc2VJc0VtcHR5KCIiKTsKKyAgICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKKwordmFy
IHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IDVjYTM5MzE0MDBlM2ZhNTdkMTQ4MWUyNmYxMWY3MjQwNmRmYzVmNTMu
LjY2YzE1OWFmZWRjOWMyNjRiMWU2YWZmMDQxZjNmMWQ0ZGM4YTAzNjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNyBAQAorMjAxMS0wNi0xNCAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MjIKKworICAgICAgICBUZXN0OiBzdG9y
YWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9J
REJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rvcnk6OmRlbGV0ZURhdGFi
YXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuaDoKKyAgICAgICAgKiBzdG9yYWdl
L0lEQkZhY3RvcnkuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0
YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oOgorICAgICAgICAqIHN0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNr
aW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpk
ZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUu
aDoKKwogMjAxMS0wNi0wMSAgQW5kcmFzIEJlY3NpICA8YWJlY3NpQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5jcHAKaW5kZXggOThiNTI3NGY0MWVlZGFkNDE3ZDQzZjg4YWUyMDI1NmMxYmIx
MDNmNS4uNDk4YTM2NzE0MDhhYjM3ZDgzYTFiNzA0ZjBkYWU5MjE2M2JiNDk1MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCkBAIC04MCw2ICs4MCwyOCBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQkZhY3Rvcnk6Om9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgY29uc3QgUwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCitQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
aWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhp
cyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBp
ZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShk
b2N1bWVudCwgSURCQW55OjpjcmVhdGVOdWxsKCksIDApOworICAgIEdyb3VwU2V0dGluZ3MqIGdy
b3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsK
KyAgICBtX2ZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1
bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3Mt
PmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpLCBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6RGVm
YXVsdEJhY2tpbmdTdG9yZSk7CisgICAgcmV0dXJuIHJlcXVlc3Q7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCBjZDBkNjRmZDkzYmU1M2IxZjJjMDk1NWM0YTUx
YzMwODMzNzBmMTI0Li5mOTExMDBhYjFjMzdkYjUzNWU5NmExMTU2NGIzYjI4ZTViZjFiYWE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNTUsNiArNTUsNyBAQCBwdWJsaWM6
CiAgICAgfklEQkZhY3RvcnkoKTsKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBkZWxldGVEYXRhYmFzZShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAKIHBy
aXZhdGU6CiAgICAgSURCRmFjdG9yeShJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKaW5kZXggYjUyNDQ4NTU1ZDU0ZDYwMDE2MmFk
NzQ4OTY4ZjJjZmI4NzM4YTYyNy4uYTg5ZjIyMjNlODY5MmNjMWRmZDQ1OTcxYzZlNDA1NGMxNTcx
YzgxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCkBAIC0zMCw2ICszMCw4
IEBAIG1vZHVsZSBzdG9yYWdlIHsKICAgICBdIElEQkZhY3RvcnkgewogICAgICAgICBbQ2FsbFdp
dGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuKGluIFtDb252ZXJ0TnVs
bFRvTnVsbFN0cmluZ10gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlJlcXVlc3QgZGVsZXRlRGF0YWJhc2UoaW4gRE9NU3RyaW5nIG5hbWUpCisgICAgICAg
ICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKICAgICB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDc2
OGIzZTEwZjk3MjZiOWJlYjFhZDNhOTU3MThhODU0MTZlZTcxZi4uNjczN2IxZTljYTU4NmJhODQy
OTkzNzZmZDgzYmYwYWU4YzNkNDE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIklE
QlNRTGl0ZUJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgorI2luY2x1ZGUgIlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYv
VW51c2VkUGFyYW0uaD4KIApAQCAtMTA0LDYgKzEwNSwzMyBAQCB2b2lkIElEQkZhY3RvcnlCYWNr
ZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYQogICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRh
YmFzZUJhY2tlbmQuZ2V0KCkpOwogfQogCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVs
ZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3Jl
VHlwZSkKK3sKKyAgICBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBzZWN1cml0eU9yaWdpbi0+ZGF0
YWJhc2VJZGVudGlmaWVyKCk7CisgICAgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBmaWxlSWRl
bnRpZmllciArICJAIiArIG5hbWU7CisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRv
ciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAg
aWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIEZJWE1F
OiBDbG9zZSB0aGUgZGF0YWJhc2UgZmlyc3QuIEZvciBub3csIHdlIGp1c3QgY2hpY2tlbiBvdXQs
IHNvIHdlIGNhbiBkbyB0aGUgZGVsZXRlIGZ1cnRoZXIgZG93biBzeW5jaHJvbm91c2x5LgorICAg
ICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNo
b3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIGJvb2wgc3VjY2VzcyA9IEZBTFNF
OworICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3RvcmUpCisgICAg
ICAgIHN1Y2Nlc3MgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKHNlY3Vy
aXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisjaWYgRU5B
QkxFKExFVkVMREIpCisgICAgZWxzZSBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBMZXZlbERCQmFj
a2luZ1N0b3JlKQorICAgICAgICBzdWNjZXNzID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVs
ZXRlRGF0YWJhc2Uoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIGZpbGVJZGVudGlmaWVy
LCB0aGlzKTsKKyNlbmRpZgorICAgIGlmICghc3VjY2VzcykgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZh
bHVlKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oCmluZGV4IGFiNmUxNTM1MWE0MmIxYTE3Yzk2M2ZiYjFlMDAwYWM0OGNlMjNl
MjEuLjJhZmM5MjNiYTQ5NDI4MGExOTY2MDY1YjJmYTVlZjJhYjFlMzg2MzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaApAQCAtNTYsNiArNTYs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5n
JiB1bmlxdWVJZGVudGlmaWVyKTsKIAogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUs
IEJhY2tpbmdTdG9yZVR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBCYWNraW5nU3RvcmVU
eXBlKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5QmFja2VuZEltcGwoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAppbmRl
eCA4NzM2MmQ0ZmQ2NGI4ZTM2MGZiOTlhZThlNTZmNzNkMGYyODZhODUwLi41M2RhZGRlZTBhNmQz
ZWM4MTZhNzAzOTk0YmMyZjdiNGE0MGEyODM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1
YmxpYzoKICAgICB9OwogCiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1l
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2lu
Z1N0b3JlVHlwZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBCYWNraW5nU3RvcmVUeXBl
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAppbmRleCA4MzVmNTUyODEzYjAx
ODIzMzc3ZTE4NjVmY2I2ZjdjOGMxODU3NGE3Li4wYjEyYWY1Y2QzOWZhNDdhNjQ3NzczNDVjNWIw
MTMzZTVmMmE2OGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAKQEAgLTE2NSw2ICsxNjUsMjIgQEAgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW4oU2VjdXJpdHlPcmlnaW4qIHNl
Y3VyaXQKICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKIH0KIAorYm9vbCBJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShTZWN1cml0eU9yaWdpbiogc2VjdXJp
dHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgcGF0aEJhc2VBcmcsIGNvbnN0IFN0cmluZyYgZmlsZUlk
ZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKK3sKKyAgICBTdHJpbmcg
cGF0aEJhc2UgPSBwYXRoQmFzZUFyZzsKKworICAgIGlmIChwYXRoQmFzZS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBXZSBuZWVkIHRvIGhhbmRs
ZSB0aGlzIGNhc2UgZm9yIGluY29nbml0byBhbmQgRHVtcFJlbmRlclRyZWUuCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBTdHJpbmcgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsg
Ii5pbmRleGVkZGIubGV2ZWxkYiIpOworICAgIGlmICghZmlsZUV4aXN0cyhwYXRoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZGVsZXRlRmlsZShwYXRoKTsKK30KKwogYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQog
ewogICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZSht
X2lkZW50aWZpZXIsIG5hbWUpOwpAQCAtMTMxNCw4ICsxMzMwLDYgQEAgdm9pZCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6cm9sbGJhY2soKQogICAgIG1fYmFja2luZ1N0b3Jl
LT5tX2N1cnJlbnRUcmFuc2FjdGlvbi5jbGVhcigpOwogfQogCi0vLyBGSVhNRTogZGVsZXRlRGF0
YWJhc2Ugc2hvdWxkIGJlIHBhcnQgb2YgSURCQmFja2luZ1N0b3JlLgotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggOThmNWVhMjQyMTkxODA0
YjBlZDQwYjQ1ZTEzZTQ1Mjc0ZDkzZmExMi4uYmFjYTNhOWU1NzQzMTg3YWE2ZWY0MDA4ZTgwMWQw
Y2IzN2RiYjM2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgKQEAgLTQxLDYgKzQxLDcgQEAgY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwog
Y2xhc3MgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewog
cHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbihTZWN1
cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4aW11bVNpemUs
IGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopOwor
ICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsKik7CiAgICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdTdG9yZSgpOwogCiAg
ICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCmluZGV4IDFhMjFj
NThkMzc4OGY0NjFhMGE4ZDJmZjA4MGYzZTNmNTM4NDJmMzAuLmQ0NGVjOWU3NjhmOWMyMmRmZmZk
Mjg5NDA3ZDdkMmYwMGQyNjk0ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKQEAgLTE5Nyw2ICsxOTcsMTggQEAgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdp
biogc2VjdXJpdHkKICAgICByZXR1cm4gYmFja2luZ1N0b3JlLnJlbGVhc2UoKTsKIH0KIAorYm9v
bCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiBz
ZWN1cml0eU9yaWdpbiwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxl
SWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQoreworICAgIFN0cmlu
ZyBwYXRoID0gIjptZW1vcnk6IjsKKyAgICBpZiAoIXBhdGhCYXNlLmlzRW1wdHkoKSkKKyAgICAg
ICAgcGF0aCA9IHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoQmFzZSwgc2VjdXJpdHlPcmln
aW4tPmRhdGFiYXNlSWRlbnRpZmllcigpICsgIi5pbmRleGVkZGIiKTsKKworICAgIGlmICghZmls
ZUV4aXN0cyhwYXRoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZGVsZXRl
RmlsZShwYXRoKTsKK30KKwogYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24s
IGludDY0X3QmIGZvdW5kSWQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IGRhdGFiYXNlUXVlcnko
bV9kYiwgIlNFTEVDVCBpZCwgdmVyc2lvbiBGUk9NIERhdGFiYXNlcyBXSEVSRSBuYW1lID0gPyIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3Rv
cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgKaW5k
ZXggOWVmYTA2MGE4ZDYxZWFkNDdmMDZjNGUwYzU1MWU5MTZjMTcyNmYwMy4uOWY2N2NhYTczNzMx
MmVjZmIxMmJlYWZlZGJjZTE4ZTM1YWYwNDQyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCkBAIC0zNSw2ICszNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIElEQlNRTGl0ZUJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5n
U3RvcmUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
b3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4
aW11bVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5k
SW1wbCopOworICAgIHN0YXRpYyBib29sIGRlbGV0ZURhdGFiYXNlKFNlY3VyaXR5T3JpZ2luKiwg
Y29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwgSURC
RmFjdG9yeUJhY2tlbmRJbXBsKik7CiAgICAgdmlydHVhbCB+SURCU1FMaXRlQmFja2luZ1N0b3Jl
KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3Qg
U3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDBhM2ExZDgwYzgzNWVlM2YzZTllZDI4Y2JjZDZi
ZWM0ZTNhZTIzMDAuLjE2ZmRlNGMyYWQ1N2NjZjQ1Zjc0OTRlNWYzNzNjMzJmMzcwNjM1NGYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDYtMTQgIEpv
Y2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50IElEQkZhY3RvcnkuZGVsZXRl
RGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYyNjIyCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2Vu
ZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHNy
Yy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTA2LTAxICBTaGVyaWZmIEJvdCAgPHdlYmtp
dC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByODc3ODguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJ
REJGYWN0b3J5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5
LmgKaW5kZXggOTc1ODhkNThjMmNmNWMzZGQyMTE5NGYzOTkwZWI1NDc4MzFkOTJjZC4uNjc3OTU1
MDcwOTA0ZmUyZTZkNTEyMjkxMzUwMjI3OTk0MjVkYzdmOSAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaApAQCAtNTgsOCArNTgsNyBAQCBwdWJsaWM6
CiAKICAgICAvLyBUaGUgV2ViS2l0IGltcGxlbWVudGF0aW9uIG9mIG9wZW4gaWdub3JlcyB0aGUg
V2ViRnJhbWUqIHBhcmFtZXRlci4KICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2Vi
RnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhp
bXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUq
LCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyB9CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJLSVRfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNw
cAppbmRleCAwNGQzODgxOTliYzEzOGFhNTk2NDQzMjg3MTI2ZjI0NDlkMWY1Zjg1Li5lNWU5OTkx
NjczNjM0NzRjMThiNWUwYTAwODZiNDdmNjJiMTg4ZmQwIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtNzcsNiAr
NzcsMTkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmluZyYg
bmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGMKICAgICBtX3dlYklEQkZhY3RvcnktPm9w
ZW4obmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3ZWJG
cmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PFdlYklEQkZhY3Rvcnk6OkJh
Y2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKIH0KIAordm9pZCBJREJGYWN0b3J5
QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBy
cE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIEJhY2tpbmdTdG9y
ZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4o
cHJwT3JpZ2luKTsKKyAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpm
cm9tRnJhbWUoZnJhbWUpOworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2ViRnJhbWUtPnZp
ZXdJbXBsKCk7CisgICAgaWYgKHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSAmJiAhd2ViVmll
dy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd0luZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgb3Jp
Z2luKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigw
LCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3dlYklEQkZhY3RvcnktPmRlbGV0ZURh
dGFiYXNlKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwg
d2ViRnJhbWUsIGRhdGFEaXIsIHN0YXRpY19jYXN0PFdlYklEQkZhY3Rvcnk6OkJhY2tpbmdTdG9y
ZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAppbmRleCA4OWVkMzU1MmRk
YWZkYTNiZmQzMmUxNWUzZmI3NGQ3NTljMWQ2NTMyLi5iY2I1MGZmNWU0OWE0N2JkNWEwZmNjZjUx
MDcwM2E4MjVjYTI5NTYyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6RE9NU3RyaW5nTGlzdD4gZGF0YWJhc2VzKHZvaWQpIGNvbnN0
OwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2lu
PiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11
bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFz
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwg
UGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyLCBCYWNraW5nU3RvcmVUeXBlKTsKIAogcHJpdmF0ZToKICAgICBJ
REJGYWN0b3J5QmFja2VuZFByb3h5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKaW5kZXggMzY4OTUwMmY1ODhiYzA1ODFlMjQyM2Y1NzNm
MzRiNmYyZjRkZjA3MC4uNDcxNGM4MzdkMWZjOWRiMDg1OThmOGQ5OGE2NmFlOTYyZjlhOTdkNiAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNw
cApAQCAtNjMsNiArNjMsMTEgQEAgdm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6b3Blbihjb25zdCBX
ZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLAogICAgIG1faWRiRmFj
dG9yeUJhY2tlbmQtPm9wZW4obmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0
cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nh
c3Q8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdT
dG9yZVR5cGUpKTsKIH0KIAordm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2Uo
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3Qg
V2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRh
dGFEaXIsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sKKyAgICBtX2lkYkZh
Y3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3Jl
YXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIsIHN0YXRpY19jYXN0
PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3Rv
cmVUeXBlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJGYWN0b3J5SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RmFjdG9yeUltcGwuaAppbmRleCA2MmJkOWVkOTI3OGNiYTQzNmZlMzQ3MWEyYTQwYzcyNTNlZmIw
NDNjLi40OGE5ZDkyZTZhYTIyNGJhNDI4ODk4Mzg3ZTEwZmQzNDg4ZjdmNmYxIDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKQEAgLTQ1LDYgKzQ1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYklEQkZhY3RvcnlJbXBsKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRh
dGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
V2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNv
bnN0IFdlYlN0cmluZyYgZGF0YURpciwgQmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6CiAg
ICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1faWRi
RmFjdG9yeUJhY2tlbmQ7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104344</attachid>
            <date>2011-08-18 08:17:17 -0700</date>
            <delta_ts>2011-08-18 08:28:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20110818171714.patch</filename>
            <type>text/plain</type>
            <size>29100</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxOTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlYWJjZmNiMjkwY2EwZTIxYzY0YWM5
NWMzMTJlMTNiM2QzMjhlMTlhLi44MzhlZDg4NzMzNTU5NmNlNDhhMDNkZjg2OWM4NjE2NjY0OTYx
OWM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMTggIEpvY2hlbiBFaXNpbmdlciAg
PGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIElEQkZhY3Rv
cnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRt
bDogQWRkZWQuCisKIDIwMTEtMDgtMTYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBZGQgbmV3IGNocm9taXVtLW1hYy1sZW9wYXJkIGRpcmVjdG9yeSB0byBtYXRj
aCB0aGUgY2hyb21pdW0tbWFjIHRoYXQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
ZGIwYTZlNzhiNGNkYzdiMzg0NzliOTRjZWE5M2RmM2MzNjgxNDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgb2YgSW5k
ZXhlZERCLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKword2Via2l0SW5kZXhlZERC
LmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQorZGVsZXRlU3VjY2VzcygpOgor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRh
cmdldC5yZXN1bHQKK1BBU1MgZGIudmVyc2lvbiBpcyAiIgorUEFTUyBkYi5uYW1lIGlzICJkYXRh
YmFzZS10by1kZWxldGUiCitQQVNTIGRiLm9iamVjdFN0b3JlTmFtZXMgaXMgW10KK1BBU1MgZGIu
b2JqZWN0U3RvcmVOYW1lcy5sZW5ndGggaXMgMAorUEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzLmNv
bnRhaW5zKCcnKSBpcyBmYWxzZQorUEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzWzBdIGlzIG51bGwK
K1BBU1MgZGIub2JqZWN0U3RvcmVOYW1lcy5pdGVtKDApIGlzIG51bGwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmODI3
ZDE2MmJhMzJkMjcxZDc4OGZjOTM1MjNkZjI5NGM2MTI1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbApAQCAtMCww
ICsxLDU4IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgZGVsZXRlRGF0YWJh
c2UgY2FsbCBvZiBJbmRleGVkREIuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5kZWxl
dGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGRlbGV0ZVN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZVN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJk
ZWxldGVTdWNjZXNzKCk6Iik7CisKKyAgICAvLyByZW9wZW4gdGhlIGRhdGFiYXNlLgorICAgIHJl
cXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVs
ZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHJlb3BlblN1Y2Nlc3M7CisgICAgcmVx
dWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNo
ZWNrRGF0YWJhc2VJc0VtcHR5KHZlcnNpb24pCit7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJkYi52ZXJzaW9uIiwgdmVyc2lvbik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYi5u
YW1lIiwgImRhdGFiYXNlLXRvLWRlbGV0ZSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9y
ZU5hbWVzIiwgIltdIik7CisgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3Ro
IiwgIjAiKTsKKyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygnJyki
LCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZU51bGwoImRiLm9iamVjdFN0b3JlTmFtZXNbMF0iKTsK
KyAgICBzaG91bGRCZU51bGwoImRiLm9iamVjdFN0b3JlTmFtZXMuaXRlbSgwKSIpOworfQorCitm
dW5jdGlvbiByZW9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJk
YiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBjaGVja0RhdGFiYXNlSXNFbXB0eSgiIik7
CisgICAgZG9uZSgpOworfQorCit0ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNTM4Y2Vj
OWM2ZDEyNzM4YWZjYzdmOTRlM2JhY2E5NDlkZDcwYjRiLi4wMmFkYWFhNjRhMDFmYzA2OWVjNGY0
MWM2NGQ1YTlmNjNiYmQ2ZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDgt
MTggIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1w
bGVtZW50IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2Ut
ZGVsZXRlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rv
cnk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
OgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpkb0RlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRl
bGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFj
a2luZ1N0b3JlLmg6CisKIDIwMTEtMDgtMTYgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29u
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXByZXNlbnQgUmVuZGVyU3R5bGU6OnRleHRPdmVy
ZmxvdyBwcm9wZXJ0eSB1c2luZyBhbiBlbnVtIGluc3RlYWQgb2YgYSBib29sLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggMGJlZDg5MzM4MjBmMGQzZjkzY2Jh
ZWQ5YmY3NTUxOGIwODFlMzcyYi4uYThhZWMwNTA3YTkyYjgxMzNkNTE2NDYxNGQ4YTQwZTZhODAw
NTQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC00OCw2
ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90
JiBmb3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lk
LCBib29sIGludmFsaWRSb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91
bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRL
ZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5jcHAKaW5kZXggOThiNTI3NGY0MWVlZGFkNDE3ZDQzZjg4YWUyMDI1NmMxYmIx
MDNmNS4uOWFiZWM5MDU5MWFhNDE0N2JiMDQyYjRlZmJhOWY1OWI5NzFkYTIxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgog
I2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtODAsNiArODEsMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFMKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFr
ZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwor
ICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVs
bCgpLCAiIik7CisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5w
YWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRl
bGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBk
b2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCks
IGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwgSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2U6OkRlZmF1bHRCYWNraW5nU3RvcmUpOworICAgIHJldHVybiByZXF1ZXN0OworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggY2QwZDY0ZmQ5M2JlNTNi
MWYyYzA5NTVjNGE1MWMzMDgzMzcwZjEyNC4uYzgzZmQwZGFmOWFkNGI2NzA1OTRkNTQ5MjFmZTcx
MGFmNzdiYjdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYgKzQ0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFu
Z2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURC
RmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU1LDYgKzU2LDcg
QEAgcHVibGljOgogICAgIH5JREJGYWN0b3J5KCk7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRl
bGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5KElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAppbmRl
eCAwMmVlZDBlYjQxMmMyYmM1NmY5N2Q0NjU4Y2MxMWI4YzhmZWE3NzllLi40ZDE1NTJhNWVhYjZm
ZjAwN2U1MjZlMjY4YTZhYjQyOTU4YmFkOTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5pZGwKQEAgLTMwLDYgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgIF0gSURCRmFj
dG9yeSB7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1
ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1l
KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
CmluZGV4IGY1NTM2NWNhOTcwY2U3YTdjYzVhYmViNTMxZjFkMTU5YzEzMjE4NmMuLjEyZDc0MjMz
OTE5NDJkNzI0MTc4MWE2NGEzYzQ4MTU3MGFkMDY3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJJREJTUUxpdGVCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTI1Nyw2ICsyNTgsNzYgQEAgYm9vbCBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om1pZ3JhdGVGcm9tU1FMaXRlVG9MZXZlbERCKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU2VjdXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIEFTU0VSVChi
YWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOworCisgICAgY29uc3QgU3Ry
aW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBiYWNraW5nU3RvcmVUeXBlKTsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRp
ZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgp
LCBiYWNraW5nU3RvcmVUeXBlKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBGSVhN
RTogQ2xvc2UgdGhlIGRhdGFiYXNlIGZpcnN0LiBGb3Igbm93LCB3ZSBqdXN0IGNoaWNrZW4gb3V0
LCBzbyB3ZSBjYW4gZG8gdGhlIGRlbGV0ZSBmdXJ0aGVyIGRvd24gc3luY2hyb25vdXNseS4KKyAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBz
aG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKworI2lmIEVOQUJMRShMRVZFTERCKQor
ICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgYm9vbCBoYXNTUUxCYWNraW5nU3RvcmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmJhY2tp
bmdTdG9yZUV4aXN0cyhzZWN1cml0eU9yaWdpbi5nZXQoKSwgbmFtZSwgZGF0YURpcik7CisKKyAg
ICAgICAgLy8gTGF5b3V0VGVzdHM6IFNRTGl0ZSBiYWNraW5nIHN0b3JlIG1heSBub3QgZXhpc3Qg
b24gZGlzayBidXQgbWF5IGV4aXN0IGluIGNhY2hlLgorICAgICAgICBTdHJpbmcgY2FjaGVkU3Fs
aXRlQmFja2luZ1N0b3JlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0
eU9yaWdpbi5nZXQoKSwgU1FMaXRlQmFja2luZ1N0b3JlKTsKKyAgICAgICAgaWYgKCFoYXNTUUxC
YWNraW5nU3RvcmUgJiYgKG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICE9IG1fYmFja2luZ1N0b3Jl
TWFwLmZpbmQoY2FjaGVkU3FsaXRlQmFja2luZ1N0b3JlSWRlbnRpZmllcikpKQorICAgICAgICAg
ICAgaGFzU1FMQmFja2luZ1N0b3JlID0gdHJ1ZTsKKworICAgICAgICBpZiAoaGFzU1FMQmFja2lu
Z1N0b3JlKSB7CisgICAgICAgICAgICBib29sIG1pZ3JhdGlvblN1Y2NlZWRlZCA9IG1pZ3JhdGVG
cm9tU1FMaXRlVG9MZXZlbERCKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBt
YXhpbXVtU2l6ZSk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0obWlncmF0aW9uU3VjY2VlZGVk
KTsgLy8gRklYTUU6IFdoZW4gbWlncmF0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLCB3ZSBu
ZWVkIGVycm9yIGhhbmRsaW5nIGhlcmUuCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBJREJCYWNraW5nU3Rv
cmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZp
ZXIpOworICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkgJiYgKGJhY2tpbmdT
dG9yZVR5cGUgPT0gaXQyLT5zZWNvbmQtPmJhY2tpbmdTdG9yZVR5cGUoKSkpCisgICAgICAgIGJh
Y2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgIGVsc2UgeworICAgICAgICBpZiAoYmFja2lu
Z1N0b3JlVHlwZSA9PSBTUUxpdGVCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBiYWNraW5nU3Rv
cmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRh
dGFEaXIsIG1heGltdW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisjaWYgRU5BQkxFKExF
VkVMREIpCisgICAgICAgIGVsc2UgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tp
bmdTdG9yZSkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1TaXplLCBmaWxl
SWRlbnRpZmllciwgdGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaW50NjRfdCBkYXRh
YmFzZUlkOworICAgIFN0cmluZyB2ZXJzaW9uOworICAgIGlmICghYmFja2luZ1N0b3JlLT5leHRy
YWN0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgeworICAg
ICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxpbnQ2NF90PiBvYmpl
Y3RTdG9yZUlkczsKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4gYXV0b0luY3JlbWVudEZsYWdzOworICAgIGJh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWRzLCBu
YW1lcywga2V5UGF0aHMsIGF1dG9JbmNyZW1lbnRGbGFncyk7CisgICAgZm9yIChWZWN0b3I8aW50
NjRfdD46Oml0ZXJhdG9yIG9iamVjdFN0b3JlSWQgPSBvYmplY3RTdG9yZUlkcy5iZWdpbigpOyBv
YmplY3RTdG9yZUlkICE9IG9iamVjdFN0b3JlSWRzLmVuZCgpOyArK29iamVjdFN0b3JlSWQpCisg
ICAgICAgIGJhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUoZGF0YWJhc2VJZCwgKm9iamVj
dFN0b3JlSWQpOworCisgICAgaWYgKGJhY2tpbmdTdG9yZS0+ZGVsZXRlSURCRGF0YWJhc2VNZXRh
RGF0YShuYW1lKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCBmYjMwM2QxYTJiNjU4ZDIyYjUx
MWU3NjVlOWQ0ZTU5YjRlY2QxYmU0Li4yMTkzNjA2ZDU0MGRmYjk3NzNhZjczZTNkMjM1MjI4NjNm
OWEwOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSURCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpOwogCiAgICAgdmlydHVhbCB2b2lk
IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50
NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgog
ICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IDI0ODI2NjI0ZTY4MjI4Yjk2
NDZkMzVmZTNmZjlhMDMzZGRhMmU3ZjEuLjk4YTMxMDg2MzVlNTI0OGFlZTY4NzQ0ZDMyMGM5YTQy
OWRjOTlmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIH07CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDM1NDllNjVkZjEz
MTYxZDNiMTdiOGU1Y2NhOTA4NmY0YmQ3MDk4NTIuLjVmNzg4YzZlMzFmZDkzZTJiZjY4ZTU5NTdi
OGZiZjkxZDI3ZTAxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmNwcApAQCAtMjEyLDYgKzIxMiwzMyBAQCBib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OnNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmIChtX2N1cnJlbnRUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aW50NjRfdCBkYXRhYmFzZUlkOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFz
ZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworCisgICAgYm9vbCBvayA9IGdl
dEludChtX2RiLmdldCgpLCBrZXksIGRhdGFiYXNlSWQpOworICAgIGlmICghb2spCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGNhbiBvbmx5IGRlbGV0ZSB0aGUgbWV0YSBkYXRh
LCBpZiB0aGUgZGF0YWJhc2UgY29udGFpbnMgbm8gb2JqZWN0IHN0b3Jlcy4KKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgMSwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CisKKyAgICBPd25QdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNl
ZWsoc3RhcnRLZXkpOworICAgIGlmIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5r
ZXkoKSwgc3RvcEtleSkgPCAwKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kYi0+cmVt
b3ZlKGtleSk7CisgICAgbV9kYi0+cmVtb3ZlKERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0
b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykKIHsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgMSwgMCk7CkBAIC0xMzA2LDggKzEzMzMsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sCiAg
ICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQiKTsKIH0KIAotLy8gRklYTUU6IGRl
bGV0ZURhdGFiYXNlIHNob3VsZCBiZSBwYXJ0IG9mIElEQkJhY2tpbmdTdG9yZS4KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDczYjA1NDc0
NmM2MjFjMzAzMjUyZjg3YmM5MGVjNDJiMmQxMTAxNTkuLmQ1ODRhNjhmNzBjMjY1NTZjODNkMWFh
NTgxMTI0ZDc3ZWFlYmVmYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFsIGJvb2wg
c2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKKyAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rv
cjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8
U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRG
bGFncyk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0
b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAppbmRleCBkZDA2NWQ0
YjMyMWQ1OTA0ZmU4YTdkYmE2ZTdkNDRkNTI0MmU1N2NiLi4yZGQ4NTU2ODMyYmVlNTAxNzA3YmFi
NzQ2NDI2MzRjZTNjYjFkZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJT
UUxpdGVCYWNraW5nU3RvcmUuY3BwCkBAIC0yNDIsNiArMjQyLDQ4IEBAIGJvb2wgSURCU1FMaXRl
QmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGRvRGVsZXRlKFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgY2hhciogc3FsLCBpbnQ2NF90IGlkKQoreworICAgIFNR
TGl0ZVN0YXRlbWVudCBkZWxldGVRdWVyeShkYiwgc3FsKTsKKyAgICBib29sIG9rID0gZGVsZXRl
UXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9r
KTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5k
SW50NjQoMSwgaWQpOworICAgIG9rID0gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERv
bmU7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhh
bmRsaW5nLgorfQorCitib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IGRh
dGFiYXNlUXVlcnkobV9kYiwgIlNFTEVDVCBpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBuYW1lID0g
PyIpOworICAgIGlmIChkYXRhYmFzZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBkYXRhYmFzZVF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGlmIChkYXRhYmFz
ZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlUXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7
CisKKyAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gV2UgY2FuJ3QgZGVsZXRlIGEgZGF0YWJhc2UsIGlmIGl0IHN0aWxsIGhhcyBvYmpl
Y3Qgc3RvcmVzLgorICAgIFNRTGl0ZVN0YXRlbWVudCBvYmplY3RTdG9yZVF1ZXJ5KG1fZGIsICJT
RUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgZGF0YWJhc2VJZCA9ID8iKTsKKyAgICBp
ZiAob2JqZWN0U3RvcmVRdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
b2JqZWN0U3RvcmVRdWVyeS5iaW5kSW50NjQoMSwgZGF0YWJhc2VJZCk7CisgICAgaWYgKG9iamVj
dFN0b3JlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBpZCA9
ID8iLCBkYXRhYmFzZUlkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBJREJTUUxpdGVC
YWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rvcjxp
bnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3Ry
aW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFn
cykKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVDVCBpZCwgbmFtZSwg
a2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50IEZST00gT2JqZWN0U3RvcmVzIFdIRVJFIGRhdGFiYXNl
SWQgPSA/Iik7CkBAIC0yODEsMTYgKzMyMyw2IEBAIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZG9EZWxldGUoU1FMaXRlRGF0YWJhc2Um
IGRiLCBjb25zdCBjaGFyKiBzcWwsIGludDY0X3QgaWQpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50
IGRlbGV0ZVF1ZXJ5KGRiLCBzcWwpOwotICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTog
QmV0dGVyIGVycm9yIGhhbmRsaW5nLgotICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7
Ci0gICAgb2sgPSBkZWxldGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NF
UlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi19Ci0K
IHZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9N
IE9iamVjdFN0b3JlcyBXSEVSRSBpZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCmluZGV4IGIxMmFhZmE0NjI0
ZmMxMDljZThjMTZhMGRlOTFjY2FhZjRlMTJkOTMuLjk2NjYxODY5ZTNlMmQ5NjY3ZmFjYTVkZjRj
OGVhMzI5YWU1YjcxMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FM
aXRlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBm
b3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCisgICAgdmlydHVhbCBib29s
IGRlbGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc5N2RkM2Q5MmRkZGI5MzgxYzc5NzIx
MjNlYTY1ZmJiMzk5MDcwMGIuLmY5OTEwMjRiOWQ5MGY1MmU4NzUwYTQ1YTVjNTJhODhhZTU5Y2Vm
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDgt
MTggIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1w
bGVtZW50IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Jj
L0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5
QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlC
YWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAg
ICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTA4LTE2ICBQZXItRXJpayBCcm9k
aW4gIDxwZXItZXJpay5icm9kaW5AZXJpY3Nzb24uY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9z
c2libGUgdG8gZXhwbGljaXRseSBwcmV2ZW50IGEgcHJlZmxpZ2h0IHZpYSBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SURCRmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9y
eS5oCmluZGV4IGYxMWZmZDQ4YTUyNDlkYjNiY2M1YjQ2ZWMwY2ViNzA4YzE4NmRlNTAuLmQ5Y2Yx
OTNhY2U2N2JjMDkyYjgxYWM3OGJkZTZiMzc2MzM5Zjg3NmIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgKQEAgLTYwLDcgKzYwLDkgQEAgcHVibGlj
OgogICAgIC8vIFRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBX
ZWJGcmFtZSogcGFyYW1ldGVyLgogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB2ZXJzaW9uIHdpdGhvdXQgbWF4aW11bVNpemUg
YW5kIHRoZSBwYXRjaGluZyBvbmNlIHRoZSBjaHJvbWl1bSBzaWRlIGhhcyBsYW5kZWQuCisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9y
aWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVk
IGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBl
KSB7IGRlbGV0ZURhdGFiYXNlKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGZyYW1l
LCBkYXRhRGlyLCBiYWNraW5nU3RvcmVUeXBlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9y
ZVR5cGUpIHsgZGVsZXRlRGF0YWJhc2UobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwg
ZnJhbWUsIGRhdGFEaXIsIDAsIGJhY2tpbmdTdG9yZVR5cGUpOyB9CiAKICAgICAvLyBVc2VkIGZv
ciBEdW1wUmVuZGVyVHJlZSB0ZXN0cy4KICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIHNl
dE92ZXJyaWRlQmFja2luZ1N0b3JlVHlwZShCYWNraW5nU3RvcmVUeXBlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKaW5k
ZXggMDRkMzg4MTk5YmMxMzhhYTU5NjQ0MzI4NzEyNmYyNDQ5ZDFmNWY4NS4uNDBlNGI1ZmFjMDI3
ZmIxNjYxOWZlYzgyMjhlMGNkMGFiYzQ2MmQ4NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTc3LDYgKzc3LDE5
IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjCiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVuKG5h
bWUsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUs
IGRhdGFEaXIsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxXZWJJREJGYWN0b3J5OjpCYWNraW5n
U3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tl
bmRQcm94eTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmln
aW4sIEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgV2ViU2VjdXJp
dHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9
IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmll
dyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xp
ZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2Vi
RnJhbWUsIG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklE
QkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0
aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJG
YWN0b3J5LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nh
c3Q8V2ViSURCRmFjdG9yeTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9y
eUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJh
Y2tlbmRQcm94eS5oCmluZGV4IDg5ZWQzNTUyZGRhZmRhM2JmZDMyZTE1ZTNmYjc0ZDc1OWMxZDY1
MzIuLjY3NjUxZmVkOGRlNWQyNGRiYTRlZjRmMjYxNGU0Y2IyNWU4ZTNhYzUgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAg
LTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpET01TdHJp
bmdMaXN0PiBkYXRhYmFzZXModm9pZCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3Qg
bWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3Rv
cnlCYWNrZW5kUHJveHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQkZhY3RvcnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkZhY3RvcnlJbXBsLmNwcAppbmRleCA1YWRmN2Y4ZDExMGI3ZGRhNWM4NzEzN2Q1Y2Y3NmMwNzRh
ZDRhOTNhLi41YzFiNTZhNjdiNjg3M2JmOGFiMmVlNWI3MDBmNzQzZTg4NGZmZjQ2IDEwMDc1NQot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCkBAIC05
Niw2ICs5NiwzMSBAQCB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsCiAgICAgbV9pZGJGYWN0b3J5QmFj
a2VuZC0+b3BlbihuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxi
YWNrcykpLCBvcmlnaW4sIDAsIHBhdGgsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkp
OwogfQogCit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0
eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5z
aWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9y
ZVR5cGUpCit7CisgICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOworCisgICAgaWYgKG92ZXJy
aWRkZW5CYWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpIHsKKyAgICAgICAg
Ly8gQmFja2luZyBzdG9yZSB0eXBlIG92ZXJyaWRkZW4gYnkgTGF5b3V0VGVzdENvbnRyb2xsZXIu
CisgICAgICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBvdmVycmlkZGVuQmFja2luZ1N0b3JlVHlwZTsK
KyAgICB9CisKKyAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3Jl
KQorICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0gTGV2ZWxEQkJhY2tpbmdTdG9yZTsKKworICAg
IGlmIChkYXRhRGlyLmlzRW1wdHkoKSAmJiBiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNr
aW5nU3RvcmUpIHsKKyAgICAgICAgaWYgKCF0ZW1wRGF0YWJhc2VGb2xkZXIuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICAvLyBMYXlvdXQgdGVzdHMgcHJvdmlkZSBhIHRlbXBvcmFyeSBmb2xkZXIu
CisgICAgICAgICAgICBwYXRoID0gdGVtcERhdGFiYXNlRm9sZGVyOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gRm9yIGluY29nbml0byBtb2RlLCBmYWxsIGJhY2sgdG8gU1FMaXRl
LgorICAgICAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IFNRTGl0ZUJhY2tpbmdTdG9yZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNl
KG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9y
aWdpbiwgMCwgcGF0aCwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1w
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAppbmRl
eCA2MmJkOWVkOTI3OGNiYTQzNmZlMzQ3MWEyYTQwYzcyNTNlZmIwNDNjLi5hMGZlNTNkMDAwMWU1
NGVlMmMzNmNjNmRmMjAyODNkNDgxMTYyMjc4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfldlYklEQkZhY3RvcnlJbXBsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5
T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwg
Y29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0
YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsK
IAogcHJpdmF0ZToKICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZT4gbV9pZGJGYWN0b3J5QmFja2VuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104346</attachid>
            <date>2011-08-18 08:28:22 -0700</date>
            <delta_ts>2011-08-19 04:11:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20110818172819.patch</filename>
            <type>text/plain</type>
            <size>29114</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxOTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlYWJjZmNiMjkwY2EwZTIxYzY0YWM5
NWMzMTJlMTNiM2QzMjhlMTlhLi44MzhlZDg4NzMzNTU5NmNlNDhhMDNkZjg2OWM4NjE2NjY0OTYx
OWM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMTggIEpvY2hlbiBFaXNpbmdlciAg
PGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIElEQkZhY3Rv
cnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRt
bDogQWRkZWQuCisKIDIwMTEtMDgtMTYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBZGQgbmV3IGNocm9taXVtLW1hYy1sZW9wYXJkIGRpcmVjdG9yeSB0byBtYXRj
aCB0aGUgY2hyb21pdW0tbWFjIHRoYXQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
ZGIwYTZlNzhiNGNkYzdiMzg0NzliOTRjZWE5M2RmM2MzNjgxNDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgb2YgSW5k
ZXhlZERCLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKword2Via2l0SW5kZXhlZERC
LmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQorZGVsZXRlU3VjY2VzcygpOgor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRh
cmdldC5yZXN1bHQKK1BBU1MgZGIudmVyc2lvbiBpcyAiIgorUEFTUyBkYi5uYW1lIGlzICJkYXRh
YmFzZS10by1kZWxldGUiCitQQVNTIGRiLm9iamVjdFN0b3JlTmFtZXMgaXMgW10KK1BBU1MgZGIu
b2JqZWN0U3RvcmVOYW1lcy5sZW5ndGggaXMgMAorUEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzLmNv
bnRhaW5zKCcnKSBpcyBmYWxzZQorUEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzWzBdIGlzIG51bGwK
K1BBU1MgZGIub2JqZWN0U3RvcmVOYW1lcy5pdGVtKDApIGlzIG51bGwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmODI3
ZDE2MmJhMzJkMjcxZDc4OGZjOTM1MjNkZjI5NGM2MTI1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbApAQCAtMCww
ICsxLDU4IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgZGVsZXRlRGF0YWJh
c2UgY2FsbCBvZiBJbmRleGVkREIuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5kZWxl
dGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGRlbGV0ZVN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZVN1Y2Nlc3MoKQoreworICAgIGRlYnVnKCJk
ZWxldGVTdWNjZXNzKCk6Iik7CisKKyAgICAvLyByZW9wZW4gdGhlIGRhdGFiYXNlLgorICAgIHJl
cXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVs
ZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHJlb3BlblN1Y2Nlc3M7CisgICAgcmVx
dWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGNo
ZWNrRGF0YWJhc2VJc0VtcHR5KHZlcnNpb24pCit7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJkYi52ZXJzaW9uIiwgdmVyc2lvbik7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJkYi5u
YW1lIiwgImRhdGFiYXNlLXRvLWRlbGV0ZSIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9y
ZU5hbWVzIiwgIltdIik7CisgICAgc2hvdWxkQmUoImRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3Ro
IiwgIjAiKTsKKyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygnJyki
LCAiZmFsc2UiKTsKKyAgICBzaG91bGRCZU51bGwoImRiLm9iamVjdFN0b3JlTmFtZXNbMF0iKTsK
KyAgICBzaG91bGRCZU51bGwoImRiLm9iamVjdFN0b3JlTmFtZXMuaXRlbSgwKSIpOworfQorCitm
dW5jdGlvbiByZW9wZW5TdWNjZXNzKCkKK3sKKyAgICB3aW5kb3cuZGIgPSBldmFsQW5kTG9nKCJk
YiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBjaGVja0RhdGFiYXNlSXNFbXB0eSgiIik7
CisgICAgZG9uZSgpOworfQorCit0ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0
cnVlOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNTM4Y2Vj
OWM2ZDEyNzM4YWZjYzdmOTRlM2JhY2E5NDlkZDcwYjRiLi4wMmFkYWFhNjRhMDFmYzA2OWVjNGY0
MWM2NGQ1YTlmNjNiYmQ2ZWI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMDgt
MTggIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1w
bGVtZW50IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdDogc3RvcmFnZS9pbmRleGVkZGIvZGF0YWJhc2Ut
ZGVsZXRlLmh0bWwKKworICAgICAgICAqIHN0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmg6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3Rv
cnk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuaDoKKyAg
ICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5k
SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
OgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJREJEYXRhYmFzZU1ldGFE
YXRhKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpkb0RlbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRl
bGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEpOgorICAgICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFj
a2luZ1N0b3JlLmg6CisKIDIwMTEtMDgtMTYgIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29u
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXByZXNlbnQgUmVuZGVyU3R5bGU6OnRleHRPdmVy
ZmxvdyBwcm9wZXJ0eSB1c2luZyBhbiBlbnVtIGluc3RlYWQgb2YgYSBib29sLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggMGJlZDg5MzM4MjBmMGQzZjkzY2Jh
ZWQ5YmY3NTUxOGIwODFlMzcyYi4uYThhZWMwNTA3YTkyYjgxMzNkNTE2NDYxNGQ4YTQwZTZhODAw
NTQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC00OCw2
ICs0OCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VN
ZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90
JiBmb3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lk
LCBib29sIGludmFsaWRSb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJREJEYXRh
YmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91
bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRL
ZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwogICAg
IHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeS5jcHAKaW5kZXggOThiNTI3NGY0MWVlZGFkNDE3ZDQzZjg4YWUyMDI1NmMxYmIx
MDNmNS4uOWFiZWM5MDU5MWFhNDE0N2JiMDQyYjRlZmJhOWY1OWI5NzFkYTIxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAi
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgog
I2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVz
dC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRl
ICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtODAsNiArODEsMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFMKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hh
bmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFr
ZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOwor
ICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVs
bCgpLCAiIik7CisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5w
YWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRl
bGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBk
b2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCks
IGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwgSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2U6OkRlZmF1bHRCYWNraW5nU3RvcmUpOworICAgIHJldHVybiByZXF1ZXN0OworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggY2QwZDY0ZmQ5M2JlNTNi
MWYyYzA5NTVjNGE1MWMzMDgzMzcwZjEyNC4uYzgzZmQwZGFmOWFkNGI2NzA1OTRkNTQ5MjFmZTcx
MGFmNzdiYjdkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYgKzQ0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFu
Z2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNpb25D
aGFuZ2VSZXF1ZXN0OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURC
RmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU1LDYgKzU2LDcg
QEAgcHVibGljOgogICAgIH5JREJGYWN0b3J5KCk7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRl
bGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5KElEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAppbmRl
eCAwMmVlZDBlYjQxMmMyYmM1NmY5N2Q0NjU4Y2MxMWI4YzhmZWE3NzllLi40ZDE1NTJhNWVhYjZm
ZjAwN2U1MjZlMjY4YTZhYjQyOTU4YmFkOTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5pZGwKQEAgLTMwLDYgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgIF0gSURCRmFj
dG9yeSB7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1
ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFi
YXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRd
IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1l
KQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgfTsKIAog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3Bw
CmluZGV4IGY1NTM2NWNhOTcwY2U3YTdjYzVhYmViNTMxZjFkMTU5YzEzMjE4NmMuLjEyZDc0MjMz
OTE5NDJkNzI0MTc4MWE2NGEzYzQ4MTU3MGFkMDY3ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNp
bmNsdWRlICJJREJTUUxpdGVCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJT
ZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5j
bHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTI1Nyw2ICsyNTgsNzYgQEAgYm9vbCBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om1pZ3JhdGVGcm9tU1FMaXRlVG9MZXZlbERCKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgU2VjdXIKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3Vy
aXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVt
U2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBlKQoreworICAgIEFTU0VSVChi
YWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpOworCisgICAgY29uc3QgU3Ry
aW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2lu
LmdldCgpLCBiYWNraW5nU3RvcmVUeXBlKTsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRp
ZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgp
LCBiYWNraW5nU3RvcmVUeXBlKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0
b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAg
IGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBGSVhN
RTogQ2xvc2UgdGhlIGRhdGFiYXNlIGZpcnN0LiBGb3Igbm93LCB3ZSBqdXN0IGNoaWNrZW4gb3V0
LCBzbyB3ZSBjYW4gZG8gdGhlIGRlbGV0ZSBmdXJ0aGVyIGRvd24gc3luY2hyb25vdXNseS4KKyAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBz
aG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKworI2lmIEVOQUJMRShMRVZFTERCKQor
ICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUpIHsKKyAgICAg
ICAgYm9vbCBoYXNTUUxCYWNraW5nU3RvcmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmJhY2tp
bmdTdG9yZUV4aXN0cyhzZWN1cml0eU9yaWdpbi5nZXQoKSwgbmFtZSwgZGF0YURpcik7CisKKyAg
ICAgICAgLy8gTGF5b3V0VGVzdHM6IFNRTGl0ZSBiYWNraW5nIHN0b3JlIG1heSBub3QgZXhpc3Qg
b24gZGlzayBidXQgbWF5IGV4aXN0IGluIGNhY2hlLgorICAgICAgICBTdHJpbmcgY2FjaGVkU3Fs
aXRlQmFja2luZ1N0b3JlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0
eU9yaWdpbi5nZXQoKSwgU1FMaXRlQmFja2luZ1N0b3JlKTsKKyAgICAgICAgaWYgKCFoYXNTUUxC
YWNraW5nU3RvcmUgJiYgKG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpICE9IG1fYmFja2luZ1N0b3Jl
TWFwLmZpbmQoY2FjaGVkU3FsaXRlQmFja2luZ1N0b3JlSWRlbnRpZmllcikpKQorICAgICAgICAg
ICAgaGFzU1FMQmFja2luZ1N0b3JlID0gdHJ1ZTsKKworICAgICAgICBpZiAoaGFzU1FMQmFja2lu
Z1N0b3JlKSB7CisgICAgICAgICAgICBib29sIG1pZ3JhdGlvblN1Y2NlZWRlZCA9IG1pZ3JhdGVG
cm9tU1FMaXRlVG9MZXZlbERCKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBt
YXhpbXVtU2l6ZSk7CisgICAgICAgICAgICBVTlVTRURfUEFSQU0obWlncmF0aW9uU3VjY2VlZGVk
KTsgLy8gRklYTUU6IFdoZW4gbWlncmF0aW9uIGlzIGFjdHVhbGx5IGltcGxlbWVudGVkLCB3ZSBu
ZWVkIGVycm9yIGhhbmRsaW5nIGhlcmUuCisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZTsKKyAgICBJREJCYWNraW5nU3Rv
cmVNYXA6Oml0ZXJhdG9yIGl0MiA9IG1fYmFja2luZ1N0b3JlTWFwLmZpbmQoZmlsZUlkZW50aWZp
ZXIpOworICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkgJiYgKGJhY2tpbmdT
dG9yZVR5cGUgPT0gaXQyLT5zZWNvbmQtPmJhY2tpbmdTdG9yZVR5cGUoKSkpCisgICAgICAgIGJh
Y2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOworICAgIGVsc2UgeworICAgICAgICBpZiAoYmFja2lu
Z1N0b3JlVHlwZSA9PSBTUUxpdGVCYWNraW5nU3RvcmUpCisgICAgICAgICAgICBiYWNraW5nU3Rv
cmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRh
dGFEaXIsIG1heGltdW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisjaWYgRU5BQkxFKExF
VkVMREIpCisgICAgICAgIGVsc2UgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0gTGV2ZWxEQkJhY2tp
bmdTdG9yZSkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1TaXplLCBmaWxl
SWRlbnRpZmllciwgdGhpcyk7CisjZW5kaWYKKyAgICAgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsK
KyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgaW50NjRfdCBkYXRh
YmFzZUlkOworICAgIFN0cmluZyB2ZXJzaW9uOworICAgIGlmICghYmFja2luZ1N0b3JlLT5leHRy
YWN0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgeworICAg
ICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1
ZSgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxpbnQ2NF90PiBvYmpl
Y3RTdG9yZUlkczsKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAgICBWZWN0b3I8U3RyaW5n
PiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4gYXV0b0luY3JlbWVudEZsYWdzOworICAgIGJh
Y2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWRzLCBu
YW1lcywga2V5UGF0aHMsIGF1dG9JbmNyZW1lbnRGbGFncyk7CisgICAgZm9yIChWZWN0b3I8aW50
NjRfdD46Oml0ZXJhdG9yIG9iamVjdFN0b3JlSWQgPSBvYmplY3RTdG9yZUlkcy5iZWdpbigpOyBv
YmplY3RTdG9yZUlkICE9IG9iamVjdFN0b3JlSWRzLmVuZCgpOyArK29iamVjdFN0b3JlSWQpCisg
ICAgICAgIGJhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUoZGF0YWJhc2VJZCwgKm9iamVj
dFN0b3JlSWQpOworCisgICAgaWYgKGJhY2tpbmdTdG9yZS0+ZGVsZXRlSURCRGF0YWJhc2VNZXRh
RGF0YShuYW1lKSkKKyAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCBmYjMwM2QxYTJiNjU4ZDIyYjUx
MWU3NjVlOWQ0ZTU5YjRlY2QxYmU0Li4yMTkzNjA2ZDU0MGRmYjk3NzNhZjczZTNkMjM1MjI4NjNm
OWEwOTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmgKQEAgLTU2LDYgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlSURCQmFja2lu
Z1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpOwogCiAgICAgdmlydHVhbCB2b2lk
IG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50
NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgog
ICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IDI0ODI2NjI0ZTY4MjI4Yjk2
NDZkMzVmZTNmZjlhMDMzZGRhMmU3ZjEuLjk4YTMxMDg2MzVlNTI0OGFlZTY4NzQ0ZDMyMGM5YTQy
OWRjOTlmNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAgIH07CiAKICAg
ICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDM1NDllNjVkZjEz
MTYxZDNiMTdiOGU1Y2NhOTA4NmY0YmQ3MDk4NTIuLjVmNzg4YzZlMzFmZDkzZTJiZjY4ZTU5NTdi
OGZiZjkxZDI3ZTAxNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZl
bERCQmFja2luZ1N0b3JlLmNwcApAQCAtMjEyLDYgKzIxMiwzMyBAQCBib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OnNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmRlbGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAg
IGlmIChtX2N1cnJlbnRUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aW50NjRfdCBkYXRhYmFzZUlkOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFz
ZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworCisgICAgYm9vbCBvayA9IGdl
dEludChtX2RiLmdldCgpLCBrZXksIGRhdGFiYXNlSWQpOworICAgIGlmICghb2spCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIFdlIGNhbiBvbmx5IGRlbGV0ZSB0aGUgbWV0YSBkYXRh
LCBpZiB0aGUgZGF0YWJhc2UgY29udGFpbnMgbm8gb2JqZWN0IHN0b3Jlcy4KKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0
YWJhc2VJZCwgMSwgMCk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBPYmplY3RT
dG9yZU1ldGFEYXRhS2V5OjplbmNvZGVNYXhLZXkoZGF0YWJhc2VJZCk7CisKKyAgICBPd25QdHI8
TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IG1fZGItPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgaXQtPnNl
ZWsoc3RhcnRLZXkpOworICAgIGlmIChpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5r
ZXkoKSwgc3RvcEtleSkgPCAwKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9kYi0+cmVt
b3ZlKGtleSk7CisgICAgbV9kYi0+cmVtb3ZlKERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShk
YXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprVXNlclZlcnNpb24pKTsKKworICAgIHJl
dHVybiB0cnVlOworfQorCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0
b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykKIHsKICAgICBjb25zdCBWZWN0b3I8
Y2hhcj4gc3RhcnRLZXkgPSBPYmplY3RTdG9yZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJ
ZCwgMSwgMCk7CkBAIC0xMzA2LDggKzEzMzMsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sCiAg
ICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQiKTsKIH0KIAotLy8gRklYTUU6IGRl
bGV0ZURhdGFiYXNlIHNob3VsZCBiZSBwYXJ0IG9mIElEQkJhY2tpbmdTdG9yZS4KLQogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDczYjA1NDc0
NmM2MjFjMzAzMjUyZjg3YmM5MGVjNDJiMmQxMTAxNTkuLmQ1ODRhNjhmNzBjMjY1NTZjODNkMWFh
NTgxMTI0ZDc3ZWFlYmVmYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1
YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0
cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFsIGJvb2wg
c2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKKyAgICB2aXJ0dWFs
IGJvb2wgZGVsZXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUpOwogCiAg
ICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rv
cjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8
U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRG
bGFncyk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0
b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAppbmRleCBkZDA2NWQ0
YjMyMWQ1OTA0ZmU4YTdkYmE2ZTdkNDRkNTI0MmU1N2NiLi4yZGQ4NTU2ODMyYmVlNTAxNzA3YmFi
NzQ2NDI2MzRjZTNjYjFkZDYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJT
UUxpdGVCYWNraW5nU3RvcmUuY3BwCkBAIC0yNDIsNiArMjQyLDQ4IEBAIGJvb2wgSURCU1FMaXRl
QmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyB2b2lkIGRvRGVsZXRlKFNR
TGl0ZURhdGFiYXNlJiBkYiwgY29uc3QgY2hhciogc3FsLCBpbnQ2NF90IGlkKQoreworICAgIFNR
TGl0ZVN0YXRlbWVudCBkZWxldGVRdWVyeShkYiwgc3FsKTsKKyAgICBib29sIG9rID0gZGVsZXRl
UXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOworICAgIEFTU0VSVF9VTlVTRUQob2ssIG9r
KTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KKyAgICBkZWxldGVRdWVyeS5iaW5k
SW50NjQoMSwgaWQpOworICAgIG9rID0gZGVsZXRlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERv
bmU7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9yIGhh
bmRsaW5nLgorfQorCitib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IGRh
dGFiYXNlUXVlcnkobV9kYiwgIlNFTEVDVCBpZCBGUk9NIERhdGFiYXNlcyBXSEVSRSBuYW1lID0g
PyIpOworICAgIGlmIChkYXRhYmFzZVF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykgewor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBkYXRhYmFzZVF1ZXJ5LmJpbmRUZXh0KDEsIG5hbWUpOworICAgIGlmIChkYXRhYmFz
ZVF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHRSb3cpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGludDY0X3QgZGF0YWJhc2VJZCA9IGRhdGFiYXNlUXVlcnkuZ2V0Q29sdW1uSW50NjQoMCk7
CisKKyAgICBpZiAoZGF0YWJhc2VRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gV2UgY2FuJ3QgZGVsZXRlIGEgZGF0YWJhc2UsIGlmIGl0IHN0aWxsIGhhcyBvYmpl
Y3Qgc3RvcmVzLgorICAgIFNRTGl0ZVN0YXRlbWVudCBvYmplY3RTdG9yZVF1ZXJ5KG1fZGIsICJT
RUxFQ1QgaWQgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgZGF0YWJhc2VJZCA9ID8iKTsKKyAgICBp
ZiAob2JqZWN0U3RvcmVRdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
b2JqZWN0U3RvcmVRdWVyeS5iaW5kSW50NjQoMSwgZGF0YWJhc2VJZCk7CisgICAgaWYgKG9iamVj
dFN0b3JlUXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdFJvdykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIERhdGFiYXNlcyBXSEVSRSBpZCA9
ID8iLCBkYXRhYmFzZUlkKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBJREJTUUxpdGVC
YWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3Rvcjxp
bnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3Ry
aW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFn
cykKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIlNFTEVDVCBpZCwgbmFtZSwg
a2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50IEZST00gT2JqZWN0U3RvcmVzIFdIRVJFIGRhdGFiYXNl
SWQgPSA/Iik7CkBAIC0yODEsMTYgKzMyMyw2IEBAIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZG9EZWxldGUoU1FMaXRlRGF0YWJhc2Um
IGRiLCBjb25zdCBjaGFyKiBzcWwsIGludDY0X3QgaWQpCi17Ci0gICAgU1FMaXRlU3RhdGVtZW50
IGRlbGV0ZVF1ZXJ5KGRiLCBzcWwpOwotICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTog
QmV0dGVyIGVycm9yIGhhbmRsaW5nLgotICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgxLCBpZCk7
Ci0gICAgb2sgPSBkZWxldGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBBU1NF
UlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCi19Ci0K
IHZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9N
IE9iamVjdFN0b3JlcyBXSEVSRSBpZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCmluZGV4IGIxMmFhZmE0NjI0
ZmMxMDljZThjMTZhMGRlOTFjY2FhZjRlMTJkOTMuLjk2NjYxODY5ZTNlMmQ5NjY3ZmFjYTVkZjRj
OGVhMzI5YWU1YjcxMDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FM
aXRlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaApAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29s
IGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBm
b3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJE
YXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwogCisgICAgdmlydHVhbCBib29s
IGRlbGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc5N2RkM2Q5MmRkZGI5MzgxYzc5NzIx
MjNlYTY1ZmJiMzk5MDcwMGIuLmY5OTEwMjRiOWQ5MGY1MmU4NzUwYTQ1YTVjNTJhODhhZTU5Y2Vm
MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDgt
MTggIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1w
bGVtZW50IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Jj
L0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5
QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlC
YWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAg
ICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTA4LTE2ICBQZXItRXJpayBCcm9k
aW4gIDxwZXItZXJpay5icm9kaW5AZXJpY3Nzb24uY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9z
c2libGUgdG8gZXhwbGljaXRseSBwcmV2ZW50IGEgcHJlZmxpZ2h0IHZpYSBUaHJlYWRhYmxlTG9h
ZGVyT3B0aW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
SURCRmFjdG9yeS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9y
eS5oCmluZGV4IGYxMWZmZDQ4YTUyNDlkYjNiY2M1YjQ2ZWMwY2ViNzA4YzE4NmRlNTAuLjVlYjg3
ZjFhMDNhODQ4OTY4Mjc5MjJiNmVjYjAyMTQwYjFjYzBkNGMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgKQEAgLTYwLDcgKzYwLDkgQEAgcHVibGlj
OgogICAgIC8vIFRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBX
ZWJGcmFtZSogcGFyYW1ldGVyLgogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmlu
ZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
fQogCi0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IH0KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSB2ZXJzaW9uIHdpdGhvdXQgbWF4aW11bVNpemUg
YW5kIHRoZSBwYXRjaGluZyBvbmNlIHRoZSBjaHJvbWl1bSBzaWRlIGhhcyBsYW5kZWQuCisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBzZWN1cml0eU9y
aWdpbiwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVk
IGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBiYWNraW5nU3RvcmVUeXBl
KSB7IGRlbGV0ZURhdGFiYXNlKG5hbWUsIGNhbGxiYWNrcywgc2VjdXJpdHlPcmlnaW4sIGZyYW1l
LCBkYXRhRGlyLCBiYWNraW5nU3RvcmVUeXBlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxldGVE
YXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tz
LCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9y
ZVR5cGUpIHsgZGVsZXRlRGF0YWJhc2UobmFtZSwgY2FsbGJhY2tzLCBzZWN1cml0eU9yaWdpbiwg
ZnJhbWUsIGRhdGFEaXIsIDUgKiAxMDI0ICogMTAyNCwgYmFja2luZ1N0b3JlVHlwZSk7IH0KIAog
ICAgIC8vIFVzZWQgZm9yIER1bXBSZW5kZXJUcmVlIHRlc3RzLgogICAgIFdFQktJVF9FWFBPUlQg
c3RhdGljIHZvaWQgc2V0T3ZlcnJpZGVCYWNraW5nU3RvcmVUeXBlKEJhY2tpbmdTdG9yZVR5cGUp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcAppbmRleCAwNGQzODgxOTliYzEzOGFhNTk2NDQzMjg3MTI2ZjI0NDlkMWY1Zjg1
Li40MGU0YjVmYWMwMjdmYjE2NjE5ZmVjODIyOGUwY2QwYWJjNDYyZDg3IDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApA
QCAtNzcsNiArNzcsMTkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGMKICAgICBtX3dlYklEQkZh
Y3RvcnktPm9wZW4obmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3Jp
Z2luLCB3ZWJGcmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PFdlYklEQkZh
Y3Rvcnk6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5cGUpKTsKIH0KIAordm9pZCBJ
REJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGlu
dDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sK
KyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKKyAgICBXZWJGcmFtZUlt
cGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOworICAgIFdlYlZp
ZXdJbXBsKiB3ZWJWaWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgaWYgKHdlYlZpZXct
PnBlcm1pc3Npb25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxv
d0luZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKSkgeworICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1pc3Np
b24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX3dlYklEQkZhY3RvcnktPmRlbGV0ZURhdGFiYXNlKG5hbWUsIG5ldyBXZWJJREJDYWxs
YmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIsIG1heGltdW1T
aXplLCBzdGF0aWNfY2FzdDxXZWJJREJGYWN0b3J5OjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5n
U3RvcmVUeXBlKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggODllZDM1NTJkZGFmZGEzYmZkMzJlMTVl
M2ZiNzRkNzU5YzFkNjUzMi4uNjc2NTFmZWQ4ZGU1ZDI0ZGJhNGVmNGYyNjE0ZTRjYjI1ZThlM2Fj
NSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPFdl
YkNvcmU6OkRPTVN0cmluZ0xpc3Q+IGRhdGFiYXNlcyh2b2lkKSBjb25zdDsKICAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5n
U3RvcmVUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6
CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4IDVhZGY3ZjhkMTEwYjdkZGE1Yzg3
MTM3ZDVjZjc2YzA3NGFkNGE5M2EuLjVjMWI1NmE2N2I2ODczYmY4YWIyZWU1YjcwMGY3NDNlODg0
ZmZmNDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3Rv
cnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5
SW1wbC5jcHAKQEAgLTk2LDYgKzk2LDMxIEBAIHZvaWQgV2ViSURCRmFjdG9yeUltcGw6Om9wZW4o
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywKICAgICBt
X2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUo
YWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCwgbWF4aW11bVNpemUsIHN0YXRp
Y19jYXN0PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBlPihiYWNr
aW5nU3RvcmVUeXBlKSk7CiB9CiAKK3ZvaWQgV2ViSURCRmFjdG9yeUltcGw6OmRlbGV0ZURhdGFi
YXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNv
bnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5n
JiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5
cGUgYmFja2luZ1N0b3JlVHlwZSkKK3sKKyAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CisK
KyAgICBpZiAob3ZlcnJpZGRlbkJhY2tpbmdTdG9yZVR5cGUgIT0gRGVmYXVsdEJhY2tpbmdTdG9y
ZSkgeworICAgICAgICAvLyBCYWNraW5nIHN0b3JlIHR5cGUgb3ZlcnJpZGRlbiBieSBMYXlvdXRU
ZXN0Q29udHJvbGxlci4KKyAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IG92ZXJyaWRkZW5CYWNr
aW5nU3RvcmVUeXBlOworICAgIH0KKworICAgIGlmIChiYWNraW5nU3RvcmVUeXBlID09IERlZmF1
bHRCYWNraW5nU3RvcmUpCisgICAgICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBMZXZlbERCQmFja2lu
Z1N0b3JlOworCisgICAgaWYgKGRhdGFEaXIuaXNFbXB0eSgpICYmIGJhY2tpbmdTdG9yZVR5cGUg
PT0gTGV2ZWxEQkJhY2tpbmdTdG9yZSkgeworICAgICAgICBpZiAoIXRlbXBEYXRhYmFzZUZvbGRl
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8vIExheW91dCB0ZXN0cyBwcm92aWRlIGEgdGVt
cG9yYXJ5IGZvbGRlci4KKyAgICAgICAgICAgIHBhdGggPSB0ZW1wRGF0YWJhc2VGb2xkZXI7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGb3IgaW5jb2duaXRvIG1vZGUsIGZhbGwg
YmFjayB0byBTUUxpdGUuCisgICAgICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0gU1FMaXRlQmFj
a2luZ1N0b3JlOworICAgICAgICB9CisgICAgfQorCisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+
ZGVsZXRlRGF0YWJhc2UobmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihj
YWxsYmFja3MpKSwgb3JpZ2luLCAwLCBwYXRoLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8SURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkJhY2tpbmdTdG9yZVR5cGU+KGJhY2tpbmdTdG9yZVR5
cGUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkZhY3RvcnlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0
b3J5SW1wbC5oCmluZGV4IDYyYmQ5ZWQ5Mjc4Y2JhNDM2ZmUzNDcxYTJhNDBjNzI1M2VmYjA0M2Mu
LmEwZmU1M2QwMDAxZTU0ZWUyYzM2Y2M2ZGYyMDI4M2Q0ODExNjIyNzggMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApAQCAtNDUsNiArNDUsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViSURCRmFjdG9yeUltcGwoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
ciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJ
REJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3Qg
V2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11bVNpemUsIEJhY2tp
bmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2lkYkZhY3RvcnlCYWNrZW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104487</attachid>
            <date>2011-08-19 04:12:03 -0700</date>
            <delta_ts>2011-10-17 17:08:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20110819131200.patch</filename>
            <type>text/plain</type>
            <size>30579</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxOTUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlYWJjZmNiMjkwY2EwZTIxYzY0YWM5
NWMzMTJlMTNiM2QzMjhlMTlhLi44MzhlZDg4NzMzNTU5NmNlNDhhMDNkZjg2OWM4NjE2NjY0OTYx
OWM2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMTggIEpvY2hlbiBFaXNpbmdlciAg
PGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgTGF5b3V0IHRlc3QgZm9yIElEQkZhY3Rv
cnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRt
bDogQWRkZWQuCisKIDIwMTEtMDgtMTYgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBBZGQgbmV3IGNocm9taXVtLW1hYy1sZW9wYXJkIGRpcmVjdG9yeSB0byBtYXRj
aCB0aGUgY2hyb21pdW0tbWFjIHRoYXQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEw
ZGIwYTZlNzhiNGNkYzdiMzg0NzliOTRjZWE5M2RmM2MzNjgxNDgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgb2YgSW5k
ZXhlZERCLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKword2Via2l0SW5kZXhlZERC
LmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQorZGVsZXRlU3VjY2VzcygpOgor
d2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRh
cmdldC5yZXN1bHQKK1BBU1MgZGIudmVyc2lvbiBpcyAiIgorUEFTUyBkYi5uYW1lIGlzICJkYXRh
YmFzZS10by1kZWxldGUiCitQQVNTIGRiLm9iamVjdFN0b3JlTmFtZXMgaXMgW10KK1BBU1MgZGIu
b2JqZWN0U3RvcmVOYW1lcy5sZW5ndGggaXMgMAorUEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzLmNv
bnRhaW5zKCcnKSBpcyBmYWxzZQorUEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzWzBdIGlzIG51bGwK
K1BBU1MgZGIub2JqZWN0U3RvcmVOYW1lcy5pdGVtKDApIGlzIG51bGwKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2RhdGFiYXNlLWRlbGV0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5Y2Ez
ZDMwOTJkNGUzZTgyYjlkZmRiNWQ4Yjk1Y2JmZjAwNjNhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxldGUuaHRtbApAQCAtMCww
ICsxLDU5IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29s
ZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgZGVsZXRlRGF0YWJh
c2UgY2FsbCBvZiBJbmRleGVkREIuIik7CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
KQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24g
dGVzdCgpCit7CisgICAgLy8gRklYTUU6IGZpcnN0IG9wZW4gYW5kIHBvcHVsYXRlIHRoZSBkYXRh
YmFzZS4KKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
ZGVsZXRlU3VjY2VzczsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKK30KKworZnVuY3Rpb24gZGVsZXRlU3VjY2VzcygpCit7CisgICAgZGVidWcoImRlbGV0
ZVN1Y2Nlc3MoKToiKTsKKworICAgIC8vIHJlb3BlbiB0aGUgZGF0YWJhc2UuCisgICAgcmVxdWVz
dCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUn
KSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gcmVvcGVuU3VjY2VzczsKKyAgICByZXF1ZXN0
Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gcmVvcGVu
U3VjY2VzcygpCit7CisgICAgd2luZG93LmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJn
ZXQucmVzdWx0Iik7CisgICAgY2hlY2tEYXRhYmFzZUlzRW1wdHkoIiIpOworICAgIGRvbmUoKTsK
K30KKworZnVuY3Rpb24gY2hlY2tEYXRhYmFzZUlzRW1wdHkodmVyc2lvbikKK3sKKyAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoImRiLnZlcnNpb24iLCB2ZXJzaW9uKTsKKyAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoImRiLm5hbWUiLCAiZGF0YWJhc2UtdG8tZGVsZXRlIik7CisgICAgc2hvdWxk
QmUoImRiLm9iamVjdFN0b3JlTmFtZXMiLCAiW10iKTsKKyAgICBzaG91bGRCZSgiZGIub2JqZWN0
U3RvcmVOYW1lcy5sZW5ndGgiLCAiMCIpOworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5h
bWVzLmNvbnRhaW5zKCcnKSIsICJmYWxzZSIpOworICAgIHNob3VsZEJlTnVsbCgiZGIub2JqZWN0
U3RvcmVOYW1lc1swXSIpOworICAgIHNob3VsZEJlTnVsbCgiZGIub2JqZWN0U3RvcmVOYW1lcy5p
dGVtKDApIik7Cit9CisKK3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGI1MzhjZWM5YzZk
MTI3MzhhZmNjN2Y5NGUzYmFjYTk0OWRkNzBiNGIuLjAyYWRhYWE2NGEwMWZjMDY5ZWM0ZjQxYzY0
ZDVhOWY2M2JiZDZlYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0wOC0xOCAg
Sm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1l
bnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL2luZGV4ZWRkYi9kYXRhYmFzZS1kZWxl
dGUuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6
ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5oOgorICAgICAg
ICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBs
OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUlEQkRhdGFiYXNlTWV0YURhdGEp
OgorICAgICAgICAqIHN0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRv
RGVsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRl
SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNraW5n
U3RvcmUuaDoKKwogMjAxMS0wOC0xNiAgTHVrZSBNYWNwaGVyc29uICAgPG1hY3BoZXJzb25AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJlcHJlc2VudCBSZW5kZXJTdHlsZTo6dGV4dE92ZXJmbG93
IHByb3BlcnR5IHVzaW5nIGFuIGVudW0gaW5zdGVhZCBvZiBhIGJvb2wuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAppbmRleCAwYmVkODkzMzgyMGYwZDNmOTNjYmFlZDli
Zjc1NTE4YjA4MWUzNzJiLi4xMWQyNjc2N2YxMjFmMzA1M2Q3OGQwZWM2YjJjNjRhYzQ5ZDllOGNl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ4LDYgKzQ4
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFE
YXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZv
dW5kSWQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJv
b2wgaW52YWxpZFJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNv
bnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxT
dHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9y
PGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBj
cmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2ln
bmVkT2JqZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAK
aW5kZXggOThiNTI3NGY0MWVlZGFkNDE3ZDQzZjg4YWUyMDI1NmMxYmIxMDNmNS4uOWFiZWM5MDU5
MWFhNDE0N2JiMDQyYjRlZmJhOWY1OWI5NzFkYTIxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tl
bmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJl
cXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUg
IlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdp
bi5oIgpAQCAtODAsNiArODEsMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5
OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICByZXR1
cm4gcmVxdWVzdDsKIH0KIAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURC
RmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRl
eHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0
aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1l
bnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VS
ZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CisgICAg
R3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCku
Z3JvdXBTZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5h
bWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUo
KSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCksIGdyb3VwU2V0dGluZ3Mt
PmluZGV4ZWREQlF1b3RhQnl0ZXMoKSwgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OkRlZmF1
bHRCYWNraW5nU3RvcmUpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggY2QwZDY0ZmQ5M2JlNTNiMWYyYzA5NTVjNGE1MWMz
MDgzMzcwZjEyNC4uYzgzZmQwZGFmOWFkNGI2NzA1OTRkNTQ5MjFmZTcxMGFmNzdiYjdkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBJREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0Owog
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeSA6IHB1Ymxp
YyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU1LDYgKzU2LDcgQEAgcHVibGljOgogICAg
IH5JREJGYWN0b3J5KCk7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKIAogcHJpdmF0ZToKICAgICBJREJGYWN0b3J5KElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAppbmRleCAwMmVlZDBlYjQxMmMy
YmM1NmY5N2Q0NjU4Y2MxMWI4YzhmZWE3NzllLi40ZDE1NTJhNWVhYjZmZjAwN2U1MjZlMjY4YTZh
YjQyOTU4YmFkOTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKQEAgLTMw
LDYgKzMwLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogICAgIF0gSURCRmFjdG9yeSB7CiAgICAgICAg
IFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW4oaW4gRE9N
U3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsK
KyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlZlcnNpb25DaGFu
Z2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQorICAgICAgICAgICAg
cmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IGY1NTM2NWNh
OTcwY2U3YTdjYzVhYmViNTMxZjFkMTU5YzEzMjE4NmMuLjMyZGVjZGIwMjRhMTY0MDJhYmM0N2Mz
MDIyNjZiYmI5ZjBhYjI2N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJJREJTUUxp
dGVCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgi
CiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJTZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAKQEAgLTgxLDIwICs4MiwxMCBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6cmVtb3ZlSURCQmFja2luZ1N0b3JlKGNvbnN0IFN0cmluZyYgZmlsZUlkZW50aWZpZXIpCiAg
ICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKGZpbGVJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBJ
REJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1
cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11
bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlwZSkKK1Bhc3NSZWZQdHI8SURC
QmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5nU3Rv
cmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCiB7CiAgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVR5cGUg
IT0gRGVmYXVsdEJhY2tpbmdTdG9yZSk7Ci0KICAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZp
ZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdT
dG9yZVR5cGUpOwotICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVu
aXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGJhY2tpbmdTdG9yZVR5
cGUpOwotCi0gICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJh
c2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7Ci0gICAgaWYgKGl0ICE9IG1fZGF0
YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7Ci0gICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKGl0
LT5zZWNvbmQpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRklYTUU6IEV2ZXJ5
dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCiAKICNp
ZiBFTkFCTEUoTEVWRUxEQikKICAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBMZXZlbERCQmFj
a2luZ1N0b3JlKSB7CkBAIC0xMDgsNiArOTksOCBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1w
bDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYQog
ICAgICAgICBpZiAoaGFzU1FMQmFja2luZ1N0b3JlKSB7CiAgICAgICAgICAgICBib29sIG1pZ3Jh
dGlvblN1Y2NlZWRlZCA9IG1pZ3JhdGVGcm9tU1FMaXRlVG9MZXZlbERCKG5hbWUsIHNlY3VyaXR5
T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSk7CiAgICAgICAgICAgICBVTlVTRURf
UEFSQU0obWlncmF0aW9uU3VjY2VlZGVkKTsgLy8gRklYTUU6IFdoZW4gbWlncmF0aW9uIGlzIGFj
dHVhbGx5IGltcGxlbWVudGVkLCB3ZSBuZWVkIGVycm9yIGhhbmRsaW5nIGhlcmUuCisKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBkZWxldGUgdGhlIFNRTGl0ZSBiYWNraW5nIHN0b3JlLgogICAgICAg
ICB9CiAgICAgfQogI2VuZGlmCkBAIC0xMjMsMTAgKzExNiwyOSBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYQogICAgICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNr
aW5nU3RvcmUpCiAgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmls
ZUlkZW50aWZpZXIsIHRoaXMpOwogI2VuZGlmCi0gICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7
Ci0gICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBiYWNr
aW5nU3RvcmUucmVsZWFzZSgpOworfQorCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3Ms
IFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSBi
YWNraW5nU3RvcmVUeXBlKQoreworCisgICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0g
Y29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBiYWNraW5nU3RvcmVU
eXBlKTsKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJ
ZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpLCBiYWNraW5nU3RvcmVUeXBlKTsK
KworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFj
a2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNl
QmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhpdC0+c2Vj
b25kKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5n
IGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorCisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShuYW1l
LCBzZWN1cml0eU9yaWdpbiwgZGF0YURpciwgbWF4aW11bVNpemUsIGJhY2tpbmdTdG9yZVR5cGUp
OworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJ
REJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJS
LCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgUmVm
UHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rp
b25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CkBAIC0yNTcsNiAr
MjY5LDM0IEBAIGJvb2wgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjptaWdyYXRlRnJvbVNRTGl0ZVRv
TGV2ZWxEQihjb25zdCBTdHJpbmcmIG5hbWUsIFNlY3VyCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Cit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0b3JlVHlw
ZSkKK3sKKyAgICBBU1NFUlQoYmFja2luZ1N0b3JlVHlwZSAhPSBEZWZhdWx0QmFja2luZ1N0b3Jl
KTsKKworICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmllciA9IGNvbXB1dGVGaWxlSWRlbnRp
ZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSwgYmFja2luZ1N0b3JlVHlwZSk7CisgICAgY29uc3Qg
U3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBz
ZWN1cml0eU9yaWdpbi5nZXQoKSwgYmFja2luZ1N0b3JlVHlwZSk7CisKKyAgICBJREJEYXRhYmFz
ZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlx
dWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgIT0gbV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkp
IHsKKyAgICAgICAgLy8gRklYTUU6IENsb3NlIHRoZSBkYXRhYmFzZSBmaXJzdC4gRm9yIG5vdywg
d2UganVzdCBjaGlja2VuIG91dCwgc28gd2UgY2FuIGRvIHRoZSBkZWxldGUgZnVydGhlciBkb3du
IHN5bmNocm9ub3VzbHkuCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwg
ZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5
dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisKKyAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3Jl
KG5hbWUsIHNlY3VyaXR5T3JpZ2luLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgYmFja2luZ1N0b3Jl
VHlwZSk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9X
Tl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShuYW1lKSkKKyAgICAgICAgY2FsbGJh
Y2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CisgICAg
ZWxzZQorICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaAppbmRleCBmYjMwM2QxYTJiNjU4ZDIyYjUxMWU3NjVlOWQ0ZTU5YjRlY2QxYmU0Li4xOTg0
OTkyYmUxMDc2YjVhZDdiMmFkNGNjNTg4MmZkZTA1NzRhMDhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKQEAgLTU2LDEwICs1NiwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3RyaW5nJiBmaWxl
SWRlbnRpZmllcik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBCYWNraW5n
U3RvcmVUeXBlKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5n
JiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwg
QmFja2luZ1N0b3JlVHlwZSk7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBs
KCk7CiAgICAgYm9vbCBtaWdyYXRlRnJvbVNRTGl0ZVRvTGV2ZWxEQihjb25zdCBTdHJpbmcmIG5h
bWUsIFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGlt
dW1TaXplKTsKKyAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gb3BlbkJhY2tpbmdTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwog
CiAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgSURCRGF0YWJhc2VCYWNrZW5kSW1wbCo+IElE
QkRhdGFiYXNlQmFja2VuZE1hcDsKICAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXAgbV9kYXRhYmFz
ZUJhY2tlbmRNYXA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMjQ4MjY2MjRlNjgyMjhiOTY0NmQzNWZlM2ZmOWEwMzNk
ZGEyZTdmMS4uOThhMzEwODYzNWU1MjQ4YWVlNjg3NDRkMzIwYzlhNDI5ZGM5OWY2YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2Uu
aApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIHZpcnR1YWwgdm9pZCBv
cGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0
X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgPSAwOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMzU0OWU2NWRmMTMxNjFkM2IxN2I4ZTVjY2E5
MDg2ZjRiZDcwOTg1Mi4uYzc2NTAzYzNlMjI1MTg0YjcxMmYxMDM0MGUzZDBjZjQzYTAzMGYyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwCkBAIC0yMTIsNiArMjEyLDM0IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6c2V0
SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJh
c2UoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2N1cnJlbnRUcmFuc2FjdGlvbikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7CisKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAg
U3RyaW5nIHZlcnNpb247CisgICAgaWYgKCFleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1l
LCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBX
ZSBjYW4gb25seSBkZWxldGUgdGhlIG1ldGEgZGF0YSwgaWYgdGhlIGRhdGFiYXNlIGNvbnRhaW5z
IG5vIG9iamVjdCBzdG9yZXMuCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwor
ICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhzOwor
ICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7CisgICAgZ2V0T2JqZWN0U3RvcmVz
KGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWRzLCBuYW1lcywga2V5UGF0aHMsIGF1dG9JbmNyZW1l
bnRGbGFncyk7CisgICAgZm9yIChWZWN0b3I8aW50NjRfdD46Oml0ZXJhdG9yIG9iamVjdFN0b3Jl
SWQgPSBvYmplY3RTdG9yZUlkcy5iZWdpbigpOyBvYmplY3RTdG9yZUlkICE9IG9iamVjdFN0b3Jl
SWRzLmVuZCgpOyArK29iamVjdFN0b3JlSWQpCisgICAgICAgIGRlbGV0ZU9iamVjdFN0b3JlKGRh
dGFiYXNlSWQsICpvYmplY3RTdG9yZUlkKTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkg
PSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworICAgIG1fZGIt
PnJlbW92ZShrZXkpOworICAgIG1fZGItPnJlbW92ZShEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNv
ZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJWZXJzaW9uKSk7CisKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmpl
Y3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBW
ZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMs
IFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpCiB7CiAgICAgY29uc3QgVmVj
dG9yPGNoYXI+IHN0YXJ0S2V5ID0gT2JqZWN0U3RvcmVNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFi
YXNlSWQsIDEsIDApOwpAQCAtMTMwNiw4ICsxMzM0LDYgQEAgYm9vbCBJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2lu
LAogICAgIHJldHVybiBmaWxlRXhpc3RzKHBhdGgrIi9DVVJSRU5UIik7CiB9CiAKLS8vIEZJWE1F
OiBkZWxldGVEYXRhYmFzZSBzaG91bGQgYmUgcGFydCBvZiBJREJCYWNraW5nU3RvcmUuCi0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShMRVZFTERCKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCA3M2Iw
NTQ3NDZjNjIxYzMwMzI1MmY4N2JjOTBlYzQyYjJkMTEwMTU5Li4yMjEzMWZmNzdhZmY4Zjg5YTUw
ODU3MDYzOThlMDllYjNlNGFmZDk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkxldmVsREJCYWNraW5nU3RvcmUuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVhbCBi
b29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CisgICAgdmly
dHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCmluZGV4IGRkMDY1ZDRiMzIxZDU5
MDRmZThhN2RiYTZlN2Q0NGQ1MjQyZTU3Y2IuLjlhZjMzZDQ1MmQyZmE2Nzc0MWVmMWQyNmE2OWZh
ODA0MDcyYzk2YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRl
QmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJh
Y2tpbmdTdG9yZS5jcHAKQEAgLTI0Miw2ICsyNDIsMzYgQEAgYm9vbCBJREJTUUxpdGVCYWNraW5n
U3RvcmU6OnNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgZG9EZWxldGUoU1FMaXRlRGF0
YWJhc2UmIGRiLCBjb25zdCBjaGFyKiBzcWwsIGludDY0X3QgaWQpCit7CisgICAgU1FMaXRlU3Rh
dGVtZW50IGRlbGV0ZVF1ZXJ5KGRiLCBzcWwpOworICAgIGJvb2wgb2sgPSBkZWxldGVRdWVyeS5w
cmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CisgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBG
SVhNRTogQmV0dGVyIGVycm9yIGhhbmRsaW5nLgorICAgIGRlbGV0ZVF1ZXJ5LmJpbmRJbnQ2NCgx
LCBpZCk7CisgICAgb2sgPSBkZWxldGVRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKKyAg
ICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcu
Cit9CisKK2Jvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgaW50NjRfdCBkYXRhYmFzZUlkOworICAgIFN0cmluZyB2ZXJz
aW9uOworICAgIGlmICghZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lvbiwg
ZGF0YWJhc2VJZCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgLy8gV2UgY2FuJ3QgZGVs
ZXRlIGEgZGF0YWJhc2UsIGlmIGl0IHN0aWxsIGhhcyBvYmplY3Qgc3RvcmVzLgorICAgIFZlY3Rv
cjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4gYXV0b0luY3JlbWVu
dEZsYWdzOworICAgIGdldE9iamVjdFN0b3JlcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkcywg
bmFtZXMsIGtleVBhdGhzLCBhdXRvSW5jcmVtZW50RmxhZ3MpOworICAgIGZvciAoVmVjdG9yPGlu
dDY0X3Q+OjppdGVyYXRvciBvYmplY3RTdG9yZUlkID0gb2JqZWN0U3RvcmVJZHMuYmVnaW4oKTsg
b2JqZWN0U3RvcmVJZCAhPSBvYmplY3RTdG9yZUlkcy5lbmQoKTsgKytvYmplY3RTdG9yZUlkKQor
ICAgICAgICBkZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZUlkLCAqb2JqZWN0U3RvcmVJZCk7CisK
KyAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gRGF0YWJhc2VzIFdIRVJFIGlkID0gPyIs
IGRhdGFiYXNlSWQpOworICAgIHJldHVybiB0cnVlOworfQorCiB2b2lkIElEQlNRTGl0ZUJhY2tp
bmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0
X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKQog
ewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGlkLCBuYW1lLCBrZXlQ
YXRoLCBkb0F1dG9JbmNyZW1lbnQgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgZGF0YWJhc2VJZCA9
ID8iKTsKQEAgLTI4MSwxNiArMzExLDYgQEAgYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJgogICAgIHJl
dHVybiB0cnVlOwogfQogCi1zdGF0aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFzZSYgZGIs
IGNvbnN0IGNoYXIqIHNxbCwgaW50NjRfdCBpZCkKLXsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgZGVs
ZXRlUXVlcnkoZGIsIHNxbCk7Ci0gICAgYm9vbCBvayA9IGRlbGV0ZVF1ZXJ5LnByZXBhcmUoKSA9
PSBTUUxSZXN1bHRPazsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0
ZXIgZXJyb3IgaGFuZGxpbmcuCi0gICAgZGVsZXRlUXVlcnkuYmluZEludDY0KDEsIGlkKTsKLSAg
ICBvayA9IGRlbGV0ZVF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAgIEFTU0VSVF9V
TlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZy4KLX0KLQogdm9p
ZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gT2Jq
ZWN0U3RvcmVzIFdIRVJFIGlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgKaW5kZXggYjEyYWFmYTQ2MjRmYzEw
OWNlOGMxNmEwZGU5MWNjYWFmNGUxMmQ5My4uNjc2NjgzNTVkZDljZjMwYjRlNDg2YTM5NTBlNDM5
N2YxOTBmNjdiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tp
bmdTdG9yZS5oCkBAIC00Miw2ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZXh0
cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5k
VmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGlu
dDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgZGVs
ZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2Jq
ZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywg
VmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhz
LCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKICAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBh
c3NpZ25lZE9iamVjdFN0b3JlSWQpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IDc5N2RkM2Q5MmRkZGI5MzgxYzc5NzIxMjNlYTY1ZmJiMzk5MDcw
MGIuLmY5OTEwMjRiOWQ5MGY1MmU4NzUwYTQ1YTVjNTJhODhhZTU5Y2VmMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMDgtMTggIEpvY2hlbiBFaXNp
bmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElEQkZhY3Rv
cnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9yeS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5Ojpk
ZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoK
KyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9XZWJJREJG
YWN0b3J5SW1wbC5oOgorCiAyMDExLTA4LTE2ICBQZXItRXJpayBCcm9kaW4gIDxwZXItZXJpay5i
cm9kaW5AZXJpY3Nzb24uY29tPgogCiAgICAgICAgIE1ha2UgaXQgcG9zc2libGUgdG8gZXhwbGlj
aXRseSBwcmV2ZW50IGEgcHJlZmxpZ2h0IHZpYSBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCmluZGV4IGYxMWZm
ZDQ4YTUyNDlkYjNiY2M1YjQ2ZWMwY2ViNzA4YzE4NmRlNTAuLjQ3YjE0N2FjNzRjNWM1ODcyOTdm
YTYwOTY0NTdkZGI3Zjg2YTAxNzYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYklEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJJREJGYWN0b3J5LmgKQEAgLTYwLDcgKzYwLDkgQEAgcHVibGljOgogICAgIC8vIFRoZSBX
ZWJLaXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSogcGFyYW1l
dGVyLgogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURC
Q2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdl
YlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5n
U3RvcmVUeXBlKSB7IFdFQktJVF9BU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQogCi0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpcikgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKyAgICAvLyBGSVhN
RTogcmVtb3ZlIGFmdGVyIGNocm9taXVtIHNpZGUgaGFzIGxhbmRlZC4KKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luLCBXZWJG
cmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikgeyBkZWxldGVEYXRhYmFzZShu
YW1lLCBjYWxsYmFja3MsIHNlY3VyaXR5T3JpZ2luLCBmcmFtZSwgZGF0YURpciwgNXVsbCAqIDEw
MjQgKiAxMDI0LCBEZWZhdWx0QmFja2luZ1N0b3JlKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgc2VjdXJpdHlPcmlnaW4sIFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25nIGxvbmcgbWF4aW11
bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpIHsgZGVsZXRlRGF0YWJhc2UobmFtZSwgY2FsbGJhY2tz
LCBzZWN1cml0eU9yaWdpbiwgZnJhbWUsIGRhdGFEaXIpOyB9CiAKICAgICAvLyBVc2VkIGZvciBE
dW1wUmVuZGVyVHJlZSB0ZXN0cy4KICAgICBXRUJLSVRfRVhQT1JUIHN0YXRpYyB2b2lkIHNldE92
ZXJyaWRlQmFja2luZ1N0b3JlVHlwZShCYWNraW5nU3RvcmVUeXBlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKaW5kZXgg
MDRkMzg4MTk5YmMxMzhhYTU5NjQ0MzI4NzEyNmYyNDQ5ZDFmNWY4NS4uNDBlNGI1ZmFjMDI3ZmIx
NjYxOWZlYzgyMjhlMGNkMGFiYzQ2MmQ4NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTc3LDYgKzc3LDE5IEBA
IHZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjCiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUs
IG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRh
dGFEaXIsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxXZWJJREJGYWN0b3J5OjpCYWNraW5nU3Rv
cmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQ
cm94eTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4s
IEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXpl
LCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCit7CisgICAgV2ViU2VjdXJpdHlP
cmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdl
YkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9
IHdlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50
KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJh
bWUsIG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRh
dGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUg
ZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJGYWN0
b3J5LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFj
a3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgc3RhdGljX2Nhc3Q8
V2ViSURCRmFjdG9yeTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJh
Y2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5oCmluZGV4IDg5ZWQzNTUyZGRhZmRhM2JmZDMyZTE1ZTNmYjc0ZDc1OWMxZDY1MzIu
LjY3NjUxZmVkOGRlNWQyNGRiYTRlZjRmMjYxNGU0Y2IyNWU4ZTNhYzUgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAgLTQ2
LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpET01TdHJpbmdM
aXN0PiBkYXRhYmFzZXModm9pZCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3Jp
Z2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIsIGludDY0X3QgbWF4
aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlC
YWNrZW5kUHJveHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkZhY3RvcnlJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZh
Y3RvcnlJbXBsLmNwcAppbmRleCA1YWRmN2Y4ZDExMGI3ZGRhNWM4NzEzN2Q1Y2Y3NmMwNzRhZDRh
OTNhLi41YzFiNTZhNjdiNjg3M2JmOGFiMmVlNWI3MDBmNzQzZTg4NGZmZjQ2IDEwMDc1NQotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCkBAIC05Niw2
ICs5NiwzMSBAQCB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYg
bmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsCiAgICAgbV9pZGJGYWN0b3J5QmFja2Vu
ZC0+b3BlbihuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNr
cykpLCBvcmlnaW4sIDAsIHBhdGgsIG1heGltdW1TaXplLCBzdGF0aWNfY2FzdDxJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZTo6QmFja2luZ1N0b3JlVHlwZT4oYmFja2luZ1N0b3JlVHlwZSkpOwog
fQogCit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9y
aWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWdu
ZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5
cGUpCit7CisgICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOworCisgICAgaWYgKG92ZXJyaWRk
ZW5CYWNraW5nU3RvcmVUeXBlICE9IERlZmF1bHRCYWNraW5nU3RvcmUpIHsKKyAgICAgICAgLy8g
QmFja2luZyBzdG9yZSB0eXBlIG92ZXJyaWRkZW4gYnkgTGF5b3V0VGVzdENvbnRyb2xsZXIuCisg
ICAgICAgIGJhY2tpbmdTdG9yZVR5cGUgPSBvdmVycmlkZGVuQmFja2luZ1N0b3JlVHlwZTsKKyAg
ICB9CisKKyAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQor
ICAgICAgICBiYWNraW5nU3RvcmVUeXBlID0gTGV2ZWxEQkJhY2tpbmdTdG9yZTsKKworICAgIGlm
IChkYXRhRGlyLmlzRW1wdHkoKSAmJiBiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5n
U3RvcmUpIHsKKyAgICAgICAgaWYgKCF0ZW1wRGF0YWJhc2VGb2xkZXIuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAvLyBMYXlvdXQgdGVzdHMgcHJvdmlkZSBhIHRlbXBvcmFyeSBmb2xkZXIuCisg
ICAgICAgICAgICBwYXRoID0gdGVtcERhdGFiYXNlRm9sZGVyOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgLy8gRm9yIGluY29nbml0byBtb2RlLCBmYWxsIGJhY2sgdG8gU1FMaXRlLgor
ICAgICAgICAgICAgYmFja2luZ1N0b3JlVHlwZSA9IFNRTGl0ZUJhY2tpbmdTdG9yZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5h
bWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdp
biwgMCwgcGF0aCwgbWF4aW11bVNpemUsIHN0YXRpY19jYXN0PElEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlOjpCYWNraW5nU3RvcmVUeXBlPihiYWNraW5nU3RvcmVUeXBlKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaAppbmRleCA2
MmJkOWVkOTI3OGNiYTQzNmZlMzQ3MWEyYTQwYzcyNTNlZmIwNDNjLi5hMGZlNTNkMDAwMWU1NGVl
MmMzNmNjNmRmMjAyODNkNDgxMTYyMjc4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKQEAgLTQ1LDYgKzQ1LDcgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgfldlYklEQkZhY3RvcnlJbXBsKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3Jp
Z2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcg
bG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSk7CisgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
ciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKTsKIAog
cHJpdmF0ZToKICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gbV9pZGJGYWN0b3J5QmFja2VuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111352</attachid>
            <date>2011-10-17 17:08:42 -0700</date>
            <delta_ts>2011-10-18 12:06:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111018020839.patch</filename>
            <type>text/plain</type>
            <size>43392</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzNkMGIzOTY0YmIzNWI1
OGEyNGYyMjJmM2JhMmNhY2FkMjBjMzVhLi5kOTVjYmM0YzMwMjA2OWIyY2NhZTA2NDYxOTdmM2Jl
NDEwYmYxNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMTcgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnBy
b2Nlc3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b3BlbkNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6Cisg
ICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICog
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisKIDIwMTEtMTAtMTQgIENocmlzIE1hcnJp
biAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRocm90dGxlIHJhdGUgb2YgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIHdoZW4gcGFnZSBpcyBub3QgdmlzaWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA1MGUyNWUzMjA5MDYxY2M5ZjQ4YWFkNGQ0NThhNzlmOWI5YmE1NDBkLi42
ZWNjZDhkMTY3M2NiNjhiNGVmYmE1ZDIzZWZlMjEzMjM3OTllMmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEwLTE3ICBKb2NoZW4gRWlzaW5nZXIg
IDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRl
bGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MjYyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
REJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2Up
OgorICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEwLTE3ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogZG9uJ3QgY2hlY2sgZm9yIGRlYnVnZ2VyIHBhdXNlIGRldGFpbHMgaW4g
aW50ZXJhY3RpdmUgdWkgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IDZlMTNmNGZhNjFjNGEyMWQ0MmMzZmZkZTViZGM3M2Q5MWRkYjNjNDEuLjU3Zjg5
MjNjNGVkNTRhZjQ5MmNiNGNkOTYyN2M1OThlNWM2MDEyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93
SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
QXV0b0luY3JlbWVudEZsYWdzKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9y
ZUlkKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcAppbmRleCA1ODFhYThjMDE1M2Q5NmUwOTkwODQxYzQ4NjdmNTRmYTVhZmFiZjE3
Li41NGNhMjU1YzI4MDc3YmQ4OGY1MWY5OWE0NDFiMzIxZWJkYjAxNGIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTU1LDYg
KzU1LDIyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiB9OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
ZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCkBAIC04NSw2ICsxMDEsNyBAQCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
QmFja2luZ1N0bwogICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCiAgICAgLCBt
X2ZhY3RvcnkoZmFjdG9yeSkKICAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihjb29yZGlu
YXRvcikKKyAgICAsIG1fZGVsZXRlUGVuZGluZyhmYWxzZSkKIHsKICAgICBBU1NFUlQoIW1fbmFt
ZS5pc051bGwoKSk7CiAKQEAgLTI1OCw3ICsyNzUsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAg
fQogCi0gICAgd2hpbGUgKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9w
ZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlz
RW1wdHkoKSkgeworICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERl
cXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAg
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxl
ICghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmIG1fcGVuZGluZ1NldFZlcnNp
b25DYWxscy5pc0VtcHR5KCkgJiYgIW1fZGVsZXRlUGVuZGluZyAmJiAhcGVuZGluZ0RlbGV0ZUNh
bGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRp
bmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBk
ZWxldGVCYWNraW5nU3RvcmUocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICAg
ICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8v
IElmIGEgY2FsbCBnb3QgcmVxdWV1ZWQsIGFib3J0IHByb2Nlc3NpbmcgZnVydGhlciBjYWxscy4K
KyAgICAgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnN3YXAocGVuZGluZ0RlbGV0ZUNhbGxz
KTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnByZXBlbmQocGVuZGluZ0RlbGV0
ZUNhbGxzLnRha2VGaXJzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgd2hpbGUgKCFtX2RlbGV0ZVBlbmRpbmcgJiYgbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
aXNFbXB0eSgpICYmICFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1w
dHkoKSkgewogICAgICAgICBSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwg
PSBtX3BlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7CiAgICAgICAgIG9wZW5Db25uZWN0aW9u
KHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCkpOwogICAgIH0KQEAgLTI4NCwxMiArMzE1LDQw
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAg
ICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2RlbGV0ZVBlbmRpbmcgfHwgIW1fcGVu
ZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIG1f
cGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tz
KSk7CiAgICAgZWxzZQogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKIH0KIAor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVCYWNraW5nU3RvcmUoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KQorICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6
OmNyZWF0ZShwcnBDYWxsYmFja3MpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgICAgICBtX2RlbGV0ZVBlbmRp
bmcgPSB0cnVlOworICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lvbkNoYW5nZSBp
ZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAgICAgICAvLyB0aGUgcHJvY2VzcyBv
ZiBjbG9zaW5nLgorICAgICAgICAvLyBodHRwOi8vY3JidWcuY29tLzEwMDY0NQorICAgICAgICBm
b3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VD
YWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsg
KytpdCkKKyAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOworICAgICAgICBt
X2RlbGV0ZVBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJs
b2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCisgICAgICAgIC8v
IFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmly
ZS4KKyAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xMDAxMjMKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7Cisg
ICAgICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9u
YW1lKSkKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICB9Cit9CisKIHZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzKQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaAppbmRleCBlOGIxMDg0NTAxMzA0Y2QxOGY1ZmY2NmExYWQ0OWU4YWJm
NmFjYmYwLi44MTg3Y2YwZjY0NGRlNzdmMDYwM2NiNmE0ZDdhNDJkMmU4MWMzZTUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTgs
NiArNTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFJlbmFtZSAib3BlbiIgdG8gc29tZXRo
aW5nIG1vcmUgZGVzY3JpcHRpdmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcy4KICAg
ICB2b2lkIG9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQg
b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIGRlbGV0
ZUJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgdmlydHVhbCBT
dHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3RyaW5n
IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KQEAgLTExMCw4ICsxMTEsMTMg
QEAgcHJpdmF0ZToKICAgICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CiAgICAgRGVxdWU8UmVmUHRy
PFBlbmRpbmdPcGVuQ2FsbD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CiAKKyAgICBjbGFzcyBQZW5k
aW5nRGVsZXRlQ2FsbDsKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gbV9w
ZW5kaW5nRGVsZXRlQ2FsbHM7CisKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKICAgICBEYXRhYmFzZUNh
bGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OworCisgICAgYm9vbCBtX2RlbGV0ZVBl
bmRpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcAppbmRleCBkMjAxNGZlMmZjOTY5OTRmOTk0ZjEzMDIwOWI5ZTI5ZDNhNDhl
NjlhLi42NjdjNWE5MTllNmE4YjYzYWFlNzE5NDNlZGI2M2U0M2UwNGQwMzlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJ
REJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtOTgsNiArOTksMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVu
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICByZXR1cm4gcmVx
dWVzdDsKIH0KIAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9y
eTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3Jr
ZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZy
YW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9O
X1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CisgICAgR3JvdXBT
ZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBT
ZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJl
cXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3Jv
dXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0
OworfQorCiBzaG9ydCBJREJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQ
YXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NF
UlQoZmlyc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCA4OTM0MjFkMTgw
OTRkNzM0MGFlMzk0ZGZhOGViMTI2ZjAzYTk5YzY3Li4xN2JmZjFkMWZjYmQyZjAzOWUyYmQ2YWZk
YWJjOWY1ZWM4OTJhYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNDQs
NiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJL
ZXlSYW5nZTsKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFz
cyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewpAQCAtNTcsNiAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5h
bWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gZGVs
ZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgc2hvcnQgY21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJz
dCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAppbmRleCAyM2ZhODcxZWJhN2UyN2VhZjhjN2E4OGUz
Yjc0ZTdiZjUwNTU1YTQ1Li5lODM5MjljNGQ1YzMwNjRlZmU2YThkNzRiNDg5YmJlYzczY2Q1Zjk4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKQEAgLTMyLDYgKzMyLDggQEAg
bW9kdWxlIHN0b3JhZ2UgewogCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJSZXF1ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERP
TVN0cmluZyBhbmVtKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbikK
IAogICAgICAgICBzaG9ydCBjbXAoaW4gSURCS2V5IGZpcnN0LCBpbiBJREJLZXkgc2Vjb25kKQog
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKaW5kZXggNDQ0ZDZhY2Ri
ZmJiMDdmMDViYjI1M2VlZjM2MTUzYWQxMjM2OTg2Yi4uMzE2MzdlOWIyYjc5ODc5Y2NmMTk3ZTJm
Njk3ZDhhYzAxNGI3NmFkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMTIyLDYgKzEyMiwzMCBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYQogICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBk
YXRhYmFzZUJhY2tlbmQuZ2V0KCkpOwogfQogCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgY29uc3QgU3RyaW5nIHVuaXF1
ZUlkZW50aWZpZXIgPSBjb21wdXRlVW5pcXVlSWRlbnRpZmllcihuYW1lLCBzZWN1cml0eU9yaWdp
bi5nZXQoKSk7CisKKyAgICBJREJEYXRhYmFzZUJhY2tlbmRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9k
YXRhYmFzZUJhY2tlbmRNYXAuZmluZCh1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgIT0g
bV9kYXRhYmFzZUJhY2tlbmRNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFu
eSBjb25uZWN0aW9ucyB0byB0aGUgZGF0YWJhc2UsIHdlIG11c3QgZmlyc3QgY2xvc2UKKyAgICAg
ICAgLy8gdGhlbi4KKyAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlQmFja2luZ1N0b3JlKGNhbGxi
YWNrcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGlu
ZyBmcm9tIG5vdyBvbiBzaG91bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKyAgICBSZWZQ
dHI8SURCQmFja2luZ1N0b3JlPiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3Vy
aXR5T3JpZ2luLCBkYXRhRGlyKTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICBj
YWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJh
Y2tlbmQgPSBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3Jl
LmdldCgpLCBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50
aWZpZXIpOworICAgIG1fZGF0YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBk
YXRhYmFzZUJhY2tlbmQuZ2V0KCkpOworICAgIGRhdGFiYXNlQmFja2VuZC0+ZGVsZXRlQmFja2lu
Z1N0b3JlKGNhbGxiYWNrcyk7Cit9CisKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJG
YWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBjb25z
dCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlP
cmlnaW4uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tl
bmRJbXBsLmgKaW5kZXggNmVlOWJiMjQzMDMzMDFmYWM0MTVhYTA2OTBjNjFiYTRmMTJkOGRlZi4u
OWMyZjA3ZmI3MDU0N2EyMTAzYTRjYWQ3N2RiNTZlNTkzZjFjNDk0YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCkBAIC01Nyw2ICs1Nyw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7
CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYzQw
MThlZmY5ZGQ2NGRiYzliNzk0MmU1MGMzYjAyNTUyNDI3NzkzOC4uZTkyNTQ1ZDJjZmY2MzllZjA3
ZWRiMTA2MWRiZTUzNmNiODIxODk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJh
bWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
RGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikg
PSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggZmE0ZTViMzQ4MjZiMWQ5
NTlkNTY5MjVkYmY4NDZlNWE0MjAwMWU2OC4uYjAwMTE5ZTI4OWYyN2RjOTZiOTA3YmVhODQ5YWQ0
OGM2ZDAwZWFkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwCkBAIC0yMzQsNiArMjM0LDM4IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6c2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChtX2N1cnJlbnRU
cmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPElEQkxldmVs
REJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7CisgICAgdHJhbnNhY3Rpb24tPmJl
Z2luKCk7CisKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgU3RyaW5nIHZlcnNpb247Cisg
ICAgaWYgKCFleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJzaW9uLCBkYXRhYmFz
ZUlkKSkgeworICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgLy8gV2UgY2FuIG9ubHkgZGVsZXRlIHRoZSBtZXRhIGRhdGEs
IGlmIHRoZSBkYXRhYmFzZSBjb250YWlucyBubyBvYmplY3Qgc3RvcmVzLgorICAgIFZlY3Rvcjxp
bnQ2NF90PiBvYmplY3RTdG9yZUlkczsKKyAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKKyAgICBW
ZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKKyAgICBWZWN0b3I8Ym9vbD4gYXV0b0luY3JlbWVudEZs
YWdzOworICAgIGdldE9iamVjdFN0b3JlcyhkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkcywgbmFt
ZXMsIGtleVBhdGhzLCBhdXRvSW5jcmVtZW50RmxhZ3MpOworICAgIGZvciAoVmVjdG9yPGludDY0
X3Q+OjppdGVyYXRvciBvYmplY3RTdG9yZUlkID0gb2JqZWN0U3RvcmVJZHMuYmVnaW4oKTsgb2Jq
ZWN0U3RvcmVJZCAhPSBvYmplY3RTdG9yZUlkcy5lbmQoKTsgKytvYmplY3RTdG9yZUlkKQorICAg
ICAgICBkZWxldGVPYmplY3RTdG9yZShkYXRhYmFzZUlkLCAqb2JqZWN0U3RvcmVJZCk7CisKKyAg
ICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0gRGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVu
dGlmaWVyLCBuYW1lKTsKKyAgICBtX2RiLT5yZW1vdmUoa2V5KTsKKyAgICBtX2RiLT5yZW1vdmUo
RGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0YURhdGFL
ZXk6OmtVc2VyVmVyc2lvbikpOworCisgICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9vbCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFU
eXBlKGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc3RvcEtl
eSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSkKIHsKICAgICBp
ZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA+PSAw
KQpAQCAtMTM3Nyw4ICsxNDA5LDYgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpiYWNr
aW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLAogICAgIHJldHVy
biBmaWxlRXhpc3RzKHBhdGgrIi9DVVJSRU5UIik7CiB9CiAKLS8vIEZJWE1FOiBkZWxldGVEYXRh
YmFzZSBzaG91bGQgYmUgcGFydCBvZiBJREJCYWNraW5nU3RvcmUuCi0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjMWQzYWM0ZGJmOThmYmZlZDU0
ODkyNDg1NzhlYzhkMmYzYjg0ZTFlLi44N2IwOTdkMDhiNjQyOTlhM2I1MmU4ZTIzZDgyM2FmYWNk
NzZjM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5n
U3RvcmUuaApAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldERh
dGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAgIHZpcnR1YWwgYm9v
bCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYg
Zm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURC
RGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5k
SWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5
UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwogICAgIHZpcnR1
YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0
X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmNwcAppbmRleCA2NDMwZDI1MTEyYzI1M2FjMTEyODZhYzA5NTQ0NzZiYTA3MjUxYjI2Li41MWNh
YjhjNDc2NTNiMmI2OTZlYWFiZGM3ZmIwYzk4M2E4YTMxZGJjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5jcHAKQEAgLTI5Niw4ICsyOTYsOCBAQCBib29sIElEQlJlcXVlc3Q6OmRp
c3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgQVNTRVJUKGV2ZW50LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmJs
b2NrZWRFdmVudCk7CiAgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKIAotICAgIC8vIElmIHRoZSBy
ZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCB0aGVuIHdlJ2xsIGZpcmUgYWdhaW4uCi0gICAg
aWYgKG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JUeXBl
ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQor
ICAgIC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBhIG9uQmxvY2tl
ZCBldmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgorICAgIGlmIChldmVudC0+dHlwZSgpICE9
IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgbV9yZXN1bHQgJiYgbV9yZXN1bHQtPnR5cGUo
KSAhPSBJREJBbnk6OklEQkN1cnNvclR5cGUgJiYgbV9yZXN1bHQtPnR5cGUoKSAhPSBJREJBbnk6
OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCiAgICAgICAgIG1fZmluaXNoZWQgPSB0cnVlOwogCiAg
ICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKaW5kZXggN2E2MmU1MGViYjE1YTUyZDU1
NTRjNjM3MDRlNDk0YWI5NTU2MjAwYS4uN2I2MDM4YjM2YWQ5NDBlYzk0YTFkMGRhZTU0NzRkY2Vl
ZTRhMGY5YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9y
eUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFj
dG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTkxLDYgKzkxLDE5IEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjCiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBXZWJJREJDYWxsYmFj
a3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwogfQogCit2b2lk
IElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYgZGF0YURpcikK
K3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKKyAgICBXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOworICAgIFdl
YlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAgaWYgKHdlYlZp
ZXctPnBlcm1pc3Npb25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5h
bGxvd0luZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKSkgeworICAgICAgICBjYWxsYmFj
a3MtPm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVuaWVkIHBlcm1p
c3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX3dlYklEQkZhY3RvcnktPmRlbGV0ZURhdGFiYXNlKG5hbWUsIG5ldyBXZWJJREJD
YWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJh
Y2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5oCmluZGV4IGJhZjFlMDVlMmM5OTJmOTIxYzdkZDI3ZDRmZDMyNmU4YTZhYTg2ZWQu
LmUxNGI4Y2VhOTgyZjMxN2U0MWQ0M2E4YzkzZjFkN2Q2MWY2NzFjMzIgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKQEAgLTQ2
LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMo
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwog
ICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwg
V2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNv
cmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJG
YWN0b3J5QmFja2VuZFByb3h5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJGYWN0b3J5SW1wbC5jcHAKaW5kZXggMWMwOTY4YTU1MWMyYzg0MGIwOTAyNTRjNmFkODA0
ZDIxMzNmMzA3ZS4uNWYzZDU1ZDFkN2MxZDEwNWVjNTZkZTE0ODAxYjBkZWUxMDVmNjc2OCAxMDA3
NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcApA
QCAtNzMsNiArNzMsMTMgQEAgdm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6b3Blbihjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLAogICAgIG1faWRiRmFjdG9y
eUJhY2tlbmQtPm9wZW4obmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihj
YWxsYmFja3MpKSwgb3JpZ2luLCAwLCBwYXRoKTsKIH0KIAordm9pZCBXZWJJREJGYWN0b3J5SW1w
bDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3Mq
IGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBj
b25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGly
OworCisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgSURCQ2Fs
bGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBwYXRo
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkZhY3RvcnlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5
SW1wbC5oCmluZGV4IDNlMDFkMWE2M2M4OTI0MDYxZjU3Yzg1NzdhZWFmNWJiNDE2YmM2YzIuLmIz
ZTQ3NGRmOTI1NWU4NzdmMmZmNmQwZTYzMTAzNTU2MjQ2ZDE3MTkgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApAQCAtNDYsNiArNDYsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFj
a3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5n
JiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBj
b25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFz
ZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3Vy
aXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2
YXRlOgogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
PiBtX2lkYkZhY3RvcnlCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGY4ODQ4ZWFhYmUwZWJiNmNkNGFlYzQyMmQ1
NTQ5Y2FmOGQzYTVmMGYuLjNiNTNkZTAyMTNmOTBiZGY5NjVlN2NiMTYzMmFkYzJjMzZjNzBiZGIg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0xMC0xNyAgSm9jaGVuIEVpc2luZ2VyICA8am9j
aGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVE
YXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjI2MjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNl
LWludGVyYWN0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbDog
QWRkZWQuCisKIDIwMTEtMTAtMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAog
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTAyOTM5Mjk+IFJFR1JFU1NJT04gKHI5NzUyNSk6IGlD
aGF0IHRyYW5zY3JpcHQgaGFzIGhvcml6b250YWwgc2Nyb2xsIGJhciB3aGVuIHRoZSBjb252ZXJz
YXRpb24gaW5jbHVkZXMgYSB3aWRlIGltYWdlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjVlM2JmN2ZiNjYwNGJhYWQ4NDNjYTMwYTAwMmNlMWYxMmQwY2ExZDQK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitUZXN0IEluZGV4
ZWREQidzIHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgpLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKword2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0
ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9u
JykKK3RyYW5zID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0
cnVlCitEZWxldGVkIGFsbCBvYmplY3Qgc3RvcmVzLgorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RT
dG9yZSgnc3RvcmVOYW1lJywgbnVsbCkKK3N0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAn
JykKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJykgaXMgdHJ1ZQor
c3RvcmUuYWRkKCd2YWx1ZScsICdrZXknKQorZGIudHJhbnNhY3Rpb24oe21vZGU6IHdlYmtpdElE
QlRyYW5zYWN0aW9uLlJFQURfV1JJVEV9KQorc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9y
ZSgnc3RvcmVOYW1lJykKK3N0b3JlLmdldCgna2V5JykKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3Vs
dCBpcyAidmFsdWUiCitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCityZXF1ZXN0ID0gd2Vi
a2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQord2Via2l0
SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK0ZBSUwgZGIub2JqZWN0U3RvcmVO
YW1lcy5sZW5ndGggc2hvdWxkIGJlIDAuIFdhcyAxLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJh
c2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYTg5OWVkNjQwMzNlNjk2
NzcwYjMyYmM1MTZmMDRkM2E4ZjkxZjljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNzAgQEAKK1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwg
YW5kIGl0J3MgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZlcnNpb24KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93
LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIg
PT0gbnVsbCBpcyBmYWxzZQorCitURVNUOiBkZWxldGVEYXRhYmFzZSBibG9ja2VkIG9uIG9wZW4g
aGFuZGxlcword2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cu
c3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNl
JworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVs
eQorJ2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNl
Lm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgaXMgImgub3BlbixoLm9w
ZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFi
YXNlLm9uYmxvY2tlZCxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIKKworVEVTVDog
ZGVsZXRlRGF0YWJhc2Ugbm90IGJsb2NrZWQgd2hlbiBoYW5kbGVzIGNsb3NlIGltbWVkaWF0ZWx5
Cit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9
IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJhc2UnCisnaC5v
bnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nIGltbWVkaWF0ZWx5CisnaC5jbG9zZScKKydk
ZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisnZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzJworTk9U
RTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIHN0
ZXA7IGNyYnVnLmNvbS8xMDAxMjMKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxk
IGJlIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGgub252ZXJzaW9uY2hh
bmdlLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5v
bnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsaC5jbG9zZSxkZWxldGVE
YXRhYmFzZS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLgorCitURVNUOiBkZWxl
dGVEYXRhYmFzZSBpcyBkZWxheWVkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMg
cnVubmluZword2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cu
c3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2guc2V0VmVyc2lvbicK
KydkZWxldGVEYXRhYmFzZScKKydoLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2guc2V0VmVyc2lv
bi50cmFuc2FjdGlvbi1jb21wbGV0ZScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3Np
bmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisnaC5j
bG9zZScKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0
cmluZygpIGlzICJoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxoLnNldFZlcnNpb24sZGVsZXRlRGF0
YWJhc2UsaC5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29t
cGxldGUsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkLGguY2xvc2Us
ZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorCitURVNUOiBtdWx0aXBsZSBkZWxldGVEYXRhYmFz
ZSBjYWxscword2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cu
c3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNl
JworJ2RlbGV0ZURhdGFiYXNlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywg
YnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydoLm9udmVy
c2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVE
YXRhYmFzZS5vbmJsb2NrZWQnCisnaC5jbG9zZScKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNl
Lm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitOT1RFOiBXaWxsIEZBSUwg
d2l0aCBleHRyYSBib2d1cyBoLm9udmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0ZXBzOyBjcmJ1Zy5j
b20vMTAwNjQ1CitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBoLm9wZW4s
aC5vcGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSxkZWxldGVEYXRhYmFzZSxoLm9udmVyc2lv
bmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2Vk
LGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2Vz
cy4gV2FzIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGRlbGV0ZURhdGFi
YXNlLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLm9udmVyc2lv
bmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsaC5jbG9zZSxoLmNsb3NlLGRlbGV0ZURh
dGFiYXNlLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlv
bnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjkwYTM0MTJkOWViMTkyZjM2OTU5
MmQwMTA5ZDM1Nzc2NjU2MGExMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKQEAg
LTAsMCArMSwyMzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJj
b25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBkZWxldGVE
YXRhYmFzZSBjYWxsIGFuZCBpdCdzIGludGVyYWN0aW9uIHdpdGggb3Blbi9zZXRWZXJzaW9uIik7
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gQ29ubmVjdGlvbihpZCkgeworICAgIGlk
ID0gU3RyaW5nKGlkKTsKKyAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgdGhpcy5vcGVuID0gZnVu
Y3Rpb24ob3B0cykgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiAr
IGlkICsgIi5vcGVuJyIpKTsKKyAgICAgICAgdmFyIHJlcSA9IGluZGV4ZWREQi5vcGVuKHdpbmRv
dy5kYm5hbWUpOworICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHNl
bGYuaGFuZGxlID0gZS50YXJnZXQucmVzdWx0OworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1
c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub3Blbi5vbnN1Y2Nlc3MnIikpOworICAgICAgICAg
ICAgc2VsZi5oYW5kbGUub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICAg
ICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLm9udmVyc2lv
bmNoYW5nZSciKSk7CisgICAgICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnZlcnNpb24p
IHsgb3B0cy5vbnZlcnNpb24uY2FsbChzZWxmKTsgfQorICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwoc2Vs
Zik7IH0KKyAgICAgICAgfTsKKyAgICB9OworCisgICAgdGhpcy5jbG9zZSA9IGZ1bmN0aW9uKCkg
eworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5jbG9z
ZSciKSk7CisgICAgICAgIHRoaXMuaGFuZGxlLmNsb3NlKCk7CisgICAgfTsKKworICAgIHRoaXMu
c2V0VmVyc2lvbiA9IGZ1bmN0aW9uKG9wdHMpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2go
ZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbiciKSk7CisgICAgICAgIHZhciByZXEg
PSB0aGlzLmhhbmRsZS5zZXRWZXJzaW9uKFN0cmluZyh3aW5kb3cudmVyKyspKTsKKyAgICAgICAg
cmVxLm9uYWJvcnQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1
c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbmFib3J0JyIpKTsKKyAgICAg
ICAgICAgIGlmIChvcHRzICYmIG9wdHMub25hYm9ydCkgeyBvcHRzLm9uYWJvcnQuY2FsbChzZWxm
KTsgfQorICAgICAgICB9OworICAgICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNl
dFZlcnNpb24ub25ibG9ja2VkJyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25i
bG9ja2VkKSB7IG9wdHMub25ibG9ja2VkLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICAg
ICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3Rl
cHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uc3VjY2VzcyciKSk7
CisgICAgICAgICAgICBpZiAoc2VsZi5oYW5kbGUub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygi
dGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKSkgeworICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxl
LmRlbGV0ZU9iamVjdFN0b3JlKCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgdmFyIHN0b3JlID0gc2VsZi5oYW5kbGUuY3JlYXRlT2JqZWN0U3Rv
cmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7CisgICAgICAgICAgICB2YXIgY291bnQgPSAw
OworICAgICAgICAgICAgZG9fYXN5bmNfcHV0cygpOyAvLyBLZWVwIHRoaXMgdHJhbnNhY3Rpb24g
cnVubmluZyBmb3IgYSB3aGlsZQorICAgICAgICAgICAgZnVuY3Rpb24gZG9fYXN5bmNfcHV0cygp
IHsKKyAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUucHV0KGNvdW50LCBjb3VudCk7Cisg
ICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAg
ICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCsrY291bnQgPCAxMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZG9f
YXN5bmNfcHV0cygpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0
VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSciKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAob3B0cyAmJiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vzcy5jYWxsKHNlbGYp
OyB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgfQorICAgICAgICB9OworICAgICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7Cisg
ICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRW
ZXJzaW9uLm9uZXJyb3InIikpOworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmVycm9y
KSB7IG9wdHMub25lcnJvci5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgfTsKK30KKwor
ZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2UobmFtZSwgb3B0cykgeworICAgIHdpbmRvdy5zdGVwcy5w
dXNoKGV2YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZSciKSk7CisgICAgdmFyIHJlcSA9IGluZGV4
ZWREQi5kZWxldGVEYXRhYmFzZShuYW1lKTsKKyAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFi
YXNlLm9uc3VjY2VzcyciKSk7CisgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7
IG9wdHMub25zdWNjZXNzLmNhbGwoc2VsZik7IH0KKyAgICB9OworICAgIHJlcS5vbmVycm9yID0g
ZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2Rl
bGV0ZURhdGFiYXNlLm9uZXJyb3InIikpOworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJy
b3IpIHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0KKyAgICB9OworICAgIHJlcS5vbmJsb2Nr
ZWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9n
KCInZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0
cy5vbmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgIH07Cit9CisK
Ky8vIHJ1biBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24gZnVuY3Rp
b24KK2Z1bmN0aW9uIHJ1blN0ZXBzKGNvbW1hbmRzKSB7CisgICAgaWYgKGNvbW1hbmRzLmxlbmd0
aCkgeworICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7CisgICAgICAgIGNv
bW1hbmQoZnVuY3Rpb24oKSB7IHJ1blN0ZXBzKGNvbW1hbmRzKTsgfSk7CisgICAgfQorfQorCitm
dW5jdGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9
IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96
SW5kZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7Cisg
ICAgdGVzdDEoKTsKK30KKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZGVidWcoIiIpOworICAg
IGRlYnVnKCJURVNUOiBkZWxldGVEYXRhYmFzZSBibG9ja2VkIG9uIG9wZW4gaGFuZGxlcyIpOwor
ICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVyID0gMTsg
d2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7Cisg
ICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3Np
bmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4
dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgICBdKTsKKyAgICBm
dW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndp
bmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsi
aC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2Vz
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3QyKCk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6
IGRlbGV0ZURhdGFiYXNlIG5vdCBibG9ja2VkIHdoZW4gaGFuZGxlcyBjbG9zZSBpbW1lZGlhdGVs
eSIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVy
ID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJo
Iik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2Vzczog
ZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJz
aW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZWJ1ZygiICAgIGggY2xvc2luZyBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9u
KGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgICBdKTsK
KyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBG
QUlMIHdpdGggZXh0cmEgYm9ndXMgZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIHN0ZXA7IGNyYnVn
LmNvbS8xMDAxMjMiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3Rl
cHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MygpOworICAgIH0KK30KKworZnVuY3Rp
b24gdGVzdDMoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBkZWxldGVEYXRh
YmFzZSBpcyBkZWxheWVkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmlu
ZyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDMnOyB3aW5kb3cudmVy
ID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJo
Iik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2Vzczog
ZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBo
IGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgICAgICAgZnVu
Y3Rpb24oZG9OZXh0KSB7IGguc2V0VmVyc2lvbigpOyBkb05leHQoKTsgfSwKKyAgICAgICAgICAg
ICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwK
KyAgICAgICAgICAgICAgXSk7CisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAg
ICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImguc2V0VmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
bGV0ZURhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5zZXRWZXJz
aW9uLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVy
c2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFi
YXNlLm9uc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5n
KCkpOworICAgICAgICB0ZXN0NCgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDQoKSB7Cisg
ICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBtdWx0aXBsZSBkZWxldGVEYXRhYmFzZSBj
YWxscyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDQnOyB3aW5kb3cu
dmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9u
KCJoIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2Vz
czogZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAg
ICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0
aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5kb3cuZGJuYW1lKTsgZG9OZXh0KCk7IH0s
CisgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2Uod2luZG93LmRibmFt
ZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzczogZmluaXNoVGVzdH0p
OyB9LAorICAgICAgICAgXSk7CisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAg
ZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgub252ZXJzaW9uY2hhbmdl
L2guY2xvc2Ugc3RlcHM7IGNyYnVnLmNvbS8xMDA2NDUiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgu
b3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVE
YXRhYmFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2Nr
ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIGRvbmUo
KTsKKyAgICB9Cit9CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7
CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5odG1sIGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE5Yjg5OWI1NmE5OGZmM2Q4ZTllODI2Y2FhMGY3YmI0NWMyZmJmMzQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFi
YXNlLmh0bWwKQEAgLTAsMCArMSwxMDYgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVk
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0
IEluZGV4ZWREQidzIHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgpLiIpOworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5k
TG9nKCJ3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICBy
ZXF1ZXN0Lm9uc3VjY2VzcyA9IHN0YXJ0U2V0VmVyc2lvbjsKKyAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gc3RhcnRTZXRWZXJzaW9u
KCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOwor
CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJyki
KTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZUV4aXN0aW5nOworICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVF
eGlzdGluZygpCit7CisgICAgd2luZG93LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVu
dC50YXJnZXQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOwor
CisgICAgZGVsZXRlQWxsT2JqZWN0U3RvcmVzKGRiKTsKKworICAgIHN0b3JlID0gZXZhbEFuZExv
Zygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVsbCkiKTsKKwor
ICAgIHdpbmRvdy5pbmRleCA9IGV2YWxBbmRMb2coInN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5h
bWUnLCAnJykiKTsKKyAgICBzaG91bGRCZVRydWUoInN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMo
J2luZGV4TmFtZScpIik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCd2
YWx1ZScsICdrZXknKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0VmFsdWU7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IGdldFZhbHVlKCkKK3sKKyAgICB0cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coImRiLnRyYW5zYWN0
aW9uKHttb2RlOiB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFfSkiKTsKKyAgICB0cmFu
c2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdmFyIHN0b3Jl
ID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5nZXQoJ2tleScpIik7Cisg
ICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhZGRJbmRleDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1
bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gYWRkSW5kZXgoKQoreworICAg
IHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJ2YWx1ZSIpOwor
CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJyki
KTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZURhdGFiYXNlOworICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVE
YXRhYmFzZSgpCit7CisgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24oKSB7IGRiLmNs
b3NlKCk7IH0KKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IHdlYmtpdEluZGV4
ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IHJlb3BlbkRhdGFiYXNlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiByZW9wZW5EYXRhYmFzZSgpCit7Cisg
ICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10
by1kZWxldGUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uQWdh
aW47CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisK
K2Z1bmN0aW9uIHN0YXJ0U2V0VmVyc2lvbkFnYWluKCkKK3sKKyAgICByZGIgPSBldmFsQW5kTG9n
KCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3Mg
PSB2ZXJpZnlOb3RGb3VuZDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKK30KKworZnVuY3Rpb24gdmVyaWZ5Tm90Rm91bmQoKQoreworICAgIHNob3VsZEJl
KCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCIsICIwIik7CisKKyAgICBkb25lKCk7Cit9CisK
K3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111477</attachid>
            <date>2011-10-18 12:06:50 -0700</date>
            <delta_ts>2011-10-18 16:30:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111018210646.patch</filename>
            <type>text/plain</type>
            <size>45389</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzNkMGIzOTY0YmIzNWI1
OGEyNGYyMjJmM2JhMmNhY2FkMjBjMzVhLi5kOTVjYmM0YzMwMjA2OWIyY2NhZTA2NDYxOTdmM2Jl
NDEwYmYxNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMTcgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnBy
b2Nlc3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b3BlbkNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6Cisg
ICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICog
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisKIDIwMTEtMTAtMTQgIENocmlzIE1hcnJp
biAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRocm90dGxlIHJhdGUgb2YgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIHdoZW4gcGFnZSBpcyBub3QgdmlzaWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA1MGUyNWUzMjA5MDYxY2M5ZjQ4YWFkNGQ0NThhNzlmOWI5YmE1NDBkLi42
ZWNjZDhkMTY3M2NiNjhiNGVmYmE1ZDIzZWZlMjEzMjM3OTllMmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEwLTE3ICBKb2NoZW4gRWlzaW5nZXIg
IDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRl
bGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MjYyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
REJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2Up
OgorICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEwLTE3ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogZG9uJ3QgY2hlY2sgZm9yIGRlYnVnZ2VyIHBhdXNlIGRldGFpbHMgaW4g
aW50ZXJhY3RpdmUgdWkgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IDZlMTNmNGZhNjFjNGEyMWQ0MmMzZmZkZTViZGM3M2Q5MWRkYjNjNDEuLjU3Zjg5
MjNjNGVkNTRhZjQ5MmNiNGNkOTYyN2M1OThlNWM2MDEyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93
SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
QXV0b0luY3JlbWVudEZsYWdzKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9y
ZUlkKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcAppbmRleCA1ODFhYThjMDE1M2Q5NmUwOTkwODQxYzQ4NjdmNTRmYTVhZmFiZjE3
Li41NGNhMjU1YzI4MDc3YmQ4OGY1MWY5OWE0NDFiMzIxZWJkYjAxNGIwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTU1LDYg
KzU1LDIyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiB9OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
ZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCkBAIC04NSw2ICsxMDEsNyBAQCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
QmFja2luZ1N0bwogICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCiAgICAgLCBt
X2ZhY3RvcnkoZmFjdG9yeSkKICAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihjb29yZGlu
YXRvcikKKyAgICAsIG1fZGVsZXRlUGVuZGluZyhmYWxzZSkKIHsKICAgICBBU1NFUlQoIW1fbmFt
ZS5pc051bGwoKSk7CiAKQEAgLTI1OCw3ICsyNzUsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAg
fQogCi0gICAgd2hpbGUgKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9w
ZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlz
RW1wdHkoKSkgeworICAgIC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERl
cXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAg
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxl
ICghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmIG1fcGVuZGluZ1NldFZlcnNp
b25DYWxscy5pc0VtcHR5KCkgJiYgIW1fZGVsZXRlUGVuZGluZyAmJiAhcGVuZGluZ0RlbGV0ZUNh
bGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBlbmRp
bmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAgICBk
ZWxldGVCYWNraW5nU3RvcmUocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICAg
ICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIC8v
IElmIGEgY2FsbCBnb3QgcmVxdWV1ZWQsIGFib3J0IHByb2Nlc3NpbmcgZnVydGhlciBjYWxscy4K
KyAgICAgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnN3YXAocGVuZGluZ0RlbGV0ZUNhbGxz
KTsKKyAgICAgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnByZXBlbmQocGVuZGluZ0RlbGV0
ZUNhbGxzLnRha2VGaXJzdCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgd2hpbGUgKCFtX2RlbGV0ZVBlbmRpbmcgJiYgbV9wZW5kaW5nRGVsZXRlQ2FsbHMu
aXNFbXB0eSgpICYmICFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1w
dHkoKSkgewogICAgICAgICBSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwg
PSBtX3BlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7CiAgICAgICAgIG9wZW5Db25uZWN0aW9u
KHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCkpOwogICAgIH0KQEAgLTI4NCwxMiArMzE1LDQw
IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAg
ICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgIGlmIChtX2RlbGV0ZVBlbmRpbmcgfHwgIW1fcGVu
ZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNh
Y3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIG1f
cGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tz
KSk7CiAgICAgZWxzZQogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKIH0KIAor
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVCYWNraW5nU3RvcmUoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KQorICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6
OmNyZWF0ZShwcnBDYWxsYmFja3MpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgICAgICBtX2RlbGV0ZVBlbmRp
bmcgPSB0cnVlOworICAgICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lvbkNoYW5nZSBp
ZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAgICAgICAvLyB0aGUgcHJvY2VzcyBv
ZiBjbG9zaW5nLgorICAgICAgICAvLyBodHRwOi8vY3JidWcuY29tLzEwMDY0NQorICAgICAgICBm
b3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VD
YWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsg
KytpdCkKKyAgICAgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOworICAgICAgICBt
X2RlbGV0ZVBlbmRpbmcgPSBmYWxzZTsKKyAgICAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJs
b2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCisgICAgICAgIC8v
IFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAgdG8gZmly
ZS4KKyAgICAgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xMDAxMjMKKyAgICAgICAgaWYgKCFtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7Cisg
ICAgICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIGlmIChtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9u
YW1lKSkKKyAgICAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6bnVsbFZhbHVlKCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICB9Cit9CisKIHZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4g
cHJwQ2FsbGJhY2tzKQogewogICAgIFJlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzID0gcHJwQ2FsbGJhY2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaAppbmRleCBlOGIxMDg0NTAxMzA0Y2QxOGY1ZmY2NmExYWQ0OWU4YWJm
NmFjYmYwLi44MTg3Y2YwZjY0NGRlNzdmMDYwM2NiNmE0ZDdhNDJkMmU4MWMzZTUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTgs
NiArNTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFJlbmFtZSAib3BlbiIgdG8gc29tZXRo
aW5nIG1vcmUgZGVzY3JpcHRpdmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcy4KICAg
ICB2b2lkIG9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQg
b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIGRlbGV0
ZUJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOwogCiAgICAgdmlydHVhbCBT
dHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3RyaW5n
IHZlcnNpb24oKSBjb25zdCB7IHJldHVybiBtX3ZlcnNpb247IH0KQEAgLTExMCw4ICsxMTEsMTMg
QEAgcHJpdmF0ZToKICAgICBjbGFzcyBQZW5kaW5nT3BlbkNhbGw7CiAgICAgRGVxdWU8UmVmUHRy
PFBlbmRpbmdPcGVuQ2FsbD4gPiBtX3BlbmRpbmdPcGVuQ2FsbHM7CiAKKyAgICBjbGFzcyBQZW5k
aW5nRGVsZXRlQ2FsbDsKKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gbV9w
ZW5kaW5nRGVsZXRlQ2FsbHM7CisKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PFJlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4gPiBEYXRhYmFzZUNhbGxiYWNrc1NldDsKICAgICBEYXRhYmFzZUNh
bGxiYWNrc1NldCBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0OworCisgICAgYm9vbCBtX2RlbGV0ZVBl
bmRpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcAppbmRleCBkMjAxNGZlMmZjOTY5OTRmOTk0ZjEzMDIwOWI5ZTI5ZDNhNDhl
NjlhLi42NjdjNWE5MTllNmE4YjYzYWFlNzE5NDNlZGI2M2U0M2UwNGQwMzlmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJ
REJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3Qu
aCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2Uu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpA
QCAtOTgsNiArOTksMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVu
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICByZXR1cm4gcmVx
dWVzdDsKIH0KIAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9y
eTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlz
RG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3Jr
ZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZy
YW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9O
X1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CisgICAgR3JvdXBT
ZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBT
ZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJl
cXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3Jv
dXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0
OworfQorCiBzaG9ydCBJREJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQ
YXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NF
UlQoZmlyc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCA4OTM0MjFkMTgw
OTRkNzM0MGFlMzk0ZGZhOGViMTI2ZjAzYTk5YzY3Li4xN2JmZjFkMWZjYmQyZjAzOWUyYmQ2YWZk
YWJjOWY1ZWM4OTJhYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNDQs
NiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJL
ZXlSYW5nZTsKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVy
c2lvbkNoYW5nZVJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFz
cyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewpAQCAtNTcsNiAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5h
bWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gZGVs
ZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgc2hvcnQgY21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJz
dCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAppbmRleCAyM2ZhODcxZWJhN2UyN2VhZjhjN2E4OGUz
Yjc0ZTdiZjUwNTU1YTQ1Li40MDY4NDkzM2YwYWRiNDUxMGQ4NjJiOGE0ZWVkZGVlOWJkMzcyMzk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKQEAgLTMyLDYgKzMyLDggQEAg
bW9kdWxlIHN0b3JhZ2UgewogCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250
ZXh0XSBJREJSZXF1ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1
dGlvbkNvbnRleHRdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERP
TVN0cmluZyBhbmVtKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7
CiAKICAgICAgICAgc2hvcnQgY21wKGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkK
ICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ0NGQ2YWNk
YmZiYjA3ZjA1YmIyNTNlZWYzNjE1M2FkMTIzNjk4NmIuLjMxNjM3ZTliMmI3OTg3OWNjZjE5N2Uy
ZjY5N2Q4YWMwMTRiNzZhZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEyMiw2ICsxMjIsMzAgQEAgdm9pZCBJREJGYWN0b3J5
QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2EKICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwg
ZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIGNvbnN0IFN0cmluZyB1bmlx
dWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmln
aW4uZ2V0KCkpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1f
ZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9
IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBh
bnkgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCB3ZSBtdXN0IGZpcnN0IGNsb3NlCisgICAg
ICAgIC8vIHRoZW4uCisgICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZUJhY2tpbmdTdG9yZShjYWxs
YmFja3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhp
bmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1
cml0eU9yaWdpbiwgZGF0YURpcik7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VC
YWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9y
ZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVu
dGlmaWVyKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwg
ZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZUJhY2tp
bmdTdG9yZShjYWxsYmFja3MpOworfQorCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURC
RmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgY29u
c3QgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5
T3JpZ2luLmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5oCmluZGV4IDZlZTliYjI0MzAzMzAxZmFjNDE1YWEwNjkwYzYxYmE0ZjEyZDhkZWYu
LjljMmYwN2ZiNzA1NDdhMjEwM2E0Y2FkNzdkYjU2ZTU5M2YxYzQ5NGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpcik7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBu
YW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
OwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGM0
MDE4ZWZmOWRkNjRkYmM5Yjc5NDJlNTBjM2IwMjU1MjQyNzc5MzguLmU5MjU0NWQyY2ZmNjM5ZWYw
N2VkYjEwNjFkYmU1MzZjYjgyMTg5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQ
YXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
ID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGZhNGU1YjM0ODI2YjFk
OTU5ZDU2OTI1ZGJmODQ2ZTVhNDIwMDFlNjguLmIwMDExOWUyODlmMjdkYzk2YjkwN2JlYTg0OWFk
NDhjNmQwMGVhZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmNwcApAQCAtMjM0LDYgKzIzNCwzOCBAQCBib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OnNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdAogICAgIHJldHVybiB0cnVlOwogfQogCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9jdXJyZW50
VHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMpOworICAgIHRyYW5zYWN0aW9uLT5i
ZWdpbigpOworCisgICAgaW50NjRfdCBkYXRhYmFzZUlkOworICAgIFN0cmluZyB2ZXJzaW9uOwor
ICAgIGlmICghZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lvbiwgZGF0YWJh
c2VJZCkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIC8vIFdlIGNhbiBvbmx5IGRlbGV0ZSB0aGUgbWV0YSBkYXRh
LCBpZiB0aGUgZGF0YWJhc2UgY29udGFpbnMgbm8gb2JqZWN0IHN0b3Jlcy4KKyAgICBWZWN0b3I8
aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisgICAg
VmVjdG9yPFN0cmluZz4ga2V5UGF0aHM7CisgICAgVmVjdG9yPGJvb2w+IGF1dG9JbmNyZW1lbnRG
bGFnczsKKyAgICBnZXRPYmplY3RTdG9yZXMoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZHMsIG5h
bWVzLCBrZXlQYXRocywgYXV0b0luY3JlbWVudEZsYWdzKTsKKyAgICBmb3IgKFZlY3RvcjxpbnQ2
NF90Pjo6aXRlcmF0b3Igb2JqZWN0U3RvcmVJZCA9IG9iamVjdFN0b3JlSWRzLmJlZ2luKCk7IG9i
amVjdFN0b3JlSWQgIT0gb2JqZWN0U3RvcmVJZHMuZW5kKCk7ICsrb2JqZWN0U3RvcmVJZCkKKyAg
ICAgICAgZGVsZXRlT2JqZWN0U3RvcmUoZGF0YWJhc2VJZCwgKm9iamVjdFN0b3JlSWQpOworCisg
ICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRl
bnRpZmllciwgbmFtZSk7CisgICAgbV9kYi0+cmVtb3ZlKGtleSk7CisgICAgbV9kYi0+cmVtb3Zl
KERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRh
S2V5OjprVXNlclZlcnNpb24pKTsKKworICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRh
VHlwZShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BL
ZXksIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBtZXRhRGF0YVR5cGUpCiB7CiAgICAg
aWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0g
MCkKQEAgLTEzNzcsOCArMTQwOSw2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFj
a2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwKICAgICByZXR1
cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOwogfQogCi0vLyBGSVhNRTogZGVsZXRlRGF0
YWJhc2Ugc2hvdWxkIGJlIHBhcnQgb2YgSURCQmFja2luZ1N0b3JlLgotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggYzFkM2FjNGRiZjk4ZmJmZWQ1
NDg5MjQ4NTc4ZWM4ZDJmM2I4NGUxZS4uODdiMDk3ZDA4YjY0Mjk5YTNiNTJlOGUyM2Q4MjNhZmFj
ZDc2YzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRE
YXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJv
b2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcm
IGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNp
b24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CisgICAgdmlydHVhbCBib29s
IGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3Vu
ZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtl
eVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKICAgICB2aXJ0
dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2
NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVz
dC5jcHAKaW5kZXggNjQzMGQyNTExMmMyNTNhYzExMjg2YWMwOTU0NDc2YmEwNzI1MWIyNi4uNTFj
YWI4YzQ3NjUzYjJiNjk2ZWFhYmRjN2ZiMGM5ODNhOGEzMWRiYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0yOTYsOCArMjk2LDggQEAgYm9vbCBJREJSZXF1ZXN0Ojpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVChldmVudC0+
dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBl
dmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5i
bG9ja2VkRXZlbnQpOwogICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNw
YXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CiAKLSAgICAvLyBJZiB0aGUg
cmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNvciwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAg
IGlmIChtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlw
ZSAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkK
KyAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNvciwgb3IgYSBvbkJsb2Nr
ZWQgZXZlbnQsIHRoZW4gd2UnbGwgZmlyZSBhZ2Fpbi4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAh
PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50ICYmIG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBl
KCkgIT0gSURCQW55OjpJREJDdXJzb3JUeXBlICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55
OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQogICAgICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKIAog
ICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhNjJlNTBlYmIxNWE1MmQ1
NTU0YzYzNzA0ZTQ5NGFiOTU1NjIwMGEuLjdiNjAzOGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0ZGNl
ZWU0YTBmOWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3Rv
cnlCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwCkBAIC05MSw2ICs5MSwxOSBAQCB2b2lkIElEQkZhY3RvcnlC
YWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gYwogICAgIG1fd2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJh
Y2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAordm9p
ZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIp
Cit7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJh
bWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBX
ZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJW
aWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+
YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJt
aXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbV93ZWJJREJGYWN0b3J5LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURC
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlC
YWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuaAppbmRleCBiYWYxZTA1ZTJjOTkyZjkyMWM3ZGQyN2Q0ZmQzMjZlOGE2YWE4NmVk
Li5lMTRiOGNlYTk4MmYzMTdlNDFkNDNhOGM5M2YxZDdkNjFmNjcxYzMyIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00
Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVz
KFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpT
ZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsK
ICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4s
IFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJD
b3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURC
RmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4IDFjMDk2OGE1NTFjMmM4NDBiMDkwMjU0YzZhZDgw
NGQyMTMzZjMwN2UuLjVmM2Q1NWQxZDdjMWQxMDVlYzU2ZGUxNDgwMWIwZGVlMTA1ZjY3NjggMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAK
QEAgLTczLDYgKzczLDEzIEBAIHZvaWQgV2ViSURCRmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywKICAgICBtX2lkYkZhY3Rv
cnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIo
Y2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7CiB9CiAKK3ZvaWQgV2ViSURCRmFjdG9yeUlt
cGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKQoreworICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURp
cjsKKworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIElEQkNh
bGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0
aCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJGYWN0b3J5SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9y
eUltcGwuaAppbmRleCAzZTAxZDFhNjNjODkyNDA2MWY1N2M4NTc3YWVhZjViYjQxNmJjNmMyLi5i
M2U0NzRkZjkyNTVlODc3ZjJmZjZkMGU2MzEwMzU1NjI0NmQxNzE5IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKQEAgLTQ2LDYgKzQ2LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpcik7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1l
LCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwg
Y29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJh
c2UoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1
cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJp
dmF0ZToKICAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZT4gbV9pZGJGYWN0b3J5QmFja2VuZDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmODg0OGVhYWJlMGViYjZjZDRhZWM0MjJk
NTU0OWNhZjhkM2E1ZjBmLi4yYjcxMTQ0M2RjMzVlZmMzODU3NWI0NmRiZTJjODMzNGVmYWY1ZWM3
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMTcgIEpvY2hlbiBFaXNpbmdlciAgPGpv
Y2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElEQkZhY3RvcnkuZGVsZXRl
RGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQ6IFVwZGF0ZWQu
CisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbDogVXBkYXRl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1k
ZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRh
dGFiYXNlLmh0bWw6IEFkZGVkLgorCiAyMDExLTEwLTE3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBh
cHBsZS5jb20+CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMjkzOTI5PiBSRUdSRVNTSU9O
IChyOTc1MjUpOiBpQ2hhdCB0cmFuc2NyaXB0IGhhcyBob3Jpem9udGFsIHNjcm9sbCBiYXIgd2hl
biB0aGUgY29udmVyc2F0aW9uIGluY2x1ZGVzIGEgd2lkZSBpbWFnZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0
CmluZGV4IGU5Y2Y3YTIwMzljYTZkOWZlNGY5NWRhMTEzMTQ2OTE1Yjg5MjE1YTIuLjk1YTI5NzU0
ZGE4N2JlZTgwMzdiMDU0ZDg1ZTNkMzhmMDhiYTVmOWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKQEAg
LTgsOCArOCw3IEBAIFBBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFsc2UKIFBBU1MgdHlwZW9m
IGluZGV4ZWREQi5vcGVuID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlwZW9mIGluZGV4
ZWREQi5jbXAgPT09ICdmdW5jdGlvbicgaXMgdHJ1ZQogUEFTUyB0eXBlb2YgaW5kZXhlZERCLmdl
dERhdGFiYXNlTmFtZXMgPT09ICdmdW5jdGlvbicgaXMgdHJ1ZQotZGVsZXRlRGF0YWJhc2UgQVBJ
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNvIHRoaXMgd2lsbCBmYWlsOgotRkFJTCB0eXBlb2Yg
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlID09PSAnZnVuY3Rpb24nIHNob3VsZCBiZSB0cnVlLiBX
YXMgZmFsc2UuCitQQVNTIHR5cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5j
dGlvbicgaXMgdHJ1ZQogaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQogZGF0YWJhc2VOYW1l
cyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyBmYWxzZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwKaW5kZXggMjg1YTA2YzNl
MDczMTBmYmEwYWY5ZjdkZmEzMDdiZDNmZjk3MDc1Zi4uMjI2NWM5NmU2NWM4Y2VlYmI3OTgwNDQy
ZTc2YTA5YzgxYTc0ZjY3YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9mYWN0b3J5LWJhc2ljcy5odG1sCkBAIC0yMyw3ICsyMyw2IEBAIGZ1bmN0aW9uIHRlc3QoKQog
ICAgIHNob3VsZEJlVHJ1ZSgidHlwZW9mIGluZGV4ZWREQi5jbXAgPT09ICdmdW5jdGlvbiciKTsK
ICAgICBzaG91bGRCZVRydWUoInR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcyA9PT0g
J2Z1bmN0aW9uJyIpOwogCi0gICAgZGVidWcoImRlbGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0
IGltcGxlbWVudGVkLCBzbyB0aGlzIHdpbGwgZmFpbDoiKTsKICAgICBzaG91bGRCZVRydWUoInR5
cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5jdGlvbiciKTsKIAogICAgIG5h
bWUgPSAnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnOwpAQCAtNjAsOCArNTksNiBA
QCBmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczIoKQogICAgIHNob3VsZEJlVHJ1ZSgi
ZGF0YWJhc2VOYW1lcy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsKICAgICBzaG91bGRCZUZh
bHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNU
JykiKTsKIAotICAgIC8vIEZJWE1FOiB0ZXN0IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRh
YmFzZU5hbWUpCi0KICAgICBkb25lKCk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNWUzYmY3ZmI2NjA0YmFhZDg0M2NhMzBhMDAyY2UxZjEyZDBjYTFk
NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjkgQEAKK1Rlc3QgSW5k
ZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCit3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVs
ZXRlJykKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNp
b24nKQordHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlz
IHRydWUKK0RlbGV0ZWQgYWxsIG9iamVjdCBzdG9yZXMuCitzdG9yZSA9IGRiLmNyZWF0ZU9iamVj
dFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKQorc3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4TmFtZScs
ICcnKQorUEFTUyBzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSBpcyB0cnVl
CitzdG9yZS5hZGQoJ3ZhbHVlJywgJ2tleScpCitkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0
SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURX0pCitzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0
b3JlKCdzdG9yZU5hbWUnKQorc3RvcmUuZ2V0KCdrZXknKQorUEFTUyBldmVudC50YXJnZXQucmVz
dWx0IGlzICJ2YWx1ZSIKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK3JlcXVlc3QgPSB3
ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCit3ZWJr
aXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykKK2RiID0gZXZlbnQudGFyZ2V0
LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQorRkFJTCBkYi5vYmplY3RTdG9y
ZU5hbWVzLmxlbmd0aCBzaG91bGQgYmUgMC4gV2FzIDEuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRh
YmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhODk5ZWQ2NDAzM2U2
OTY3NzBiMzJiYzUxNmYwNGQzYThmOTFmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw3MCBAQAorVGVzdCB0aGUgZGVsZXRlRGF0YWJhc2UgY2Fs
bCBhbmQgaXQncyBpbnRlcmFjdGlvbiB3aXRoIG9wZW4vc2V0VmVyc2lvbgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5k
b3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWRE
QiA9PSBudWxsIGlzIGZhbHNlCisKK1RFU1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3Bl
biBoYW5kbGVzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJh
c2UnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0
ZWx5CisnZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkJworJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJh
c2Uub25zdWNjZXNzJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaC5vcGVuLGgu
b3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0
YWJhc2Uub25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorCitURVNU
OiBkZWxldGVEYXRhYmFzZSBub3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xvc2UgaW1tZWRpYXRl
bHkKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBz
ID0gW10KKydoLm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZScKKydo
Lm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcgaW1tZWRpYXRlbHkKKydoLmNsb3NlJwor
J2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitO
T1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQg
c3RlcDsgY3JidWcuY29tLzEwMDEyMworRkFJTCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91
bGQgYmUgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25j
aGFuZ2UsaC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuIFdhcyBoLm9wZW4saC5vcGVu
Lm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSxoLm9udmVyc2lvbmNoYW5nZSxoLmNsb3NlLGRlbGV0
ZURhdGFiYXNlLm9uYmxvY2tlZCxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuCisKK1RFU1Q6IGRl
bGV0ZURhdGFiYXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBp
cyBydW5uaW5nCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnaC5zZXRWZXJzaW9u
JworJ2RlbGV0ZURhdGFiYXNlJworJ2guc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaC5zZXRWZXJz
aW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xv
c2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydo
LmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRv
U3RyaW5nKCkgaXMgImgub3BlbixoLm9wZW4ub25zdWNjZXNzLGguc2V0VmVyc2lvbixkZWxldGVE
YXRhYmFzZSxoLnNldFZlcnNpb24ub25zdWNjZXNzLGguc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1j
b21wbGV0ZSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsaC5jbG9z
ZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisKK1RFU1Q6IG11bHRpcGxlIGRlbGV0ZURhdGFi
YXNlIGNhbGxzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJh
c2UnCisnZGVsZXRlRGF0YWJhc2UnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5n
LCBidXQgbm90IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkJworJ2gub252
ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0
ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydoLmNsb3NlJworJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJh
c2Uub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJ
TCB3aXRoIGV4dHJhIGJvZ3VzIGgub252ZXJzaW9uY2hhbmdlL2guY2xvc2Ugc3RlcHM7IGNyYnVn
LmNvbS8xMDA2NDUKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgub3Bl
bixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGRlbGV0ZURhdGFiYXNlLGgub252ZXJz
aW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxkZWxldGVEYXRhYmFzZS5vbmJsb2Nr
ZWQsaC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2Uub25zdWNj
ZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsZGVsZXRlRGF0
YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkLGgub252ZXJz
aW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLmNsb3NlLGguY2xvc2UsZGVsZXRl
RGF0YWJhc2Uub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0
aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVk
YXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTBhMzQxMmQ5ZWIxOTJmMzY5
NTkyZDAxMDlkMzU3NzY2NTYwYTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbApA
QCAtMCwwICsxLDIzNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rp
b24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIGRlbGV0
ZURhdGFiYXNlIGNhbGwgYW5kIGl0J3MgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZlcnNpb24i
KTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBDb25uZWN0aW9uKGlkKSB7CisgICAg
aWQgPSBTdHJpbmcoaWQpOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLm9wZW4gPSBm
dW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIici
ICsgaWQgKyAiLm9wZW4nIikpOworICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERCLm9wZW4od2lu
ZG93LmRibmFtZSk7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
c2VsZi5oYW5kbGUgPSBlLnRhcmdldC5yZXN1bHQ7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMu
cHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vcGVuLm9uc3VjY2VzcyciKSk7CisgICAgICAg
ICAgICBzZWxmLmhhbmRsZS5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub252ZXJz
aW9uY2hhbmdlJyIpKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9udmVyc2lv
bikgeyBvcHRzLm9udmVyc2lvbi5jYWxsKHNlbGYpOyB9CisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChz
ZWxmKTsgfQorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLmNsb3NlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLmNs
b3NlJyIpKTsKKyAgICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB9OworCisgICAgdGhp
cy5zZXRWZXJzaW9uID0gZnVuY3Rpb24ob3B0cykgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVz
aChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uJyIpKTsKKyAgICAgICAgdmFyIHJl
cSA9IHRoaXMuaGFuZGxlLnNldFZlcnNpb24oU3RyaW5nKHdpbmRvdy52ZXIrKykpOworICAgICAg
ICByZXEub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMu
cHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYWJvcnQnIikpOworICAg
ICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmFib3J0KSB7IG9wdHMub25hYm9ydC5jYWxsKHNl
bGYpOyB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZSkg
eworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIu
c2V0VmVyc2lvbi5vbmJsb2NrZWQnIikpOworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5v
bmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAg
ICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5z
dGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25zdWNjZXNzJyIp
KTsKKyAgICAgICAgICAgIGlmIChzZWxmLmhhbmRsZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5z
KCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpKSB7CisgICAgICAgICAgICAgICAgc2VsZi5oYW5k
bGUuZGVsZXRlT2JqZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YXIgc3RvcmUgPSBzZWxmLmhhbmRsZS5jcmVhdGVPYmplY3RT
dG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9
IDA7CisgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7IC8vIEtlZXAgdGhpcyB0cmFuc2FjdGlv
biBydW5uaW5nIGZvciBhIHdoaWxlCisgICAgICAgICAgICBmdW5jdGlvbiBkb19hc3luY19wdXRz
KCkgeworICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5wdXQoY291bnQsIGNvdW50KTsK
KyAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
ICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoKytjb3VudCA8IDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b19hc3luY19wdXRzKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5z
ZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJyIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwoc2Vs
Zik7IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNl
dFZlcnNpb24ub25lcnJvciciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJy
b3IpIHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICB9OworfQor
CitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZShuYW1lLCBvcHRzKSB7CisgICAgd2luZG93LnN0ZXBz
LnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlJyIpKTsKKyAgICB2YXIgcmVxID0gaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlv
biAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0
YWJhc2Uub25zdWNjZXNzJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3Mp
IHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAgIH07CisgICAgcmVxLm9uZXJyb3Ig
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCIn
ZGVsZXRlRGF0YWJhc2Uub25lcnJvciciKSk7CisgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25l
cnJvcikgeyBvcHRzLm9uZXJyb3IuY2FsbChzZWxmKTsgfQorICAgIH07CisgICAgcmVxLm9uYmxv
Y2tlZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRM
b2coIidkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnIikpOworICAgICAgICBpZiAob3B0cyAmJiBv
cHRzLm9uYmxvY2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAgfTsKK30K
KworLy8gcnVuIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgdGFrZSBhIGNvbnRpbnVhdGlvbiBmdW5j
dGlvbgorZnVuY3Rpb24gcnVuU3RlcHMoY29tbWFuZHMpIHsKKyAgICBpZiAoY29tbWFuZHMubGVu
Z3RoKSB7CisgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHMuc2hpZnQoKTsKKyAgICAgICAg
Y29tbWFuZChmdW5jdGlvbigpIHsgcnVuU3RlcHMoY29tbWFuZHMpOyB9KTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERC
ID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5t
b3pJbmRleGVkREI7Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsK
KyAgICB0ZXN0MSgpOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBkZWJ1ZygiIik7Cisg
ICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzIik7
CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24oImgiKTsK
KyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNzOiBkb05l
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGggY2xv
c2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVuY3Rpb24oZG9O
ZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0pOworICAg
IGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
d2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJoLm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNj
ZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDIoKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVT
VDogZGVsZXRlRGF0YWJhc2Ugbm90IGJsb2NrZWQgd2hlbiBoYW5kbGVzIGNsb3NlIGltbWVkaWF0
ZWx5Iik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Mic7IHdpbmRvdy52
ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24o
ImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNz
OiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZl
cnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nIGltbWVkaWF0ZWx5Iik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVuY3Rp
b24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0p
OworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxs
IEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQgc3RlcDsgY3Ji
dWcuY29tLzEwMDEyMyIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5z
dGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5vcGVu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3QzKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0MygpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURh
dGFiYXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5u
aW5nIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52
ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24o
ImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNz
OiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAg
IGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgICAgICBm
dW5jdGlvbihkb05leHQpIHsgaC5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LAorICAgICAgICAg
ICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2Uod2luZG93LmRibmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9
LAorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaC5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVsZXRlRGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZl
cnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5zZXRW
ZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0
YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJp
bmcoKSk7CisgICAgICAgIHRlc3Q0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsK
KyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IG11bHRpcGxlIGRlbGV0ZURhdGFiYXNl
IGNhbGxzIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRv
dy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rp
b24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNj
ZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zygi
ICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVu
Y3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUpOyBkb05leHQoKTsg
fSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5kb3cuZGJu
YW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0
fSk7IH0sCisgICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAg
ICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaC5vbnZlcnNpb25jaGFu
Z2UvaC5jbG9zZSBzdGVwczsgY3JidWcuY29tLzEwMDY0NSIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0
ZURhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJh
c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxvY2tl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxv
Y2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgZG9u
ZSgpOworICAgIH0KK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3Qo
KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTliODk5YjU2YTk4ZmYzZDhlOWU4MjZjYWEwZjdiYjQ1YzJmYmYzNAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRl
c3QgSW5kZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuIik7CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNldFZlcnNp
b24oKQoreworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7
CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24n
KSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRXhpc3Rpbmc7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0
ZUV4aXN0aW5nKCkKK3sKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7
CisKKyAgICBkZWxldGVBbGxPYmplY3RTdG9yZXMoZGIpOworCisgICAgc3RvcmUgPSBldmFsQW5k
TG9nKCJzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIpOwor
CisgICAgd2luZG93LmluZGV4ID0gZXZhbEFuZExvZygic3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4
TmFtZScsICcnKSIpOworICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUuaW5kZXhOYW1lcy5jb250YWlu
cygnaW5kZXhOYW1lJykiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5hZGQo
J3ZhbHVlJywgJ2tleScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXRWYWx1ZTsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gZ2V0VmFsdWUoKQoreworICAgIHRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygiZGIudHJhbnNh
Y3Rpb24oe21vZGU6IHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEV9KSIpOworICAgIHRy
YW5zYWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2YXIgc3Rv
cmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5h
bWUnKSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCgna2V5JykiKTsK
KyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGFkZEluZGV4OworICAgIHJlcXVlc3Qub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBhZGRJbmRleCgpCit7Cisg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC50YXJnZXQucmVzdWx0IiwgInZhbHVlIik7
CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24n
KSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRGF0YWJhc2U7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0
ZURhdGFiYXNlKCkKK3sKKyAgICBkYi5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbigpIHsgZGIu
Y2xvc2UoKTsgfQorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gd2Via2l0SW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gcmVvcGVuRGF0YWJhc2U7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5l
eHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHJlb3BlbkRhdGFiYXNlKCkKK3sK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNl
LXRvLWRlbGV0ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBzdGFydFNldFZlcnNpb25B
Z2FpbjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30K
KworZnVuY3Rpb24gc3RhcnRTZXRWZXJzaW9uQWdhaW4oKQoreworICAgIHJkYiA9IGV2YWxBbmRM
b2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRM
b2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IHZlcmlmeU5vdEZvdW5kOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworfQorCitmdW5jdGlvbiB2ZXJpZnlOb3RGb3VuZCgpCit7CisgICAgc2hvdWxk
QmUoImRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3RoIiwgIjAiKTsKKworICAgIGRvbmUoKTsKK30K
KwordGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111524</attachid>
            <date>2011-10-18 16:28:03 -0700</date>
            <delta_ts>2011-10-25 10:29:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111019012800.patch</filename>
            <type>text/plain</type>
            <size>45081</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzNkMGIzOTY0YmIzNWI1
OGEyNGYyMjJmM2JhMmNhY2FkMjBjMzVhLi5kOTVjYmM0YzMwMjA2OWIyY2NhZTA2NDYxOTdmM2Jl
NDEwYmYxNmZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMTAtMTcgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnBy
b2Nlc3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b3BlbkNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6Cisg
ICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICog
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudCk6CisKIDIwMTEtMTAtMTQgIENocmlzIE1hcnJp
biAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFRocm90dGxlIHJhdGUgb2YgcmVxdWVz
dEFuaW1hdGlvbkZyYW1lIHdoZW4gcGFnZSBpcyBub3QgdmlzaWJsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA1MGUyNWUzMjA5MDYxY2M5ZjQ4YWFkNGQ0NThhNzlmOWI5YmE1NDBkLi42
ZWNjZDhkMTY3M2NiNjhiNGVmYmE1ZDIzZWZlMjEzMjM3OTllMmY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTEwLTE3ICBKb2NoZW4gRWlzaW5nZXIg
IDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRl
bGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02MjYyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJ
REJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2Up
OgorICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEwLTE3ICBZdXJ5
IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
V2ViIEluc3BlY3RvcjogZG9uJ3QgY2hlY2sgZm9yIGRlYnVnZ2VyIHBhdXNlIGRldGFpbHMgaW4g
aW50ZXJhY3RpdmUgdWkgdGVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IDZlMTNmNGZhNjFjNGEyMWQ0MmMzZmZkZTViZGM3M2Q5MWRkYjNjNDEuLjU3Zjg5
MjNjNGVkNTRhZjQ5MmNiNGNkOTYyN2M1OThlNWM2MDEyMDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtNDksNiArNDksNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCkgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93
SWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBu
YW1lKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
QXV0b0luY3JlbWVudEZsYWdzKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9y
ZUlkKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcAppbmRleCA1ODFhYThjMDE1M2Q5NmUwOTkwODQxYzQ4NjdmNTRmYTVhZmFiZjE3
Li40MTUwMjdkNDUwYWE1ZjY3NjJkYmI1ZDVkNGMwNDEwMjFmYjNiYmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTU1LDYg
KzU1LDIyIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7
CiB9OwogCitjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2FsbCA6
IHB1YmxpYyBSZWZDb3VudGVkPFBlbmRpbmdEZWxldGVDYWxsPiB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IGNyZWF0ZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
ZW5kaW5nRGVsZXRlQ2FsbChjYWxsYmFja3MpKTsKKyAgICB9CisgICAgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcygpIHsgcmV0dXJuIG1fY2FsbGJhY2tzOyB9CisKK3ByaXZhdGU6
CisgICAgUGVuZGluZ0RlbGV0ZUNhbGwoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cykKKyAgICAgICAgOiBtX2NhbGxiYWNrcyhjYWxsYmFja3MpCisgICAgeworICAgIH0KKyAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBtX2NhbGxiYWNrczsKK307CisKIGNsYXNzIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OlBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA6IHB1YmxpYyBSZWZDb3VudGVkPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBl
bmRpbmdTZXRWZXJzaW9uQ2FsbD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxi
YWNrcz4gZGF0YWJhc2VDYWxsYmFja3MpCkBAIC04NSw2ICsxMDEsNyBAQCBJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
QmFja2luZ1N0bwogICAgICwgbV9pZGVudGlmaWVyKHVuaXF1ZUlkZW50aWZpZXIpCiAgICAgLCBt
X2ZhY3RvcnkoZmFjdG9yeSkKICAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihjb29yZGlu
YXRvcikKKyAgICAsIG1fZGVsZXRlUGVuZGluZyhmYWxzZSkKIHsKICAgICBBU1NFUlQoIW1fbmFt
ZS5pc051bGwoKSk7CiAKQEAgLTI1OCw3ICsyNzUsMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAg
fQogCi0gICAgd2hpbGUgKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9w
ZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlz
RW1wdHkoKSkgeworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwg
IW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgbV9kZWxldGVQZW5kaW5nKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBQZW5kaW5nIGNhbGxzIG1heSBiZSByZXF1ZXVlZC4K
KyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gcGVuZGluZ0RlbGV0ZUNhbGxz
OworICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnN3YXAocGVuZGluZ0RlbGV0ZUNhbGxzKTsKKyAg
ICB3aGlsZSAoIXBlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRy
PFBlbmRpbmdEZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IHBlbmRpbmdEZWxldGVDYWxs
cy50YWtlRmlyc3QoKTsKKyAgICAgICAgZGVsZXRlQmFja2luZ1N0b3JlKHBlbmRpbmdEZWxldGVD
YWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFu
Z2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8fCBt
X2RlbGV0ZVBlbmRpbmcgfHwgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7
CiAgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVuQ2FsbCA9IG1fcGVu
ZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKICAgICAgICAgb3BlbkNvbm5lY3Rpb24ocGVuZGlu
Z09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CiAgICAgfQpAQCAtMjg0LDEyICszMTUsNDAgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+IGNhbGxiYWNrcykKIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuQ29u
bmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIGlmICht
X3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25D
YWxscy5pc0VtcHR5KCkpCisgICAgaWYgKG1fZGVsZXRlUGVuZGluZyB8fCAhbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8
fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKICAgICAgICAgbV9wZW5kaW5n
T3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKICAg
ICBlbHNlCiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOwogfQogCit2b2lkIElE
QkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZUJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVh
dGUocHJwQ2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIG1fZGVsZXRlUGVuZGlu
ZyA9IHRydWU7CisgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvblZlcnNpb25DaGFuZ2UgaWYgdGhl
cmUgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgaW4KKyAgICAvLyB0aGUgcHJvY2VzcyBvZiBjbG9zaW5n
LgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwNjQ1CisgICAgZm9yIChEYXRhYmFzZUNhbGxi
YWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmJlZ2lu
KCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQpCisgICAgICAgICgq
aXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOworICAgIG1fZGVsZXRlUGVuZGluZyA9IGZhbHNlOwor
ICAgIC8vIEZJWE1FOiBPbmx5IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5l
Y3Rpb25zIGFmdGVyIHRoZQorICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVk
LCBub3QganVzdCBzZXQgdXAgdG8gZmlyZS4KKyAgICAvLyBodHRwOi8vY3JidWcuY29tLzEwMDEy
MworICAgIGlmICghbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
bV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2Fs
bGJhY2tzKSk7CisgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgaWYgKG1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX25hbWUp
KQorICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51
bGxWYWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50
ZXJuYWwgZXJyb3IuIikpOworfQorCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNsb3Nl
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IHBycENhbGxiYWNrcykKIHsKICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKaW5kZXgg
ZThiMTA4NDUwMTMwNGNkMThmNWZmNjZhMWFkNDllOGFiZjZhY2JmMC4uODE4N2NmMGY2NDRkZTc3
ZjA2MDNjYjZhNGQ3YTQyZDJlODFjM2U1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTU4LDYgKzU4LDcgQEAgcHVibGljOgogICAg
IC8vIEZJWE1FOiBSZW5hbWUgIm9wZW4iIHRvIHNvbWV0aGluZyBtb3JlIGRlc2NyaXB0aXZlLCBs
aWtlIHJlZ2lzdGVyRnJvbnRFbmRDYWxsYmFja3MuCiAgICAgdm9pZCBvcGVuKFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKICAgICB2b2lkIG9wZW5Db25uZWN0aW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CisgICAgdm9pZCBkZWxldGVCYWNraW5nU3RvcmUoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgeyByZXR1
cm4gbV92ZXJzaW9uOyB9CkBAIC0xMTAsOCArMTExLDEzIEBAIHByaXZhdGU6CiAgICAgY2xhc3Mg
UGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9w
ZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7CisgICAgRGVx
dWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOworCiAg
ICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0
YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNh
bGxiYWNrc1NldDsKKworICAgIGJvb2wgbV9kZWxldGVQZW5kaW5nOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5kZXggZDIw
MTRmZTJmYzk2OTk0Zjk5NGYxMzAyMDliOWUyOWQzYTQ4ZTY5YS4uNjY3YzVhOTE5ZTZhOGI2M2Fh
ZTcxOTQzZWRiNjNlNDNlMDRkMDM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rvcnku
Y3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVkZSAiSURC
S2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURCVmVyc2lv
bkNoYW5nZVJlcXVlc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3Vw
LmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTk4LDYgKzk5LDI4IEBAIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKK1Bhc3NSZWZQdHI8
SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQq
Pihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVudC0+cGFn
ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+
IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50LCBJREJB
bnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0dGluZ3Mg
PSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKyAgICBtX2ZhY3Rv
cnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+c2VjdXJp
dHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4ZWREQkRh
dGFiYXNlUGF0aCgpKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwogc2hvcnQgSURCRmFjdG9y
eTo6Y21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29u
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKGZpcnN0KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmgKaW5kZXggODkzNDIxZDE4MDk0ZDczNDBhZTM5NGRmYThlYjEyNmYw
M2E5OWM2Ny4uMTdiZmYxZDFmY2JkMmYwMzllMmJkNmFmZGFiYzlmNWVjODkyYWM4MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeSA6IHB1YmxpYyBS
ZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NS
ZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAg
IHNob3J0IGNtcChQYXNzUmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURCS2V5PiBz
ZWNvbmQsIEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJGYWN0b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5p
ZGwKaW5kZXggMjNmYTg3MWViYTdlMjdlYWY4YzdhODhlM2I3NGU3YmY1MDU1NWE0NS4uNDA2ODQ5
MzNmMGFkYjQ1MTBkODYyYjhhNGVlZGRlZTliZDM3MjM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnkuaWRsCkBAIC0zMiw2ICszMiw4IEBAIG1vZHVsZSBzdG9yYWdlIHsKIAogICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBvcGVuKGlu
IERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlv
bik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdCBkZWxldGVEYXRhYmFzZShpbiBET01TdHJpbmcgYW5lbSkKKyAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogCiAgICAgICAgIHNob3J0IGNtcChp
biBJREJLZXkgZmlyc3QsIGluIElEQktleSBzZWNvbmQpCiAgICAgICAgICAgICByYWlzZXMgKElE
QkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NDRkNmFjZGJmYmIwN2YwNWJiMjUzZWVmMzYxNTNh
ZDEyMzY5ODZiLi4zMTYzN2U5YjJiNzk4NzljY2YxOTdlMmY2OTdkOGFjMDE0Yjc2YWQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCkBA
IC0xMjIsNiArMTIyLDMwIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAgICAgbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7
CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQ
dHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikKK3sKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNvbXB1dGVV
bmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAgIElEQkRh
dGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5maW5k
KHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2VuZE1hcC5l
bmQoKSkgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRvIHRoZSBk
YXRhYmFzZSwgd2UgbXVzdCBmaXJzdCBjbG9zZQorICAgICAgICAvLyB0aGVuLgorICAgICAgICBp
dC0+c2Vjb25kLT5kZWxldGVCYWNraW5nU3RvcmUoY2FsbGJhY2tzKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNob3VsZCBi
ZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJh
Y2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFEaXIpOwor
ICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJE
YXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAi
SW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRy
PElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNhY3Rpb25D
b29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgbV9kYXRhYmFz
ZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5nZXQoKSk7
CisgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVCYWNraW5nU3RvcmUoY2FsbGJhY2tzKTsKK30K
KwogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewogICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmll
ciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA2ZWU5YmIy
NDMwMzMwMWZhYzQxNWFhMDY5MGM2MWJhNGYxMmQ4ZGVmLi45YzJmMDdmYjcwNTQ3YTIxMDNhNGNh
ZDc3ZGI1NmU1OTNmMWM0OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJG
YWN0b3J5QmFja2VuZEltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBjNDAxOGVmZjlkZDY0ZGJjOWI3OTQyZTUw
YzNiMDI1NTI0Mjc3OTM4Li5lOTI1NDVkMmNmZjYzOWVmMDdlZGIxMDYxZGJlNTM2Y2I4MjE4OTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCBmYTRlNWIzNDgyNmIxZDk1OWQ1NjkyNWRiZjg0NmU1YTQyMDAx
ZTY4Li5iMDAxMTllMjg5ZjI3ZGM5NmI5MDdiZWE4NDlhZDQ4YzZkMDBlYWQ3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIz
NCw2ICsyMzQsMzggQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgaWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNh
Y3Rpb24+IHRyYW5zYWN0aW9uID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246
OmNyZWF0ZSh0aGlzKTsKKyAgICB0cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3Qg
ZGF0YWJhc2VJZDsKKyAgICBTdHJpbmcgdmVyc2lvbjsKKyAgICBpZiAoIWV4dHJhY3RJREJEYXRh
YmFzZU1ldGFEYXRhKG5hbWUsIHZlcnNpb24sIGRhdGFiYXNlSWQpKSB7CisgICAgICAgIHRyYW5z
YWN0aW9uLT5yb2xsYmFjaygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICAv
LyBXZSBjYW4gb25seSBkZWxldGUgdGhlIG1ldGEgZGF0YSwgaWYgdGhlIGRhdGFiYXNlIGNvbnRh
aW5zIG5vIG9iamVjdCBzdG9yZXMuCisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRz
OworICAgIFZlY3RvcjxTdHJpbmc+IG5hbWVzOworICAgIFZlY3RvcjxTdHJpbmc+IGtleVBhdGhz
OworICAgIFZlY3Rvcjxib29sPiBhdXRvSW5jcmVtZW50RmxhZ3M7CisgICAgZ2V0T2JqZWN0U3Rv
cmVzKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWRzLCBuYW1lcywga2V5UGF0aHMsIGF1dG9JbmNy
ZW1lbnRGbGFncyk7CisgICAgZm9yIChWZWN0b3I8aW50NjRfdD46Oml0ZXJhdG9yIG9iamVjdFN0
b3JlSWQgPSBvYmplY3RTdG9yZUlkcy5iZWdpbigpOyBvYmplY3RTdG9yZUlkICE9IG9iamVjdFN0
b3JlSWRzLmVuZCgpOyArK29iamVjdFN0b3JlSWQpCisgICAgICAgIGRlbGV0ZU9iamVjdFN0b3Jl
KGRhdGFiYXNlSWQsICpvYmplY3RTdG9yZUlkKTsKKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBr
ZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIsIG5hbWUpOworICAgIG1f
ZGItPnJlbW92ZShrZXkpOworICAgIG1fZGItPnJlbW92ZShEYXRhYmFzZU1ldGFEYXRhS2V5Ojpl
bmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a1VzZXJWZXJzaW9uKSk7CisK
KyAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRp
YyBib29sIGNoZWNrT2JqZWN0U3RvcmVBbmRNZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJh
dG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYXI+JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgbWV0YURhdGFUeXBlKQogewogICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BLZXkpID49IDApCkBAIC0xMzc3LDggKzE0MDksNiBA
QCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sCiAgICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NV
UlJFTlQiKTsKIH0KIAotLy8gRklYTUU6IGRlbGV0ZURhdGFiYXNlIHNob3VsZCBiZSBwYXJ0IG9m
IElEQkJhY2tpbmdTdG9yZS4KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oCmluZGV4IGMxZDNhYzRkYmY5OGZiZmVkNTQ4OTI0ODU3OGVjOGQyZjNiODRlMWUu
Ljg3YjA5N2QwOGI2NDI5OWEzYjUyZThlMjNkODIzYWZhY2Q3NmMzYzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw2ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3Ry
aW5nPiYgZm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3Qm
IGZvdW5kSWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9v
bCBpbnZhbGlkUm93SWQpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBT
dHJpbmcmIG5hbWUpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90
IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBm
b3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBm
b3VuZEF1dG9JbmNyZW1lbnRGbGFncyk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0
b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9y
ZUlkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCmluZGV4IDY0MzBkMjUxMTJj
MjUzYWMxMTI4NmFjMDk1NDQ3NmJhMDcyNTFiMjYuLjUxY2FiOGM0NzY1M2IyYjY5NmVhYWJkYzdm
YjBjOTgzYThhMzFkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVx
dWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcApAQCAt
Mjk2LDggKzI5Niw4IEBAIGJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCkKICAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
c3VjY2Vzc0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQg
fHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KTsKICAgICBib29s
IGRvbnRQcmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQu
Z2V0KCksIHRhcmdldHMpOwogCi0gICAgLy8gSWYgdGhlIHJlc3VsdCB3YXMgb2YgdHlwZSBJREJD
dXJzb3IsIHRoZW4gd2UnbGwgZmlyZSBhZ2Fpbi4KLSAgICBpZiAobV9yZXN1bHQgJiYgbV9yZXN1
bHQtPnR5cGUoKSAhPSBJREJBbnk6OklEQkN1cnNvclR5cGUgJiYgbV9yZXN1bHQtPnR5cGUoKSAh
PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCisgICAgLy8gSWYgdGhlIHJlc3VsdCB3
YXMgb2YgdHlwZSBJREJDdXJzb3IsIG9yIGEgb25CbG9ja2VkIGV2ZW50LCB0aGVuIHdlJ2xsIGZp
cmUgYWdhaW4uCisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRF
dmVudCAmJiBtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29y
VHlwZSAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlw
ZSkKICAgICAgICAgbV9maW5pc2hlZCA9IHRydWU7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbikg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tl
bmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcAppbmRleCA3YTYyZTUwZWJiMTVhNTJkNTU1NGM2MzcwNGU0OTRhYjk1NTYyMDBh
Li43YjYwMzhiMzZhZDk0MGVjOTRhMWQwZGFlNTQ3NGRjZWVlNGEwZjljIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApA
QCAtOTEsNiArOTEsMTkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGMKICAgICBtX3dlYklEQkZh
Y3RvcnktPm9wZW4obmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3Jp
Z2luLCB3ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94
eTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZy
YW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIFdlYlNlY3VyaXR5T3Jp
Z2luIG9yaWdpbihwcnBPcmlnaW4pOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJG
cmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CisgICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSB3
ZWJGcmFtZS0+dmlld0ltcGwoKTsKKyAgICBpZiAod2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgp
ICYmICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhlZERCKHdlYkZyYW1l
LCBuYW1lLCBvcmlnaW4pKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRh
YmFzZUVycm9yKDAsICJUaGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRh
dGFiYXNlLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fd2ViSURCRmFjdG9y
eS0+ZGVsZXRlRGF0YWJhc2UobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tz
KSwgb3JpZ2luLCB3ZWJGcmFtZSwgZGF0YURpcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggYmFmMWUw
NWUyYzk5MmY5MjFjN2RkMjdkNGZkMzI2ZThhNmFhODZlZC4uZTE0YjhjZWE5ODJmMzE3ZTQxZDQz
YThjOTNmMWQ3ZDYxZjY3MWMzMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3Jl
OjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4o
Y29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBh
c3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0
IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBs
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcApp
bmRleCAxYzA5NjhhNTUxYzJjODQwYjA5MDI1NGM2YWQ4MDRkMjEzM2YzMDdlLi41ZjNkNTVkMWQ3
YzFkMTA1ZWM1NmRlMTQ4MDFiMGRlZTEwNWY2NzY4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCkBAIC03Myw2ICs3MywxMyBAQCB2b2lk
IFdlYklEQkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2Fs
bGJhY2tzKiBjYWxsYmFja3MsCiAgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCBJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAs
IHBhdGgpOwogfQogCit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJT
ZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
cikKK3sKKyAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CisKKyAgICBtX2lkYkZhY3RvcnlC
YWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFk
b3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKaW5kZXggM2UwMWQxYTYz
Yzg5MjQwNjFmNTdjODU3N2FlYWY1YmI0MTZiYzZjMi4uYjNlNDc0ZGY5MjU1ZTg3N2YyZmY2ZDBl
NjMxMDM1NTYyNDZkMTcxOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCRmFjdG9yeUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJGYWN0b3J5SW1wbC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBnZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5
T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogICAgIHZpcnR1
YWwgdm9pZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
cik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFt
ZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSos
IGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgV1RGOjpSZWZQdHI8
V2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1faWRiRmFjdG9yeUJhY2tlbmQ7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggZjg4NDhlYWFiZTBlYmI2Y2Q0YWVjNDIyZDU1NDljYWY4ZDNhNWYwZi4uMmI3MTE0
NDNkYzM1ZWZjMzg1NzViNDZkYmUyYzgzMzRlZmFmNWVjNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBA
CisyMDExLTEwLTE3ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWw6IFVwZGF0ZWQuCisgICAgICAgICogc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rp
b25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICog
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5odG1sOiBBZGRlZC4KKwog
MjAxMS0xMC0xNyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8xMDI5MzkyOT4gUkVHUkVTU0lPTiAocjk3NTI1KTogaUNoYXQgdHJhbnNj
cmlwdCBoYXMgaG9yaXpvbnRhbCBzY3JvbGwgYmFyIHdoZW4gdGhlIGNvbnZlcnNhdGlvbiBpbmNs
dWRlcyBhIHdpZGUgaW1hZ2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAppbmRleCBlOWNmN2EyMDM5Y2E2ZDlm
ZTRmOTVkYTExMzE0NjkxNWI4OTIxNWEyLi45NWEyOTc1NGRhODdiZWU4MDM3YjA1NGQ4NWUzZDM4
ZjA4YmE1ZjlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0
b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CkBAIC04LDggKzgsNyBAQCBQQVNTIGluZGV4
ZWREQiA9PSBudWxsIGlzIGZhbHNlCiBQQVNTIHR5cGVvZiBpbmRleGVkREIub3BlbiA9PT0gJ2Z1
bmN0aW9uJyBpcyB0cnVlCiBQQVNTIHR5cGVvZiBpbmRleGVkREIuY21wID09PSAnZnVuY3Rpb24n
IGlzIHRydWUKIFBBU1MgdHlwZW9mIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzID09PSAnZnVu
Y3Rpb24nIGlzIHRydWUKLWRlbGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVk
LCBzbyB0aGlzIHdpbGwgZmFpbDoKLUZBSUwgdHlwZW9mIGluZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZSA9PT0gJ2Z1bmN0aW9uJyBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyB0eXBlb2Yg
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIGluZGV4ZWRE
Qi5nZXREYXRhYmFzZU5hbWVzKCkKIGRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0
CiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
YmFzaWNzJykgaXMgZmFsc2UKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9m
YWN0b3J5LWJhc2ljcy5odG1sCmluZGV4IDI4NWEwNmMzZTA3MzEwZmJhMGFmOWY3ZGZhMzA3YmQz
ZmY5NzA3NWYuLjIyNjVjOTZlNjVjOGNlZWJiNzk4MDQ0MmU3NmEwOWM4MWE3NGY2N2MgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbApA
QCAtMjMsNyArMjMsNiBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBzaG91bGRCZVRydWUoInR5cGVv
ZiBpbmRleGVkREIuY21wID09PSAnZnVuY3Rpb24nIik7CiAgICAgc2hvdWxkQmVUcnVlKCJ0eXBl
b2YgaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMgPT09ICdmdW5jdGlvbiciKTsKIAotICAgIGRl
YnVnKCJkZWxldGVEYXRhYmFzZSBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCwgc28gdGhpcyB3
aWxsIGZhaWw6Iik7CiAgICAgc2hvdWxkQmVUcnVlKCJ0eXBlb2YgaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlID09PSAnZnVuY3Rpb24nIik7CiAKICAgICBuYW1lID0gJ3N0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktYmFzaWNzJzsKQEAgLTYwLDggKzU5LDYgQEAgZnVuY3Rpb24gZ2V0RGF0YWJhc2VO
YW1lc1N1Y2Nlc3MyKCkKICAgICBzaG91bGRCZVRydWUoImRhdGFiYXNlTmFtZXMuY29udGFpbnMo
JyIgKyBuYW1lICsgIicpIik7CiAgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VOYW1lcy5jb250
YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CiAKLSAgICAvLyBGSVhNRTog
dGVzdCBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKQotCiAgICAgZG9uZSgp
OwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVlM2Jm
N2ZiNjYwNGJhYWQ4NDNjYTMwYTAwMmNlMWYxMmQwY2ExZDQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDI5IEBACitUZXN0IEluZGV4ZWREQidzIHdlYmtpdEluZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZSgpLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKword2Vi
a2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK3RyYW5zID0gZXZlbnQudGFy
Z2V0LnJlc3VsdAorUEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCitEZWxldGVkIGFsbCBvYmpl
Y3Qgc3RvcmVzLgorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVs
bCkKK3N0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAnJykKK1BBU1Mgc3RvcmUuaW5kZXhO
YW1lcy5jb250YWlucygnaW5kZXhOYW1lJykgaXMgdHJ1ZQorc3RvcmUuYWRkKCd2YWx1ZScsICdr
ZXknKQorZGIudHJhbnNhY3Rpb24oe21vZGU6IHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJ
VEV9KQorc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykKK3N0b3Jl
LmdldCgna2V5JykKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAidmFsdWUiCitkYi5zZXRW
ZXJzaW9uKCduZXcgdmVyc2lvbicpCityZXF1ZXN0ID0gd2Via2l0SW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQord2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFi
YXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNldFZlcnNpb24o
J25ldyB2ZXJzaW9uJykKK0ZBSUwgZGIub2JqZWN0U3RvcmVOYW1lcy5sZW5ndGggc2hvdWxkIGJl
IDAuIFdhcyAxLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
ZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yYTg5OWVkNjQwMzNlNjk2NzcwYjMyYmM1MTZmMDRkM2E4Zjkx
ZjljCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NzAgQEAKK1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgYW5kIGl0J3MgaW50ZXJhY3Rpb24g
d2l0aCBvcGVuL3NldFZlcnNpb24KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2lu
ZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3
aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQorCitU
RVNUOiBkZWxldGVEYXRhYmFzZSBibG9ja2VkIG9uIG9wZW4gaGFuZGxlcword2luZG93LmRibmFt
ZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicK
KydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNlJworJ2gub252ZXJzaW9uY2hhbmdl
JworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlLm9u
YmxvY2tlZCcKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKK1BBU1Mgd2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkgaXMgImgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURh
dGFiYXNlLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLmNsb3Nl
LGRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIKKworVEVTVDogZGVsZXRlRGF0YWJhc2Ugbm90IGJs
b2NrZWQgd2hlbiBoYW5kbGVzIGNsb3NlIGltbWVkaWF0ZWx5Cit3aW5kb3cuZGJuYW1lID0gJ3Rl
c3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Bl
bi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJhc2UnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAg
aCBjbG9zaW5nIGltbWVkaWF0ZWx5CisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZS5vbmJsb2Nr
ZWQnCisnZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzJworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0
cmEgYm9ndXMgZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMK
K0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgub3BlbixoLm9wZW4ub25z
dWNjZXNzLGRlbGV0ZURhdGFiYXNlLGgub252ZXJzaW9uY2hhbmdlLGguY2xvc2UsZGVsZXRlRGF0
YWJhc2Uub25zdWNjZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJh
c2UsaC5vbnZlcnNpb25jaGFuZ2UsaC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsZGVs
ZXRlRGF0YWJhc2Uub25zdWNjZXNzLgorCitURVNUOiBkZWxldGVEYXRhYmFzZSBpcyBkZWxheWVk
IGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZword2luZG93LmRibmFt
ZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicK
KydoLm9wZW4ub25zdWNjZXNzJworJ2guc2V0VmVyc2lvbicKKydkZWxldGVEYXRhYmFzZScKKydo
LnNldFZlcnNpb24ub25zdWNjZXNzJworJ2guc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0
ZScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRl
bHkKKydkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFz
ZS5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJoLm9wZW4saC5v
cGVuLm9uc3VjY2VzcyxoLnNldFZlcnNpb24sZGVsZXRlRGF0YWJhc2UsaC5zZXRWZXJzaW9uLm9u
c3VjY2VzcyxoLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUsaC5vbnZlcnNpb25jaGFu
Z2UsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNj
ZXNzIgorCitURVNUOiBtdWx0aXBsZSBkZWxldGVEYXRhYmFzZSBjYWxscword2luZG93LmRibmFt
ZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicK
KydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNlJworJ2RlbGV0ZURhdGFiYXNlJwor
J2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQor
J2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNs
b3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisn
aC5jbG9zZScKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKKydkZWxldGVE
YXRhYmFzZS5vbnN1Y2Nlc3MnCitOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBoLm9u
dmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0ZXBzOyBjcmJ1Zy5jb20vMTAwNjQ1CitGQUlMIHdpbmRv
dy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxkZWxl
dGVEYXRhYmFzZSxkZWxldGVEYXRhYmFzZSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFz
ZS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJh
c2Uub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2Vzcy4gV2FzIGgub3BlbixoLm9wZW4u
b25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGRlbGV0ZURhdGFiYXNlLGgub252ZXJzaW9uY2hhbmdl
LGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFz
ZS5vbmJsb2NrZWQsaC5jbG9zZSxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyxkZWxl
dGVEYXRhYmFzZS5vbnN1Y2Nlc3MuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjkwYTM0MTJkOWViMTkyZjM2OTU5MmQwMTA5ZDM1Nzc2NjU2MGExMgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
ZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwyMzQgQEAKKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3Jp
cHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBkZWxldGVEYXRhYmFzZSBjYWxsIGFuZCBpdCdz
IGludGVyYWN0aW9uIHdpdGggb3Blbi9zZXRWZXJzaW9uIik7CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KworZnVuY3Rpb24gQ29ubmVjdGlvbihpZCkgeworICAgIGlkID0gU3RyaW5nKGlkKTsKKyAgICB2
YXIgc2VsZiA9IHRoaXM7CisgICAgdGhpcy5vcGVuID0gZnVuY3Rpb24ob3B0cykgeworICAgICAg
ICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vcGVuJyIpKTsKKyAg
ICAgICAgdmFyIHJlcSA9IGluZGV4ZWREQi5vcGVuKHdpbmRvdy5kYm5hbWUpOworICAgICAgICBy
ZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICByZXEub25zdWNj
ZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gZS50YXJnZXQu
cmVzdWx0OworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBp
ZCArICIub3Blbi5vbnN1Y2Nlc3MnIikpOworICAgICAgICAgICAgc2VsZi5oYW5kbGUub252ZXJz
aW9uY2hhbmdlID0gZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5w
dXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLm9udmVyc2lvbmNoYW5nZSciKSk7CisgICAgICAg
ICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnZlcnNpb24pIHsgb3B0cy5vbnZlcnNpb24uY2Fs
bChzZWxmKTsgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMu
b25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAg
ICB9OworCisgICAgdGhpcy5jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICB3aW5kb3cuc3Rl
cHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5jbG9zZSciKSk7CisgICAgICAgIHRoaXMu
aGFuZGxlLmNsb3NlKCk7CisgICAgfTsKKworICAgIHRoaXMuc2V0VmVyc2lvbiA9IGZ1bmN0aW9u
KG9wdHMpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCAr
ICIuc2V0VmVyc2lvbiciKSk7CisgICAgICAgIHZhciByZXEgPSB0aGlzLmhhbmRsZS5zZXRWZXJz
aW9uKFN0cmluZyh3aW5kb3cudmVyKyspKTsKKyAgICAgICAgcmVxLm9uYWJvcnQgPSBmdW5jdGlv
biAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBp
ZCArICIuc2V0VmVyc2lvbi5vbmFib3J0JyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9w
dHMub25hYm9ydCkgeyBvcHRzLm9uYWJvcnQuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAg
ICAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5z
dGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25ibG9ja2VkJyIp
KTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25ibG9ja2VkKSB7IG9wdHMub25ibG9j
a2VkLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1
bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCIn
IiArIGlkICsgIi5zZXRWZXJzaW9uLm9uc3VjY2VzcyciKSk7CisgICAgICAgICAgICBpZiAoc2Vs
Zi5oYW5kbGUub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucygidGVzdC1zdG9yZSIgKyB3aW5kb3cu
dmVyKSkgeworICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlLmRlbGV0ZU9iamVjdFN0b3JlKCJ0
ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFy
IHN0b3JlID0gc2VsZi5oYW5kbGUuY3JlYXRlT2JqZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2lu
ZG93LnZlcik7CisgICAgICAgICAgICB2YXIgY291bnQgPSAwOworICAgICAgICAgICAgZG9fYXN5
bmNfcHV0cygpOyAvLyBLZWVwIHRoaXMgdHJhbnNhY3Rpb24gcnVubmluZyBmb3IgYSB3aGlsZQor
ICAgICAgICAgICAgZnVuY3Rpb24gZG9fYXN5bmNfcHV0cygpIHsKKyAgICAgICAgICAgICAgICB2
YXIgcmVxID0gc3RvcmUucHV0KGNvdW50LCBjb3VudCk7CisgICAgICAgICAgICAgICAgcmVxLm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgICAgICAgICByZXEub25z
dWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrY291bnQg
PCAxMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZG9fYXN5bmNfcHV0cygpOworICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnN0
ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1j
b21wbGV0ZSciKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9u
c3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vzcy5jYWxsKHNlbGYpOyB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICB9OworICAg
ICAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3Rl
cHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uZXJyb3InIikpOwor
ICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmVycm9yKSB7IG9wdHMub25lcnJvci5jYWxs
KHNlbGYpOyB9CisgICAgICAgIH07CisgICAgfTsKK30KKworZnVuY3Rpb24gZGVsZXRlRGF0YWJh
c2UobmFtZSwgb3B0cykgeworICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIidkZWxl
dGVEYXRhYmFzZSciKSk7CisgICAgdmFyIHJlcSA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShu
YW1lKTsKKyAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgd2luZG93
LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyciKSk7Cisg
ICAgICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwo
c2VsZik7IH0KKyAgICB9OworICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKKyAgICAg
ICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlLm9uZXJyb3In
IikpOworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJyb3IpIHsgb3B0cy5vbmVycm9yLmNh
bGwoc2VsZik7IH0KKyAgICB9OworICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0YWJhc2Uub25i
bG9ja2VkJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmJsb2NrZWQpIHsgb3B0cy5v
bmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgIH07Cit9CisKKy8vIHJ1biBhIHNlcmllcyBvZiBz
dGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24gZnVuY3Rpb24KK2Z1bmN0aW9uIHJ1blN0ZXBz
KGNvbW1hbmRzKSB7CisgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkgeworICAgICAgICB2YXIgY29t
bWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7CisgICAgICAgIGNvbW1hbmQoZnVuY3Rpb24oKSB7IHJ1
blN0ZXBzKGNvbW1hbmRzKTsgfSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KCkgeworICAg
IGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwg
d2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOworICAgIHNo
b3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisgICAgdGVzdDEoKTsKK30KKworZnVu
Y3Rpb24gdGVzdDEoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBkZWxldGVE
YXRhYmFzZSBibG9ja2VkIG9uIG9wZW4gaGFuZGxlcyIpOworICAgIGV2YWxBbmRMb2coIndpbmRv
dy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsK
KyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9u
KGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRl
bHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3
aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzOiBm
aW5pc2hUZXN0fSk7IH0sCisgICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkg
eworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRl
RGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9T
dHJpbmcoKSk7CisgICAgICAgIHRlc3QyKCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0Migp
IHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFiYXNlIG5vdCBi
bG9ja2VkIHdoZW4gaGFuZGxlcyBjbG9zZSBpbW1lZGlhdGVseSIpOworICAgIGV2YWxBbmRMb2co
IndpbmRvdy5kYm5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0g
W10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1
bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGgg
Y2xvc2luZyBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGguY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRh
YmFzZSh3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNj
ZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hU
ZXN0KCkgeworICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMg
ZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMiKTsKKyAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZWxldGVEYXRhYmFzZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Imgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5j
bG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9u
c3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOwor
ICAgICAgICB0ZXN0MygpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgZGVi
dWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBkZWxldGVEYXRhYmFzZSBpcyBkZWxheWVkIGlmIGEg
VkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZyIpOworICAgIGV2YWxBbmRMb2co
IndpbmRvdy5kYm5hbWUgPSAndGVzdDMnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0g
W10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1
bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1t
ZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGguc2V0
VmVyc2lvbigpOyBkb05leHQoKTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7
IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgICAgICAgXSk7CisK
KyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9u
c3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVyc2lvbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21w
bGV0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25ibG9j
a2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0NCgp
OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDQoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRl
YnVnKCJURVNUOiBtdWx0aXBsZSBkZWxldGVEYXRhYmFzZSBjYWxscyIpOworICAgIGV2YWxBbmRM
b2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDQnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBz
ID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMo
W2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3NpbmcsIGJ1dCBub3Qg
aW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRp
bWVvdXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVE
YXRhYmFzZSh3aW5kb3cuZGJuYW1lKTsgZG9OZXh0KCk7IH0sCisgICAgICAgICBmdW5jdGlvbihk
b05leHQpIHsgZGVsZXRlRGF0YWJhc2Uod2luZG93LmRibmFtZSwgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9LAorICAgICAgICAgXSk7Cisg
ICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJ
TCB3aXRoIGV4dHJhIGJvZ3VzIGgub252ZXJzaW9uY2hhbmdlL2guY2xvc2Ugc3RlcHM7IGNyYnVn
LmNvbS8xMDA2NDUiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3Rl
cHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
ZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5Yjg5OWI1NmE5OGZmM2Q4
ZTllODI2Y2FhMGY3YmI0NWMyZmJmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKQEAgLTAsMCArMSwx
MDYgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIHdlYmtpdElu
ZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgpLiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0
aW9uIHRlc3QoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIu
b3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHN0
YXJ0U2V0VmVyc2lvbjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKK30KKworZnVuY3Rpb24gc3RhcnRTZXRWZXJzaW9uKCkKK3sKKyAgICBkYiA9IGV2YWxB
bmRMb2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IGRlbGV0ZUV4aXN0aW5nOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVFeGlzdGluZygpCit7CisgICAgd2lu
ZG93LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7Cisg
ICAgc2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworCisgICAgZGVsZXRlQWxsT2JqZWN0
U3RvcmVzKGRiKTsKKworICAgIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVP
YmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVsbCkiKTsKKworICAgIHdpbmRvdy5pbmRleCA9IGV2
YWxBbmRMb2coInN0b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAnJykiKTsKKyAgICBzaG91
bGRCZVRydWUoInN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIik7CisKKyAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuYWRkKCd2YWx1ZScsICdrZXknKSIpOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0VmFsdWU7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5l
eHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGdldFZhbHVlKCkKK3sKKyAgICB0
cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coImRiLnRyYW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJREJU
cmFuc2FjdGlvbi5SRUFEX1dSSVRFfSkiKTsKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5l
eHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgdmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUg
PSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKKworICAgIHJlcXVlc3Qg
PSBldmFsQW5kTG9nKCJzdG9yZS5nZXQoJ2tleScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3Mg
PSBhZGRJbmRleDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFj
azsKK30KKworZnVuY3Rpb24gYWRkSW5kZXgoKQoreworICAgIHNob3VsZEJlRXF1YWxUb1N0cmlu
ZygiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJ2YWx1ZSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IGRlbGV0ZURhdGFiYXNlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRF
cnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZSgpCit7CisgICAgZGIu
b252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24oKSB7IGRiLmNsb3NlKCk7IH0KKyAgICByZXF1ZXN0
ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgn
ZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHJlb3BlbkRh
dGFiYXNlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiByZW9wZW5EYXRhYmFzZSgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRM
b2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJl
cXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uQWdhaW47CisgICAgcmVxdWVzdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0U2V0VmVy
c2lvbkFnYWluKCkKK3sKKyAgICByZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcg
dmVyc2lvbicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB2ZXJpZnlOb3RGb3VuZDsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gdmVyaWZ5Tm90Rm91bmQoKQoreworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVz
Lmxlbmd0aCIsICIwIik7CisKKyAgICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112356</attachid>
            <date>2011-10-25 10:29:57 -0700</date>
            <delta_ts>2011-10-25 11:15:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111025192954.patch</filename>
            <type>text/plain</type>
            <size>48873</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzNkMGIzOTY0YmIzNWI1
OGEyNGYyMjJmM2JhMmNhY2FkMjBjMzVhLi42YjJiYzFhNjAwZWVkZGEwNDM0NTgxYzc5YzBhY2Jk
OWUxZmY2Y2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpw
cm9jZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5Db25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dCk6CisKIDIwMTEtMTAtMTQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFRocm90dGxlIHJhdGUgb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdoZW4gcGFnZSBp
cyBub3QgdmlzaWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MGUyNWUzMjA5MDYx
Y2M5ZjQ4YWFkNGQ0NThhNzlmOWI5YmE1NDBkLi44MTEwNDBhMzI2NjExM2Q1Zjk3NGVlYTZjNmU3
YWRhYmYwYjczNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDExLTEwLTI1ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxl
dGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAg
ICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYklE
QkZhY3RvcnlJbXBsOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuaDoKKwog
MjAxMS0xMC0xNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IGRvbid0IGNoZWNrIGZvciBkZWJ1Z2dlciBw
YXVzZSBkZXRhaWxzIGluIGludGVyYWN0aXZlIHVpIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJCYWNraW5nU3RvcmUuaAppbmRleCA2ZTEzZjRmYTYxYzRhMjFkNDJjM2ZmZGU1YmRjNzNk
OTFkZGIzYzQxLi41N2Y4OTIzYzRlZDU0YWY0OTJjYjRjZDk2MjdjNTk4ZTVjNjAxMjAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3Qm
IGZvdW5kSWQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQs
IGJvb2wgaW52YWxpZFJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0
b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFz
c2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggNTgxYWE4YzAxNTNkOTZlMDk5MDg0MWM0
ODY3ZjU0ZmE1YWZhYmYxNy4uODcxZWMzZjA1MTY2OTQzM2ZiODRiMDdjMzIwZTMxMTljZTJkYmQ4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwCkBAIC01NSw2ICs1NSwyMiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOwogfTsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVu
ZGluZ0RlbGV0ZUNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nRGVsZXRlQ2FsbD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAg
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNr
czsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
IHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCiBj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nU2V0VmVyc2lvbkNhbGwgOiBwdWJs
aWMgUmVmQ291bnRlZDxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQpAQCAtOTAsNiArMTA2LDEx
IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvCiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tp
bmdTdG9yZS0+ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1f
aWQpOwogICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZh
bGlkSWQpKTsKKyAgICBvcGVuSW50ZXJuYWwoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuSW50ZXJuYWwoKQorewogICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnNldElE
QkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQsIG1faWQgPT0gSW52YWxp
ZElkKSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRl
ciBlcnJvciBoYW5kbGluZy4KICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CkBAIC0yNTgsNyArMjc5
LDIxIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygp
CiAgICAgICAgIEFTU0VSVCghZWMpOwogICAgIH0KIAotICAgIHdoaWxlICghbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5
KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9ydW5uaW5n
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQZW5kaW5nIGNhbGxzIG1heSBiZSBy
ZXF1ZXVlZC4KKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gcGVuZGluZ0Rl
bGV0ZUNhbGxzOworICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnN3YXAocGVuZGluZ0RlbGV0ZUNh
bGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IHBlbmRpbmdE
ZWxldGVDYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgZGVsZXRlRGF0YWJhc2UocGVuZGluZ0Rl
bGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICB9CisKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
IHx8ICFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoaWxlICghbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewogICAgICAgICBSZWZQ
dHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBtX3BlbmRpbmdPcGVuQ2FsbHMu
dGFrZUZpcnN0KCk7CiAgICAgICAgIG9wZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2Fs
bGJhY2tzKCkpOwogICAgIH0KQEAgLTI4NCwxMCArMzE5LDQzIEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KQorICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1w
dHkoKSkKICAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6
OmNyZWF0ZShjYWxsYmFja3MpKTsKLSAgICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIGlmICht
X2lkID09IEludmFsaWRJZCkKKyAgICAgICAgICAgIG9wZW5JbnRlcm5hbCgpOwogICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8
ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGlu
Z0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKHBycENhbGxiYWNr
cykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lv
bkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAgIC8vIHRoZSBwcm9j
ZXNzIG9mIGNsb3NpbmcuCisgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xMDA2NDUKKyAgICBmb3Ig
KERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytp
dCkKKyAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSgiIik7CisgICAgLy8gRklYTUU6IE9u
bHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhl
CisgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1
cCB0byBmaXJlLgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwMTIzCisgICAgaWYgKCFtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdEZWxldGVD
YWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX25hbWUpKSB7CisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fdmVyc2lvbiA9ICIiOworICAgIG1faWQgPSBJbnZhbGlkSWQ7CisgICAg
bV9vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxp
emVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
CmluZGV4IGU4YjEwODQ1MDEzMDRjZDE4ZjVmZjY2YTFhZDQ5ZThhYmY2YWNiZjAuLjdhNWNlMWRh
ODNjOGI0NjFjZjNhZjg5YzExMzIxNTM0MTIwYjE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogUmVuYW1lICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBkZXNjcmlw
dGl2ZSwgbGlrZSByZWdpc3RlckZyb250RW5kQ2FsbGJhY2tzLgogICAgIHZvaWQgb3BlbihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC03Nyw2ICs3OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFj
a2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwogCisgICAgdm9pZCBv
cGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKICAgICB2b2lkIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIApAQCAtMTEwLDYgKzExMiw5IEBAIHByaXZhdGU6CiAgICAg
Y2xhc3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+
ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7Cisg
ICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxz
OworCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRh
YmFzZUNhbGxiYWNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcApp
bmRleCBkMjAxNGZlMmZjOTY5OTRmOTk0ZjEzMDIwOWI5ZTI5ZDNhNDhlNjlhLi42NjdjNWE5MTll
NmE4YjYzYWFlNzE5NDNlZGI2M2U0M2UwNGQwMzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtOTgsNiArOTksMjgg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorUGFz
c1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3Vt
ZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG5hbWUuaXNOdWxsKCkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1l
bnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBT
ZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworICAg
IG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5k
ZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCiBzaG9ydCBJ
REJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktl
eT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoZmlyc3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCA4OTM0MjFkMTgwOTRkNzM0MGFlMzk0ZGZh
OGViMTI2ZjAzYTk5YzY3Li4xN2JmZjFkMWZjYmQyZjAzOWUyYmQ2YWZkYWJjOWY1ZWM4OTJhYzgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNDQsNiArNDQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNz
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJREJGYWN0b3J5IDog
cHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKTsKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgc2hvcnQgY21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJ
REJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmlkbAppbmRleCAyM2ZhODcxZWJhN2UyN2VhZjhjN2E4OGUzYjc0ZTdiZjUwNTU1YTQ1
Li5jNDQ5OTZiYTBmOWFjYzhmYWViYmNjNWQwMmQ0Njg3OTZhNmQ4NjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKQEAgLTMyLDYgKzMyLDggQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0
IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQor
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAKICAgICAgICAgc2hv
cnQgY21wKGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKICAgICAgICAgICAgIHJh
aXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ0NGQ2YWNkYmZiYjA3ZjA1YmIyNTNl
ZWYzNjE1M2FkMTIzNjk4NmIuLmE5MjI0Njk2YzIxNDM5N2Y3OTlkZmJjOWYzMTJlM2RmNzlmZDEy
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKQEAgLTEyMiw2ICsxMjIsMzAgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBt
X2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5k
LmdldCgpKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKQoreworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0g
Y29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisg
ICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5k
TWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMg
dG8gdGhlIGRhdGFiYXNlLCB3ZSBtdXN0IGZpcnN0IGNsb3NlCisgICAgICAgIC8vIHRoZW0uCisg
ICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91
bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGly
KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIG1fZGF0
YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0
KCkpOworICAgIGRhdGFiYXNlQmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKK30K
KwogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewogICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmll
ciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA2ZWU5YmIy
NDMwMzMwMWZhYzQxNWFhMDY5MGM2MWJhNGYxMmQ4ZGVmLi45YzJmMDdmYjcwNTQ3YTIxMDNhNGNh
ZDc3ZGI1NmU1OTNmMWM0OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJG
YWN0b3J5QmFja2VuZEltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBjNDAxOGVmZjlkZDY0ZGJjOWI3OTQyZTUw
YzNiMDI1NTI0Mjc3OTM4Li5lOTI1NDVkMmNmZjYzOWVmMDdlZGIxMDYxZGJlNTM2Y2I4MjE4OTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCBmYTRlNWIzNDgyNmIxZDk1OWQ1NjkyNWRiZjg0NmU1YTQyMDAx
ZTY4Li43NDA3OWVhNTE4NjRjZmFiZmIzZjc5ZGI5ODZhY2VkMjQyZDc3OWM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIz
NCw2ICsyMzQsNDcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQp
Cit7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRl
SXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAgIGlm
ICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
IChtX2N1cnJlbnRUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7CisgICAgdHJh
bnNhY3Rpb24tPmJlZ2luKCk7CisKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgU3RyaW5n
IHZlcnNpb247CisgICAgaWYgKCFleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJz
aW9uLCBkYXRhYmFzZUlkKSkgeworICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0
YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9
IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkICsgMSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6a09yaWdpbk5hbWUpOworICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KSkgeworICAgICAgICB0cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIs
IG5hbWUpOworICAgIG1fZGItPnJlbW92ZShrZXkpOworCisgICAgdHJhbnNhY3Rpb24tPmNvbW1p
dCgpOworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9vbCBjaGVja09iamVjdFN0b3Jl
QW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgc3RvcEtleSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlw
ZSkKIHsKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFyZUtleXMoaXQtPmtleSgpLCBz
dG9wS2V5KSA+PSAwKQpAQCAtNDEzLDE3ICs0NTQsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5n
U3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERC
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25z
dCBWZWN0b3I8Y2hhcj4mIGVuZCkKLXsKLSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9
IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGZvciAoaXQtPnNlZWsoYmVnaW4p
OyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5u
ZXh0KCkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
IHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVu
dFRyYW5zYWN0aW9uKTsKQEAgLTEzNzcsOCArMTQwNyw2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
biwKICAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVOVCIpOwogfQogCi0vLyBGSVhN
RTogZGVsZXRlRGF0YWJhc2Ugc2hvdWxkIGJlIHBhcnQgb2YgSURCQmFja2luZ1N0b3JlLgotCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0UoTEVWRUxEQikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggYzFkM2Fj
NGRiZjk4ZmJmZWQ1NDg5MjQ4NTc4ZWM4ZDJmM2I4NGUxZS4uODdiMDk3ZDA4YjY0Mjk5YTNiNTJl
OGUyM2Q4MjNhZmFjZDc2YzNjNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKICAg
ICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBu
YW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVh
bCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CisgICAg
dmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGlu
dDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdz
KTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCUmVxdWVzdC5jcHAKaW5kZXggNjQzMGQyNTExMmMyNTNhYzExMjg2YWMwOTU0NDc2YmEw
NzI1MWIyNi4uNTFjYWI4YzQ3NjUzYjJiNjk2ZWFhYmRjN2ZiMGM5ODNhOGEzMWRiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0yOTYsOCArMjk2LDggQEAgYm9vbCBJ
REJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFT
U0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpOwogICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0g
SURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CiAKLSAg
ICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNvciwgdGhlbiB3ZSdsbCBmaXJl
IGFnYWluLgotICAgIGlmIChtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6
SURCQ3Vyc29yVHlwZSAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yV2l0
aFZhbHVlVHlwZSkKKyAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNvciwg
b3IgYSBvbkJsb2NrZWQgZXZlbnQsIHRoZW4gd2UnbGwgZmlyZSBhZ2Fpbi4KKyAgICBpZiAoZXZl
bnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50ICYmIG1fcmVzdWx0ICYmIG1f
cmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JUeXBlICYmIG1fcmVzdWx0LT50eXBl
KCkgIT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQogICAgICAgICBtX2ZpbmlzaGVk
ID0gdHJ1ZTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhNjJl
NTBlYmIxNWE1MmQ1NTU0YzYzNzA0ZTQ5NGFiOTU1NjIwMGEuLjdiNjAzOGIzNmFkOTQwZWM5NGEx
ZDBkYWU1NDc0ZGNlZWU0YTBmOWMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBAIC05MSw2ICs5MSwxOSBAQCB2b2lk
IElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4gYwogICAgIG1fd2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBuZXcg
V2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGly
KTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZShjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJp
bmcmIGRhdGFEaXIpCit7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7
CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZy
YW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOwor
ICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Np
b25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5hbWUsIG9yaWdpbikpIHsKKyAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2Vy
IGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJGYWN0b3J5LT5kZWxldGVEYXRhYmFzZShuYW1l
LCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBk
YXRhRGlyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaAppbmRleCBiYWYxZTA1ZTJjOTkyZjkyMWM3ZGQyN2Q0ZmQz
MjZlOGE2YWE4NmVkLi5lMTRiOGNlYTk4MmYzMTdlNDFkNDNhOGM5M2YxZDdkNjFmNjcxYzMyIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQ
cm94eS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRE
YXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5n
JiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlP
cmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZh
dGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4IDFjMDk2OGE1NTFjMmM4NDBi
MDkwMjU0YzZhZDgwNGQyMTMzZjMwN2UuLjg0YzFhM2Q0MmUxYWIxMmYzM2NkMjMyZDlmMTQ1YjZk
ODMwZWRkNmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZh
Y3RvcnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0
b3J5SW1wbC5jcHAKQEAgLTYwLDE3ICs2MCwxOCBAQCBXZWJJREJGYWN0b3J5SW1wbDo6fldlYklE
QkZhY3RvcnlJbXBsKCkKIAogdm9pZCBXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1l
cyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9y
aWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCiB7Ci0gICAgV2ViU3Ry
aW5nIHBhdGggPSBkYXRhRGlyOwotCi0gICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJh
c2VOYW1lcyhJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBv
cmlnaW4sIDAsIHBhdGgpOworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFt
ZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2lu
LCAwLCBkYXRhRGlyKTsKIH0KIAogCiB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNl
Y3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGly
KQogewotICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsKKyAgICBtX2lkYkZhY3RvcnlCYWNr
ZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJh
Y2tzKSksIG9yaWdpbiwgMCwgZGF0YURpcik7Cit9CiAKLSAgICBtX2lkYkZhY3RvcnlCYWNrZW5k
LT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tz
KSksIG9yaWdpbiwgMCwgcGF0aCk7Cit2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRh
YmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpcikKK3sKKyAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShu
YW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmln
aW4sIDAsIGRhdGFEaXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCmluZGV4IDNlMDFkMWE2M2M4
OTI0MDYxZjU3Yzg1NzdhZWFmNWJiNDE2YmM2YzIuLmIzZTQ3NGRmOTI1NWU4NzdmMmZmNmQwZTYz
MTAzNTU2MjQ2ZDE3MTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkZhY3RvcnlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RmFjdG9yeUltcGwuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZv
aWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9y
aWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIp
OworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBj
b25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIFdURjo6UmVmUHRyPFdl
YkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2lkYkZhY3RvcnlCYWNrZW5kOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IGY4ODQ4ZWFhYmUwZWJiNmNkNGFlYzQyMmQ1NTQ5Y2FmOGQzYTVmMGYuLjhhYzI1M2Nh
MjY1Yjk4OGY5MTc1ZjVkY2ZmZGMzMWE1YzgxMTcxN2IgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxMS0xMC0yNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFzZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktYmFzaWNzLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4
ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sOiBVcGRhdGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9u
cy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHN0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbDogQWRkZWQuCisKIDIw
MTEtMTAtMTcgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICA8cmRh
cjovL3Byb2JsZW0vMTAyOTM5Mjk+IFJFR1JFU1NJT04gKHI5NzUyNSk6IGlDaGF0IHRyYW5zY3Jp
cHQgaGFzIGhvcml6b250YWwgc2Nyb2xsIGJhciB3aGVuIHRoZSBjb252ZXJzYXRpb24gaW5jbHVk
ZXMgYSB3aWRlIGltYWdlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4
ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKaW5kZXggZTljZjdhMjAzOWNhNmQ5ZmU0
Zjk1ZGExMTMxNDY5MTViODkyMTVhMi4uY2I4NWI3NjQxZjc4NjRlMjRkN2QyNDI4OWMwOGY0NjYx
YWZkYTI0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9y
eS1iYXNpY3MtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAtOCwxNyArOCwyMyBAQCBQQVNTIGluZGV4
ZWREQiA9PSBudWxsIGlzIGZhbHNlCiBQQVNTIHR5cGVvZiBpbmRleGVkREIub3BlbiA9PT0gJ2Z1
bmN0aW9uJyBpcyB0cnVlCiBQQVNTIHR5cGVvZiBpbmRleGVkREIuY21wID09PSAnZnVuY3Rpb24n
IGlzIHRydWUKIFBBU1MgdHlwZW9mIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzID09PSAnZnVu
Y3Rpb24nIGlzIHRydWUKLWRlbGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVk
LCBzbyB0aGlzIHdpbGwgZmFpbDoKLUZBSUwgdHlwZW9mIGluZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZSA9PT0gJ2Z1bmN0aW9uJyBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyB0eXBlb2Yg
aW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIGluZGV4ZWRE
Qi5nZXREYXRhYmFzZU5hbWVzKCkKIGRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0
CiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
YmFzaWNzJykgaXMgZmFsc2UKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0Ug
VEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCiBpbmRleGVkREIub3BlbihuYW1lLCBkZXNj
cmlwdGlvbikKK2V2ZW50LnRhcmdldC5yZXN1bHQuY2xvc2UoKQogaW5kZXhlZERCLmdldERhdGFi
YXNlTmFtZXMoKQogZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0
YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBp
cyB0cnVlCiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBO
T1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdzdG9yYWdlL2lu
ZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpCitpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpCitk
YXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyBkYXRhYmFzZU5hbWVzLmNv
bnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIGZhbHNlCitQQVNT
IGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBp
cyBmYWxzZQoraW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9U
IEVYSVNUJykKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVU
RQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNp
Y3MuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0
bWwKaW5kZXggMjg1YTA2YzNlMDczMTBmYmEwYWY5ZjdkZmEzMDdiZDNmZjk3MDc1Zi4uNjI4ZmVl
ZjNlMTk5YThlMjNmY2Y2NzAyNzUyODMxYjE5NTI3NWY4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sCkBAIC0yMyw3ICsyMyw2IEBA
IGZ1bmN0aW9uIHRlc3QoKQogICAgIHNob3VsZEJlVHJ1ZSgidHlwZW9mIGluZGV4ZWREQi5jbXAg
PT09ICdmdW5jdGlvbiciKTsKICAgICBzaG91bGRCZVRydWUoInR5cGVvZiBpbmRleGVkREIuZ2V0
RGF0YWJhc2VOYW1lcyA9PT0gJ2Z1bmN0aW9uJyIpOwogCi0gICAgZGVidWcoImRlbGV0ZURhdGFi
YXNlIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBzbyB0aGlzIHdpbGwgZmFpbDoiKTsKICAg
ICBzaG91bGRCZVRydWUoInR5cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5j
dGlvbiciKTsKIAogICAgIG5hbWUgPSAnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mn
OwpAQCAtNDgsNiArNDcsNyBAQCBmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczEoKQog
CiBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiB7CisgICAgZXZhbEFuZExvZygiZXZlbnQudGFyZ2V0
LnJlc3VsdC5jbG9zZSgpIik7CiAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5n
ZXREYXRhYmFzZU5hbWVzKCkiKTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNl
TmFtZXNTdWNjZXNzMjsKICAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxs
YmFjazsKQEAgLTYwLDggKzYwLDMyIEBAIGZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNz
MigpCiAgICAgc2hvdWxkQmVUcnVlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSAr
ICInKSIpOwogICAgIHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFC
QVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOwogCi0gICAgLy8gRklYTUU6IHRlc3QgaW5kZXhl
ZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExv
ZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCciICsgbmFtZSArICInKSIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gZGVsZXRlRGF0YWJhc2VTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQogCitmdW5jdGlvbiBkZWxldGVEYXRhYmFz
ZVN1Y2Nlc3MoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIuZ2V0RGF0
YWJhc2VOYW1lcygpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXREYXRhYmFzZU5hbWVz
U3VjY2VzczM7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
Cit9CisKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMygpCit7CisgICAgdmFyIGRh
dGFiYXNlTmFtZXM7CisgICAgZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdl
dC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCci
ICsgbmFtZSArICInKSIpOworICAgIHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMuY29udGFp
bnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOworCisgICAgcmVxdWVzdCA9IGV2
YWxBbmRMb2coImluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnREFUQUJBU0UgVEhBVCBET0VTIE5P
VCBFWElTVCcpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxldGVEYXRhYmFzZVN1Y2Nl
c3MyOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQor
CitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MyKCkKK3sKICAgICBkb25lKCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRl
ZGF0YWJhc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWNjZGY3MTNhZGYx
NjYwZDdjZjYwNzJiZTg0ZTkzMDc0YjU2YTNiOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMjggQEAKK1Rlc3QgSW5kZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKCkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCit3ZWJraXRJbmRl
eGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQordHJhbnMgPSBldmVudC50YXJnZXQucmVz
dWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlzIHRydWUKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpCitzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywg
JycpCitQQVNTIHN0b3JlLmluZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIGlzIHRydWUK
K3N0b3JlLmFkZCgndmFsdWUnLCAna2V5JykKK2RiLnRyYW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJ
REJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFfSkKK3N0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3Rv
cmUoJ3N0b3JlTmFtZScpCitzdG9yZS5nZXQoJ2tleScpCitQQVNTIGV2ZW50LnRhcmdldC5yZXN1
bHQgaXMgInZhbHVlIgorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQorcmVxdWVzdCA9IHdl
YmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8tZGVsZXRlJykKK3dlYmtp
dEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKQorZGIgPSBldmVudC50YXJnZXQu
cmVzdWx0CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCitQQVNTIGRiLm9iamVjdFN0b3Jl
TmFtZXMubGVuZ3RoIGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9m
YWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9u
cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmE4OTllZDY0MDMzZTY5Njc3MGIzMmJjNTE2ZjA0
ZDNhOGY5MWY5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDcwIEBACitUZXN0IHRoZSBkZWxldGVEYXRhYmFzZSBjYWxsIGFuZCBpdCdzIGludGVy
YWN0aW9uIHdpdGggb3Blbi9zZXRWZXJzaW9uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVk
REIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFs
c2UKKworVEVTVDogZGVsZXRlRGF0YWJhc2UgYmxvY2tlZCBvbiBvcGVuIGhhbmRsZXMKK3dpbmRv
dy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydo
Lm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZScKKydoLm9udmVyc2lv
bmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRh
YmFzZS5vbmJsb2NrZWQnCisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitQ
QVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJoLm9wZW4saC5vcGVuLm9uc3VjY2Vzcyxk
ZWxldGVEYXRhYmFzZSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQs
aC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisKK1RFU1Q6IGRlbGV0ZURhdGFiYXNl
IG5vdCBibG9ja2VkIHdoZW4gaGFuZGxlcyBjbG9zZSBpbW1lZGlhdGVseQord2luZG93LmRibmFt
ZSA9ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicK
KydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNlJworJ2gub252ZXJzaW9uY2hhbmdl
JworICAgIGggY2xvc2luZyBpbW1lZGlhdGVseQorJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJhc2Uu
b25ibG9ja2VkJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJTCB3
aXRoIGV4dHJhIGJvZ3VzIGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCBzdGVwOyBjcmJ1Zy5jb20v
MTAwMTIzCitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBoLm9wZW4saC5v
cGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSxoLm9udmVyc2lvbmNoYW5nZSxoLmNsb3NlLGRl
bGV0ZURhdGFiYXNlLm9uc3VjY2Vzcy4gV2FzIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0
ZURhdGFiYXNlLGgub252ZXJzaW9uY2hhbmdlLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25ibG9j
a2VkLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2Vzcy4KKworVEVTVDogZGVsZXRlRGF0YWJhc2UgaXMg
ZGVsYXllZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcKK3dpbmRv
dy5kYm5hbWUgPSAndGVzdDMnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydo
Lm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydoLnNldFZlcnNpb24nCisnZGVsZXRlRGF0YWJh
c2UnCisnaC5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydoLnNldFZlcnNpb24udHJhbnNhY3Rpb24t
Y29tcGxldGUnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nLCBidXQgbm90IGlt
bWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkJworJ2guY2xvc2UnCisnZGVsZXRl
RGF0YWJhc2Uub25zdWNjZXNzJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaC5v
cGVuLGgub3Blbi5vbnN1Y2Nlc3MsaC5zZXRWZXJzaW9uLGRlbGV0ZURhdGFiYXNlLGguc2V0VmVy
c2lvbi5vbnN1Y2Nlc3MsaC5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgub252ZXJz
aW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLmNsb3NlLGRlbGV0ZURhdGFiYXNl
Lm9uc3VjY2VzcyIKKworVEVTVDogbXVsdGlwbGUgZGVsZXRlRGF0YWJhc2UgY2FsbHMKK3dpbmRv
dy5kYm5hbWUgPSAndGVzdDQnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydo
Lm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZScKKydkZWxldGVEYXRh
YmFzZScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRp
YXRlbHkKKydkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisg
ICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJhc2Uub25ibG9j
a2VkJworJ2guY2xvc2UnCisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCisn
ZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzJworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9n
dXMgaC5vbnZlcnNpb25jaGFuZ2UvaC5jbG9zZSBzdGVwczsgY3JidWcuY29tLzEwMDY0NQorRkFJ
TCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91bGQgYmUgaC5vcGVuLGgub3Blbi5vbnN1Y2Nl
c3MsZGVsZXRlRGF0YWJhc2UsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRl
RGF0YWJhc2Uub25ibG9ja2VkLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLmNsb3NlLGRlbGV0
ZURhdGFiYXNlLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuIFdhcyBoLm9wZW4s
aC5vcGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSxkZWxldGVEYXRhYmFzZSxoLm9udmVyc2lv
bmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRl
RGF0YWJhc2Uub25ibG9ja2VkLGguY2xvc2UsaC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nl
c3MsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0
aW9ucy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI5MGEzNDEyZDllYjE5MmYzNjk1OTJkMDEwOWQzNTc3NjY1
NjBhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9m
YWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy5odG1sCkBAIC0wLDAgKzEsMjM0IEBA
Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCB0aGUgZGVsZXRlRGF0YWJhc2UgY2FsbCBh
bmQgaXQncyBpbnRlcmFjdGlvbiB3aXRoIG9wZW4vc2V0VmVyc2lvbiIpOworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKK2Z1bmN0aW9uIENvbm5lY3Rpb24oaWQpIHsKKyAgICBpZCA9IFN0cmluZyhpZCk7
CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMub3BlbiA9IGZ1bmN0aW9uKG9wdHMpIHsK
KyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub3Blbici
KSk7CisgICAgICAgIHZhciByZXEgPSBpbmRleGVkREIub3Blbih3aW5kb3cuZGJuYW1lKTsKKyAg
ICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVx
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IGUu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2co
IiciICsgaWQgKyAiLm9wZW4ub25zdWNjZXNzJyIpKTsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxl
Lm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cu
c3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vbnZlcnNpb25jaGFuZ2UnIikpOwor
ICAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub252ZXJzaW9uKSB7IG9wdHMub252ZXJz
aW9uLmNhbGwoc2VsZik7IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAob3B0cyAm
JiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vzcy5jYWxsKHNlbGYpOyB9CisgICAgICAg
IH07CisgICAgfTsKKworICAgIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgd2lu
ZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuY2xvc2UnIikpOworICAgICAg
ICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIH07CisKKyAgICB0aGlzLnNldFZlcnNpb24gPSBm
dW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIici
ICsgaWQgKyAiLnNldFZlcnNpb24nIikpOworICAgICAgICB2YXIgcmVxID0gdGhpcy5oYW5kbGUu
c2V0VmVyc2lvbihTdHJpbmcod2luZG93LnZlcisrKSk7CisgICAgICAgIHJlcS5vbmFib3J0ID0g
ZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2co
IiciICsgaWQgKyAiLnNldFZlcnNpb24ub25hYm9ydCciKSk7CisgICAgICAgICAgICBpZiAob3B0
cyAmJiBvcHRzLm9uYWJvcnQpIHsgb3B0cy5vbmFib3J0LmNhbGwoc2VsZik7IH0KKyAgICAgICAg
fTsKKyAgICAgICAgcmVxLm9uYmxvY2tlZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3
aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYmxv
Y2tlZCciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRz
Lm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFu
ZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnIikpOworICAgICAgICAgICAg
aWYgKHNlbGYuaGFuZGxlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoInRlc3Qtc3RvcmUiICsg
d2luZG93LnZlcikpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZS5kZWxldGVPYmplY3RT
dG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBzdG9yZSA9IHNlbGYuaGFuZGxlLmNyZWF0ZU9iamVjdFN0b3JlKCJ0ZXN0LXN0b3Jl
IiArIHdpbmRvdy52ZXIpOworICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgICAg
IGRvX2FzeW5jX3B1dHMoKTsgLy8gS2VlcCB0aGlzIHRyYW5zYWN0aW9uIHJ1bm5pbmcgZm9yIGEg
d2hpbGUKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvX2FzeW5jX3B1dHMoKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlcSA9IHN0b3JlLnB1dChjb3VudCwgY291bnQpOworICAgICAgICAgICAgICAg
IHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICAgICAg
cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgr
K2NvdW50IDwgMTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdp
bmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24udHJhbnNh
Y3Rpb24tY29tcGxldGUnIikpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMgJiYg
b3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2lu
ZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbmVycm9y
JyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25lcnJvcikgeyBvcHRzLm9uZXJy
b3IuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlbGV0
ZURhdGFiYXNlKG5hbWUsIG9wdHMpIHsKKyAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9n
KCInZGVsZXRlRGF0YWJhc2UnIikpOworICAgIHZhciByZXEgPSBpbmRleGVkREIuZGVsZXRlRGF0
YWJhc2UobmFtZSk7CisgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3Mn
IikpOworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vz
cy5jYWxsKHNlbGYpOyB9CisgICAgfTsKKyAgICByZXEub25lcnJvciA9IGZ1bmN0aW9uIChlKSB7
CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZS5v
bmVycm9yJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmVycm9yKSB7IG9wdHMub25l
cnJvci5jYWxsKHNlbGYpOyB9CisgICAgfTsKKyAgICByZXEub25ibG9ja2VkID0gZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFi
YXNlLm9uYmxvY2tlZCciKSk7CisgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25ibG9ja2VkKSB7
IG9wdHMub25ibG9ja2VkLmNhbGwoc2VsZik7IH0KKyAgICB9OworfQorCisvLyBydW4gYSBzZXJp
ZXMgb2Ygc3RlcHMgdGhhdCB0YWtlIGEgY29udGludWF0aW9uIGZ1bmN0aW9uCitmdW5jdGlvbiBy
dW5TdGVwcyhjb21tYW5kcykgeworICAgIGlmIChjb21tYW5kcy5sZW5ndGgpIHsKKyAgICAgICAg
dmFyIGNvbW1hbmQgPSBjb21tYW5kcy5zaGlmdCgpOworICAgICAgICBjb21tYW5kKGZ1bmN0aW9u
KCkgeyBydW5TdGVwcyhjb21tYW5kcyk7IH0pOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdCgp
IHsKKyAgICBpbmRleGVkREIgPSBldmFsQW5kTG9nKCJpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhl
ZERCIHx8IHdpbmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsiKTsK
KyAgICBzaG91bGRCZUZhbHNlKCJpbmRleGVkREIgPT0gbnVsbCIpOworICAgIHRlc3QxKCk7Cit9
CisKK2Z1bmN0aW9uIHRlc3QxKCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVTVDog
ZGVsZXRlRGF0YWJhc2UgYmxvY2tlZCBvbiBvcGVuIGhhbmRsZXMiKTsKKyAgICBldmFsQW5kTG9n
KCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9
IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAgIHJ1blN0ZXBzKFtm
dW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nLCBidXQgbm90IGlt
bWVkaWF0ZWx5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeyBoLmNsb3NlKCk7IH0sIDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9fSk7IH0sCisgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0
YWJhc2Uod2luZG93LmRibmFtZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uc3Vj
Y2VzczogZmluaXNoVGVzdH0pOyB9LAorICAgICAgICAgXSk7CisgICAgZnVuY3Rpb24gZmluaXNo
VGVzdCgpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9T
dHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MigpOworICAgIH0KK30KKworZnVuY3Rpb24g
dGVzdDIoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBkZWxldGVEYXRhYmFz
ZSBub3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xvc2UgaW1tZWRpYXRlbHkiKTsKKyAgICBldmFs
QW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5z
dGVwcyA9IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAgIHJ1blN0
ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWco
IiAgICBoIGNsb3NpbmcgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9fSk7IH0sCisgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVs
ZXRlRGF0YWJhc2Uod2luZG93LmRibmFtZSwgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9LAorICAgICAgICAgXSk7CisgICAgZnVuY3Rpb24g
ZmluaXNoVGVzdCgpIHsKKyAgICAgICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJh
IGJvZ3VzIGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCBzdGVwOyBjcmJ1Zy5jb20vMTAwMTIzIik7
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImguY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRh
YmFzZS5vbnN1Y2Nlc3MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmlu
ZygpKTsKKyAgICAgICAgdGVzdDMoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgewor
ICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVTVDogZGVsZXRlRGF0YWJhc2UgaXMgZGVsYXll
ZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmciKTsKKyAgICBldmFs
QW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5z
dGVwcyA9IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAgIHJ1blN0
ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nLCBidXQg
bm90IGltbWVkaWF0ZWx5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBoLmNsb3NlKCk7IH0sIDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkg
eyBoLnNldFZlcnNpb24oKTsgZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRv
TmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5kb3cuZGJuYW1lLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB7b25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgICAgICAg
IF0pOworCisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgu
b3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZl
cnNpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVyc2lvbi5vbnN1Y2Nlc3Mi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZlcnNpb24udHJhbnNhY3Rp
b24tY29tcGxldGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lv
bmNoYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNl
Lm9uYmxvY2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3Mi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAg
dGVzdDQoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGRlYnVnKCIiKTsK
KyAgICBkZWJ1ZygiVEVTVDogbXVsdGlwbGUgZGVsZXRlRGF0YWJhc2UgY2FsbHMiKTsKKyAgICBl
dmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAgIHJ1
blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nLCBi
dXQgbm90IGltbWVkaWF0ZWx5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBoLmNsb3NlKCk7IH0sIDApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9fSk7IH0sCisgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsg
ZGVsZXRlRGF0YWJhc2Uod2luZG93LmRibmFtZSk7IGRvTmV4dCgpOyB9LAorICAgICAgICAgZnVu
Y3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAg
IF0pOworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBX
aWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBoLm9udmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0ZXBz
OyBjcmJ1Zy5jb20vMTAwNjQ1Iik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJo
Lm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICBkb25lKCk7CisgICAgfQorfQor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwordGVzdCgpOworCis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzU4YmI1MjJh
NDdiZmQxZWJlMWQ0YzcxMmM4NTE3MmYyNTFlZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5odG1sCkBAIC0w
LDAgKzEsMTA0IEBACis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVm
PSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC1mdW5jdGlvbi5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3NoYXJlZC5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8c2NyaXB0PgorCitkZXNjcmlwdGlvbigiVGVzdCBJbmRleGVkREIncyB3
ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoKS4iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
CitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5k
ZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBzdGFydFNldFZlcnNpb247CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0U2V0VmVyc2lvbigpCit7CisgICAgZGIg
PSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIHJlcXVlc3Qg
PSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgcmVxdWVz
dC5vbnN1Y2Nlc3MgPSBkZWxldGVFeGlzdGluZzsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4
cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZGVsZXRlRXhpc3RpbmcoKQorewor
ICAgIHdpbmRvdy50cmFucyA9IGV2YWxBbmRMb2coInRyYW5zID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dCIpOworICAgIHNob3VsZEJlVHJ1ZSgidHJhbnMgIT09IG51bGwiKTsKKworICAgIHN0b3JlID0g
ZXZhbEFuZExvZygic3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVs
bCkiKTsKKworICAgIHdpbmRvdy5pbmRleCA9IGV2YWxBbmRMb2coInN0b3JlLmNyZWF0ZUluZGV4
KCdpbmRleE5hbWUnLCAnJykiKTsKKyAgICBzaG91bGRCZVRydWUoInN0b3JlLmluZGV4TmFtZXMu
Y29udGFpbnMoJ2luZGV4TmFtZScpIik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3Rv
cmUuYWRkKCd2YWx1ZScsICdrZXknKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZ2V0VmFs
dWU7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisK
K2Z1bmN0aW9uIGdldFZhbHVlKCkKK3sKKyAgICB0cmFuc2FjdGlvbiA9IGV2YWxBbmRMb2coImRi
LnRyYW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFfSkiKTsK
KyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAg
dmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgn
c3RvcmVOYW1lJykiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5nZXQoJ2tl
eScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhZGRJbmRleDsKKyAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gYWRkSW5kZXgo
KQoreworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQudGFyZ2V0LnJlc3VsdCIsICJ2
YWx1ZSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZlcnNpb24oJ25ldyB2
ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZURhdGFiYXNlOworICAg
IHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlv
biBkZWxldGVEYXRhYmFzZSgpCit7CisgICAgZGIub252ZXJzaW9uY2hhbmdlID0gZnVuY3Rpb24o
KSB7IGRiLmNsb3NlKCk7IH0KKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygicmVxdWVzdCA9IHdl
YmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAg
ICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHJlb3BlbkRhdGFiYXNlOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiByZW9wZW5EYXRhYmFz
ZSgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdk
YXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRW
ZXJzaW9uQWdhaW47CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0U2V0VmVyc2lvbkFnYWluKCkKK3sKKyAgICByZGIgPSBl
dmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKworICAgIHJlcXVlc3QgPSBl
dmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgcmVxdWVzdC5v
bnN1Y2Nlc3MgPSB2ZXJpZnlOb3RGb3VuZDsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdmVyaWZ5Tm90Rm91bmQoKQoreworICAg
IHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCIsICIwIik7CisKKyAgICBkb25l
KCk7Cit9CisKK3Rlc3QoKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112362</attachid>
            <date>2011-10-25 11:16:07 -0700</date>
            <delta_ts>2011-10-27 17:07:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111025201604.patch</filename>
            <type>text/plain</type>
            <size>48889</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc2NDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlYzNkMGIzOTY0YmIzNWI1
OGEyNGYyMjJmM2JhMmNhY2FkMjBjMzVhLi42YjJiYzFhNjAwZWVkZGEwNDM0NTgxYzc5YzBhY2Jk
OWUxZmY2Y2M0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpw
cm9jZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5Db25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dCk6CisKIDIwMTEtMTAtMTQgIENocmlzIE1hcnJpbiAgPGNtYXJyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFRocm90dGxlIHJhdGUgb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHdoZW4gcGFnZSBp
cyBub3QgdmlzaWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA1MGUyNWUzMjA5MDYx
Y2M5ZjQ4YWFkNGQ0NThhNzlmOWI5YmE1NDBkLi44MTEwNDBhMzI2NjExM2Q1Zjk3NGVlYTZjNmU3
YWRhYmYwYjczNjUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBA
CisyMDExLTEwLTI1ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFja2VuZFByb3h5OjpkZWxl
dGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaDoKKyAg
ICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJJ
REJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OldlYklE
QkZhY3RvcnlJbXBsOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6
OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuaDoKKwog
MjAxMS0xMC0xNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIFdlYiBJbnNwZWN0b3I6IGRvbid0IGNoZWNrIGZvciBkZWJ1Z2dlciBw
YXVzZSBkZXRhaWxzIGluIGludGVyYWN0aXZlIHVpIHRlc3RzCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJCYWNraW5nU3RvcmUuaAppbmRleCA2ZTEzZjRmYTYxYzRhMjFkNDJjM2ZmZGU1YmRjNzNk
OTFkZGIzYzQxLi41N2Y4OTIzYzRlZDU0YWY0OTJjYjRjZDk2MjdjNTk4ZTVjNjAxMjAxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3Qm
IGZvdW5kSWQpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQs
IGJvb2wgaW52YWxpZFJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0
b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFz
c2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggNTgxYWE4YzAxNTNkOTZlMDk5MDg0MWM0
ODY3ZjU0ZmE1YWZhYmYxNy4uODcxZWMzZjA1MTY2OTQzM2ZiODRiMDdjMzIwZTMxMTljZTJkYmQ4
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZElt
cGwuY3BwCkBAIC01NSw2ICs1NSwyMiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IG1fY2FsbGJhY2tzOwogfTsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVu
ZGluZ0RlbGV0ZUNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nRGVsZXRlQ2FsbD4gewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAg
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNr
czsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAg
IHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCiBj
bGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nU2V0VmVyc2lvbkNhbGwgOiBwdWJs
aWMgUmVmQ291bnRlZDxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8
SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQpAQCAtOTAsNiArMTA2LDEx
IEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvCiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tp
bmdTdG9yZS0+ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1f
aWQpOwogICAgIEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZh
bGlkSWQpKTsKKyAgICBvcGVuSW50ZXJuYWwoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpvcGVuSW50ZXJuYWwoKQorewogICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnNldElE
QkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQsIG1faWQgPT0gSW52YWxp
ZElkKSkKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRl
ciBlcnJvciBoYW5kbGluZy4KICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CkBAIC0yNTgsNyArMjc5
LDIxIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygp
CiAgICAgICAgIEFTU0VSVCghZWMpOwogICAgIH0KIAotICAgIHdoaWxlICghbV9ydW5uaW5nVmVy
c2lvbkNoYW5nZVRyYW5zYWN0aW9uICYmIG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5
KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9ydW5uaW5n
VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBQZW5kaW5nIGNhbGxzIG1heSBiZSBy
ZXF1ZXVlZC4KKyAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gcGVuZGluZ0Rl
bGV0ZUNhbGxzOworICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLnN3YXAocGVuZGluZ0RlbGV0ZUNh
bGxzKTsKKyAgICB3aGlsZSAoIXBlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgUmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IHBlbmRpbmdE
ZWxldGVDYWxscy50YWtlRmlyc3QoKTsKKyAgICAgICAgZGVsZXRlRGF0YWJhc2UocGVuZGluZ0Rl
bGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsKKyAgICB9CisKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
IHx8ICFtX3BlbmRpbmdEZWxldGVDYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHdoaWxlICghbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHkoKSkgewogICAgICAgICBSZWZQ
dHI8UGVuZGluZ09wZW5DYWxsPiBwZW5kaW5nT3BlbkNhbGwgPSBtX3BlbmRpbmdPcGVuQ2FsbHMu
dGFrZUZpcnN0KCk7CiAgICAgICAgIG9wZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2Fs
bGJhY2tzKCkpOwogICAgIH0KQEAgLTI4NCwxMCArMzE5LDQzIEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFj
a3MpCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBpZiAobV9ydW5uaW5nVmVyc2lv
bkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
KQorICAgIGlmICghbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1w
dHkoKSkKICAgICAgICAgbV9wZW5kaW5nT3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6
OmNyZWF0ZShjYWxsYmFja3MpKTsKLSAgICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIGlmICht
X2lkID09IEludmFsaWRJZCkKKyAgICAgICAgICAgIG9wZW5JbnRlcm5hbCgpOwogICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlzKTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENh
bGxiYWNrcykKK3sKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8
ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGlu
Z0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5kaW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKHBycENhbGxiYWNr
cykpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKKyAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lv
bkNoYW5nZSBpZiB0aGVyZSB0aGUgY29ubmVjdGlvbiBpc24ndCBpbgorICAgIC8vIHRoZSBwcm9j
ZXNzIG9mIGNsb3NpbmcuCisgICAgLy8gaHR0cDovL2NyYnVnLmNvbS8xMDA2NDUKKyAgICBmb3Ig
KERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxs
YmFja3NTZXQuYmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytp
dCkKKyAgICAgICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSgiIik7CisgICAgLy8gRklYTUU6IE9u
bHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhl
CisgICAgLy8gVmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1
cCB0byBmaXJlLgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwMTIzCisgICAgaWYgKCFtX2Rh
dGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdEZWxldGVD
YWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAgICAg
ICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX25hbWUpKSB7CisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIG1fdmVyc2lvbiA9ICIiOworICAgIG1faWQgPSBJbnZhbGlkSWQ7CisgICAg
bV9vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxp
emVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tl
bmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFj
a3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
CmluZGV4IGU4YjEwODQ1MDEzMDRjZDE4ZjVmZjY2YTFhZDQ5ZThhYmY2YWNiZjAuLjdhNWNlMWRh
ODNjOGI0NjFjZjNhZjg5YzExMzIxNTM0MTIwYjE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1Ymxp
YzoKICAgICAvLyBGSVhNRTogUmVuYW1lICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBkZXNjcmlw
dGl2ZSwgbGlrZSByZWdpc3RlckZyb250RW5kQ2FsbGJhY2tzLgogICAgIHZvaWQgb3BlbihQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7
IHJldHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC03Nyw2ICs3OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdT
dG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFj
a2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwogCisgICAgdm9pZCBv
cGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKICAgICB2b2lkIHBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIApAQCAtMTEwLDYgKzExMiw5IEBAIHByaXZhdGU6CiAgICAg
Y2xhc3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+
ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7Cisg
ICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxz
OworCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+
ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRh
YmFzZUNhbGxiYWNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcApp
bmRleCBkMjAxNGZlMmZjOTY5OTRmOTk0ZjEzMDIwOWI5ZTI5ZDNhNDhlNjlhLi42NjdjNWE5MTll
NmE4YjYzYWFlNzE5NDNlZGI2M2U0M2UwNGQwMzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNs
dWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJ
REJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQ
YWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtOTgsNiArOTksMjgg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorUGFz
c1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgewor
ICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxE
b2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3Vt
ZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG5hbWUuaXNOdWxsKCkp
IHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1l
bnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBT
ZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworICAg
IG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50
LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5k
ZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCiBzaG9ydCBJ
REJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktl
eT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoZmlyc3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCA4OTM0MjFkMTgwOTRkNzM0MGFlMzk0ZGZh
OGViMTI2ZjAzYTk5YzY3Li4xN2JmZjFkMWZjYmQyZjAzOWUyYmQ2YWZkYWJjOWY1ZWM4OTJhYzgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNDQsNiArNDQsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNz
IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVyc2lvbkNoYW5nZVJlcXVl
c3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJREJGYWN0b3J5IDog
cHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqKTsKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwogCiAgICAgc2hvcnQgY21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJ
REJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5LmlkbAppbmRleCAyM2ZhODcxZWJhN2UyN2VhZjhjN2E4OGUzYjc0ZTdiZjUwNTU1YTQ1
Li5jNDQ5OTZiYTBmOWFjYzhmYWViYmNjNWQwMmQ0Njg3OTZhNmQ4NjEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKQEAgLTMyLDYgKzMyLDggQEAgbW9kdWxlIHN0b3JhZ2Ug
ewogCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0
IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNl
RXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElE
QlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQor
ICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAKICAgICAgICAgc2hv
cnQgY21wKGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKICAgICAgICAgICAgIHJh
aXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ0NGQ2YWNkYmZiYjA3ZjA1YmIyNTNl
ZWYzNjE1M2FkMTIzNjk4NmIuLmE5MjI0Njk2YzIxNDM5N2Y3OTlkZmJjOWYzMTJlM2RmNzlmZDEy
ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKQEAgLTEyMiw2ICsxMjIsMzAgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9w
ZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBt
X2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5k
LmdldCgpKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNl
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
UGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKQoreworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0g
Y29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisg
ICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5k
TWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNr
ZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMg
dG8gdGhlIGRhdGFiYXNlLCB3ZSBtdXN0IGZpcnN0IGNsb3NlCisgICAgICAgIC8vIHRoZW0uCisg
ICAgICAgIGl0LT5zZWNvbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRXZlcnl0aGluZyBmcm9tIG5vdyBvbiBzaG91
bGQgYmUgZG9uZSBvbiBhbm90aGVyIHRocmVhZC4KKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUgPSBvcGVuQmFja2luZ1N0b3JlKHNlY3VyaXR5T3JpZ2luLCBkYXRhRGly
KTsKKyAgICBpZiAoIWJhY2tpbmdTdG9yZSkgeworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VS
UiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJl
ZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZUJhY2tlbmQgPSBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobmFtZSwgYmFja2luZ1N0b3JlLmdldCgpLCBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuZ2V0KCksIHRoaXMsIHVuaXF1ZUlkZW50aWZpZXIpOworICAgIG1fZGF0
YWJhc2VCYWNrZW5kTWFwLnNldCh1bmlxdWVJZGVudGlmaWVyLCBkYXRhYmFzZUJhY2tlbmQuZ2V0
KCkpOworICAgIGRhdGFiYXNlQmFja2VuZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKK30K
KwogUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Bl
bkJhY2tpbmdTdG9yZShQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKQogewogICAgIGNvbnN0IFN0cmluZyBmaWxlSWRlbnRpZmll
ciA9IGNvbXB1dGVGaWxlSWRlbnRpZmllcihzZWN1cml0eU9yaWdpbi5nZXQoKSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAppbmRleCA2ZWU5YmIy
NDMwMzMwMWZhYzQxNWFhMDY5MGM2MWJhNGYxMmQ4ZGVmLi45YzJmMDdmYjcwNTQ3YTIxMDNhNGNh
ZDc3ZGI1NmU1OTNmMWM0OTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeUJhY2tlbmRJbXBsLmgKQEAgLTU3LDYgKzU3LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogICAg
IHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAgICBJREJG
YWN0b3J5QmFja2VuZEltcGwoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAppbmRleCBjNDAxOGVmZjlkZDY0ZGJjOWI3OTQyZTUw
YzNiMDI1NTI0Mjc3OTM4Li5lOTI1NDVkMmNmZjYzOWVmMDdlZGIxMDYxZGJlNTM2Y2I4MjE4OTk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElu
dGVyZmFjZS5oCkBAIC01Myw2ICs1Myw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1
cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0
YURpcikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFj
a2luZ1N0b3JlLmNwcAppbmRleCBmYTRlNWIzNDgyNmIxZDk1OWQ1NjkyNWRiZjg0NmU1YTQyMDAx
ZTY4Li5jZWExZmZmOTkwZjFhMjY2YzhlNTNiMjY4Nzg3MWM4NGMyNjRlMzJlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIz
NCw2ICsyMzQsNDcgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorc3RhdGljIGJvb2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2Fj
dGlvbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQp
Cit7CisgICAgT3duUHRyPExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRl
SXRlcmF0b3IoKTsKKyAgICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBj
b21wYXJlS2V5cyhpdC0+a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7CisgICAgICAgIGlm
ICghdHJhbnNhY3Rpb24tPnJlbW92ZShpdC0+a2V5KCkpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisKK2Jvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
IChtX2N1cnJlbnRUcmFuc2FjdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPElEQkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uPiB0cmFuc2FjdGlvbiA9IElE
QkxldmVsREJCYWNraW5nU3RvcmU6OlRyYW5zYWN0aW9uOjpjcmVhdGUodGhpcyk7CisgICAgdHJh
bnNhY3Rpb24tPmJlZ2luKCk7CisKKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQ7CisgICAgU3RyaW5n
IHZlcnNpb247CisgICAgaWYgKCFleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1lLCB2ZXJz
aW9uLCBkYXRhYmFzZUlkKSkgeworICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0YXJ0
S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFiYXNlTWV0
YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3RvcEtleSA9
IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkICsgMSwgRGF0YWJhc2VNZXRh
RGF0YUtleTo6a09yaWdpbk5hbWUpOworICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJyZW50VHJh
bnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KSkgeworICAgICAgICB0cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNvbnN0
IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50aWZpZXIs
IG5hbWUpOworICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoa2V5KTsKKworICAgIHRy
YW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGljIGJvb2wg
Y2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShjb25zdCBMZXZlbERCSXRlcmF0b3IqIGl0
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBtZXRhRGF0YVR5cGUpCiB7CiAgICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNvbXBhcmVL
ZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0gMCkKQEAgLTQxMywxNyArNDU0LDYgQEAgYm9vbCBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNl
SWQsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZGVs
ZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGNo
YXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQpCi17Ci0gICAgT3duUHRyPExldmVs
REJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAgICBmb3Ig
KGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+a2V5KCks
IGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICghdHJhbnNhY3Rpb24tPnJlbW92
ZShpdC0+a2V5KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAg
IEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CkBAIC0xMzc3LDggKzE0MDcsNiBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4sCiAgICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NVUlJFTlQi
KTsKIH0KIAotLy8gRklYTUU6IGRlbGV0ZURhdGFiYXNlIHNob3VsZCBiZSBwYXJ0IG9mIElEQkJh
Y2tpbmdTdG9yZS4KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKExF
VkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oCmluZGV4IGMxZDNhYzRkYmY5OGZiZmVkNTQ4OTI0ODU3OGVjOGQyZjNiODRlMWUuLjg3YjA5
N2QwOGI2NDI5OWEzYjUyZThlMjNkODIzYWZhY2Q3NmMzYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw2ICs0Nyw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYg
Zm91bmROYW1lcyk7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRh
KGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5k
SWQpOwogICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZh
bGlkUm93SWQpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5h
bWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1
dG9JbmNyZW1lbnRGbGFncyk7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCmluZGV4IDY0MzBkMjUxMTJjMjUzYWMx
MTI4NmFjMDk1NDQ3NmJhMDcyNTFiMjYuLjUxY2FiOGM0NzY1M2IyYjY5NmVhYWJkYzdmYjBjOTgz
YThhMzFkYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcApAQCAtMjk2LDgg
KzI5Niw4IEBAIGJvb2wgSURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50
PiBldmVudCkKICAgICBBU1NFUlQoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuc3VjY2Vz
c0V2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmVycm9yRXZlbnQgfHwgZXZl
bnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50KTsKICAgICBib29sIGRvbnRQ
cmV2ZW50RGVmYXVsdCA9IElEQkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2goZXZlbnQuZ2V0KCks
IHRhcmdldHMpOwogCi0gICAgLy8gSWYgdGhlIHJlc3VsdCB3YXMgb2YgdHlwZSBJREJDdXJzb3Is
IHRoZW4gd2UnbGwgZmlyZSBhZ2Fpbi4KLSAgICBpZiAobV9yZXN1bHQgJiYgbV9yZXN1bHQtPnR5
cGUoKSAhPSBJREJBbnk6OklEQkN1cnNvclR5cGUgJiYgbV9yZXN1bHQtPnR5cGUoKSAhPSBJREJB
bnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCisgICAgLy8gSWYgdGhlIHJlc3VsdCB3YXMgb2Yg
dHlwZSBJREJDdXJzb3IsIG9yIGEgb25CbG9ja2VkIGV2ZW50LCB0aGVuIHdlJ2xsIGZpcmUgYWdh
aW4uCisgICAgaWYgKGV2ZW50LT50eXBlKCkgIT0gZXZlbnROYW1lcygpLmJsb2NrZWRFdmVudCAm
JiBtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlwZSAm
JiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKICAg
ICAgICAgbV9maW5pc2hlZCA9IHRydWU7CiAKICAgICBpZiAobV90cmFuc2FjdGlvbikgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94
eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmNwcAppbmRleCA3YTYyZTUwZWJiMTVhNTJkNTU1NGM2MzcwNGU0OTRhYjk1NTYyMDBhLi43YjYw
MzhiMzZhZDk0MGVjOTRhMWQwZGFlNTQ3NGRjZWVlNGEwZjljIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcApAQCAtOTEs
NiArOTEsMTkgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpvcGVuKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGMKICAgICBtX3dlYklEQkZhY3Rvcnkt
Pm9wZW4obmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3JpZ2luLCB3
ZWJGcmFtZSwgZGF0YURpcik7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6ZGVs
ZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBPcmlnaW4sIEZyYW1lKiBm
cmFtZSwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIFdlYlNlY3VyaXR5T3JpZ2luIG9y
aWdpbihwcnBPcmlnaW4pOworICAgIFdlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUlt
cGw6OmZyb21GcmFtZShmcmFtZSk7CisgICAgV2ViVmlld0ltcGwqIHdlYlZpZXcgPSB3ZWJGcmFt
ZS0+dmlld0ltcGwoKTsKKyAgICBpZiAod2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpICYmICF3
ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCktPmFsbG93SW5kZXhlZERCKHdlYkZyYW1lLCBuYW1l
LCBvcmlnaW4pKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihXZWJJREJEYXRhYmFzZUVy
cm9yKDAsICJUaGUgdXNlciBkZW5pZWQgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhlIGRhdGFiYXNl
LiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fd2ViSURCRmFjdG9yeS0+ZGVs
ZXRlRGF0YWJhc2UobmFtZSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgb3Jp
Z2luLCB3ZWJGcmFtZSwgZGF0YURpcik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAj
ZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKaW5kZXggYmFmMWUwNWUyYzk5
MmY5MjFjN2RkMjdkNGZkMzI2ZThhNmFhODZlZC4uZTE0YjhjZWE5ODJmMzE3ZTQxZDQzYThjOTNm
MWQ3ZDYxZjY3MWMzMiAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
RmFjdG9yeUJhY2tlbmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxi
YWNrcz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpOwogCiBwcml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kUHJveHkoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAppbmRleCAx
YzA5NjhhNTUxYzJjODQwYjA5MDI1NGM2YWQ4MDRkMjEzM2YzMDdlLi44NGMxYTNkNDJlMWFiMTJm
MzNjZDIzMmQ5ZjE0NWI2ZDgzMGVkZDZkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCkBAIC02MCwxNyArNjAsMTggQEAgV2ViSURCRmFj
dG9yeUltcGw6On5XZWJJREJGYWN0b3J5SW1wbCgpCiAKIHZvaWQgV2ViSURCRmFjdG9yeUltcGw6
OmdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNl
Y3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGly
KQogewotICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsKLQotICAgIG1faWRiRmFjdG9yeUJh
Y2tlbmQtPmdldERhdGFiYXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0
cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBwYXRoKTsKKyAgICBtX2lkYkZhY3RvcnlCYWNrZW5k
LT5nZXREYXRhYmFzZU5hbWVzKElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIG9yaWdpbiwgMCwgZGF0YURpcik7CiB9CiAKIAogdm9pZCBXZWJJREJGYWN0b3J5
SW1wbDo6b3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJh
Y2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdl
YlN0cmluZyYgZGF0YURpcikKIHsKLSAgICBXZWJTdHJpbmcgcGF0aCA9IGRhdGFEaXI7CisgICAg
bV9pZGJGYWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRl
KGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIpOworfQogCi0gICAgbV9p
ZGJGYWN0b3J5QmFja2VuZC0+b3BlbihuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFk
b3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOwordm9pZCBXZWJJREJGYWN0b3J5
SW1wbDo6ZGVsZXRlRGF0YWJhc2UoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFj
a3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUq
LCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+
ZGVsZXRlRGF0YWJhc2UobmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihj
YWxsYmFja3MpKSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApp
bmRleCAzZTAxZDFhNjNjODkyNDA2MWY1N2M4NTc3YWVhZjViYjQxNmJjNmMyLi5iM2U0NzRkZjky
NTVlODc3ZjJmZjZkMGU2MzEwMzU1NjI0NmQxNzE5IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoV2ViSURCQ2FsbGJhY2tzKiwgY29u
c3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
cik7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJD
YWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2Vi
U3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3Qg
V2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdp
biYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToKICAg
ICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gbV9pZGJG
YWN0b3J5QmFja2VuZDsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBmODg0OGVhYWJlMGViYjZjZDRhZWM0MjJkNTU0OWNhZjhk
M2E1ZjBmLi44YWMyNTNjYTI2NWI5ODhmOTE3NWY1ZGNmZmRjMzFhNWM4MTE3MTdiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTEtMTAtMjUgIEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQ6IFVwZGF0ZWQuCisgICAgICAg
ICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbDogVXBkYXRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRh
YmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0
bWw6IEFkZGVkLgorCiAyMDExLTEwLTE3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+
CiAKICAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzEwMjkzOTI5PiBSRUdSRVNTSU9OIChyOTc1MjUp
OiBpQ2hhdCB0cmFuc2NyaXB0IGhhcyBob3Jpem9udGFsIHNjcm9sbCBiYXIgd2hlbiB0aGUgY29u
dmVyc2F0aW9uIGluY2x1ZGVzIGEgd2lkZSBpbWFnZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CmluZGV4IGU5
Y2Y3YTIwMzljYTZkOWZlNGY5NWRhMTEzMTQ2OTE1Yjg5MjE1YTIuLmNiODViNzY0MWY3ODY0ZTI0
ZDdkMjQyODljMDhmNDY2MWFmZGEyNDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKQEAgLTgsMTcgKzgs
MjMgQEAgUEFTUyBpbmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQogUEFTUyB0eXBlb2YgaW5kZXhl
ZERCLm9wZW4gPT09ICdmdW5jdGlvbicgaXMgdHJ1ZQogUEFTUyB0eXBlb2YgaW5kZXhlZERCLmNt
cCA9PT0gJ2Z1bmN0aW9uJyBpcyB0cnVlCiBQQVNTIHR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJh
c2VOYW1lcyA9PT0gJ2Z1bmN0aW9uJyBpcyB0cnVlCi1kZWxldGVEYXRhYmFzZSBBUEkgaXMgbm90
IHlldCBpbXBsZW1lbnRlZCwgc28gdGhpcyB3aWxsIGZhaWw6Ci1GQUlMIHR5cGVvZiBpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5jdGlvbicgc2hvdWxkIGJlIHRydWUuIFdhcyBmYWxz
ZS4KK1BBU1MgdHlwZW9mIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJyBp
cyB0cnVlCiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpCiBkYXRhYmFzZU5hbWVzID0gZXZl
bnQudGFyZ2V0LnJlc3VsdAogUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2lu
ZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIGZhbHNlCiBQQVNTIGRhdGFiYXNlTmFtZXMuY29u
dGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQogaW5kZXhlZERC
Lm9wZW4obmFtZSwgZGVzY3JpcHRpb24pCitldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkKIGlu
ZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkKIGRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQu
cmVzdWx0CiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2Zh
Y3RvcnktYmFzaWNzJykgaXMgdHJ1ZQogUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRB
QkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKK2luZGV4ZWREQi5kZWxldGVEYXRh
YmFzZSgnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKQoraW5kZXhlZERCLmdldERh
dGFiYXNlTmFtZXMoKQorZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1Mg
ZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3Mn
KSBpcyBmYWxzZQorUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERP
RVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKK2luZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnREFUQUJB
U0UgVEhBVCBET0VTIE5PVCBFWElTVCcpCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CiAKIFRFU1QgQ09NUExFVEUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9m
YWN0b3J5LWJhc2ljcy5odG1sCmluZGV4IDI4NWEwNmMzZTA3MzEwZmJhMGFmOWY3ZGZhMzA3YmQz
ZmY5NzA3NWYuLjYyOGZlZWYzZTE5OWE4ZTIzZmNmNjcwMjc1MjgzMWIxOTUyNzVmODggMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbApA
QCAtMjMsNyArMjMsNiBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICBzaG91bGRCZVRydWUoInR5cGVv
ZiBpbmRleGVkREIuY21wID09PSAnZnVuY3Rpb24nIik7CiAgICAgc2hvdWxkQmVUcnVlKCJ0eXBl
b2YgaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMgPT09ICdmdW5jdGlvbiciKTsKIAotICAgIGRl
YnVnKCJkZWxldGVEYXRhYmFzZSBBUEkgaXMgbm90IHlldCBpbXBsZW1lbnRlZCwgc28gdGhpcyB3
aWxsIGZhaWw6Iik7CiAgICAgc2hvdWxkQmVUcnVlKCJ0eXBlb2YgaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlID09PSAnZnVuY3Rpb24nIik7CiAKICAgICBuYW1lID0gJ3N0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktYmFzaWNzJzsKQEAgLTQ4LDYgKzQ3LDcgQEAgZnVuY3Rpb24gZ2V0RGF0YWJhc2VO
YW1lc1N1Y2Nlc3MxKCkKIAogZnVuY3Rpb24gb3BlblN1Y2Nlc3MoKQogeworICAgIGV2YWxBbmRM
b2coImV2ZW50LnRhcmdldC5yZXN1bHQuY2xvc2UoKSIpOwogICAgIHJlcXVlc3QgPSBldmFsQW5k
TG9nKCJpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpIik7CiAgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczI7CiAgICAgcmVxdWVzdC5vbmVycm9yID0gdW5l
eHBlY3RlZEVycm9yQ2FsbGJhY2s7CkBAIC02MCw4ICs2MCwzMiBAQCBmdW5jdGlvbiBnZXREYXRh
YmFzZU5hbWVzU3VjY2VzczIoKQogICAgIHNob3VsZEJlVHJ1ZSgiZGF0YWJhc2VOYW1lcy5jb250
YWlucygnIiArIG5hbWUgKyAiJykiKTsKICAgICBzaG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVz
LmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykiKTsKIAotICAgIC8vIEZJ
WE1FOiB0ZXN0IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShkYXRhYmFzZU5hbWUpCisgICAgcmVx
dWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnIiArIG5hbWUgKyAi
JykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZURhdGFiYXNlU3VjY2VzczsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KIAorZnVuY3Rp
b24gZGVsZXRlRGF0YWJhc2VTdWNjZXNzKCkKK3sKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygi
aW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0g
Z2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczMo
KQoreworICAgIHZhciBkYXRhYmFzZU5hbWVzOworICAgIGV2YWxBbmRMb2coImRhdGFiYXNlTmFt
ZXMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VO
YW1lcy5jb250YWlucygnIiArIG5hbWUgKyAiJykiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJkYXRh
YmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykiKTsKKwor
ICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ0RBVEFC
QVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVs
ZXRlRGF0YWJhc2VTdWNjZXNzMjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2VTdWNjZXNzMigpCit7CiAg
ICAgZG9uZSgpOwogfQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjFjY2RmNzEzYWRmMTY2MGQ3Y2Y2MDcyYmU4NGU5MzA3NGI1NmEzYjkKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFi
YXNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI4IEBACitUZXN0IEluZGV4ZWREQidzIHdlYmtp
dEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgpLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKword2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2
ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK3RyYW5zID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdAorUEFTUyB0cmFucyAhPT0gbnVsbCBpcyB0cnVlCitzdG9yZSA9
IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKQorc3RvcmUuY3JlYXRlSW5k
ZXgoJ2luZGV4TmFtZScsICcnKQorUEFTUyBzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRl
eE5hbWUnKSBpcyB0cnVlCitzdG9yZS5hZGQoJ3ZhbHVlJywgJ2tleScpCitkYi50cmFuc2FjdGlv
bih7bW9kZTogd2Via2l0SURCVHJhbnNhY3Rpb24uUkVBRF9XUklURX0pCitzdG9yZSA9IHRyYW5z
YWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQorc3RvcmUuZ2V0KCdrZXknKQorUEFTUyBl
dmVudC50YXJnZXQucmVzdWx0IGlzICJ2YWx1ZSIKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9u
JykKK3JlcXVlc3QgPSB3ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2RhdGFiYXNlLXRv
LWRlbGV0ZScpCit3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykKK2Ri
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQorUEFT
UyBkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRh
YmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJhODk5ZWQ2NDAzM2U2
OTY3NzBiMzJiYzUxNmYwNGQzYThmOTFmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSw3MCBAQAorVGVzdCB0aGUgZGVsZXRlRGF0YWJhc2UgY2Fs
bCBhbmQgaXQncyBpbnRlcmFjdGlvbiB3aXRoIG9wZW4vc2V0VmVyc2lvbgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5k
b3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWRE
QiA9PSBudWxsIGlzIGZhbHNlCisKK1RFU1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3Bl
biBoYW5kbGVzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJh
c2UnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0
ZWx5CisnZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkJworJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJh
c2Uub25zdWNjZXNzJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaC5vcGVuLGgu
b3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0
YWJhc2Uub25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorCitURVNU
OiBkZWxldGVEYXRhYmFzZSBub3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xvc2UgaW1tZWRpYXRl
bHkKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBz
ID0gW10KKydoLm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZScKKydo
Lm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcgaW1tZWRpYXRlbHkKKydoLmNsb3NlJwor
J2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitO
T1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQg
c3RlcDsgY3JidWcuY29tLzEwMDEyMworRkFJTCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91
bGQgYmUgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25j
aGFuZ2UsaC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuIFdhcyBoLm9wZW4saC5vcGVu
Lm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSxoLm9udmVyc2lvbmNoYW5nZSxoLmNsb3NlLGRlbGV0
ZURhdGFiYXNlLm9uYmxvY2tlZCxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuCisKK1RFU1Q6IGRl
bGV0ZURhdGFiYXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBp
cyBydW5uaW5nCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnaC5zZXRWZXJzaW9u
JworJ2RlbGV0ZURhdGFiYXNlJworJ2guc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaC5zZXRWZXJz
aW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xv
c2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydo
LmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRv
U3RyaW5nKCkgaXMgImgub3BlbixoLm9wZW4ub25zdWNjZXNzLGguc2V0VmVyc2lvbixkZWxldGVE
YXRhYmFzZSxoLnNldFZlcnNpb24ub25zdWNjZXNzLGguc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1j
b21wbGV0ZSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsaC5jbG9z
ZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisKK1RFU1Q6IG11bHRpcGxlIGRlbGV0ZURhdGFi
YXNlIGNhbGxzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJh
c2UnCisnZGVsZXRlRGF0YWJhc2UnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5n
LCBidXQgbm90IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkJworJ2gub252
ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0
ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydoLmNsb3NlJworJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJh
c2Uub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJ
TCB3aXRoIGV4dHJhIGJvZ3VzIGgub252ZXJzaW9uY2hhbmdlL2guY2xvc2Ugc3RlcHM7IGNyYnVn
LmNvbS8xMDA2NDUKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgub3Bl
bixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGRlbGV0ZURhdGFiYXNlLGgub252ZXJz
aW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxkZWxldGVEYXRhYmFzZS5vbmJsb2Nr
ZWQsaC5jbG9zZSxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2Uub25zdWNj
ZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsZGVsZXRlRGF0
YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2VkLGgub252ZXJz
aW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLmNsb3NlLGguY2xvc2UsZGVsZXRl
RGF0YWJhc2Uub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0
aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVk
YXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yOTBhMzQxMmQ5ZWIxOTJmMzY5
NTkyZDAxMDlkMzU3NzY2NTYwYTEyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbApA
QCAtMCwwICsxLDIzNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rp
b24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIGRlbGV0
ZURhdGFiYXNlIGNhbGwgYW5kIGl0J3MgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZlcnNpb24i
KTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBDb25uZWN0aW9uKGlkKSB7CisgICAg
aWQgPSBTdHJpbmcoaWQpOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLm9wZW4gPSBm
dW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIici
ICsgaWQgKyAiLm9wZW4nIikpOworICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERCLm9wZW4od2lu
ZG93LmRibmFtZSk7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJh
Y2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAg
c2VsZi5oYW5kbGUgPSBlLnRhcmdldC5yZXN1bHQ7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMu
cHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vcGVuLm9uc3VjY2VzcyciKSk7CisgICAgICAg
ICAgICBzZWxmLmhhbmRsZS5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAg
ICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub252ZXJz
aW9uY2hhbmdlJyIpKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9udmVyc2lv
bikgeyBvcHRzLm9udmVyc2lvbi5jYWxsKHNlbGYpOyB9CisgICAgICAgICAgICB9OworICAgICAg
ICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChz
ZWxmKTsgfQorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLmNsb3NlID0gZnVuY3Rpb24o
KSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLmNs
b3NlJyIpKTsKKyAgICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB9OworCisgICAgdGhp
cy5zZXRWZXJzaW9uID0gZnVuY3Rpb24ob3B0cykgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVz
aChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uJyIpKTsKKyAgICAgICAgdmFyIHJl
cSA9IHRoaXMuaGFuZGxlLnNldFZlcnNpb24oU3RyaW5nKHdpbmRvdy52ZXIrKykpOworICAgICAg
ICByZXEub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMu
cHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYWJvcnQnIikpOworICAg
ICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmFib3J0KSB7IG9wdHMub25hYm9ydC5jYWxsKHNl
bGYpOyB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZSkg
eworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIu
c2V0VmVyc2lvbi5vbmJsb2NrZWQnIikpOworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5v
bmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAg
ICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5z
dGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25zdWNjZXNzJyIp
KTsKKyAgICAgICAgICAgIGlmIChzZWxmLmhhbmRsZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5z
KCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpKSB7CisgICAgICAgICAgICAgICAgc2VsZi5oYW5k
bGUuZGVsZXRlT2JqZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB2YXIgc3RvcmUgPSBzZWxmLmhhbmRsZS5jcmVhdGVPYmplY3RT
dG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9
IDA7CisgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7IC8vIEtlZXAgdGhpcyB0cmFuc2FjdGlv
biBydW5uaW5nIGZvciBhIHdoaWxlCisgICAgICAgICAgICBmdW5jdGlvbiBkb19hc3luY19wdXRz
KCkgeworICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5wdXQoY291bnQsIGNvdW50KTsK
KyAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
ICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoKytjb3VudCA8IDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBk
b19hc3luY19wdXRzKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5z
ZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJyIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwoc2Vs
Zik7IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAg
ICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsK
KyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNl
dFZlcnNpb24ub25lcnJvciciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJy
b3IpIHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICB9OworfQor
CitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZShuYW1lLCBvcHRzKSB7CisgICAgd2luZG93LnN0ZXBz
LnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlJyIpKTsKKyAgICB2YXIgcmVxID0gaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlv
biAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0
YWJhc2Uub25zdWNjZXNzJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3Mp
IHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAgIH07CisgICAgcmVxLm9uZXJyb3Ig
PSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCIn
ZGVsZXRlRGF0YWJhc2Uub25lcnJvciciKSk7CisgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25l
cnJvcikgeyBvcHRzLm9uZXJyb3IuY2FsbChzZWxmKTsgfQorICAgIH07CisgICAgcmVxLm9uYmxv
Y2tlZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRM
b2coIidkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnIikpOworICAgICAgICBpZiAob3B0cyAmJiBv
cHRzLm9uYmxvY2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAgfTsKK30K
KworLy8gcnVuIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgdGFrZSBhIGNvbnRpbnVhdGlvbiBmdW5j
dGlvbgorZnVuY3Rpb24gcnVuU3RlcHMoY29tbWFuZHMpIHsKKyAgICBpZiAoY29tbWFuZHMubGVu
Z3RoKSB7CisgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHMuc2hpZnQoKTsKKyAgICAgICAg
Y29tbWFuZChmdW5jdGlvbigpIHsgcnVuU3RlcHMoY29tbWFuZHMpOyB9KTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERC
ID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5t
b3pJbmRleGVkREI7Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsK
KyAgICB0ZXN0MSgpOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBkZWJ1ZygiIik7Cisg
ICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzIik7
CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24oImgiKTsK
KyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNzOiBkb05l
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24o
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGggY2xv
c2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVuY3Rpb24oZG9O
ZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0pOworICAg
IGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygi
d2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJoLm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNj
ZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDIoKTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVT
VDogZGVsZXRlRGF0YWJhc2Ugbm90IGJsb2NrZWQgd2hlbiBoYW5kbGVzIGNsb3NlIGltbWVkaWF0
ZWx5Iik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Mic7IHdpbmRvdy52
ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24o
ImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNz
OiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZl
cnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nIGltbWVkaWF0ZWx5Iik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVuY3Rp
b24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0p
OworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxs
IEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQgc3RlcDsgY3Ji
dWcuY29tLzEwMDEyMyIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5z
dGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5vcGVu
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3QzKCk7CisgICAgfQorfQorCitmdW5j
dGlvbiB0ZXN0MygpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURh
dGFiYXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5u
aW5nIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52
ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24o
ImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNz
OiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAg
IGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgICAgICBm
dW5jdGlvbihkb05leHQpIHsgaC5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LAorICAgICAgICAg
ICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2Uod2luZG93LmRibmFtZSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9
LAorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAg
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaC5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVsZXRlRGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZl
cnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5zZXRW
ZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0
YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJp
bmcoKSk7CisgICAgICAgIHRlc3Q0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsK
KyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IG11bHRpcGxlIGRlbGV0ZURhdGFiYXNl
IGNhbGxzIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRv
dy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rp
b24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNj
ZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zygi
ICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVu
Y3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUpOyBkb05leHQoKTsg
fSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5kb3cuZGJu
YW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0
fSk7IH0sCisgICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAg
ICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaC5vbnZlcnNpb25jaGFu
Z2UvaC5jbG9zZSBzdGVwczsgY3JidWcuY29tLzEwMDY0NSIpOworICAgICAgICBzaG91bGRCZUVx
dWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0
ZURhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJh
c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxvY2tl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxv
Y2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgZG9u
ZSgpOworICAgIH0KK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3Qo
KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzc1OGJiNTIyYTQ3YmZkMWViZTFkNGM3MTJjODUxNzJmMjUxZWQwOAotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRl
c3QgSW5kZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuIik7CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNldFZlcnNp
b24oKQoreworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7
CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24n
KSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRXhpc3Rpbmc7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0
ZUV4aXN0aW5nKCkKK3sKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7
CisKKyAgICBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUo
J3N0b3JlTmFtZScsIG51bGwpIik7CisKKyAgICB3aW5kb3cuaW5kZXggPSBldmFsQW5kTG9nKCJz
dG9yZS5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpIik7CisgICAgc2hvdWxkQmVUcnVlKCJz
dG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSIpOworCisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coInN0b3JlLmFkZCgndmFsdWUnLCAna2V5JykiKTsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IGdldFZhbHVlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBnZXRWYWx1ZSgpCit7CisgICAgdHJhbnNhY3Rpb24g
PSBldmFsQW5kTG9nKCJkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0SURCVHJhbnNhY3Rpb24u
UkVBRF9XUklURX0pIik7CisgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworICAgIHZhciBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJhbnNhY3Rp
b24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExv
Zygic3RvcmUuZ2V0KCdrZXknKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gYWRkSW5kZXg7
CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1
bmN0aW9uIGFkZEluZGV4KCkKK3sKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2ZW50LnRh
cmdldC5yZXN1bHQiLCAidmFsdWUiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5z
ZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxl
dGVEYXRhYmFzZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFj
azsKK30KKworZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2UoKQoreworICAgIGRiLm9udmVyc2lvbmNo
YW5nZSA9IGZ1bmN0aW9uKCkgeyBkYi5jbG9zZSgpOyB9CisgICAgcmVxdWVzdCA9IGV2YWxBbmRM
b2coInJlcXVlc3QgPSB3ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2RhdGFiYXNlLXRv
LWRlbGV0ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSByZW9wZW5EYXRhYmFzZTsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gcmVvcGVuRGF0YWJhc2UoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJ
bmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3Vj
Y2VzcyA9IHN0YXJ0U2V0VmVyc2lvbkFnYWluOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNldFZlcnNpb25BZ2Fpbigp
Cit7CisgICAgcmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIp
OworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdmVyaWZ5Tm90Rm91bmQ7CisgICAgcmVxdWVzdC5v
bmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHZlcmlmeU5v
dEZvdW5kKCkKK3sKKyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVOYW1lcy5sZW5ndGgiLCAi
MCIpOworCisgICAgZG9uZSgpOworfQorCit0ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJz
ZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112687</attachid>
            <date>2011-10-27 08:22:16 -0700</date>
            <delta_ts>2011-10-28 00:33:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111027172214.patch</filename>
            <type>text/plain</type>
            <size>48895</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1NTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZDQ5MmFkZWFmNTU1ZTNh
NWZhMWNjNWU1M2E4NDYzNjg1OThkOGE4Li4yNjFkOWE5YzAzNmRiOGRlNWFlMWVjOTFmYjhiNzk5
Nzg3MTM2MGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpw
cm9jZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5Db25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dCk6CisKIDIwMTEtMTAtMjcgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYkluc3BlY3RvcjogVmlldyB0aHJvdWdocyB0aGUgZXhjZXB0aW9uIHdo
ZW4gYSBjaGlsZCB2aWV3IGFyZSByZW1vdmVkIGJ5IHJlbW92ZUNoaWxkcmVuIGNhbGwuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDRmOGYyMGIzOTA1YjIxOTRlY2E0YTgwOTJjNTllN2Ji
ZDRiZDZkNDAuLjk2ZDFkZmI1MGViZGI4NzdjM2FjMzUwODc1YWM3MzQzOGYwMDQ2NmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAg
ICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorICAgICAgICAqIHNyYy9XZWJJREJG
YWN0b3J5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkZhY3RvcnlJbXBsOjpnZXRE
YXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6Om9wZW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgor
ICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEwLTI2ICBDaHJpcyBS
b2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIGNocm9taXVtIGJyaWRn
aW5nIGZvciBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IGFuZCBzZXRGb3JtYXQoKSBtZXRob2Qg
c28gd2UgY2FuIGtub3cgYXVkaW8gc3RyZWFtIGZvcm1hdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmgKaW5kZXggNmUxM2Y0ZmE2MWM0YTIxZDQyYzNmZmRlNWJkYzczZDkx
ZGRiM2M0MS4uNTdmODkyM2M0ZWQ1NGFmNDkyY2I0Y2Q5NjI3YzU5OGU1YzYwMTIwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC00OSw2ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYg
Zm91bmROYW1lcykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBi
b29sIGludmFsaWRSb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9y
ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rv
cjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3Np
Z25lZE9iamVjdFN0b3JlSWQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDU4MWFhOGMwMTUzZDk2ZTA5OTA4NDFjNDg2
N2Y1NGZhNWFmYWJmMTcuLjg3MWVjM2YwNTE2Njk0MzNmYjg0YjA3YzMyMGUzMTE5Y2UyZGJkODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcApAQCAtNTUsNiArNTUsMjIgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBtX2NhbGxiYWNrczsKIH07CiAKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRp
bmdEZWxldGVDYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNhbGw+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBlbmRpbmdEZWxldGVDYWxsKGNhbGxiYWNrcykpOworICAgIH0KKyAgICBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7
IH0KKworcHJpdmF0ZToKKyAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7
CisgICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKwogY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxsIDogcHVibGlj
IFJlZkNvdW50ZWQ8UGVuZGluZ1NldFZlcnNpb25DYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKQEAgLTkwLDYgKzEwNiwxMSBA
QCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogCiAgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5n
U3RvcmUtPmV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lk
KTsKICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxp
ZElkKSk7CisgICAgb3BlbkludGVybmFsKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b3BlbkludGVybmFsKCkKK3sKICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5zZXRJREJE
YXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkLCBtX2lkID09IEludmFsaWRJ
ZCkpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogTmVlZCBiZXR0ZXIg
ZXJyb3IgaGFuZGxpbmcuCiAgICAgbG9hZE9iamVjdFN0b3JlcygpOwpAQCAtMjU4LDcgKzI3OSwy
MSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQog
ICAgICAgICBBU1NFUlQoIWVjKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIW1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiAmJiBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
ICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVx
dWV1ZWQuCisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IHBlbmRpbmdEZWxl
dGVDYWxsczsKKyAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5zd2FwKHBlbmRpbmdEZWxldGVDYWxs
cyk7CisgICAgd2hpbGUgKCFwZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAg
IFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBwZW5kaW5nRGVs
ZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZURhdGFiYXNlKHBlbmRpbmdEZWxl
dGVDYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8
fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICB3aGlsZSAoIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgUmVmUHRy
PFBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0gbV9wZW5kaW5nT3BlbkNhbGxzLnRh
a2VGaXJzdCgpOwogICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxi
YWNrcygpKTsKICAgICB9CkBAIC0yODQsMTAgKzMxOSw0MyBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkK
KyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpj
cmVhdGUoY2FsbGJhY2tzKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgeworICAgICAgICBpZiAobV9p
ZCA9PSBJbnZhbGlkSWQpCisgICAgICAgICAgICBvcGVuSW50ZXJuYWwoKTsKICAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MpCit7CisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAh
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdE
ZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShwcnBDYWxsYmFja3Mp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvblZlcnNpb25D
aGFuZ2UgaWYgdGhlcmUgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgaW4KKyAgICAvLyB0aGUgcHJvY2Vz
cyBvZiBjbG9zaW5nLgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwNjQ1CisgICAgZm9yIChE
YXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQp
CisgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOworICAgIC8vIEZJWE1FOiBPbmx5
IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQor
ICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAg
dG8gZmlyZS4KKyAgICAvLyBodHRwOi8vY3JidWcuY29tLzEwMDEyMworICAgIGlmICghbV9kYXRh
YmFzZUNhbGxiYWNrc1NldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgICAg
IGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkgeworICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX3ZlcnNpb24gPSAiIjsKKyAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1f
b2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApp
bmRleCBlOGIxMDg0NTAxMzA0Y2QxOGY1ZmY2NmExYWQ0OWU4YWJmNmFjYmYwLi43YTVjZTFkYTgz
YzhiNDYxY2YzYWY4OWMxMTMyMTUzNDEyMGIxNmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6
CiAgICAgLy8gRklYTUU6IFJlbmFtZSAib3BlbiIgdG8gc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRp
dmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcy4KICAgICB2b2lkIG9wZW4oUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdmVyc2lvbjsgfQpAQCAtNzcsNiArNzgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAorICAgIHZvaWQgb3Bl
bkludGVybmFsKCk7CiAgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7CiAgICAgdm9pZCBwcm9j
ZXNzUGVuZGluZ0NhbGxzKCk7CiAKQEAgLTExMCw2ICsxMTIsOSBAQCBwcml2YXRlOgogICAgIGNs
YXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+
IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdEZWxldGVDYWxsOworICAg
IERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdEZWxldGVDYWxsczsK
KwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiA+
IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwogICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJh
c2VDYWxsYmFja3NTZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5k
ZXggYWIxNmI3ZDZlZGRlMjM0ODAyYzA1YTI2ZmEwMjljYTRhMjc5NDM1YS4uMDU4YzRkM2U1YWVk
OTZkZDc1ZmU3YTIzNDMxODU1Mjk2MDJlOTc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFn
ZUdyb3VwLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTk4LDYgKzk5LDI4IEBA
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKK1Bhc3NS
ZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVu
dC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50
LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0
dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKyAgICBt
X2ZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4
ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwogc2hvcnQgSURC
RmFjdG9yeTo6Y21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJREJLZXk+
IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKGZpcnN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggODkzNDIxZDE4MDk0ZDczNDBhZTM5NGRmYThl
YjEyNmYwM2E5OWM2Ny4uMTdiZmYxZDFmY2JkMmYwMzllMmJkNmFmZGFiYzlmNWVjODkyYWM4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeSA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgIHNob3J0IGNtcChQYXNzUmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURC
S2V5PiBzZWNvbmQsIEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5pZGwKaW5kZXggMjNmYTg3MWViYTdlMjdlYWY4YzdhODhlM2I3NGU3YmY1MDU1NWE0NS4u
YzQ0OTk2YmEwZjlhY2M4ZmFlYmJjYzVkMDJkNDY4Nzk2YTZkODYxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuaWRsCkBAIC0zMiw2ICszMiw4IEBAIG1vZHVsZSBzdG9yYWdlIHsK
IAogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBv
cGVuKGluIERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4
Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdCBkZWxldGVEYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSkKKyAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogCiAgICAgICAgIHNob3J0
IGNtcChpbiBJREJLZXkgZmlyc3QsIGluIElEQktleSBzZWNvbmQpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NDRkNmFjZGJmYmIwN2YwNWJiMjUzZWVm
MzYxNTNhZDEyMzY5ODZiLi5kMTI0ODFkM2RjMTExMDhiMDY4YmI2MDFiZmMzNmY4OGQ0YzkyZTFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwCkBAIC0xMjIsNiArMTIyLDMwIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAgICAgbV9k
YXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5n
ZXQoKSk7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcikKK3sKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNv
bXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAg
IElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1h
cC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRv
IHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQorICAgICAgICAvLyBkYXRhYmFzZS4K
KyAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNo
b3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgbV9k
YXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5n
ZXQoKSk7CisgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwor
fQorCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlm
aWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCmluZGV4IDZlZTli
YjI0MzAzMzAxZmFjNDE1YWEwNjkwYzYxYmE0ZjEyZDhkZWYuLjljMmYwN2ZiNzA1NDdhMjEwM2E0
Y2FkNzdkYjU2ZTU5M2YxYzQ5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElE
QkZhY3RvcnlCYWNrZW5kSW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGM0MDE4ZWZmOWRkNjRkYmM5Yjc5NDJl
NTBjM2IwMjU1MjQyNzc5MzguLmU5MjU0NWQyY2ZmNjM5ZWYwN2VkYjEwNjFkYmU1MzZjYjgyMTg5
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwCmluZGV4IGZhNGU1YjM0ODI2YjFkOTU5ZDU2OTI1ZGJmODQ2ZTVhNDIw
MDFlNjguLmNlYTFmZmY5OTBmMWEyNjZjOGU1M2IyNjg3ODcxYzg0YzI2NGUzMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAt
MjM0LDYgKzIzNCw0NyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnNldElEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdAogICAgIHJldHVybiB0cnVl
OwogfQogCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVu
ZCkKK3sKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYm
IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAgICAg
aWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKKyAgICB0
cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJZDsKKyAgICBTdHJp
bmcgdmVyc2lvbjsKKyAgICBpZiAoIWV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZl
cnNpb24sIGRhdGFiYXNlSWQpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5
ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQgKyAxLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7CisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5yb2xsYmFjaygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmll
ciwgbmFtZSk7CisgICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShrZXkpOworCisgICAg
dHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9v
bCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciog
aXQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG1ldGFEYXRhVHlwZSkKIHsKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFy
ZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA+PSAwKQpAQCAtNDEzLDE3ICs0NTQsNiBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBk
ZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuZCkKLXsKLSAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGZv
ciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXko
KSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVt
b3ZlKGl0LT5rZXkoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKQEAgLTEzNzcsOCArMTQwNyw2IEBAIGJv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbiwKICAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVO
VCIpOwogfQogCi0vLyBGSVhNRTogZGVsZXRlRGF0YWJhc2Ugc2hvdWxkIGJlIHBhcnQgb2YgSURC
QmFja2luZ1N0b3JlLgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0Uo
TEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmgKaW5kZXggYzFkM2FjNGRiZjk4ZmJmZWQ1NDg5MjQ4NTc4ZWM4ZDJmM2I4NGUxZS4uODdi
MDk3ZDA4YjY0Mjk5YTNiNTJlOGUyM2Q4MjNhZmFjZDc2YzNjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91
bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGlu
dmFsaWRSb3dJZCk7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
QXV0b0luY3JlbWVudEZsYWdzKTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXggOTBhNjFkYTQzMWQ3ZWI1
NTdkYjA4ZTM1Njk0N2UyYTY5MGUyOTE2Yi4uOWIwNDNlYTA5OTg4MzEzYjE2OTNlNDBjMTI2OTE5
YjdiMDIzY2E3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0zMDEs
OCArMzAxLDggQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpOwogICAgIGJvb2wgZG9u
dFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQo
KSwgdGFyZ2V0cyk7CiAKLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNv
ciwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlmIChtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+
dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlwZSAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElE
QkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBv
ZiB0eXBlIElEQkN1cnNvciwgb3IgYSBvbkJsb2NrZWQgZXZlbnQsIHRoZW4gd2UnbGwgZmlyZSBh
Z2Fpbi4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50
ICYmIG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JUeXBl
ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQog
ICAgICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwCmluZGV4IDdhNjJlNTBlYmIxNWE1MmQ1NTU0YzYzNzA0ZTQ5NGFiOTU1NjIwMGEuLjdi
NjAzOGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0ZGNlZWU0YTBmOWMgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBAIC05
MSw2ICs5MSwxOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gYwogICAgIG1fd2ViSURCRmFjdG9y
eS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4s
IHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojpk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4g
b3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZy
YW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYg
IXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5h
bWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNl
RXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJh
c2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJGYWN0b3J5LT5k
ZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBv
cmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAppbmRleCBiYWYxZTA1ZTJj
OTkyZjkyMWM3ZGQyN2Q0ZmQzMjZlOGE2YWE4NmVkLi5lMTRiOGNlYTk4MmYzMTdlNDFkNDNhOGM5
M2YxZDdkNjFmNjcxYzMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4
IDFjMDk2OGE1NTFjMmM4NDBiMDkwMjU0YzZhZDgwNGQyMTMzZjMwN2UuLjg0YzFhM2Q0MmUxYWIx
MmYzM2NkMjMyZDlmMTQ1YjZkODMwZWRkNmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKQEAgLTYwLDE3ICs2MCwxOCBAQCBXZWJJREJG
YWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIAogdm9pZCBXZWJJREJGYWN0b3J5SW1w
bDo6Z2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFE
aXIpCiB7Ci0gICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOwotCi0gICAgbV9pZGJGYWN0b3J5
QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0
UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOworICAgIG1faWRiRmFjdG9yeUJhY2tl
bmQtPmdldERhdGFiYXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihj
YWxsYmFja3MpKSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKIH0KIAogCiB2b2lkIFdlYklEQkZhY3Rv
cnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3Qg
V2ViU3RyaW5nJiBkYXRhRGlyKQogewotICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsKKyAg
ICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVh
dGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgZGF0YURpcik7Cit9CiAKLSAgICBt
X2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUo
YWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7Cit2b2lkIFdlYklEQkZhY3Rv
cnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxi
YWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFt
ZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikKK3sKKyAgICBtX2lkYkZhY3RvcnlCYWNrZW5k
LT5kZWxldGVEYXRhYmFzZShuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRy
KGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3Rv
cnlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5o
CmluZGV4IDNlMDFkMWE2M2M4OTI0MDYxZjU3Yzg1NzdhZWFmNWJiNDE2YmM2YzIuLmIzZTQ3NGRm
OTI1NWU4NzdmMmZmNmQwZTYzMTAzNTU2MjQ2ZDE3MTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRh
RGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklE
QkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBX
ZWJTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3Jp
Z2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgog
ICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2lk
YkZhY3RvcnlCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDU2OTY2ODYxNzA2ZTEyZmY0NjU1MjkyNTUyZGJjZjNk
MGQ1ZjFiOTIuLjk2MDFkZjU0NDcyOWRhOTZiMjhjNDExODk3NmZhMmJhNmIxZDFlMTUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0yNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sOiBVcGRhdGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRh
dGFiYXNlLWludGVyYWN0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2Uu
aHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMjcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc2VhcmNoL3NlYXJjaC1p
bi1yZXNvdXJjZXMuaHRtbCBmYWlscyBvbiBhbGwgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQK
aW5kZXggZTljZjdhMjAzOWNhNmQ5ZmU0Zjk1ZGExMTMxNDY5MTViODkyMTVhMi4uY2I4NWI3NjQx
Zjc4NjRlMjRkN2QyNDI4OWMwOGY0NjYxYWZkYTI0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAt
OCwxNyArOCwyMyBAQCBQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCiBQQVNTIHR5cGVv
ZiBpbmRleGVkREIub3BlbiA9PT0gJ2Z1bmN0aW9uJyBpcyB0cnVlCiBQQVNTIHR5cGVvZiBpbmRl
eGVkREIuY21wID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlwZW9mIGluZGV4ZWREQi5n
ZXREYXRhYmFzZU5hbWVzID09PSAnZnVuY3Rpb24nIGlzIHRydWUKLWRlbGV0ZURhdGFiYXNlIEFQ
SSBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBzbyB0aGlzIHdpbGwgZmFpbDoKLUZBSUwgdHlwZW9m
IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJyBzaG91bGQgYmUgdHJ1ZS4g
V2FzIGZhbHNlLgorUEFTUyB0eXBlb2YgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlID09PSAnZnVu
Y3Rpb24nIGlzIHRydWUKIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkKIGRhdGFiYXNlTmFt
ZXMgPSBldmVudC50YXJnZXQucmVzdWx0CiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgZmFsc2UKIFBBU1MgZGF0YWJhc2VO
YW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCiBp
bmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikKK2V2ZW50LnRhcmdldC5yZXN1bHQuY2xv
c2UoKQogaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQogZGF0YWJhc2VOYW1lcyA9IGV2ZW50
LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRl
eGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyB0cnVlCiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFp
bnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpCitpbmRleGVk
REIuZ2V0RGF0YWJhc2VOYW1lcygpCitkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dAorUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWJhc2ljcycpIGlzIGZhbHNlCitQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNF
IFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwKaW5kZXggMjg1YTA2YzNlMDczMTBmYmEwYWY5Zjdk
ZmEzMDdiZDNmZjk3MDc1Zi4uNjI4ZmVlZjNlMTk5YThlMjNmY2Y2NzAyNzUyODMxYjE5NTI3NWY4
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNp
Y3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2lj
cy5odG1sCkBAIC0yMyw3ICsyMyw2IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHNob3VsZEJlVHJ1
ZSgidHlwZW9mIGluZGV4ZWREQi5jbXAgPT09ICdmdW5jdGlvbiciKTsKICAgICBzaG91bGRCZVRy
dWUoInR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcyA9PT0gJ2Z1bmN0aW9uJyIpOwog
Ci0gICAgZGVidWcoImRlbGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBz
byB0aGlzIHdpbGwgZmFpbDoiKTsKICAgICBzaG91bGRCZVRydWUoInR5cGVvZiBpbmRleGVkREIu
ZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5jdGlvbiciKTsKIAogICAgIG5hbWUgPSAnc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnOwpAQCAtNDgsNiArNDcsNyBAQCBmdW5jdGlvbiBnZXRE
YXRhYmFzZU5hbWVzU3VjY2VzczEoKQogCiBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiB7CisgICAg
ZXZhbEFuZExvZygiZXZlbnQudGFyZ2V0LnJlc3VsdC5jbG9zZSgpIik7CiAgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coImluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkiKTsKICAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMjsKICAgICByZXF1ZXN0Lm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKQEAgLTYwLDggKzYwLDMyIEBAIGZ1bmN0aW9u
IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMigpCiAgICAgc2hvdWxkQmVUcnVlKCJkYXRhYmFzZU5h
bWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwogICAgIHNob3VsZEJlRmFsc2UoImRhdGFi
YXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOwogCi0g
ICAgLy8gRklYTUU6IHRlc3QgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCciICsg
bmFtZSArICInKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRGF0YWJhc2VTdWNj
ZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQog
CitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MoKQoreworICAgIHJlcXVlc3QgPSBldmFs
QW5kTG9nKCJpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpIik7CisgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczM7CisgICAgcmVxdWVzdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNT
dWNjZXNzMygpCit7CisgICAgdmFyIGRhdGFiYXNlTmFtZXM7CisgICAgZXZhbEFuZExvZygiZGF0
YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJk
YXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOworICAgIHNob3VsZEJlRmFs
c2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1Qn
KSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZSgnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MyOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZVN1Y2Nlc3My
KCkKK3sKICAgICBkb25lKCk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWNjZGY3MTNhZGYxNjYwZDdjZjYwNzJiZTg0ZTkzMDc0YjU2YTNiOQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVs
ZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjggQEAKK1Rlc3QgSW5kZXhlZERC
J3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCit3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykK
K2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQor
dHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlzIHRydWUK
K3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpCitzdG9yZS5j
cmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpCitQQVNTIHN0b3JlLmluZGV4TmFtZXMuY29udGFp
bnMoJ2luZGV4TmFtZScpIGlzIHRydWUKK3N0b3JlLmFkZCgndmFsdWUnLCAna2V5JykKK2RiLnRy
YW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFfSkKK3N0b3Jl
ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCitzdG9yZS5nZXQoJ2tleScp
CitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgInZhbHVlIgorZGIuc2V0VmVyc2lvbignbmV3
IHZlcnNpb24nKQorcmVxdWVzdCA9IHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0
YWJhc2UtdG8tZGVsZXRlJykKK3dlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxl
dGUnKQorZGIgPSBldmVudC50YXJnZXQucmVzdWx0CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lv
bicpCitQQVNTIGRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3RoIGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9u
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRl
bGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU2ZDJh
NTFhODMwYjZjYTg2MjI4YTk5ZDYwMDI5YWRlYmVlYjIxNwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJh
Y3Rpb25zLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcwIEBACitUZXN0IHRoZSBkZWxldGVEYXRh
YmFzZSBjYWxsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZlcnNpb24KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIg
fHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBp
bmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQorCitURVNUOiBkZWxldGVEYXRhYmFzZSBibG9ja2Vk
IG9uIG9wZW4gaGFuZGxlcword2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0
ZURhdGFiYXNlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBp
bW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcKKydoLmNsb3NlJworJ2RlbGV0
ZURhdGFiYXNlLm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgaXMgImgu
b3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGgub252ZXJzaW9uY2hhbmdlLGRl
bGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyIK
KworVEVTVDogZGVsZXRlRGF0YWJhc2Ugbm90IGJsb2NrZWQgd2hlbiBoYW5kbGVzIGNsb3NlIGlt
bWVkaWF0ZWx5Cit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdpbmRv
dy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJh
c2UnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nIGltbWVkaWF0ZWx5CisnaC5j
bG9zZScKKydkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisnZGVsZXRlRGF0YWJhc2Uub25zdWNj
ZXNzJworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgZGVsZXRlRGF0YWJhc2Uub25i
bG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5n
KCkgc2hvdWxkIGJlIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGgub252
ZXJzaW9uY2hhbmdlLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLiBXYXMgaC5vcGVu
LGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UsaC5vbnZlcnNpb25jaGFuZ2UsaC5jbG9z
ZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLgorCitU
RVNUOiBkZWxldGVEYXRhYmFzZSBpcyBkZWxheWVkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNh
Y3Rpb24gaXMgcnVubmluZword2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2guc2V0
VmVyc2lvbicKKydkZWxldGVEYXRhYmFzZScKKydoLnNldFZlcnNpb24ub25zdWNjZXNzJworJ2gu
c2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAg
ICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZS5vbmJsb2Nr
ZWQnCisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5z
dGVwcy50b1N0cmluZygpIGlzICJoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxoLnNldFZlcnNpb24s
ZGVsZXRlRGF0YWJhc2UsaC5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoLnNldFZlcnNpb24udHJhbnNh
Y3Rpb24tY29tcGxldGUsaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0YWJhc2Uub25ibG9ja2Vk
LGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorCitURVNUOiBtdWx0aXBsZSBkZWxl
dGVEYXRhYmFzZSBjYWxscword2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0
ZURhdGFiYXNlJworJ2RlbGV0ZURhdGFiYXNlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGgg
Y2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCcK
KydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkK
KydkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnCisnaC5jbG9zZScKKydoLmNsb3NlJworJ2RlbGV0
ZURhdGFiYXNlLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MnCitOT1RFOiBX
aWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBoLm9udmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0ZXBz
OyBjcmJ1Zy5jb20vMTAwNjQ1CitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBi
ZSBoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSxkZWxldGVEYXRhYmFzZSxo
Lm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2Uu
b25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNl
Lm9uc3VjY2Vzcy4gV2FzIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlLGRl
bGV0ZURhdGFiYXNlLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlLm9uYmxvY2tlZCxo
Lm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQsaC5jbG9zZSxoLmNsb3Nl
LGRlbGV0ZURhdGFiYXNlLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MuCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1p
bnRlcmFjdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
ZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkwNTdmMDk2ZGY5
ZDRjZTJjZmQwYjYwMzVkZjk1NDM4ZmMxMGQxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25z
Lmh0bWwKQEAgLTAsMCArMSwyMzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxl
c2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRo
ZSBkZWxldGVEYXRhYmFzZSBjYWxsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZl
cnNpb24iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBDb25uZWN0aW9uKGlkKSB7
CisgICAgaWQgPSBTdHJpbmcoaWQpOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLm9w
ZW4gPSBmdW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRM
b2coIiciICsgaWQgKyAiLm9wZW4nIikpOworICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERCLm9w
ZW4od2luZG93LmRibmFtZSk7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAg
ICAgICAgc2VsZi5oYW5kbGUgPSBlLnRhcmdldC5yZXN1bHQ7CisgICAgICAgICAgICB3aW5kb3cu
c3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vcGVuLm9uc3VjY2VzcyciKSk7Cisg
ICAgICAgICAgICBzZWxmLmhhbmRsZS5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbihlKSB7Cisg
ICAgICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIu
b252ZXJzaW9uY2hhbmdlJyIpKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9u
dmVyc2lvbikgeyBvcHRzLm9udmVyc2lvbi5jYWxsKHNlbGYpOyB9CisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3Mu
Y2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLmNsb3NlID0gZnVu
Y3Rpb24oKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQg
KyAiLmNsb3NlJyIpKTsKKyAgICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB9OworCisg
ICAgdGhpcy5zZXRWZXJzaW9uID0gZnVuY3Rpb24ob3B0cykgeworICAgICAgICB3aW5kb3cuc3Rl
cHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uJyIpKTsKKyAgICAgICAg
dmFyIHJlcSA9IHRoaXMuaGFuZGxlLnNldFZlcnNpb24oU3RyaW5nKHdpbmRvdy52ZXIrKykpOwor
ICAgICAgICByZXEub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cu
c3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYWJvcnQnIikp
OworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmFib3J0KSB7IG9wdHMub25hYm9ydC5j
YWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlv
biAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBp
ZCArICIuc2V0VmVyc2lvbi5vbmJsb2NrZWQnIikpOworICAgICAgICAgICAgaWYgKG9wdHMgJiYg
b3B0cy5vbmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgICAgICB9
OworICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdp
bmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25zdWNj
ZXNzJyIpKTsKKyAgICAgICAgICAgIGlmIChzZWxmLmhhbmRsZS5vYmplY3RTdG9yZU5hbWVzLmNv
bnRhaW5zKCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpKSB7CisgICAgICAgICAgICAgICAgc2Vs
Zi5oYW5kbGUuZGVsZXRlT2JqZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc3RvcmUgPSBzZWxmLmhhbmRsZS5jcmVhdGVP
YmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIHZhciBj
b3VudCA9IDA7CisgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7IC8vIEtlZXAgdGhpcyB0cmFu
c2FjdGlvbiBydW5uaW5nIGZvciBhIHdoaWxlCisgICAgICAgICAgICBmdW5jdGlvbiBkb19hc3lu
Y19wdXRzKCkgeworICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5wdXQoY291bnQsIGNv
dW50KTsKKyAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOworICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoKytjb3VudCA8IDEwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBkb19hc3luY19wdXRzKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlk
ICsgIi5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJyIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNh
bGwoc2VsZik7IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24g
KGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQg
KyAiLnNldFZlcnNpb24ub25lcnJvciciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRz
Lm9uZXJyb3IpIHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICB9
OworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZShuYW1lLCBvcHRzKSB7CisgICAgd2luZG93
LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlJyIpKTsKKyAgICB2YXIgcmVx
ID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVs
ZXRlRGF0YWJhc2Uub25zdWNjZXNzJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1
Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAgIH07CisgICAgcmVxLm9u
ZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5k
TG9nKCInZGVsZXRlRGF0YWJhc2Uub25lcnJvciciKSk7CisgICAgICAgIGlmIChvcHRzICYmIG9w
dHMub25lcnJvcikgeyBvcHRzLm9uZXJyb3IuY2FsbChzZWxmKTsgfQorICAgIH07CisgICAgcmVx
Lm9uYmxvY2tlZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2
YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQnIikpOworICAgICAgICBpZiAob3B0
cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAg
fTsKK30KKworLy8gcnVuIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgdGFrZSBhIGNvbnRpbnVhdGlv
biBmdW5jdGlvbgorZnVuY3Rpb24gcnVuU3RlcHMoY29tbWFuZHMpIHsKKyAgICBpZiAoY29tbWFu
ZHMubGVuZ3RoKSB7CisgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHMuc2hpZnQoKTsKKyAg
ICAgICAgY29tbWFuZChmdW5jdGlvbigpIHsgcnVuU3RlcHMoY29tbWFuZHMpOyB9KTsKKyAgICB9
Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5k
ZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdp
bmRvdy5tb3pJbmRleGVkREI7Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51
bGwiKTsKKyAgICB0ZXN0MSgpOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBkZWJ1Zygi
Iik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBoYW5k
bGVzIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52
ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24o
ImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNz
OiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAg
IGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgZnVuY3Rp
b24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgIF0p
OworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0
cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyJoLm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4u
b25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJh
c2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9uYmxvY2tl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3MiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDIoKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QyKCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1
ZygiVEVTVDogZGVsZXRlRGF0YWJhc2Ugbm90IGJsb2NrZWQgd2hlbiBoYW5kbGVzIGNsb3NlIGlt
bWVkaWF0ZWx5Iik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Mic7IHdp
bmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5l
Y3Rpb24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25z
dWNjZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nIGltbWVkaWF0ZWx5Iik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC5jbG9zZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAg
ZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUsIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAg
ICAgIF0pOworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RF
OiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQgc3Rl
cDsgY3JidWcuY29tLzEwMDEyMyIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndp
bmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsi
aC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2Vz
cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3QzKCk7CisgICAgfQorfQor
CitmdW5jdGlvbiB0ZXN0MygpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRl
bGV0ZURhdGFiYXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBp
cyBydW5uaW5nIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdp
bmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5l
Y3Rpb24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25z
dWNjZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lv
bjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1
ZygiICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9
LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAg
ICAgICBmdW5jdGlvbihkb05leHQpIHsgaC5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LAorICAg
ICAgICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2Uod2luZG93LmRibmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge29uc3VjY2VzczogZmluaXNoVGVz
dH0pOyB9LAorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7
CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaC5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGVsZXRlRGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
LnNldFZlcnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aC5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZWxldGVEYXRhYmFzZS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVs
ZXRlRGF0YWJhc2Uub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0u
dG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3Q0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0
NCgpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IG11bHRpcGxlIGRlbGV0ZURh
dGFiYXNlIGNhbGxzIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0NCc7
IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENv
bm5lY3Rpb24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7
b25zdWNjZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVy
c2lvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZWJ1ZygiICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgp
OyB9LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAg
ICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKHdpbmRvdy5kYm5hbWUpOyBkb05l
eHQoKTsgfSwKKyAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSh3aW5k
b3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzOiBmaW5p
c2hUZXN0fSk7IH0sCisgICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgewor
ICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaC5vbnZlcnNp
b25jaGFuZ2UvaC5jbG9zZSBzdGVwczsgY3JidWcuY29tLzEwMDY0NSIpOworICAgICAgICBzaG91
bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGV0ZURhdGFiYXNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRl
RGF0YWJhc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNo
YW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlLm9u
YmxvY2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNl
Lm9uYmxvY2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nlc3Mi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZS5vbnN1Y2Nl
c3MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAg
ICAgZG9uZSgpOworICAgIH0KK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisK
K3Rlc3QoKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzc1OGJiNTIyYTQ3YmZkMWViZTFkNGM3MTJjODUxNzJmMjUxZWQwOAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVs
ZXRlZGF0YWJhc2UuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5r
IHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1z
dHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRp
b24oIlRlc3QgSW5kZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuIik7
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIp
OworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uOworICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNl
dFZlcnNpb24oKQoreworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVz
dWx0Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZl
cnNpb24nKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRXhpc3Rpbmc7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9u
IGRlbGV0ZUV4aXN0aW5nKCkKK3sKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFu
cyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBu
dWxsIik7CisKKyAgICBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0
U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpIik7CisKKyAgICB3aW5kb3cuaW5kZXggPSBldmFsQW5k
TG9nKCJzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpIik7CisgICAgc2hvdWxkQmVU
cnVlKCJzdG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSIpOworCisgICAgcmVx
dWVzdCA9IGV2YWxBbmRMb2coInN0b3JlLmFkZCgndmFsdWUnLCAna2V5JykiKTsKKyAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGdldFZhbHVlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBnZXRWYWx1ZSgpCit7CisgICAgdHJhbnNh
Y3Rpb24gPSBldmFsQW5kTG9nKCJkYi50cmFuc2FjdGlvbih7bW9kZTogd2Via2l0SURCVHJhbnNh
Y3Rpb24uUkVBRF9XUklURX0pIik7CisgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworICAgIHZhciBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gdHJh
bnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7CisKKyAgICByZXF1ZXN0ID0gZXZh
bEFuZExvZygic3RvcmUuZ2V0KCdrZXknKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gYWRk
SW5kZXg7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9
CisKK2Z1bmN0aW9uIGFkZEluZGV4KCkKK3sKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoImV2
ZW50LnRhcmdldC5yZXN1bHQiLCAidmFsdWUiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3Mg
PSBkZWxldGVEYXRhYmFzZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JD
YWxsYmFjazsKK30KKworZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2UoKQoreworICAgIGRiLm9udmVy
c2lvbmNoYW5nZSA9IGZ1bmN0aW9uKCkgeyBkYi5jbG9zZSgpOyB9CisgICAgcmVxdWVzdCA9IGV2
YWxBbmRMb2coInJlcXVlc3QgPSB3ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2RhdGFi
YXNlLXRvLWRlbGV0ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSByZW9wZW5EYXRhYmFz
ZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gcmVvcGVuRGF0YWJhc2UoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3
ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IHN0YXJ0U2V0VmVyc2lvbkFnYWluOworICAgIHJlcXVlc3Qub25lcnJvciA9
IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNldFZlcnNpb25B
Z2FpbigpCit7CisgICAgcmRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0
Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNp
b24nKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdmVyaWZ5Tm90Rm91bmQ7CisgICAgcmVx
dWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHZl
cmlmeU5vdEZvdW5kKCkKK3sKKyAgICBzaG91bGRCZSgiZGIub2JqZWN0U3RvcmVOYW1lcy5sZW5n
dGgiLCAiMCIpOworCisgICAgZG9uZSgpOworfQorCit0ZXN0KCk7CisKK3ZhciBzdWNjZXNzZnVs
bHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112823</attachid>
            <date>2011-10-28 00:33:57 -0700</date>
            <delta_ts>2011-10-28 03:05:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111028093354.patch</filename>
            <type>text/plain</type>
            <size>49091</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg1NTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZDQ5MmFkZWFmNTU1ZTNh
NWZhMWNjNWU1M2E4NDYzNjg1OThkOGE4Li4yNjFkOWE5YzAzNmRiOGRlNWFlMWVjOTFmYjhiNzk5
Nzg3MTM2MGEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpw
cm9jZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5Db25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dCk6CisKIDIwMTEtMTAtMjcgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYkluc3BlY3RvcjogVmlldyB0aHJvdWdocyB0aGUgZXhjZXB0aW9uIHdo
ZW4gYSBjaGlsZCB2aWV3IGFyZSByZW1vdmVkIGJ5IHJlbW92ZUNoaWxkcmVuIGNhbGwuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDRmOGYyMGIzOTA1YjIxOTRlY2E0YTgwOTJjNTllN2Ji
ZDRiZDZkNDAuLjk2ZDFkZmI1MGViZGI4NzdjM2FjMzUwODc1YWM3MzQzOGYwMDQ2NmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHA6CisgICAgICAg
IChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAg
ICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorICAgICAgICAqIHNyYy9XZWJJREJG
YWN0b3J5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkZhY3RvcnlJbXBsOjpnZXRE
YXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6Om9wZW4p
OgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgor
ICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEwLTI2ICBDaHJpcyBS
b2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgQWRkIGNocm9taXVtIGJyaWRn
aW5nIGZvciBBdWRpb1NvdXJjZVByb3ZpZGVyQ2xpZW50IGFuZCBzZXRGb3JtYXQoKSBtZXRob2Qg
c28gd2UgY2FuIGtub3cgYXVkaW8gc3RyZWFtIGZvcm1hdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCQmFja2luZ1N0b3JlLmgKaW5kZXggNmUxM2Y0ZmE2MWM0YTIxZDQyYzNmZmRlNWJkYzczZDkx
ZGRiM2M0MS4uNTdmODkyM2M0ZWQ1NGFmNDkyY2I0Y2Q5NjI3YzU5OGU1YzYwMTIwMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC00OSw2ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhWZWN0b3I8U3RyaW5nPiYg
Zm91bmROYW1lcykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRh
RGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBm
b3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBi
b29sIGludmFsaWRSb3dJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9y
ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rv
cjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3Np
Z25lZE9iamVjdFN0b3JlSWQpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDU4MWFhOGMwMTUzZDk2ZTA5OTA4NDFjNDg2
N2Y1NGZhNWFmYWJmMTcuLjg3MWVjM2YwNTE2Njk0MzNmYjg0YjA3YzMyMGUzMTE5Y2UyZGJkODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmNwcApAQCAtNTUsNiArNTUsMjIgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tz
PiBtX2NhbGxiYWNrczsKIH07CiAKK2NsYXNzIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBlbmRp
bmdEZWxldGVDYWxsIDogcHVibGljIFJlZkNvdW50ZWQ8UGVuZGluZ0RlbGV0ZUNhbGw+IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gY3JlYXRlKFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBlbmRpbmdEZWxldGVDYWxsKGNhbGxiYWNrcykpOworICAgIH0KKyAgICBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKCkgeyByZXR1cm4gbV9jYWxsYmFja3M7
IH0KKworcHJpdmF0ZToKKyAgICBQZW5kaW5nRGVsZXRlQ2FsbChQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQorICAgICAgICA6IG1fY2FsbGJhY2tzKGNhbGxiYWNrcykKKyAgICB7
CisgICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOworfTsKKwogY2xh
c3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ1NldFZlcnNpb25DYWxsIDogcHVibGlj
IFJlZkNvdW50ZWQ8UGVuZGluZ1NldFZlcnNpb25DYWxsPiB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBjcmVhdGUoY29uc3QgU3RyaW5nJiB2
ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKQEAgLTkwLDYgKzEwNiwxMSBA
QCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsKGNvbnN0IFN0
cmluZyYgbmFtZSwgSURCQmFja2luZ1N0bwogCiAgICAgYm9vbCBzdWNjZXNzID0gbV9iYWNraW5n
U3RvcmUtPmV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lk
KTsKICAgICBBU1NFUlRfVU5VU0VEKHN1Y2Nlc3MsIHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxp
ZElkKSk7CisgICAgb3BlbkludGVybmFsKCk7Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6b3BlbkludGVybmFsKCkKK3sKICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5zZXRJREJE
YXRhYmFzZU1ldGFEYXRhKG1fbmFtZSwgbV92ZXJzaW9uLCBtX2lkLCBtX2lkID09IEludmFsaWRJ
ZCkpCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogTmVlZCBiZXR0ZXIg
ZXJyb3IgaGFuZGxpbmcuCiAgICAgbG9hZE9iamVjdFN0b3JlcygpOwpAQCAtMjU4LDcgKzI3OSwy
MSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQog
ICAgICAgICBBU1NFUlQoIWVjKTsKICAgICB9CiAKLSAgICB3aGlsZSAoIW1fcnVubmluZ1ZlcnNp
b25DaGFuZ2VUcmFuc2FjdGlvbiAmJiBtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgp
ICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgaWYgKG1fcnVubmluZ1Zl
cnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUGVuZGluZyBjYWxscyBtYXkgYmUgcmVx
dWV1ZWQuCisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IHBlbmRpbmdEZWxl
dGVDYWxsczsKKyAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5zd2FwKHBlbmRpbmdEZWxldGVDYWxs
cyk7CisgICAgd2hpbGUgKCFwZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKSB7CisgICAgICAg
IFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gcGVuZGluZ0RlbGV0ZUNhbGwgPSBwZW5kaW5nRGVs
ZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0ZURhdGFiYXNlKHBlbmRpbmdEZWxl
dGVDYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorCisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSB8
fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICB3aGlsZSAoIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpIHsKICAgICAgICAgUmVmUHRy
PFBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0gbV9wZW5kaW5nT3BlbkNhbGxzLnRh
a2VGaXJzdCgpOwogICAgICAgICBvcGVuQ29ubmVjdGlvbihwZW5kaW5nT3BlbkNhbGwtPmNhbGxi
YWNrcygpKTsKICAgICB9CkBAIC0yODQsMTAgKzMxOSw0MyBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9uKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkK
KyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1wdHkoKSB8fCBtX3J1bm5pbmdWZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5
KCkpCiAgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBlbmQoUGVuZGluZ09wZW5DYWxsOjpj
cmVhdGUoY2FsbGJhY2tzKSk7Ci0gICAgZWxzZQorICAgIGVsc2UgeworICAgICAgICBpZiAobV9p
ZCA9PSBJbnZhbGlkSWQpCisgICAgICAgICAgICBvcGVuSW50ZXJuYWwoKTsKICAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7CisgICAgfQorfQorCit2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MpCit7CisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAh
bV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdE
ZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShwcnBDYWxsYmFja3Mp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvblZlcnNpb25D
aGFuZ2UgaWYgdGhlcmUgdGhlIGNvbm5lY3Rpb24gaXNuJ3QgaW4KKyAgICAvLyB0aGUgcHJvY2Vz
cyBvZiBjbG9zaW5nLgorICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwNjQ1CisgICAgZm9yIChE
YXRhYmFzZUNhbGxiYWNrc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQ2FsbGJh
Y2tzU2V0LmJlZ2luKCk7IGl0ICE9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuZW5kKCk7ICsraXQp
CisgICAgICAgICgqaXQpLT5vblZlcnNpb25DaGFuZ2UoIiIpOworICAgIC8vIEZJWE1FOiBPbmx5
IGZpcmUgb25CbG9ja2VkIGlmIHRoZXJlIGFyZSBvcGVuIGNvbm5lY3Rpb25zIGFmdGVyIHRoZQor
ICAgIC8vIFZlcnNpb25DaGFuZ2VFdmVudHMgYXJlIHJlY2VpdmVkLCBub3QganVzdCBzZXQgdXAg
dG8gZmlyZS4KKyAgICAvLyBodHRwOi8vY3JidWcuY29tLzEwMDEyMworICAgIGlmICghbV9kYXRh
YmFzZUNhbGxiYWNrc1NldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2Fs
bHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7CisgICAgICAg
IGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkgeworICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX3ZlcnNpb24gPSAiIjsKKyAgICBtX2lkID0gSW52YWxpZElkOworICAgIG1f
b2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApp
bmRleCBlOGIxMDg0NTAxMzA0Y2QxOGY1ZmY2NmExYWQ0OWU4YWJmNmFjYmYwLi43YTVjZTFkYTgz
YzhiNDYxY2YzYWY4OWMxMTMyMTUzNDEyMGIxNmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTgsNiArNTgsNyBAQCBwdWJsaWM6
CiAgICAgLy8gRklYTUU6IFJlbmFtZSAib3BlbiIgdG8gc29tZXRoaW5nIG1vcmUgZGVzY3JpcHRp
dmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcy4KICAgICB2b2lkIG9wZW4oUGFzc1Jl
ZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3BlbkNvbm5lY3Rpb24oUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIGRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fdmVyc2lvbjsgfQpAQCAtNzcsNiArNzgsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3Rv
cmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwgSURCRmFjdG9yeUJhY2tl
bmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsKIAorICAgIHZvaWQgb3Bl
bkludGVybmFsKCk7CiAgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7CiAgICAgdm9pZCBwcm9j
ZXNzUGVuZGluZ0NhbGxzKCk7CiAKQEAgLTExMCw2ICsxMTIsOSBAQCBwcml2YXRlOgogICAgIGNs
YXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiA+
IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdEZWxldGVDYWxsOworICAg
IERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRpbmdEZWxldGVDYWxsczsK
KwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiA+
IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwogICAgIERhdGFiYXNlQ2FsbGJhY2tzU2V0IG1fZGF0YWJh
c2VDYWxsYmFja3NTZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKaW5k
ZXggYWIxNmI3ZDZlZGRlMjM0ODAyYzA1YTI2ZmEwMjljYTRhMjc5NDM1YS4uMDU4YzRkM2U1YWVk
OTZkZDc1ZmU3YTIzNDMxODU1Mjk2MDJlOTc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnkuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSURCS2V5LmgiCiAjaW5jbHVk
ZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSURC
VmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFn
ZUdyb3VwLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAgLTk4LDYgKzk5LDI4IEBA
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTCiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKK1Bhc3NS
ZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6OmRlbGV0ZURhdGFiYXNl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vycy4KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9j
dW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFkb2N1bWVu
dC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9UUkFOU0lFTlRfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJl
cXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6Y3JlYXRlKGRvY3VtZW50
LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0dGluZ3MqIGdyb3VwU2V0
dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0dGluZ3MoKTsKKyAgICBt
X2ZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1ZXN0LCBkb2N1bWVudC0+
c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3VwU2V0dGluZ3MtPmluZGV4
ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICByZXR1cm4gcmVxdWVzdDsKK30KKwogc2hvcnQgSURC
RmFjdG9yeTo6Y21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJREJLZXk+
IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKGZpcnN0KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggODkzNDIxZDE4MDk0ZDczNDBhZTM5NGRmYThl
YjEyNmYwM2E5OWM2Ny4uMTdiZmYxZDFmY2JkMmYwMzllMmJkNmFmZGFiYzlmNWVjODkyYWM4MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYgKzQ0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0
OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCRmFjdG9yeSA6IHB1
YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU3LDYgKzU4LDcgQEAgcHVibGljOgog
ICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1lcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0Kik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW4oU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRlbGV0ZURhdGFiYXNlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
IAogICAgIHNob3J0IGNtcChQYXNzUmVmUHRyPElEQktleT4gZmlyc3QsIFBhc3NSZWZQdHI8SURC
S2V5PiBzZWNvbmQsIEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFj
dG9yeS5pZGwKaW5kZXggMjNmYTg3MWViYTdlMjdlYWY4YzdhODhlM2I3NGU3YmY1MDU1NWE0NS4u
YzQ0OTk2YmEwZjlhY2M4ZmFlYmJjYzVkMDJkNDY4Nzk2YTZkODYxMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuaWRsCkBAIC0zMiw2ICszMiw4IEBAIG1vZHVsZSBzdG9yYWdlIHsK
IAogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gSURCUmVxdWVzdCBv
cGVuKGluIERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4
Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJW
ZXJzaW9uQ2hhbmdlUmVxdWVzdCBkZWxldGVEYXRhYmFzZShpbiBET01TdHJpbmcgbmFtZSkKKyAg
ICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwogCiAgICAgICAgIHNob3J0
IGNtcChpbiBJREJLZXkgZmlyc3QsIGluIElEQktleSBzZWNvbmQpCiAgICAgICAgICAgICByYWlz
ZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NDRkNmFjZGJmYmIwN2YwNWJiMjUzZWVm
MzYxNTNhZDEyMzY5ODZiLi5kMTI0ODFkM2RjMTExMDhiMDY4YmI2MDFiZmMzNmY4OGQ0YzkyZTFl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwCkBAIC0xMjIsNiArMTIyLDMwIEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVu
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhCiAgICAgbV9k
YXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5n
ZXQoKSk7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcikKK3sKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVlSWRlbnRpZmllciA9IGNv
bXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKKworICAg
IElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlQmFja2VuZE1h
cC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBtX2RhdGFiYXNlQmFja2Vu
ZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGNvbm5lY3Rpb25zIHRv
IHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQorICAgICAgICAvLyBkYXRhYmFzZS4K
KyAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJhY2tzKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5nIGZyb20gbm93IG9uIHNo
b3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJpdHlPcmlnaW4sIGRhdGFE
aXIpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05f
RVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFja2VuZCA9IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUuZ2V0KCksIG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRpZmllcik7CisgICAgbV9k
YXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRhdGFiYXNlQmFja2VuZC5n
ZXQoKSk7CisgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwor
fQorCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2lu
LCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgY29uc3QgU3RyaW5nIGZpbGVJZGVudGlm
aWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2luLmdldCgpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCmluZGV4IDZlZTli
YjI0MzAzMzAxZmFjNDE1YWEwNjkwYzYxYmE0ZjEyZDhkZWYuLjljMmYwN2ZiNzA1NDdhMjEwM2E0
Y2FkNzdkYjU2ZTU5M2YxYzQ5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJG
YWN0b3J5QmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAg
ICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgogICAgIElE
QkZhY3RvcnlCYWNrZW5kSW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGM0MDE4ZWZmOWRkNjRkYmM5Yjc5NDJl
NTBjM2IwMjU1MjQyNzc5MzguLmU5MjU0NWQyY2ZmNjM5ZWYwN2VkYjEwNjFkYmU1MzZjYjgyMTg5
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJ
bnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBk
YXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJC
YWNraW5nU3RvcmUuY3BwCmluZGV4IGZhNGU1YjM0ODI2YjFkOTU5ZDU2OTI1ZGJmODQ2ZTVhNDIw
MDFlNjguLmNlYTFmZmY5OTBmMWEyNjZjOGU1M2IyNjg3ODcxYzg0YzI2NGUzMmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcApAQCAt
MjM0LDYgKzIzNCw0NyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnNldElEQkRhdGFi
YXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdAogICAgIHJldHVybiB0cnVl
OwogfQogCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVu
ZCkKK3sKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVh
dGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYm
IGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKKyAgICAgICAg
aWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKworYm9vbCBJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
aWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0g
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0ZSh0aGlzKTsKKyAgICB0
cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJhc2VJZDsKKyAgICBTdHJp
bmcgdmVyc2lvbjsKKyAgICBpZiAoIWV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKG5hbWUsIHZl
cnNpb24sIGRhdGFiYXNlSWQpKSB7CisgICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rh
cnRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJhc2VJZCwgRGF0YWJhc2VN
ZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdG9wS2V5
ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQgKyAxLCBEYXRhYmFzZU1l
dGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7CisgICAgaWYgKCFkZWxldGVSYW5nZShtX2N1cnJlbnRU
cmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLT5yb2xsYmFjaygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY29u
c3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5jb2RlKG1faWRlbnRpZmll
ciwgbmFtZSk7CisgICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92ZShrZXkpOworCisgICAg
dHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOworfQorCiBzdGF0aWMgYm9v
bCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExldmVsREJJdGVyYXRvciog
aXQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBp
bnQ2NF90IG1ldGFEYXRhVHlwZSkKIHsKICAgICBpZiAoIWl0LT5pc1ZhbGlkKCkgfHwgY29tcGFy
ZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA+PSAwKQpAQCAtNDEzLDE3ICs0NTQsNiBAQCBib29s
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJh
c2VJZCwgY29uc3QgU3RyaW5nJgogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgYm9vbCBk
ZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuZCkKLXsKLSAgICBPd25QdHI8TGV2
ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOwotICAgIGZv
ciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXko
KSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVt
b3ZlKGl0LT5rZXkoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAg
ICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKQEAgLTEzNzcsOCArMTQwNyw2IEBAIGJv
b2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhpc3RzKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eU9yaWdpbiwKICAgICByZXR1cm4gZmlsZUV4aXN0cyhwYXRoKyIvQ1VSUkVO
VCIpOwogfQogCi0vLyBGSVhNRTogZGVsZXRlRGF0YWJhc2Ugc2hvdWxkIGJlIHBhcnQgb2YgSURC
QmFja2luZ1N0b3JlLgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBVU0Uo
TEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0
b3JlLmgKaW5kZXggYzFkM2FjNGRiZjk4ZmJmZWQ1NDg5MjQ4NTc4ZWM4ZDJmM2I4NGUxZS4uODdi
MDk3ZDA4YjY0Mjk5YTNiNTJlOGUyM2Q4MjNhZmFjZDc2YzNjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDYgKzQ3LDcgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lvbiwgaW50NjRfdCYgZm91
bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJvd0lkLCBib29sIGlu
dmFsaWRSb3dJZCk7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0
YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
QXV0b0luY3JlbWVudEZsYWdzKTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXggOTBhNjFkYTQzMWQ3ZWI1
NTdkYjA4ZTM1Njk0N2UyYTY5MGUyOTE2Yi4uOWIwNDNlYTA5OTg4MzEzYjE2OTNlNDBjMTI2OTE5
YjdiMDIzY2E3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0zMDEs
OCArMzAxLDggQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50KQogICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5zdWNj
ZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8fCBl
dmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpOwogICAgIGJvb2wgZG9u
dFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5nZXQo
KSwgdGFyZ2V0cyk7CiAKLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNv
ciwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlmIChtX3Jlc3VsdCAmJiBtX3Jlc3VsdC0+
dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlwZSAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElE
QkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBv
ZiB0eXBlIElEQkN1cnNvciwgb3IgYSBvbkJsb2NrZWQgZXZlbnQsIHRoZW4gd2UnbGwgZmlyZSBh
Z2Fpbi4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2ZW50
ICYmIG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JUeXBl
ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQog
ICAgICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFBy
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwCmluZGV4IDdhNjJlNTBlYmIxNWE1MmQ1NTU0YzYzNzA0ZTQ5NGFiOTU1NjIwMGEuLjdi
NjAzOGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0ZGNlZWU0YTBmOWMgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBAIC05
MSw2ICs5MSwxOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gYwogICAgIG1fd2ViSURCRmFjdG9y
eS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmlnaW4s
IHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5Ojpk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJhbWUq
IGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2ViU2VjdXJpdHlPcmlnaW4g
b3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1l
SW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZy
YW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgJiYg
IXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUsIG5h
bWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFiYXNl
RXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0YWJh
c2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJGYWN0b3J5LT5k
ZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBv
cmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAK
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAppbmRleCBiYWYxZTA1ZTJj
OTkyZjkyMWM3ZGQyN2Q0ZmQzMjZlOGE2YWE4NmVkLi5lMTRiOGNlYTk4MmYzMTdlNDFkNDNhOGM5
M2YxZDdkNjFmNjcxYzMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3Ry
aW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3Ry
aW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmluZyYg
ZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmluZGV4
IDFjMDk2OGE1NTFjMmM4NDBiMDkwMjU0YzZhZDgwNGQyMTMzZjMwN2UuLjg0YzFhM2Q0MmUxYWIx
MmYzM2NkMjMyZDlmMTQ1YjZkODMwZWRkNmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKQEAgLTYwLDE3ICs2MCwxOCBAQCBXZWJJREJG
YWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIAogdm9pZCBXZWJJREJGYWN0b3J5SW1w
bDo6Z2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFE
aXIpCiB7Ci0gICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOwotCi0gICAgbV9pZGJGYWN0b3J5
QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0
UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOworICAgIG1faWRiRmFjdG9yeUJhY2tl
bmQtPmdldERhdGFiYXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihj
YWxsYmFja3MpKSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKIH0KIAogCiB2b2lkIFdlYklEQkZhY3Rv
cnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxs
YmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3Qg
V2ViU3RyaW5nJiBkYXRhRGlyKQogewotICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsKKyAg
ICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVh
dGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgZGF0YURpcik7Cit9CiAKLSAgICBt
X2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUo
YWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7Cit2b2lkIFdlYklEQkZhY3Rv
cnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxi
YWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFt
ZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikKK3sKKyAgICBtX2lkYkZhY3RvcnlCYWNrZW5k
LT5kZWxldGVEYXRhYmFzZShuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRy
KGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3Rv
cnlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5o
CmluZGV4IDNlMDFkMWE2M2M4OTI0MDYxZjU3Yzg1NzdhZWFmNWJiNDE2YmM2YzIuLmIzZTQ3NGRm
OTI1NWU4NzdmMmZmNmQwZTYzMTAzNTU2MjQ2ZDE3MTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqLCBj
b25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRh
RGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklE
QkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBX
ZWJTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25z
dCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3Jp
Z2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRlOgog
ICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBtX2lk
YkZhY3RvcnlCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDU2OTY2ODYxNzA2ZTEyZmY0NjU1MjkyNTUyZGJjZjNk
MGQ1ZjFiOTIuLjk2MDFkZjU0NDcyOWRhOTZiMjhjNDExODk3NmZhMmJhNmIxZDFlMTUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxMS0xMC0yNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVuQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRhYmFz
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MjIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dDogVXBkYXRlZC4KKyAgICAg
ICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sOiBVcGRhdGVkLgorICAg
ICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRh
dGFiYXNlLWludGVyYWN0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3Jh
Z2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2Uu
aHRtbDogQWRkZWQuCisKIDIwMTEtMTAtMjcgIFZzZXZvbG9kIFZsYXNvdiAgPHZzZXZpa0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgaHR0cC90ZXN0cy9pbnNwZWN0b3Ivc2VhcmNoL3NlYXJjaC1p
bi1yZXNvdXJjZXMuaHRtbCBmYWlscyBvbiBhbGwgcGxhdGZvcm1zCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQK
aW5kZXggZTljZjdhMjAzOWNhNmQ5ZmU0Zjk1ZGExMTMxNDY5MTViODkyMTVhMi4uY2I4NWI3NjQx
Zjc4NjRlMjRkN2QyNDI4OWMwOGY0NjYxYWZkYTI0NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dApAQCAt
OCwxNyArOCwyMyBAQCBQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCiBQQVNTIHR5cGVv
ZiBpbmRleGVkREIub3BlbiA9PT0gJ2Z1bmN0aW9uJyBpcyB0cnVlCiBQQVNTIHR5cGVvZiBpbmRl
eGVkREIuY21wID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlwZW9mIGluZGV4ZWREQi5n
ZXREYXRhYmFzZU5hbWVzID09PSAnZnVuY3Rpb24nIGlzIHRydWUKLWRlbGV0ZURhdGFiYXNlIEFQ
SSBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBzbyB0aGlzIHdpbGwgZmFpbDoKLUZBSUwgdHlwZW9m
IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJyBzaG91bGQgYmUgdHJ1ZS4g
V2FzIGZhbHNlLgorUEFTUyB0eXBlb2YgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlID09PSAnZnVu
Y3Rpb24nIGlzIHRydWUKIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkKIGRhdGFiYXNlTmFt
ZXMgPSBldmVudC50YXJnZXQucmVzdWx0CiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgZmFsc2UKIFBBU1MgZGF0YWJhc2VO
YW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCiBp
bmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikKK2V2ZW50LnRhcmdldC5yZXN1bHQuY2xv
c2UoKQogaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQogZGF0YWJhc2VOYW1lcyA9IGV2ZW50
LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRl
eGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyB0cnVlCiBQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFp
bnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpCitpbmRleGVk
REIuZ2V0RGF0YWJhc2VOYW1lcygpCitkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3Vs
dAorUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWJhc2ljcycpIGlzIGZhbHNlCitQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNF
IFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5k
ZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwKaW5kZXggMjg1YTA2YzNlMDczMTBmYmEwYWY5Zjdk
ZmEzMDdiZDNmZjk3MDc1Zi4uNjI4ZmVlZjNlMTk5YThlMjNmY2Y2NzAyNzUyODMxYjE5NTI3NWY4
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNp
Y3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2lj
cy5odG1sCkBAIC0yMyw3ICsyMyw2IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHNob3VsZEJlVHJ1
ZSgidHlwZW9mIGluZGV4ZWREQi5jbXAgPT09ICdmdW5jdGlvbiciKTsKICAgICBzaG91bGRCZVRy
dWUoInR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcyA9PT0gJ2Z1bmN0aW9uJyIpOwog
Ci0gICAgZGVidWcoImRlbGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBz
byB0aGlzIHdpbGwgZmFpbDoiKTsKICAgICBzaG91bGRCZVRydWUoInR5cGVvZiBpbmRleGVkREIu
ZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5jdGlvbiciKTsKIAogICAgIG5hbWUgPSAnc3RvcmFnZS9p
bmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnOwpAQCAtNDgsNiArNDcsNyBAQCBmdW5jdGlvbiBnZXRE
YXRhYmFzZU5hbWVzU3VjY2VzczEoKQogCiBmdW5jdGlvbiBvcGVuU3VjY2VzcygpCiB7CisgICAg
ZXZhbEFuZExvZygiZXZlbnQudGFyZ2V0LnJlc3VsdC5jbG9zZSgpIik7CiAgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coImluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkiKTsKICAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMjsKICAgICByZXF1ZXN0Lm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKQEAgLTYwLDggKzYwLDMyIEBAIGZ1bmN0aW9u
IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMigpCiAgICAgc2hvdWxkQmVUcnVlKCJkYXRhYmFzZU5h
bWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwogICAgIHNob3VsZEJlRmFsc2UoImRhdGFi
YXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSIpOwogCi0g
ICAgLy8gRklYTUU6IHRlc3QgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKGRhdGFiYXNlTmFtZSkK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCciICsg
bmFtZSArICInKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRGF0YWJhc2VTdWNj
ZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQog
CitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MoKQoreworICAgIHJlcXVlc3QgPSBldmFs
QW5kTG9nKCJpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpIik7CisgICAgcmVxdWVzdC5vbnN1
Y2Nlc3MgPSBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczM7CisgICAgcmVxdWVzdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNT
dWNjZXNzMygpCit7CisgICAgdmFyIGRhdGFiYXNlTmFtZXM7CisgICAgZXZhbEFuZExvZygiZGF0
YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZUZhbHNlKCJk
YXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOworICAgIHNob3VsZEJlRmFs
c2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1Qn
KSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5kZWxldGVEYXRhYmFz
ZSgnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MyOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZVN1Y2Nlc3My
KCkKK3sKICAgICBkb25lKCk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMWNjZGY3MTNhZGYxNjYwZDdjZjYwNzJiZTg0ZTkzMDc0YjU2YTNiOQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVs
ZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjggQEAKK1Rlc3QgSW5kZXhlZERC
J3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCit3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykK
K2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQor
dHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIHRyYW5zICE9PSBudWxsIGlzIHRydWUK
K3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScsIG51bGwpCitzdG9yZS5j
cmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpCitQQVNTIHN0b3JlLmluZGV4TmFtZXMuY29udGFp
bnMoJ2luZGV4TmFtZScpIGlzIHRydWUKK3N0b3JlLmFkZCgndmFsdWUnLCAna2V5JykKK2RiLnRy
YW5zYWN0aW9uKHttb2RlOiB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFfSkKK3N0b3Jl
ID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpCitzdG9yZS5nZXQoJ2tleScp
CitQQVNTIGV2ZW50LnRhcmdldC5yZXN1bHQgaXMgInZhbHVlIgorZGIuc2V0VmVyc2lvbignbmV3
IHZlcnNpb24nKQorcmVxdWVzdCA9IHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0
YWJhc2UtdG8tZGVsZXRlJykKK3dlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxl
dGUnKQorZGIgPSBldmVudC50YXJnZXQucmVzdWx0CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lv
bicpCitQQVNTIGRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3RoIGlzIDAKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9u
cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRl
bGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODUyNTY3
N2UwMWZmZWMzY2E2NTY1M2ZjZTNhMWZkY2NiYTRiZWQzMwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJh
Y3Rpb25zLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDcwIEBACitUZXN0IHRoZSBkZWxldGVEYXRh
YmFzZSBjYWxsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZlcnNpb24KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK2luZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVkREIg
fHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOworUEFTUyBp
bmRleGVkREIgPT0gbnVsbCBpcyBmYWxzZQorCitURVNUOiBkZWxldGVEYXRhYmFzZSBibG9ja2Vk
IG9uIG9wZW4gaGFuZGxlcword2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0
ZURhdGFiYXNlKCknCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nLCBidXQgbm90
IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJhc2UoKS5vbmJsb2NrZWQnCisnaC5jbG9zZScKKydk
ZWxldGVEYXRhYmFzZSgpLm9uc3VjY2VzcycKK1BBU1Mgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkg
aXMgImgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlKCksaC5vbnZlcnNpb25j
aGFuZ2UsZGVsZXRlRGF0YWJhc2UoKS5vbmJsb2NrZWQsaC5jbG9zZSxkZWxldGVEYXRhYmFzZSgp
Lm9uc3VjY2VzcyIKKworVEVTVDogZGVsZXRlRGF0YWJhc2Ugbm90IGJsb2NrZWQgd2hlbiBoYW5k
bGVzIGNsb3NlIGltbWVkaWF0ZWx5Cit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZl
ciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisn
ZGVsZXRlRGF0YWJhc2UoKScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcgaW1t
ZWRpYXRlbHkKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkJworJ2RlbGV0
ZURhdGFiYXNlKCkub25zdWNjZXNzJworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMg
ZGVsZXRlRGF0YWJhc2UoKS5vbmJsb2NrZWQgc3RlcDsgY3JidWcuY29tLzEwMDEyMworRkFJTCB3
aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91bGQgYmUgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3Ms
ZGVsZXRlRGF0YWJhc2UoKSxoLm9udmVyc2lvbmNoYW5nZSxoLmNsb3NlLGRlbGV0ZURhdGFiYXNl
KCkub25zdWNjZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2Uo
KSxoLm9udmVyc2lvbmNoYW5nZSxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkLGRl
bGV0ZURhdGFiYXNlKCkub25zdWNjZXNzLgorCitURVNUOiBkZWxldGVEYXRhYmFzZSBpcyBkZWxh
eWVkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZword2luZG93LmRi
bmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3Bl
bicKKydoLm9wZW4ub25zdWNjZXNzJworJ2guc2V0VmVyc2lvbicKKydkZWxldGVEYXRhYmFzZSgp
JworJ2guc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaC5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNv
bXBsZXRlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1l
ZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkJworJ2guY2xvc2UnCisnZGVsZXRl
RGF0YWJhc2UoKS5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJo
Lm9wZW4saC5vcGVuLm9uc3VjY2VzcyxoLnNldFZlcnNpb24sZGVsZXRlRGF0YWJhc2UoKSxoLnNl
dFZlcnNpb24ub25zdWNjZXNzLGguc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSxoLm9u
dmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCxoLmNsb3NlLGRlbGV0ZURh
dGFiYXNlKCkub25zdWNjZXNzIgorCitURVNUOiBtdWx0aXBsZSBkZWxldGVEYXRhYmFzZSBjYWxs
cword2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMg
PSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0ZURhdGFiYXNlKDEpJwor
J2RlbGV0ZURhdGFiYXNlKDIpJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywg
YnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlKDEpLm9uYmxvY2tlZCcKKydoLm9u
dmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxl
dGVEYXRhYmFzZSgyKS5vbmJsb2NrZWQnCisnaC5jbG9zZScKKydoLmNsb3NlJworJ2RlbGV0ZURh
dGFiYXNlKDEpLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZSgyKS5vbnN1Y2Nlc3MnCitOT1RF
OiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBoLm9udmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0
ZXBzOyBjcmJ1Zy5jb20vMTAwNjQ1CitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3Vs
ZCBiZSBoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSgxKSxkZWxldGVEYXRh
YmFzZSgyKSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZSgxKS5vbmJsb2NrZWQsZGVs
ZXRlRGF0YWJhc2UoMikub25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2UoMSkub25zdWNj
ZXNzLGRlbGV0ZURhdGFiYXNlKDIpLm9uc3VjY2Vzcy4gV2FzIGgub3BlbixoLm9wZW4ub25zdWNj
ZXNzLGRlbGV0ZURhdGFiYXNlKDEpLGRlbGV0ZURhdGFiYXNlKDIpLGgub252ZXJzaW9uY2hhbmdl
LGRlbGV0ZURhdGFiYXNlKDEpLm9uYmxvY2tlZCxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRh
YmFzZSgyKS5vbmJsb2NrZWQsaC5jbG9zZSxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlKDEpLm9uc3Vj
Y2VzcyxkZWxldGVEYXRhYmFzZSgyKS5vbnN1Y2Nlc3MuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbCBi
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50
ZXJhY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTc2NWU1YzU0NzFjYmViODA0MjM3NGNjMzkyOTY1
MDBlNjc1Mjg4MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKQEAgLTAsMCArMSwy
MzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IHRoZSBkZWxldGVEYXRhYmFzZSBj
YWxsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3NldFZlcnNpb24iKTsKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworCitmdW5jdGlvbiBDb25uZWN0aW9uKGlkKSB7CisgICAgaWQgPSBTdHJpbmco
aWQpOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlzLm9wZW4gPSBmdW5jdGlvbihvcHRz
KSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLm9w
ZW4nIikpOworICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERCLm9wZW4od2luZG93LmRibmFtZSk7
CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAg
IHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgc2VsZi5oYW5kbGUg
PSBlLnRhcmdldC5yZXN1bHQ7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5k
TG9nKCInIiArIGlkICsgIi5vcGVuLm9uc3VjY2VzcyciKSk7CisgICAgICAgICAgICBzZWxmLmhh
bmRsZS5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgd2lu
ZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub252ZXJzaW9uY2hhbmdlJyIp
KTsKKyAgICAgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9udmVyc2lvbikgeyBvcHRzLm9u
dmVyc2lvbi5jYWxsKHNlbGYpOyB9CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKG9w
dHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAg
ICAgICB9OworICAgIH07CisKKyAgICB0aGlzLmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLmNsb3NlJyIpKTsKKyAg
ICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB9OworCisgICAgdGhpcy5zZXRWZXJzaW9u
ID0gZnVuY3Rpb24ob3B0cykgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9n
KCInIiArIGlkICsgIi5zZXRWZXJzaW9uJyIpKTsKKyAgICAgICAgdmFyIHJlcSA9IHRoaXMuaGFu
ZGxlLnNldFZlcnNpb24oU3RyaW5nKHdpbmRvdy52ZXIrKykpOworICAgICAgICByZXEub25hYm9y
dCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5k
TG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYWJvcnQnIikpOworICAgICAgICAgICAgaWYg
KG9wdHMgJiYgb3B0cy5vbmFib3J0KSB7IG9wdHMub25hYm9ydC5jYWxsKHNlbGYpOyB9CisgICAg
ICAgIH07CisgICAgICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAg
ICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5v
bmJsb2NrZWQnIikpOworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmJsb2NrZWQpIHsg
b3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgICAgICByZXEub25z
dWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2
YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25zdWNjZXNzJyIpKTsKKyAgICAgICAg
ICAgIGlmIChzZWxmLmhhbmRsZS5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKCJ0ZXN0LXN0b3Jl
IiArIHdpbmRvdy52ZXIpKSB7CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGUuZGVsZXRlT2Jq
ZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICB2YXIgc3RvcmUgPSBzZWxmLmhhbmRsZS5jcmVhdGVPYmplY3RTdG9yZSgidGVzdC1z
dG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIHZhciBjb3VudCA9IDA7CisgICAgICAg
ICAgICBkb19hc3luY19wdXRzKCk7IC8vIEtlZXAgdGhpcyB0cmFuc2FjdGlvbiBydW5uaW5nIGZv
ciBhIHdoaWxlCisgICAgICAgICAgICBmdW5jdGlvbiBkb19hc3luY19wdXRzKCkgeworICAgICAg
ICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5wdXQoY291bnQsIGNvdW50KTsKKyAgICAgICAgICAg
ICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgICAgICAgICAg
ICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoKytjb3VudCA8IDEwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb19hc3luY19wdXRz
KCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLnRy
YW5zYWN0aW9uLWNvbXBsZXRlJyIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRz
ICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwoc2VsZik7IH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg
ICAgIH07CisgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25l
cnJvciciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJyb3IpIHsgb3B0cy5v
bmVycm9yLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICB9OworfQorCitmdW5jdGlvbiBk
ZWxldGVEYXRhYmFzZShpZCwgbmFtZSwgb3B0cykgeworICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2
YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZSgiICsgaWQgKyAiKSciKSk7CisgICAgdmFyIHJlcSA9
IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShuYW1lKTsKKyAgICByZXEub25zdWNjZXNzID0gZnVu
Y3Rpb24gKGUpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0
ZURhdGFiYXNlKCIgKyBpZCArICIpLm9uc3VjY2VzcyciKSk7CisgICAgICAgIGlmIChvcHRzICYm
IG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNhbGwobnVsbCk7IH0KKyAgICB9Owor
ICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1
c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlKCIgKyBpZCArICIpLm9uZXJyb3InIikpOwor
ICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJyb3IpIHsgb3B0cy5vbmVycm9yLmNhbGwobnVs
bCk7IH0KKyAgICB9OworICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoZSkgeworICAgICAg
ICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0YWJhc2UoIiArIGlkICsg
Iikub25ibG9ja2VkJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmJsb2NrZWQpIHsg
b3B0cy5vbmJsb2NrZWQuY2FsbChudWxsKTsgfQorICAgIH07Cit9CisKKy8vIHJ1biBhIHNlcmll
cyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24gZnVuY3Rpb24KK2Z1bmN0aW9uIHJ1
blN0ZXBzKGNvbW1hbmRzKSB7CisgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCkgeworICAgICAgICB2
YXIgY29tbWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7CisgICAgICAgIGNvbW1hbmQoZnVuY3Rpb24o
KSB7IHJ1blN0ZXBzKGNvbW1hbmRzKTsgfSk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KCkg
eworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4ZWREQiA9IHdpbmRvdy5pbmRleGVk
REIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5kb3cubW96SW5kZXhlZERCOyIpOwor
ICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxsIik7CisgICAgdGVzdDEoKTsKK30K
KworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBk
ZWxldGVEYXRhYmFzZSBibG9ja2VkIG9uIG9wZW4gaGFuZGxlcyIpOworICAgIGV2YWxBbmRMb2co
IndpbmRvdy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0g
W10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1
bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1t
ZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFi
YXNlKCIiLCB3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnN1
Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgXSk7CisgICAgZnVuY3Rpb24gZmluaXNo
VGVzdCgpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9T
dHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZWxldGVEYXRhYmFzZSgpLm9uc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0MigpOworICAgIH0KK30KKworZnVu
Y3Rpb24gdGVzdDIoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBkZWxldGVE
YXRhYmFzZSBub3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xvc2UgaW1tZWRpYXRlbHkiKTsKKyAg
ICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9IDE7IHdp
bmRvdy5zdGVwcyA9IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAg
IHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWcoIiAgICBoIGNsb3NpbmcgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9fSk7IH0sCisgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkg
eyBkZWxldGVEYXRhYmFzZSgiIiwgd2luZG93LmRibmFtZSwgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgIF0pOworICAgIGZ1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxsIEZBSUwgd2l0
aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCBzdGVwOyBjcmJ1Zy5jb20v
MTAwMTIzIik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRv
U3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4iLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoKSIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3QzKCk7CisgICAgfQorfQorCitmdW5jdGlv
biB0ZXN0MygpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFi
YXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5n
Iik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIg
PSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24oImgi
KTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNzOiBk
b05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGgg
Y2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICAgICAgICBmdW5j
dGlvbihkb05leHQpIHsgaC5zZXRWZXJzaW9uKCk7IGRvTmV4dCgpOyB9LAorICAgICAgICAgICAg
ICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2UoIiIsIHdpbmRvdy5kYm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsg
fSwKKyAgICAgICAgICAgICAgXSk7CisKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAg
ICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImguc2V0VmVyc2lvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGV0ZURhdGFiYXNlKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNl
dFZlcnNpb24ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5z
ZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImguY2xvc2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxl
dGVEYXRhYmFzZSgpLm9uc3VjY2VzcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBd
LnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0NCgpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVz
dDQoKSB7CisgICAgZGVidWcoIiIpOworICAgIGRlYnVnKCJURVNUOiBtdWx0aXBsZSBkZWxldGVE
YXRhYmFzZSBjYWxscyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDQn
OyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBD
b25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4o
e29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZl
cnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVidWcoIiAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGguY2xvc2Uo
KTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAg
ICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKCIxIiwgd2luZG93LmRibmFtZSk7
IGRvTmV4dCgpOyB9LAorICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2Uo
IjIiLCB3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nl
c3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgXSk7CisgICAgZnVuY3Rpb24gZmluaXNoVGVz
dCgpIHsKKyAgICAgICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgu
b252ZXJzaW9uY2hhbmdlL2guY2xvc2Ugc3RlcHM7IGNyYnVnLmNvbS8xMDA2NDUiKTsKKyAgICAg
ICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZWxldGVEYXRhYmFzZSgxKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImRlbGV0ZURhdGFiYXNlKDIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxl
dGVEYXRhYmFzZSgxKS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZWxldGVEYXRhYmFzZSgyKS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRl
RGF0YWJhc2UoMSkub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGVsZXRlRGF0YWJhc2UoMikub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKK3ZhciBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9y
eS1kZWxldGVkYXRhYmFzZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3NThiYjUyMmE0N2JmZDFlYmUx
ZDRjNzEyYzg1MTcyZjI1MWVkMDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKQEAgLTAsMCArMSwxMDQg
QEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIHdlYmtpdEluZGV4
ZWREQi5kZWxldGVEYXRhYmFzZSgpLiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9u
IHRlc3QoKQoreworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3Bl
bignZGF0YWJhc2UtdG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHN0YXJ0
U2V0VmVyc2lvbjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFj
azsKK30KKworZnVuY3Rpb24gc3RhcnRTZXRWZXJzaW9uKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRM
b2coImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRM
b2coImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGRlbGV0ZUV4aXN0aW5nOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVFeGlzdGluZygpCit7CisgICAgd2luZG93
LnRyYW5zID0gZXZhbEFuZExvZygidHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAg
c2hvdWxkQmVUcnVlKCJ0cmFucyAhPT0gbnVsbCIpOworCisgICAgc3RvcmUgPSBldmFsQW5kTG9n
KCJzdG9yZSA9IGRiLmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIpOworCisg
ICAgd2luZG93LmluZGV4ID0gZXZhbEFuZExvZygic3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4TmFt
ZScsICcnKSIpOworICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygn
aW5kZXhOYW1lJykiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5hZGQoJ3Zh
bHVlJywgJ2tleScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXRWYWx1ZTsKKyAgICBy
ZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24g
Z2V0VmFsdWUoKQoreworICAgIHRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygiZGIudHJhbnNhY3Rp
b24oe21vZGU6IHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEV9KSIpOworICAgIHRyYW5z
YWN0aW9uLm9uYWJvcnQgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2YXIgc3RvcmUg
PSBldmFsQW5kTG9nKCJzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUn
KSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCgna2V5JykiKTsKKyAg
ICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGFkZEluZGV4OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBhZGRJbmRleCgpCit7CisgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJldmVudC50YXJnZXQucmVzdWx0IiwgInZhbHVlIik7CisK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIp
OworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRGF0YWJhc2U7CisgICAgcmVxdWVzdC5v
bmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZURh
dGFiYXNlKCkKK3sKKyAgICBkYi5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbigpIHsgZGIuY2xv
c2UoKTsgfQorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gd2Via2l0SW5kZXhl
ZERCLmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVlc3Qu
b25zdWNjZXNzID0gcmVvcGVuRGF0YWJhc2U7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHJlb3BlbkRhdGFiYXNlKCkKK3sKKyAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRv
LWRlbGV0ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBzdGFydFNldFZlcnNpb25BZ2Fp
bjsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKwor
ZnVuY3Rpb24gc3RhcnRTZXRWZXJzaW9uQWdhaW4oKQoreworICAgIHJkYiA9IGV2YWxBbmRMb2co
ImRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2co
ImRiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9
IHZlcmlmeU5vdEZvdW5kOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOworfQorCitmdW5jdGlvbiB2ZXJpZnlOb3RGb3VuZCgpCit7CisgICAgc2hvdWxkQmUo
ImRiLm9iamVjdFN0b3JlTmFtZXMubGVuZ3RoIiwgIjAiKTsKKworICAgIGRvbmUoKTsKK30KKwor
dGVzdCgpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112841</attachid>
            <date>2011-10-28 03:05:21 -0700</date>
            <delta_ts>2011-10-28 12:55:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111028120519.patch</filename>
            <type>text/plain</type>
            <size>49028</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3MTMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYTk2YjI5ZTRiZGZlMGUz
YmQyZTA4NzIyOWU2MTAxZWYzYTY1OGY4Li43ODY3NTcwMjc3ZjUwYTgyYWE5MTU0MDkwNjZjODUz
YzQ1NTU4NTYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjggIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGVzdHM6IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKKyAgICAgICAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UuaHRtbAorCisgICAgICAgICogc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpQZW5kaW5nRGVsZXRlQ2FsbDo6Y2FsbGJhY2tzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRh
dGFiYXNlQmFja2VuZEltcGw6OlBlbmRpbmdEZWxldGVDYWxsOjpQZW5kaW5nRGVsZXRlQ2FsbCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5JbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpw
cm9jZXNzUGVuZGluZ0NhbGxzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6Om9wZW5Db25uZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3RvcnkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3Jh
Z2UvSURCRmFjdG9yeS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5pZGw6CisgICAg
ICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3Rv
cmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlLmg6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRlbGV0ZVJhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lE
QlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6ZGlzcGF0Y2hFdmVu
dCk6CisKIDIwMTEtMTAtMjggIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBBdHRlbXB0IHRvIGZpeGVuYXRlIFF0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCBmNGMwODNjNTdhNTFlMmY3NjQ5OGQ1YmY5MWYyYzI5MjE0ZWVhNDlhLi4zMTViOTg1ZDAzZDg0
NDA3MGNkNzM5YmE5NTVhMTM3OGYyOGNmMWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDE5IEBACisyMDExLTEwLTI4ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3JjL0lE
QkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpJREJGYWN0b3J5QmFj
a2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3JjL0lEQkZhY3RvcnlCYWNr
ZW5kUHJveHkuaDoKKyAgICAgICAgKiBzcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyk6CisgICAgICAg
IChXZWJLaXQ6OldlYklEQkZhY3RvcnlJbXBsOjpvcGVuKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
SURCRmFjdG9yeUltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzcmMvV2ViSURCRmFj
dG9yeUltcGwuaDoKKwogMjAxMS0xMC0yOCAgSGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIEluZGV4ZWREQjogQ2xlYW4tdXAgdW51c2VkIGZ1bmN0aW9ucyBpbiBX
ZWJJREJGYWN0b3J5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tp
bmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAppbmRl
eCA2ZTEzZjRmYTYxYzRhMjFkNDJjM2ZmZGU1YmRjNzNkOTFkZGIzYzQxLi41N2Y4OTIzYzRlZDU0
YWY0OTJjYjRjZDk2MjdjNTk4ZTVjNjAxMjAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
QmFja2luZ1N0b3JlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFt
ZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQpID0gMDsKICAgICB2aXJ0
dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQs
IFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBW
ZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNy
ZW1lbnRGbGFncykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
LCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAw
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5j
cHAKaW5kZXggNTgxYWE4YzAxNTNkOTZlMDk5MDg0MWM0ODY3ZjU0ZmE1YWZhYmYxNy4uODcxZWMz
ZjA1MTY2OTQzM2ZiODRiMDdjMzIwZTMxMTljZTJkYmQ4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC01NSw2ICs1NSwyMiBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAor
Y2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0ZUNhbGwgOiBwdWJsaWMg
UmVmQ291bnRlZDxQZW5kaW5nRGVsZXRlQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ0Rl
bGV0ZUNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitwcml2YXRlOgorICAgIFBl
bmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAg
ICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElE
QkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpQZW5kaW5nU2V0VmVyc2lvbkNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nU2V0
VmVyc2lvbkNhbGw+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nU2V0
VmVyc2lvbkNhbGw+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRh
dGFiYXNlQ2FsbGJhY2tzKQpAQCAtOTAsNiArMTA2LDExIEBAIElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5n
U3RvCiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+ZXh0cmFjdElEQkRhdGFi
YXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOwogICAgIEFTU0VSVF9VTlVTRUQo
c3VjY2Vzcywgc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpKTsKKyAgICBvcGVuSW50ZXJu
YWwoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuSW50ZXJuYWwoKQor
ewogICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnNldElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1l
LCBtX3ZlcnNpb24sIG1faWQsIG1faWQgPT0gSW52YWxpZElkKSkKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZy4KICAgICBs
b2FkT2JqZWN0U3RvcmVzKCk7CkBAIC0yNTgsNyArMjc5LDIxIEBAIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAgICAgICAgIEFTU0VSVCghZWMpOwog
ICAgIH0KIAotICAgIHdoaWxlICghbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uICYm
IG1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgJiYgIW1fcGVuZGluZ09wZW5DYWxs
cy5pc0VtcHR5KCkpIHsKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9u
IHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47
CisKKyAgICAvLyBQZW5kaW5nIGNhbGxzIG1heSBiZSByZXF1ZXVlZC4KKyAgICBEZXF1ZTxSZWZQ
dHI8UGVuZGluZ0RlbGV0ZUNhbGw+ID4gcGVuZGluZ0RlbGV0ZUNhbGxzOworICAgIG1fcGVuZGlu
Z0RlbGV0ZUNhbGxzLnN3YXAocGVuZGluZ0RlbGV0ZUNhbGxzKTsKKyAgICB3aGlsZSAoIXBlbmRp
bmdEZWxldGVDYWxscy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRyPFBlbmRpbmdEZWxldGVD
YWxsPiBwZW5kaW5nRGVsZXRlQ2FsbCA9IHBlbmRpbmdEZWxldGVDYWxscy50YWtlRmlyc3QoKTsK
KyAgICAgICAgZGVsZXRlRGF0YWJhc2UocGVuZGluZ0RlbGV0ZUNhbGwtPmNhbGxiYWNrcygpKTsK
KyAgICB9CisKKyAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFt
X3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpIHx8ICFtX3BlbmRpbmdEZWxldGVDYWxs
cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlICghbV9wZW5kaW5nT3Bl
bkNhbGxzLmlzRW1wdHkoKSkgewogICAgICAgICBSZWZQdHI8UGVuZGluZ09wZW5DYWxsPiBwZW5k
aW5nT3BlbkNhbGwgPSBtX3BlbmRpbmdPcGVuQ2FsbHMudGFrZUZpcnN0KCk7CiAgICAgICAgIG9w
ZW5Db25uZWN0aW9uKHBlbmRpbmdPcGVuQ2FsbC0+Y2FsbGJhY2tzKCkpOwogICAgIH0KQEAgLTI4
NCwxMCArMzE5LDQzIEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbihQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiAKIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcykKIHsKLSAgICBpZiAobV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFt
X3BlbmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQorICAgIGlmICghbV9wZW5kaW5nRGVs
ZXRlQ2FsbHMuaXNFbXB0eSgpIHx8IG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8
fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKICAgICAgICAgbV9wZW5kaW5n
T3BlbkNhbGxzLmFwcGVuZChQZW5kaW5nT3BlbkNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKLSAg
ICBlbHNlCisgICAgZWxzZSB7CisgICAgICAgIGlmIChtX2lkID09IEludmFsaWRJZCkKKyAgICAg
ICAgICAgIG9wZW5JbnRlcm5hbCgpOwogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2Vzcyh0aGlz
KTsKKyAgICB9Cit9CisKK3ZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlRGF0YWJh
c2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcykKK3sKKyAgICBpZiAobV9y
dW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3BlbmRpbmdTZXRWZXJzaW9uQ2Fs
bHMuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fcGVuZGluZ0RlbGV0ZUNhbGxzLmFwcGVuZChQZW5k
aW5nRGVsZXRlQ2FsbDo6Y3JlYXRlKHBycENhbGxiYWNrcykpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsK
KyAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uVmVyc2lvbkNoYW5nZSBpZiB0aGVyZSB0aGUgY29u
bmVjdGlvbiBpc24ndCBpbgorICAgIC8vIHRoZSBwcm9jZXNzIG9mIGNsb3NpbmcuCisgICAgLy8g
aHR0cDovL2NyYnVnLmNvbS8xMDA2NDUKKyAgICBmb3IgKERhdGFiYXNlQ2FsbGJhY2tzU2V0Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYmVnaW4oKTsgaXQgIT0g
bV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkKKyAgICAgICAgKCppdCktPm9uVmVy
c2lvbkNoYW5nZSgiIik7CisgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJsb2NrZWQgaWYgdGhl
cmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCisgICAgLy8gVmVyc2lvbkNoYW5nZUV2
ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgorICAgIC8vIGh0dHA6
Ly9jcmJ1Zy5jb20vMTAwMTIzCisgICAgaWYgKCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1w
dHkoKSkgeworICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0
ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxl
dGVEYXRhYmFzZShtX25hbWUpKSB7CisgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRh
YmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50
ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fdmVyc2lvbiA9
ICIiOworICAgIG1faWQgPSBJbnZhbGlkSWQ7CisgICAgbV9vYmplY3RTdG9yZXMuY2xlYXIoKTsK
KyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1
ZSgpKTsKIH0KIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IGU4YjEwODQ1MDEzMDRjZDE4
ZjVmZjY2YTFhZDQ5ZThhYmY2YWNiZjAuLjdhNWNlMWRhODNjOGI0NjFjZjNhZjg5YzExMzIxNTM0
MTIwYjE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oCkBAIC01OCw2ICs1OCw3IEBAIHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVuYW1l
ICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBkZXNjcmlwdGl2ZSwgbGlrZSByZWdpc3RlckZyb250
RW5kQ2FsbGJhY2tzLgogICAgIHZvaWQgb3BlbihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJh
Y2tzPik7CiAgICAgdm9pZCBvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4p
OworICAgIHZvaWQgZGVsZXRlRGF0YWJhc2UoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAog
ICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICB2
aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC03
Nyw2ICs3OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJhY2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcm
IHVuaXF1ZUlkZW50aWZpZXIpOwogCisgICAgdm9pZCBvcGVuSW50ZXJuYWwoKTsKICAgICB2b2lk
IGxvYWRPYmplY3RTdG9yZXMoKTsKICAgICB2b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIApA
QCAtMTEwLDYgKzExMiw5IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwog
ICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwog
CisgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNhbGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdE
ZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0ZUNhbGxzOworCiAgICAgdHlwZWRlZiBMaXN0SGFz
aFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7
CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQgbV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAppbmRleCBhYjE2YjdkNmVkZGUyMzQ4MDJj
MDVhMjZmYTAyOWNhNGEyNzk0MzVhLi4wNThjNGQzZTVhZWQ5NmRkNzVmZTdhMjM0MzE4NTUyOTYw
MmU5Nzk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5jcHAKQEAgLTQyLDYgKzQy
LDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIKICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2lu
Y2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNsdWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5o
IgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJT
ZWN1cml0eU9yaWdpbi5oIgpAQCAtOTgsNiArOTksMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFMKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdl
UmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogbWFrZSB0
aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAg
IGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZl
cnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUoZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgp
LCAiIik7CisgICAgR3JvdXBTZXR0aW5ncyogZ3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdl
KCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygpOworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0
ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1
bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5ncy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOwor
ICAgIHJldHVybiByZXF1ZXN0OworfQorCiBzaG9ydCBJREJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0
cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRyPElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBBU1NFUlQoZmlyc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5LmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rvcnku
aAppbmRleCA4OTM0MjFkMTgwOTRkNzM0MGFlMzk0ZGZhOGViMTI2ZjAzYTk5YzY3Li4xN2JmZjFk
MWZjYmQyZjAzOWUyYmQ2YWZkYWJjOWY1ZWM4OTJhYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaApAQCAtNDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJ
REJLZXk7CiBjbGFzcyBJREJLZXlSYW5nZTsKIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOworY2xhc3MgSURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRp
b25Db250ZXh0OwogCiBjbGFzcyBJREJGYWN0b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFj
dG9yeT4gewpAQCAtNTcsNiArNTgsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1
ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gZGVsZXRlRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNv
bnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgc2hvcnQgY21wKFBhc3NS
ZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9u
Q29kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3Rvcnku
aWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAppbmRleCAyM2ZhODcx
ZWJhN2UyN2VhZjhjN2E4OGUzYjc0ZTdiZjUwNTU1YTQ1Li5jNDQ5OTZiYTBmOWFjYzhmYWViYmNj
NWQwMmQ0Njg3OTZhNmQ4NjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwK
QEAgLTMyLDYgKzMyLDggQEAgbW9kdWxlIHN0b3JhZ2UgewogCiAgICAgICAgIFtDYWxsV2l0aD1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJSZXF1ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUp
CiAgICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0Nh
bGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRl
bGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBuYW1lKQorICAgICAgICAgICAgcmFpc2VzIChJREJE
YXRhYmFzZUV4Y2VwdGlvbik7CiAKICAgICAgICAgc2hvcnQgY21wKGluIElEQktleSBmaXJzdCwg
aW4gSURCS2V5IHNlY29uZCkKICAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRp
b24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2Vu
ZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
Y3BwCmluZGV4IDQ0NGQ2YWNkYmZiYjA3ZjA1YmIyNTNlZWYzNjE1M2FkMTIzNjk4NmIuLmQxMjQ4
MWQzZGMxMTEwOGIwNjhiYjYwMWJmYzM2Zjg4ZDRjOTJlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEyMiw2ICsxMjIsMzAg
QEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQo
dW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKIH0KIAordm9pZCBJREJG
YWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAg
IGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIo
bmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFw
OjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmll
cik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJhc2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAg
IC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVjdGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3Rs
eSBkZWxldGUgdGhlCisgICAgICAgIC8vIGRhdGFiYXNlLgorICAgICAgICBpdC0+c2Vjb25kLT5k
ZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBub3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhl
ciB0aHJlYWQuCisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3Bl
bkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdpbiwgZGF0YURpcik7CisgICAgaWYgKCFiYWNraW5n
U3RvcmUpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4i
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNr
ZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRl
KG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgp
LCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsKKyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQo
dW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VCYWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJh
Y2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxiYWNrcyk7Cit9CisKIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1Jl
ZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURp
cikKIHsKICAgICBjb25zdCBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50
aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
SURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKaW5kZXggNmVlOWJiMjQzMDMzMDFmYWM0MTVhYTA2OTBj
NjFiYTRmMTJkOGRlZi4uOWMyZjA3ZmI3MDU0N2EyMTAzYTRjYWQ3N2RiNTZlNTkzZjFjNDk0YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCkBA
IC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5h
bWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4s
IEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxT
ZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50
ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlLmgKaW5kZXggYzQwMThlZmY5ZGQ2NGRiYzliNzk0MmU1MGMzYjAyNTUyNDI3NzkzOC4uZTky
NTQ1ZDJjZmY2MzllZjA3ZWRiMTA2MWRiZTUzNmNiODIxODk5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTMsNiAr
NTMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0
IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3Vy
aXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0
cmluZyYgZGF0YURpcikgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXgg
ZmE0ZTViMzQ4MjZiMWQ5NTlkNTY5MjVkYmY4NDZlNWE0MjAwMWU2OC4uY2VhMWZmZjk5MGYxYTI2
NmM4ZTUzYjI2ODc4NzFjODRjMjY0ZTMyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yMzQsNiArMjM0LDQ3IEBAIGJvb2wg
SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6c2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGRl
bGV0ZVJhbmdlKExldmVsREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgYmVnaW4sIGNvbnN0IFZlY3RvcjxjaGFyPiYgZW5kKQoreworICAgIE93blB0cjxMZXZl
bERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgZm9y
IChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgp
LCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgeworICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1v
dmUoaXQtPmtleSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rp
b24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMpOworICAgIHRyYW5zYWN0aW9uLT5iZWdpbigpOwor
CisgICAgaW50NjRfdCBkYXRhYmFzZUlkOworICAgIFN0cmluZyB2ZXJzaW9uOworICAgIGlmICgh
ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEobmFtZSwgdmVyc2lvbiwgZGF0YWJhc2VJZCkpIHsK
KyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxjaGFyPiBzdGFydEtleSA9IERhdGFiYXNlTWV0YURh
dGFLZXk6OmVuY29kZShkYXRhYmFzZUlkLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprT3JpZ2luTmFt
ZSk7CisgICAgY29uc3QgVmVjdG9yPGNoYXI+IHN0b3BLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5
OjplbmNvZGUoZGF0YWJhc2VJZCArIDEsIERhdGFiYXNlTWV0YURhdGFLZXk6OmtPcmlnaW5OYW1l
KTsKKyAgICBpZiAoIWRlbGV0ZVJhbmdlKG1fY3VycmVudFRyYW5zYWN0aW9uLmdldCgpLCBzdGFy
dEtleSwgc3RvcEtleSkpIHsKKyAgICAgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4ga2V5ID0g
RGF0YWJhc2VOYW1lS2V5OjplbmNvZGUobV9pZGVudGlmaWVyLCBuYW1lKTsKKyAgICBtX2N1cnJl
bnRUcmFuc2FjdGlvbi0+cmVtb3ZlKGtleSk7CisKKyAgICB0cmFuc2FjdGlvbi0+Y29tbWl0KCk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHN0YXRpYyBib29sIGNoZWNrT2JqZWN0U3RvcmVBbmRN
ZXRhRGF0YVR5cGUoY29uc3QgTGV2ZWxEQkl0ZXJhdG9yKiBpdCwgY29uc3QgVmVjdG9yPGNoYXI+
JiBzdG9wS2V5LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgbWV0YURhdGFUeXBlKQog
ewogICAgIGlmICghaXQtPmlzVmFsaWQoKSB8fCBjb21wYXJlS2V5cyhpdC0+a2V5KCksIHN0b3BL
ZXkpID49IDApCkBAIC00MTMsMTcgKzQ1NCw2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZl
Y3RvcjxjaGFyPiYgZW5kKQotewotICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJh
bnNhY3Rpb24tPmNyZWF0ZUl0ZXJhdG9yKCk7Ci0gICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0
LT5pc1ZhbGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQo
KSkgewotICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogdm9p
ZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBBU1NFUlQobV9jdXJyZW50VHJh
bnNhY3Rpb24pOwpAQCAtMTM3Nyw4ICsxNDA3LDYgQEAgYm9vbCBJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpiYWNraW5nU3RvcmVFeGlzdHMoU2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLAog
ICAgIHJldHVybiBmaWxlRXhpc3RzKHBhdGgrIi9DVVJSRU5UIik7CiB9CiAKLS8vIEZJWE1FOiBk
ZWxldGVEYXRhYmFzZSBzaG91bGQgYmUgcGFydCBvZiBJREJCYWNraW5nU3RvcmUuCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaAppbmRleCBjMWQzYWM0ZGJm
OThmYmZlZDU0ODkyNDg1NzhlYzhkMmYzYjg0ZTFlLi44N2IwOTdkMDhiNjQyOTlhM2I1MmU4ZTIz
ZDgyM2FmYWNkNzZjM2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaApAQCAtNDcsNiArNDcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGdldERhdGFiYXNlTmFtZXMoVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMpOwogICAgIHZp
cnR1YWwgYm9vbCBleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsKICAgICB2aXJ0dWFsIGJv
b2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRf
dD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4m
IGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwog
ICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1l
bnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJSZXF1ZXN0LmNwcAppbmRleCBmOGZjY2U4ZmVmOWI1OWY0Y2JhMjU5MjI1MDE5MzAxZmMwYmU1
OTUxLi5kMTI1NmYzMzJhOTZkZGY5OWY1MGIyNWEwOTMzM2VmMGIwY2NiMzExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKQEAgLTMwMSw4ICszMDEsOCBAQCBib29sIElEQlJl
cXVlc3Q6OmRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCiAgICAgQVNTRVJU
KGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLnN1Y2Nlc3NFdmVudCB8fCBldmVudC0+dHlw
ZSgpID09IGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50IHx8IGV2ZW50LT50eXBlKCkgPT0gZXZlbnRO
YW1lcygpLmJsb2NrZWRFdmVudCk7CiAgICAgYm9vbCBkb250UHJldmVudERlZmF1bHQgPSBJREJF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGV2ZW50LmdldCgpLCB0YXJnZXRzKTsKIAotICAgIC8v
IElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCB0aGVuIHdlJ2xsIGZpcmUgYWdh
aW4uCi0gICAgaWYgKG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJD
dXJzb3JUeXBlICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFs
dWVUeXBlKQorICAgIC8vIElmIHRoZSByZXN1bHQgd2FzIG9mIHR5cGUgSURCQ3Vyc29yLCBvciBh
IG9uQmxvY2tlZCBldmVudCwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgorICAgIGlmIChldmVudC0+
dHlwZSgpICE9IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQgJiYgbV9yZXN1bHQgJiYgbV9yZXN1
bHQtPnR5cGUoKSAhPSBJREJBbnk6OklEQkN1cnNvclR5cGUgJiYgbV9yZXN1bHQtPnR5cGUoKSAh
PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCiAgICAgICAgIG1fZmluaXNoZWQgPSB0
cnVlOwogCiAgICAgaWYgKG1fdHJhbnNhY3Rpb24pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKaW5kZXggN2E2MmU1MGVi
YjE1YTUyZDU1NTRjNjM3MDRlNDk0YWI5NTU2MjAwYS4uN2I2MDM4YjM2YWQ5NDBlYzk0YTFkMGRh
ZTU0NzRkY2VlZTRhMGY5YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5jcHAKQEAgLTkxLDYgKzkxLDE5IEBAIHZvaWQgSURC
RmFjdG9yeUJhY2tlbmRQcm94eTo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjCiAgICAgbV93ZWJJREJGYWN0b3J5LT5vcGVuKG5hbWUsIG5ldyBXZWJJ
REJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFEaXIpOwog
fQogCit2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0
cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0
cjxTZWN1cml0eU9yaWdpbj4gcHJwT3JpZ2luLCBGcmFtZSogZnJhbWUsIGNvbnN0IFN0cmluZyYg
ZGF0YURpcikKK3sKKyAgICBXZWJTZWN1cml0eU9yaWdpbiBvcmlnaW4ocHJwT3JpZ2luKTsKKyAg
ICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUp
OworICAgIFdlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2ViRnJhbWUtPnZpZXdJbXBsKCk7CisgICAg
aWYgKHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKSAmJiAhd2ViVmlldy0+cGVybWlzc2lvbkNs
aWVudCgpLT5hbGxvd0luZGV4ZWREQih3ZWJGcmFtZSwgbmFtZSwgb3JpZ2luKSkgeworICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoV2ViSURCRGF0YWJhc2VFcnJvcigwLCAiVGhlIHVzZXIgZGVu
aWVkIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoZSBkYXRhYmFzZS4iKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX3dlYklEQkZhY3RvcnktPmRlbGV0ZURhdGFiYXNlKG5hbWUsIG5l
dyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIG9yaWdpbiwgd2ViRnJhbWUsIGRhdGFE
aXIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
RmFjdG9yeUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRmFj
dG9yeUJhY2tlbmRQcm94eS5oCmluZGV4IGJhZjFlMDVlMmM5OTJmOTIxYzdkZDI3ZDRmZDMyNmU4
YTZhYTg2ZWQuLmUxNGI4Y2VhOTgyZjMxN2U0MWQ0M2E4YzkzZjFkN2Q2MWY2NzFjMzIgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHku
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5
LmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldERhdGFi
YXNlTmFtZXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFEaXIpOwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luPiwgV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOworICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKIAogcHJpdmF0ZToK
ICAgICBJREJGYWN0b3J5QmFja2VuZFByb3h5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKaW5kZXggMWMwOTY4YTU1MWMyYzg0MGIwOTAy
NTRjNmFkODA0ZDIxMzNmMzA3ZS4uODRjMWEzZDQyZTFhYjEyZjMzY2QyMzJkOWYxNDViNmQ4MzBl
ZGQ2ZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9y
eUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJ
bXBsLmNwcApAQCAtNjAsMTcgKzYwLDE4IEBAIFdlYklEQkZhY3RvcnlJbXBsOjp+V2ViSURCRmFj
dG9yeUltcGwoKQogCiB2b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpnZXREYXRhYmFzZU5hbWVzKFdl
YklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2lu
LCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikKIHsKLSAgICBXZWJTdHJpbmcg
cGF0aCA9IGRhdGFEaXI7Ci0KLSAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5nZXREYXRhYmFzZU5h
bWVzKElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdp
biwgMCwgcGF0aCk7CisgICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAs
IGRhdGFEaXIpOwogfQogCiAKIHZvaWQgV2ViSURCRmFjdG9yeUltcGw6Om9wZW4oY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJp
dHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpCiB7
Ci0gICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQt
Pm9wZW4obmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3Mp
KSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKK30KIAotICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPm9w
ZW4obmFtZSwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwg
b3JpZ2luLCAwLCBwYXRoKTsKK3ZvaWQgV2ViSURCRmFjdG9yeUltcGw6OmRlbGV0ZURhdGFiYXNl
KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBk
YXRhRGlyKQoreworICAgIG1faWRiRmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUs
IElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwg
MCwgZGF0YURpcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKaW5kZXggM2UwMWQxYTYzYzg5MjQw
NjFmNTdjODU3N2FlYWY1YmI0MTZiYzZjMi4uYjNlNDc0ZGY5MjU1ZTg3N2YyZmY2ZDBlNjMxMDM1
NTYyNDZkMTcxOSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RmFjdG9yeUltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0
b3J5SW1wbC5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBn
ZXREYXRhYmFzZU5hbWVzKFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2lu
JiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogICAgIHZpcnR1YWwgdm9p
ZCBvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2Vi
U2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcik7Cisg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mLCBXZWJGcmFtZSosIGNvbnN0
IFdlYlN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgV1RGOjpSZWZQdHI8V2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IG1faWRiRmFjdG9yeUJhY2tlbmQ7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggYTY3M2ZiY2I5ZDYyNWUyNTA1MzVhNTg1ZTNkNmE3NTY4NjBjYTliMi4uYTgxNzUxYTAxNzFl
NzM1YmZhNjIyZjUzYjA2NTU0MGM0NTU2NTlhZCAxMDA3NTUKLS0tIGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEx
LTEwLTI4ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAgICAg
IEltcGxlbWVudCBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1i
YXNpY3MtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRi
L2ZhY3RvcnktYmFzaWNzLmh0bWw6IFVwZGF0ZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1k
ZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5odG1sOiBBZGRlZC4KKwogMjAxMS0x
MC0yOCAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBDYWxsU3RhY2tTaWRlYmFyUGFuZSBzaG91bGQgcmVtb3ZlIGRpc2NhcmRl
ZCBQbGFjYXJkcyBmcm9tIFJhd1NvdXJjZUNvZGUgbGlzdGVuZXJzIGxpc3QKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVk
LnR4dAppbmRleCBlOWNmN2EyMDM5Y2E2ZDlmZTRmOTVkYTExMzE0NjkxNWI4OTIxNWEyLi5jYjg1
Yjc2NDFmNzg2NGUyNGQ3ZDI0Mjg5YzA4ZjQ2NjFhZmRhMjQ3IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0
CkBAIC04LDE3ICs4LDIzIEBAIFBBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFsc2UKIFBBU1Mg
dHlwZW9mIGluZGV4ZWREQi5vcGVuID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlwZW9m
IGluZGV4ZWREQi5jbXAgPT09ICdmdW5jdGlvbicgaXMgdHJ1ZQogUEFTUyB0eXBlb2YgaW5kZXhl
ZERCLmdldERhdGFiYXNlTmFtZXMgPT09ICdmdW5jdGlvbicgaXMgdHJ1ZQotZGVsZXRlRGF0YWJh
c2UgQVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNvIHRoaXMgd2lsbCBmYWlsOgotRkFJTCB0
eXBlb2YgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlID09PSAnZnVuY3Rpb24nIHNob3VsZCBiZSB0
cnVlLiBXYXMgZmFsc2UuCitQQVNTIHR5cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UgPT09
ICdmdW5jdGlvbicgaXMgdHJ1ZQogaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQogZGF0YWJh
c2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlu
cygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyBmYWxzZQogUEFTUyBkYXRh
YmFzZU5hbWVzLmNvbnRhaW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFs
c2UKIGluZGV4ZWREQi5vcGVuKG5hbWUsIGRlc2NyaXB0aW9uKQorZXZlbnQudGFyZ2V0LnJlc3Vs
dC5jbG9zZSgpCiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpCiBkYXRhYmFzZU5hbWVzID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdAogUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIHRydWUKIFBBU1MgZGF0YWJhc2VOYW1lcy5j
b250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCitpbmRleGVk
REIuZGVsZXRlRGF0YWJhc2UoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykKK2lu
ZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkKK2RhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQu
cmVzdWx0CitQQVNTIGRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2Zh
Y3RvcnktYmFzaWNzJykgaXMgZmFsc2UKK1BBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFU
QUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCitpbmRleGVkREIuZGVsZXRlRGF0
YWJhc2UoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKQogUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAppbmRleCAyODVhMDZjM2UwNzMxMGZiYTBh
ZjlmN2RmYTMwN2JkM2ZmOTcwNzVmLi42MjhmZWVmM2UxOTlhOGUyM2ZjZjY3MDI3NTI4MzFiMTk1
Mjc1Zjg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5
LWJhc2ljcy5odG1sCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
YmFzaWNzLmh0bWwKQEAgLTIzLDcgKzIzLDYgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgc2hvdWxk
QmVUcnVlKCJ0eXBlb2YgaW5kZXhlZERCLmNtcCA9PT0gJ2Z1bmN0aW9uJyIpOwogICAgIHNob3Vs
ZEJlVHJ1ZSgidHlwZW9mIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzID09PSAnZnVuY3Rpb24n
Iik7CiAKLSAgICBkZWJ1ZygiZGVsZXRlRGF0YWJhc2UgQVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50
ZWQsIHNvIHRoaXMgd2lsbCBmYWlsOiIpOwogICAgIHNob3VsZEJlVHJ1ZSgidHlwZW9mIGluZGV4
ZWREQi5kZWxldGVEYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJyIpOwogCiAgICAgbmFtZSA9ICdzdG9y
YWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcyc7CkBAIC00OCw2ICs0Nyw3IEBAIGZ1bmN0aW9u
IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMSgpCiAKIGZ1bmN0aW9uIG9wZW5TdWNjZXNzKCkKIHsK
KyAgICBldmFsQW5kTG9nKCJldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkiKTsKICAgICByZXF1
ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKSIpOwogICAgIHJl
cXVlc3Qub25zdWNjZXNzID0gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyOwogICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwpAQCAtNjAsOCArNjAsMzIgQEAgZnVu
Y3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyKCkKICAgICBzaG91bGRCZVRydWUoImRhdGFi
YXNlTmFtZXMuY29udGFpbnMoJyIgKyBuYW1lICsgIicpIik7CiAgICAgc2hvdWxkQmVGYWxzZSgi
ZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7
CiAKLSAgICAvLyBGSVhNRTogdGVzdCBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VO
YW1lKQorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIuZGVsZXRlRGF0YWJhc2Uo
JyIgKyBuYW1lICsgIicpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxldGVEYXRhYmFz
ZVN1Y2Nlc3M7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
Cit9CiAKK2Z1bmN0aW9uIGRlbGV0ZURhdGFiYXNlU3VjY2VzcygpCit7CisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coImluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkiKTsKKyAgICByZXF1ZXN0
Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMzsKKyAgICByZXF1ZXN0Lm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0RGF0YWJhc2VO
YW1lc1N1Y2Nlc3MzKCkKK3sKKyAgICB2YXIgZGF0YWJhc2VOYW1lczsKKyAgICBldmFsQW5kTG9n
KCJkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworICAgIHNob3VsZEJlRmFs
c2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJyIgKyBuYW1lICsgIicpIik7CisgICAgc2hvdWxk
QmVGYWxzZSgiZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBF
WElTVCcpIik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykiKTsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IGRlbGV0ZURhdGFiYXNlU3VjY2VzczI7CisgICAgcmVxdWVzdC5vbmVycm9yID0g
dW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZURhdGFiYXNlU3Vj
Y2VzczIoKQorewogICAgIGRvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4wNWNkOGVhOTkyYTY3M2U1YTExZDg4MjNlNTY2YjMxMDA2MjUzNTk1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9y
eS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOCBAQAorVGVzdCBJbmRl
eGVkREIncyB3ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoKS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK3dlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxl
dGUnKQorZGIgPSBldmVudC50YXJnZXQucmVzdWx0CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lv
bicpCit0cmFucyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgdHJhbnMgIT09IG51bGwgaXMg
dHJ1ZQorc3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVsbCkKK3N0
b3JlLmNyZWF0ZUluZGV4KCdpbmRleE5hbWUnLCAnJykKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcy5j
b250YWlucygnaW5kZXhOYW1lJykgaXMgdHJ1ZQorc3RvcmUuYWRkKCd2YWx1ZScsICdrZXknKQor
dHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlTmFtZSddLCB3ZWJraXRJREJUcmFu
c2FjdGlvbi5SRUFEX1dSSVRFKQorc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3Rv
cmVOYW1lJykKK3N0b3JlLmdldCgna2V5JykKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAi
dmFsdWUiCitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCityZXF1ZXN0ID0gd2Via2l0SW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQord2Via2l0SW5kZXhl
ZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQK
K2RiLnNldFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK1BBU1MgZGIub2JqZWN0U3RvcmVOYW1lcy5s
ZW5ndGggaXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rvcnkt
ZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44NTI1Njc3ZTAxZmZlYzNjYTY1NjUzZmNlM2ExZmRjY2JhNGJl
ZDMzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NzAgQEAKK1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgYW5kIGl0cyBpbnRlcmFjdGlvbiB3
aXRoIG9wZW4vc2V0VmVyc2lvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5k
ZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdp
bmRvdy5tb3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCisKK1RF
U1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzCit3aW5kb3cuZGJuYW1l
ID0gJ3Rlc3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaC5vcGVuJwor
J2gub3Blbi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJhc2UoKScKKydoLm9udmVyc2lvbmNoYW5n
ZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZSgp
Lm9uYmxvY2tlZCcKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzJworUEFT
UyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVs
ZXRlRGF0YWJhc2UoKSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tl
ZCxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzIgorCitURVNUOiBkZWxldGVEYXRh
YmFzZSBub3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xvc2UgaW1tZWRpYXRlbHkKK3dpbmRvdy5k
Ym5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydoLm9w
ZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZSgpJworJ2gub252ZXJzaW9u
Y2hhbmdlJworICAgIGggY2xvc2luZyBpbW1lZGlhdGVseQorJ2guY2xvc2UnCisnZGVsZXRlRGF0
YWJhc2UoKS5vbmJsb2NrZWQnCisnZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MnCitOT1RFOiBX
aWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCBzdGVw
OyBjcmJ1Zy5jb20vMTAwMTIzCitGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBi
ZSBoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSgpLGgub252ZXJzaW9uY2hh
bmdlLGguY2xvc2UsZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MuIFdhcyBoLm9wZW4saC5vcGVu
Lm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSgpLGgub252ZXJzaW9uY2hhbmdlLGguY2xvc2UsZGVs
ZXRlRGF0YWJhc2UoKS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MuCisKK1RF
U1Q6IGRlbGV0ZURhdGFiYXNlIGlzIGRlbGF5ZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2Fj
dGlvbiBpcyBydW5uaW5nCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7
IHdpbmRvdy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nlc3MnCisnaC5zZXRW
ZXJzaW9uJworJ2RlbGV0ZURhdGFiYXNlKCknCisnaC5zZXRWZXJzaW9uLm9uc3VjY2VzcycKKydo
LnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUnCisnaC5vbnZlcnNpb25jaGFuZ2UnCisg
ICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJhc2UoKS5vbmJs
b2NrZWQnCisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZSgpLm9uc3VjY2VzcycKK1BBU1Mgd2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkgaXMgImgub3BlbixoLm9wZW4ub25zdWNjZXNzLGguc2V0VmVy
c2lvbixkZWxldGVEYXRhYmFzZSgpLGguc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaC5zZXRWZXJzaW9u
LnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlKCku
b25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MiCisKK1RFU1Q6IG11
bHRpcGxlIGRlbGV0ZURhdGFiYXNlIGNhbGxzCit3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2lu
ZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Blbi5vbnN1Y2Nl
c3MnCisnZGVsZXRlRGF0YWJhc2UoMSknCisnZGVsZXRlRGF0YWJhc2UoMiknCisnaC5vbnZlcnNp
b25jaGFuZ2UnCisgICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0
YWJhc2UoMSkub25ibG9ja2VkJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywg
YnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlKDIpLm9uYmxvY2tlZCcKKydoLmNs
b3NlJworJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJhc2UoMSkub25zdWNjZXNzJworJ2RlbGV0ZURh
dGFiYXNlKDIpLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgu
b252ZXJzaW9uY2hhbmdlL2guY2xvc2Ugc3RlcHM7IGNyYnVnLmNvbS8xMDA2NDUKK0ZBSUwgd2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRl
bGV0ZURhdGFiYXNlKDEpLGRlbGV0ZURhdGFiYXNlKDIpLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0
ZURhdGFiYXNlKDEpLm9uYmxvY2tlZCxkZWxldGVEYXRhYmFzZSgyKS5vbmJsb2NrZWQsaC5jbG9z
ZSxkZWxldGVEYXRhYmFzZSgxKS5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UoMikub25zdWNjZXNz
LiBXYXMgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UoMSksZGVsZXRlRGF0
YWJhc2UoMiksaC5vbnZlcnNpb25jaGFuZ2UsZGVsZXRlRGF0YWJhc2UoMSkub25ibG9ja2VkLGgu
b252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlKDIpLm9uYmxvY2tlZCxoLmNsb3NlLGguY2xv
c2UsZGVsZXRlRGF0YWJhc2UoMSkub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlKDIpLm9uc3VjY2Vz
cy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRh
dGFiYXNlLWludGVyYWN0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
ZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNzY1
ZTVjNTQ3MWNiZWI4MDQyMzc0Y2MzOTI5NjUwMGU2NzUyODgyCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRl
cmFjdGlvbnMuaHRtbApAQCAtMCwwICsxLDIzNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJl
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9z
aGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24i
PjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24o
IlRlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG9w
ZW4vc2V0VmVyc2lvbiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIENvbm5lY3Rp
b24oaWQpIHsKKyAgICBpZCA9IFN0cmluZyhpZCk7CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAg
IHRoaXMub3BlbiA9IGZ1bmN0aW9uKG9wdHMpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2go
ZXZhbEFuZExvZygiJyIgKyBpZCArICIub3BlbiciKSk7CisgICAgICAgIHZhciByZXEgPSBpbmRl
eGVkREIub3Blbih3aW5kb3cuZGJuYW1lKTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVj
dGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7
CisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IGUudGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLm9wZW4ub25zdWNjZXNz
JyIpKTsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9u
KGUpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiAr
IGlkICsgIi5vbnZlcnNpb25jaGFuZ2UnIikpOworICAgICAgICAgICAgICAgIGlmIChvcHRzICYm
IG9wdHMub252ZXJzaW9uKSB7IG9wdHMub252ZXJzaW9uLmNhbGwoc2VsZik7IH0KKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9u
c3VjY2Vzcy5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgfTsKKworICAgIHRoaXMuY2xv
c2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygi
JyIgKyBpZCArICIuY2xvc2UnIikpOworICAgICAgICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAg
IH07CisKKyAgICB0aGlzLnNldFZlcnNpb24gPSBmdW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdp
bmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24nIikpOwor
ICAgICAgICB2YXIgcmVxID0gdGhpcy5oYW5kbGUuc2V0VmVyc2lvbihTdHJpbmcod2luZG93LnZl
cisrKSk7CisgICAgICAgIHJlcS5vbmFib3J0ID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25h
Ym9ydCciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYWJvcnQpIHsgb3B0cy5v
bmFib3J0LmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uYmxvY2tlZCA9
IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9n
KCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYmxvY2tlZCciKSk7CisgICAgICAgICAgICBpZiAo
b3B0cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9Cisg
ICAgICAgIH07CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAg
ICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lv
bi5vbnN1Y2Nlc3MnIikpOworICAgICAgICAgICAgaWYgKHNlbGYuaGFuZGxlLm9iamVjdFN0b3Jl
TmFtZXMuY29udGFpbnMoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcikpIHsKKyAgICAgICAgICAg
ICAgICBzZWxmLmhhbmRsZS5kZWxldGVPYmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cu
dmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzdG9yZSA9IHNlbGYuaGFuZGxl
LmNyZWF0ZU9iamVjdFN0b3JlKCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpOworICAgICAgICAg
ICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsgLy8gS2VlcCB0
aGlzIHRyYW5zYWN0aW9uIHJ1bm5pbmcgZm9yIGEgd2hpbGUKKyAgICAgICAgICAgIGZ1bmN0aW9u
IGRvX2FzeW5jX3B1dHMoKSB7CisgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLnB1dChj
b3VudCwgY291bnQpOworICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7CisgICAgICAgICAgICAgICAgcmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChl
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgrK2NvdW50IDwgMTApIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2co
IiciICsgaWQgKyAiLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUnIikpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1
Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygi
JyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbmVycm9yJyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRz
ICYmIG9wdHMub25lcnJvcikgeyBvcHRzLm9uZXJyb3IuY2FsbChzZWxmKTsgfQorICAgICAgICB9
OworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZURhdGFiYXNlKGlkLCBuYW1lLCBvcHRzKSB7
CisgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlKCIgKyBp
ZCArICIpJyIpKTsKKyAgICB2YXIgcmVxID0gaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUp
OworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3Rl
cHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0YWJhc2UoIiArIGlkICsgIikub25zdWNjZXNz
JyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nl
c3MuY2FsbChudWxsKTsgfQorICAgIH07CisgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkg
eworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0YWJhc2Uo
IiArIGlkICsgIikub25lcnJvciciKSk7CisgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25lcnJv
cikgeyBvcHRzLm9uZXJyb3IuY2FsbChudWxsKTsgfQorICAgIH07CisgICAgcmVxLm9uYmxvY2tl
ZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2co
IidkZWxldGVEYXRhYmFzZSgiICsgaWQgKyAiKS5vbmJsb2NrZWQnIikpOworICAgICAgICBpZiAo
b3B0cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRzLm9uYmxvY2tlZC5jYWxsKG51bGwpOyB9Cisg
ICAgfTsKK30KKworLy8gcnVuIGEgc2VyaWVzIG9mIHN0ZXBzIHRoYXQgdGFrZSBhIGNvbnRpbnVh
dGlvbiBmdW5jdGlvbgorZnVuY3Rpb24gcnVuU3RlcHMoY29tbWFuZHMpIHsKKyAgICBpZiAoY29t
bWFuZHMubGVuZ3RoKSB7CisgICAgICAgIHZhciBjb21tYW5kID0gY29tbWFuZHMuc2hpZnQoKTsK
KyAgICAgICAgY29tbWFuZChmdW5jdGlvbigpIHsgcnVuU3RlcHMoY29tbWFuZHMpOyB9KTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygi
aW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8
IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7CisgICAgc2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09
IG51bGwiKTsKKyAgICB0ZXN0MSgpOworfQorCitmdW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBkZWJ1
ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBo
YW5kbGVzIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRv
dy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rp
b24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNj
ZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zygi
ICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICBmdW5j
dGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2UoIiIsIHdpbmRvdy5kYm5hbWUsIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9LAorICAgICAg
ICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5v
cGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURh
dGFiYXNlKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNo
YW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKCku
b25ibG9ja2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5jbG9zZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNz
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAg
IHRlc3QyKCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0MigpIHsKKyAgICBkZWJ1ZygiIik7
CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFiYXNlIG5vdCBibG9ja2VkIHdoZW4gaGFuZGxl
cyBjbG9zZSBpbW1lZGlhdGVseSIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAn
dGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9
IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBo
Lm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGggY2xvc2luZyBpbW1lZGlhdGVs
eSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGguY2xv
c2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwK
KyAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKCIiLCB3aW5kb3cuZGJu
YW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9
KTsgfSwKKyAgICAgICAgXSk7CisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAg
ZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGRlbGV0ZURhdGFiYXNlKCku
b25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMiKTsKKyAgICAgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgu
b3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVE
YXRhYmFzZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25j
aGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVz
dDMoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QzKCkgeworICAgIGRlYnVnKCIiKTsKKyAg
ICBkZWJ1ZygiVEVTVDogZGVsZXRlRGF0YWJhc2UgaXMgZGVsYXllZCBpZiBhIFZFUlNJT05fQ0hB
TkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmciKTsKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJu
YW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7CisgICAg
dmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05l
eHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0ZWx5Iik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkgeyBoLmNsb3NlKCk7IH0sIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBoLnNldFZlcnNpb24oKTsg
ZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRh
YmFzZSgiIiwgd2luZG93LmRibmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
e29uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9LAorICAgICAgICAgICAgICBdKTsKKworICAgIGZ1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2lu
ZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJo
Lm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5zZXRWZXJzaW9uIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVyc2lvbi5vbnN1Y2Nlc3MiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKCkub25ibG9ja2Vk
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3Q0KCk7
CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVi
dWcoIlRFU1Q6IG11bHRpcGxlIGRlbGV0ZURhdGFiYXNlIGNhbGxzIik7CisgICAgZXZhbEFuZExv
Zygid2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMg
PSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24oImgiKTsKKyAgICBydW5TdGVwcyhb
ZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNzOiBkb05leHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGggY2xvc2luZywgYnV0IG5vdCBp
bW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0
YWJhc2UoIjEiLCB3aW5kb3cuZGJuYW1lKTsgZG9OZXh0KCk7IH0sCisgICAgICAgIGZ1bmN0aW9u
KGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSgiMiIsIHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9LAorICAgICAgICBd
KTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICBkZWJ1ZygiTk9URTogV2ls
bCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaC5vbnZlcnNpb25jaGFuZ2UvaC5jbG9zZSBzdGVwczsg
Y3JidWcuY29tLzEwMDY0NSIpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRv
dy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5v
cGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKDEpIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoMikiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKDEpLm9uYmxvY2tlZCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKDIpLm9uYmxvY2tlZCIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgxKS5vbnN1Y2Nlc3MiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgyKS5vbnN1Y2Nlc3MiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgZG9u
ZSgpOworICAgIH0KK30KKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKK3Rlc3Qo
KTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDVlNWRkZDU1YmI1NjUwYzFlOWU3ZTI0NGRiNDdmODRmN2M1ZmIyMwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UuaHRtbApAQCAtMCwwICsxLDEwNCBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFy
ZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwv
cD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRl
c3QgSW5kZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuIik7CitpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coIndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uOworICAgIHJlcXVlc3Qub25lcnJv
ciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNldFZlcnNp
b24oKQoreworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7
CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24n
KSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRXhpc3Rpbmc7CisgICAgcmVxdWVz
dC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0
ZUV4aXN0aW5nKCkKK3sKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7
CisKKyAgICBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUo
J3N0b3JlTmFtZScsIG51bGwpIik7CisKKyAgICB3aW5kb3cuaW5kZXggPSBldmFsQW5kTG9nKCJz
dG9yZS5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpIik7CisgICAgc2hvdWxkQmVUcnVlKCJz
dG9yZS5pbmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSIpOworCisgICAgcmVxdWVzdCA9
IGV2YWxBbmRMb2coInN0b3JlLmFkZCgndmFsdWUnLCAna2V5JykiKTsKKyAgICByZXF1ZXN0Lm9u
c3VjY2VzcyA9IGdldFZhbHVlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBnZXRWYWx1ZSgpCit7CisgICAgdmFyIHRyYW5zYWN0
aW9uID0gZXZhbEFuZExvZygidHJhbnNhY3Rpb24gPSBkYi50cmFuc2FjdGlvbihbJ3N0b3JlTmFt
ZSddLCB3ZWJraXRJREJUcmFuc2FjdGlvbi5SRUFEX1dSSVRFKSIpOworICAgIHRyYW5zYWN0aW9u
Lm9uYWJvcnQgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICB2YXIgc3RvcmUgPSBldmFs
QW5kTG9nKCJzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKSIpOwor
CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInN0b3JlLmdldCgna2V5JykiKTsKKyAgICByZXF1
ZXN0Lm9uc3VjY2VzcyA9IGFkZEluZGV4OworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0
ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBhZGRJbmRleCgpCit7CisgICAgc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJldmVudC50YXJnZXQucmVzdWx0IiwgInZhbHVlIik7CisKKyAgICBy
ZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAg
IHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRGF0YWJhc2U7CisgICAgcmVxdWVzdC5vbmVycm9y
ID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZURhdGFiYXNl
KCkKK3sKKyAgICBkYi5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbigpIHsgZGIuY2xvc2UoKTsg
fQorICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJyZXF1ZXN0ID0gd2Via2l0SW5kZXhlZERCLmRl
bGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVlc3Qub25zdWNj
ZXNzID0gcmVvcGVuRGF0YWJhc2U7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHJlb3BlbkRhdGFiYXNlKCkKK3sKKyAgICByZXF1
ZXN0ID0gZXZhbEFuZExvZygid2Via2l0SW5kZXhlZERCLm9wZW4oJ2RhdGFiYXNlLXRvLWRlbGV0
ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBzdGFydFNldFZlcnNpb25BZ2FpbjsKKyAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rp
b24gc3RhcnRTZXRWZXJzaW9uQWdhaW4oKQoreworICAgIHJkYiA9IGV2YWxBbmRMb2coImRiID0g
ZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNl
dFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHZlcmlm
eU5vdEZvdW5kOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworfQorCitmdW5jdGlvbiB2ZXJpZnlOb3RGb3VuZCgpCit7CisgICAgc2hvdWxkQmUoImRiLm9i
amVjdFN0b3JlTmFtZXMubGVuZ3RoIiwgIjAiKTsKKworICAgIGRvbmUoKTsKK30KKwordGVzdCgp
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112897</attachid>
            <date>2011-10-28 12:55:24 -0700</date>
            <delta_ts>2011-10-29 08:10:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111028215521.patch</filename>
            <type>text/plain</type>
            <size>53137</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg3MjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNGM0ODQ0MDExNWZiNTFk
MWNhZDM1YmQwODYyY2ExYTQxMzFlMTZhLi4zMzhlNGY1ZWMwNTM0MzY2ODIwNmM3ZjFmYTMzYTgy
MmU3NmQzY2YxIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4K
KworICAgICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFz
ZS1pbnRlcmFjdGlvbnMuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS5odG1sCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2Fs
bDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBl
bmRpbmdEZWxldGVDYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0ZUNhbGw6OlBlbmRpbmdEZWxldGVDYWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3Blbklu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nl
c3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6b3BlbkNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9J
REJGYWN0b3J5Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmlkbDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCUmVx
dWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToK
KwogMjAxMS0xMC0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmVzZXQgbGluZSBudW1iZXJzIGZvciBzY3JpcHRzIGdlbmVyYXRlZCB3aXRoIGRvY3Vt
ZW50LndyaXRlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiNTA1YTA2MDc4ODFmMzI4
MjFkZDExMTFiMGMyMTY1ODJlMDdiNGMzLi4zNmZlOWE4ODMwNGI3YzJmNTU5ZDJmNzNlNjYzMGJh
MWQ0ZWE3ZTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisy
MDExLTEwLTI1ICBKb2NoZW4gRWlzaW5nZXIgIDxqb2NoZW5AY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIEltcGxlbWVudCBJREJGYWN0b3J5LmRlbGV0ZURhdGFiYXNlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OklEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmRlbGV0ZURhdGFi
YXNlKToKKyAgICAgICAgKiBzcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oOgorICAgICAgICAq
IHNyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklEQkZhY3Rv
cnlJbXBsOjpnZXREYXRhYmFzZU5hbWVzKToKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9y
eUltcGw6Om9wZW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6ZGVsZXRl
RGF0YWJhc2UpOgorICAgICAgICAqIHNyYy9XZWJJREJGYWN0b3J5SW1wbC5oOgorCiAyMDExLTEw
LTI4ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVtb3ZlIGdl
dEV4Y2VwdGlvbkNvZGVEZXNjcmlwdGlvbigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaAppbmRleCA2ZTEzZjRmYTYxYzRhMjFkNDJjM2ZmZGU1YmRjNzNkOTFkZGIzYzQx
Li41N2Y4OTIzYzRlZDU0YWY0OTJjYjRjZDk2MjdjNTk4ZTVjNjAxMjAxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ5LDYgKzQ5LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5h
bWVzKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQp
ID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52
YWxpZFJvd0lkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0
cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+
JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVP
YmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2Jq
ZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJh
c2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggNTgxYWE4YzAxNTNkOTZlMDk5MDg0MWM0ODY3ZjU0ZmE1
YWZhYmYxNy4uODRmYzg0Njg5YTZjZTEyNWNlYWE0ZDA3ZjQ5NTNjZGRmZTg3NTQ4NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBA
IC01NSw2ICs1NSwyMiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2Fs
bGJhY2tzOwogfTsKIAorY2xhc3MgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0
ZUNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nRGVsZXRlQ2FsbD4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiBjcmVhdGUoUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJhY2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitw
cml2YXRlOgorICAgIFBlbmRpbmdEZWxldGVDYWxsKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFja3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9
CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9jYWxsYmFja3M7Cit9OworCiBjbGFzcyBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nU2V0VmVyc2lvbkNhbGwgOiBwdWJsaWMgUmVmQ291
bnRlZDxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IGNyZWF0ZShjb25zdCBTdHJpbmcmIHZlcnNpb24s
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQpAQCAtOTAsNiArMTA2LDExIEBAIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBu
YW1lLCBJREJCYWNraW5nU3RvCiAKICAgICBib29sIHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+
ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpOwogICAg
IEFTU0VSVF9VTlVTRUQoc3VjY2Vzcywgc3VjY2VzcyA9PSAobV9pZCAhPSBJbnZhbGlkSWQpKTsK
KyAgICBvcGVuSW50ZXJuYWwoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpv
cGVuSW50ZXJuYWwoKQorewogICAgIGlmICghbV9iYWNraW5nU3RvcmUtPnNldElEQkRhdGFiYXNl
TWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQsIG1faWQgPT0gSW52YWxpZElkKSkKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBOZWVkIGJldHRlciBlcnJvciBo
YW5kbGluZy4KICAgICBsb2FkT2JqZWN0U3RvcmVzKCk7CkBAIC0xOTIsNyArMjEzLDcgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lv
biwgUGFzc1JlZlB0cjxJREJDYWwKICAgICB9CiAgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBvbkJs
b2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCiAgICAgLy8gVmVy
c2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJlLgot
ICAgIC8vIGh0dHA6Ly9jcmJ1Zy5jb20vMTAwMTIzCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCiAgICAgaWYgKG1fZGF0YWJhc2VDYWxsYmFja3NT
ZXQuc2l6ZSgpID4gMSkgewogICAgICAgICBjYWxsYmFja3MtPm9uQmxvY2tlZCgpOwogICAgICAg
ICBSZWZQdHI8UGVuZGluZ1NldFZlcnNpb25DYWxsPiBwZW5kaW5nU2V0VmVyc2lvbkNhbGwgPSBQ
ZW5kaW5nU2V0VmVyc2lvbkNhbGw6OmNyZWF0ZSh2ZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFiYXNl
Q2FsbGJhY2tzKTsKQEAgLTI1OCw3ICsyNzksMjEgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAgfQog
Ci0gICAgd2hpbGUgKCFtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gJiYgbV9wZW5k
aW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSAmJiAhbV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1w
dHkoKSkgeworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1f
cGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIFBlbmRpbmcgY2FsbHMgbWF5IGJlIHJlcXVldWVkLgorICAgIERlcXVlPFJlZlB0cjxQZW5k
aW5nRGVsZXRlQ2FsbD4gPiBwZW5kaW5nRGVsZXRlQ2FsbHM7CisgICAgbV9wZW5kaW5nRGVsZXRl
Q2FsbHMuc3dhcChwZW5kaW5nRGVsZXRlQ2FsbHMpOworICAgIHdoaWxlICghcGVuZGluZ0RlbGV0
ZUNhbGxzLmlzRW1wdHkoKSkgeworICAgICAgICBSZWZQdHI8UGVuZGluZ0RlbGV0ZUNhbGw+IHBl
bmRpbmdEZWxldGVDYWxsID0gcGVuZGluZ0RlbGV0ZUNhbGxzLnRha2VGaXJzdCgpOworICAgICAg
ICBkZWxldGVEYXRhYmFzZShwZW5kaW5nRGVsZXRlQ2FsbC0+Y2FsbGJhY2tzKCkpOworICAgIH0K
KworICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGlu
Z1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkgfHwgIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKCFtX3BlbmRpbmdPcGVuQ2FsbHMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIFJlZlB0cjxQZW5kaW5nT3BlbkNhbGw+IHBlbmRpbmdPcGVu
Q2FsbCA9IG1fcGVuZGluZ09wZW5DYWxscy50YWtlRmlyc3QoKTsKICAgICAgICAgb3BlbkNvbm5l
Y3Rpb24ocGVuZGluZ09wZW5DYWxsLT5jYWxsYmFja3MoKSk7CiAgICAgfQpAQCAtMjg0LDEwICsz
MTksNDMgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVuKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+IGNhbGxiYWNrcykKIAogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpvcGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQog
ewotICAgIGlmIChtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGlu
Z1NldFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCisgICAgaWYgKCFtX3BlbmRpbmdEZWxldGVDYWxs
cy5pc0VtcHR5KCkgfHwgbV9ydW5uaW5nVmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uIHx8ICFtX3Bl
bmRpbmdTZXRWZXJzaW9uQ2FsbHMuaXNFbXB0eSgpKQogICAgICAgICBtX3BlbmRpbmdPcGVuQ2Fs
bHMuYXBwZW5kKFBlbmRpbmdPcGVuQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcykpOwotICAgIGVsc2UK
KyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1faWQgPT0gSW52YWxpZElkKQorICAgICAgICAgICAg
b3BlbkludGVybmFsKCk7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKHRoaXMpOworICAg
IH0KK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVEYXRhYmFzZShQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzKQoreworICAgIGlmIChtX3J1bm5pbmdW
ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1NldFZlcnNpb25DYWxscy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgbV9wZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxl
dGVDYWxsOjpjcmVhdGUocHJwQ2FsbGJhY2tzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOworICAgIC8v
IEZJWE1FOiBPbmx5IGZpcmUgb25WZXJzaW9uQ2hhbmdlIGlmIHRoZXJlIHRoZSBjb25uZWN0aW9u
IGlzbid0IGluCisgICAgLy8gdGhlIHByb2Nlc3Mgb2YgY2xvc2luZy4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMjkKKyAgICBmb3IgKERhdGFiYXNl
Q2FsbGJhY2tzU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQu
YmVnaW4oKTsgaXQgIT0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5lbmQoKTsgKytpdCkKKyAgICAg
ICAgKCppdCktPm9uVmVyc2lvbkNoYW5nZSgiIik7CisgICAgLy8gRklYTUU6IE9ubHkgZmlyZSBv
bkJsb2NrZWQgaWYgdGhlcmUgYXJlIG9wZW4gY29ubmVjdGlvbnMgYWZ0ZXIgdGhlCisgICAgLy8g
VmVyc2lvbkNoYW5nZUV2ZW50cyBhcmUgcmVjZWl2ZWQsIG5vdCBqdXN0IHNldCB1cCB0byBmaXJl
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAor
ICAgIGlmICghbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9w
ZW5kaW5nRGVsZXRlQ2FsbHMuYXBwZW5kKFBlbmRpbmdEZWxldGVDYWxsOjpjcmVhdGUoY2FsbGJh
Y2tzKSk7CisgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS0+ZGVsZXRlRGF0YWJhc2UobV9uYW1lKSkg
eworICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3ZlcnNpb24gPSAiIjsKKyAgICBtX2lkID0gSW52
YWxpZElkOworICAgIG1fb2JqZWN0U3RvcmVzLmNsZWFyKCk7CisgICAgY2FsbGJhY2tzLT5vblN1
Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiB9CiAKIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6Y2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gcHJwQ2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaAppbmRleCBlOGIxMDg0NTAxMzA0Y2QxOGY1ZmY2NmExYWQ0OWU4YWJmNmFj
YmYwLi43YTVjZTFkYTgzYzhiNDYxY2YzYWY4OWMxMTMyMTUzNDEyMGIxNmM5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaApAQCAtNTgsNiAr
NTgsNyBAQCBwdWJsaWM6CiAgICAgLy8gRklYTUU6IFJlbmFtZSAib3BlbiIgdG8gc29tZXRoaW5n
IG1vcmUgZGVzY3JpcHRpdmUsIGxpa2UgcmVnaXN0ZXJGcm9udEVuZENhbGxiYWNrcy4KICAgICB2
b2lkIG9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogICAgIHZvaWQgb3Bl
bkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKKyAgICB2b2lkIGRlbGV0ZURh
dGFiYXNlKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CiAKICAgICB2aXJ0dWFsIFN0cmluZyBu
YW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CiAgICAgdmlydHVhbCBTdHJpbmcgdmVyc2lv
bigpIGNvbnN0IHsgcmV0dXJuIG1fdmVyc2lvbjsgfQpAQCAtNzcsNiArNzgsNyBAQCBwdWJsaWM6
CiBwcml2YXRlOgogICAgIElEQkRhdGFiYXNlQmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1l
LCBJREJCYWNraW5nU3RvcmUqIGRhdGFiYXNlLCBJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiwg
SURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKTsK
IAorICAgIHZvaWQgb3BlbkludGVybmFsKCk7CiAgICAgdm9pZCBsb2FkT2JqZWN0U3RvcmVzKCk7
CiAgICAgdm9pZCBwcm9jZXNzUGVuZGluZ0NhbGxzKCk7CiAKQEAgLTExMCw2ICsxMTIsOSBAQCBw
cml2YXRlOgogICAgIGNsYXNzIFBlbmRpbmdPcGVuQ2FsbDsKICAgICBEZXF1ZTxSZWZQdHI8UGVu
ZGluZ09wZW5DYWxsPiA+IG1fcGVuZGluZ09wZW5DYWxsczsKIAorICAgIGNsYXNzIFBlbmRpbmdE
ZWxldGVDYWxsOworICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gPiBtX3BlbmRp
bmdEZWxldGVDYWxsczsKKwogICAgIHR5cGVkZWYgTGlzdEhhc2hTZXQ8UmVmUHRyPElEQkRhdGFi
YXNlQ2FsbGJhY2tzPiA+IERhdGFiYXNlQ2FsbGJhY2tzU2V0OwogICAgIERhdGFiYXNlQ2FsbGJh
Y2tzU2V0IG1fZGF0YWJhc2VDYWxsYmFja3NTZXQ7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeS5jcHAKaW5kZXggYWIxNmI3ZDZlZGRlMjM0ODAyYzA1YTI2ZmEwMjljYTRhMjc5NDM1
YS4uMDU4YzRkM2U1YWVkOTZkZDc1ZmU3YTIzNDMxODU1Mjk2MDJlOTc5NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiSURC
S2V5LmgiCiAjaW5jbHVkZSAiSURCS2V5UmFuZ2UuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiSURCVmVyc2lvbkNoYW5nZVJlcXVlc3QuaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKQEAg
LTk4LDYgKzk5LDI4IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCRmFjdG9yeTo6b3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTCiAgICAgcmV0dXJuIHJlcXVl
c3Q7CiB9CiAKK1Bhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IElEQkZhY3Rvcnk6
OmRlbGV0ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjb250ZXh0LT5pc0Rv
Y3VtZW50KCkpIHsKKyAgICAgICAgLy8gRklYTUU6IG1ha2UgdGhpcyB3b3JrIHdpdGggd29ya2Vy
cy4KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KTsKKyAgICBpZiAoIWRvY3VtZW50LT5mcmFt
ZSgpIHx8ICFkb2N1bWVudC0+cGFnZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChu
YW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246Ok5PTl9U
UkFOU0lFTlRfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBSZWZQdHI8SURC
VmVyc2lvbkNoYW5nZVJlcXVlc3Q+IHJlcXVlc3QgPSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdDo6
Y3JlYXRlKGRvY3VtZW50LCBJREJBbnk6OmNyZWF0ZU51bGwoKSwgIiIpOworICAgIEdyb3VwU2V0
dGluZ3MqIGdyb3VwU2V0dGluZ3MgPSBkb2N1bWVudC0+cGFnZSgpLT5ncm91cCgpLmdyb3VwU2V0
dGluZ3MoKTsKKyAgICBtX2ZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCByZXF1
ZXN0LCBkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSwgZG9jdW1lbnQtPmZyYW1lKCksIGdyb3Vw
U2V0dGluZ3MtPmluZGV4ZWREQkRhdGFiYXNlUGF0aCgpKTsKKyAgICByZXR1cm4gcmVxdWVzdDsK
K30KKwogc2hvcnQgSURCRmFjdG9yeTo6Y21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFz
c1JlZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJU
KGZpcnN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5o
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKaW5kZXggODkzNDIxZDE4MDk0
ZDczNDBhZTM5NGRmYThlYjEyNmYwM2E5OWM2Ny4uMTdiZmYxZDFmY2JkMmYwMzllMmJkNmFmZGFi
YzlmNWVjODkyYWM4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmgKQEAgLTQ0LDYg
KzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSURCS2V5OwogY2xhc3MgSURCS2V5
UmFuZ2U7CiBjbGFzcyBJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTsKK2NsYXNzIElEQlZlcnNp
b25DaGFuZ2VSZXF1ZXN0OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3Mg
SURCRmFjdG9yeSA6IHB1YmxpYyBSZWZDb3VudGVkPElEQkZhY3Rvcnk+IHsKQEAgLTU3LDYgKzU4
LDcgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gZ2V0RGF0YWJhc2VOYW1l
cyhTY3JpcHRFeGVjdXRpb25Db250ZXh0Kik7CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW4oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8SURCVmVyc2lvbkNoYW5nZVJlcXVlc3Q+IGRlbGV0
ZURhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4
Y2VwdGlvbkNvZGUmKTsKIAogICAgIHNob3J0IGNtcChQYXNzUmVmUHRyPElEQktleT4gZmlyc3Qs
IFBhc3NSZWZQdHI8SURCS2V5PiBzZWNvbmQsIEV4Y2VwdGlvbkNvZGUmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKaW5kZXggMjNmYTg3MWViYTdlMjdlYWY4YzdhODhlM2I3
NGU3YmY1MDU1NWE0NS4uYzQ0OTk2YmEwZjlhY2M4ZmFlYmJjYzVkMDJkNDY4Nzk2YTZkODYxMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCkBAIC0zMiw2ICszMiw4IEBAIG1v
ZHVsZSBzdG9yYWdlIHsKIAogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dF0gSURCUmVxdWVzdCBvcGVuKGluIERPTVN0cmluZyBuYW1lKQogICAgICAgICAgICAgcmFpc2Vz
IChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CisgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRp
b25Db250ZXh0XSBJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdCBkZWxldGVEYXRhYmFzZShpbiBET01T
dHJpbmcgbmFtZSkKKyAgICAgICAgICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwog
CiAgICAgICAgIHNob3J0IGNtcChpbiBJREJLZXkgZmlyc3QsIGluIElEQktleSBzZWNvbmQpCiAg
ICAgICAgICAgICByYWlzZXMgKElEQkRhdGFiYXNlRXhjZXB0aW9uKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NDRkNmFjZGJm
YmIwN2YwNWJiMjUzZWVmMzYxNTNhZDEyMzY5ODZiLi5kMTI0ODFkM2RjMTExMDhiMDY4YmI2MDFi
ZmMzNmY4OGQ0YzkyZTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0
b3J5QmFja2VuZEltcGwuY3BwCkBAIC0xMjIsNiArMTIyLDMwIEBAIHZvaWQgSURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhCiAgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRh
dGFiYXNlQmFja2VuZC5nZXQoKSk7CiB9CiAKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpk
ZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBG
cmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikKK3sKKyAgICBjb25zdCBTdHJpbmcgdW5pcXVl
SWRlbnRpZmllciA9IGNvbXB1dGVVbmlxdWVJZGVudGlmaWVyKG5hbWUsIHNlY3VyaXR5T3JpZ2lu
LmdldCgpKTsKKworICAgIElEQkRhdGFiYXNlQmFja2VuZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2Rh
dGFiYXNlQmFja2VuZE1hcC5maW5kKHVuaXF1ZUlkZW50aWZpZXIpOworICAgIGlmIChpdCAhPSBt
X2RhdGFiYXNlQmFja2VuZE1hcC5lbmQoKSkgeworICAgICAgICAvLyBJZiB0aGVyZSBhcmUgYW55
IGNvbm5lY3Rpb25zIHRvIHRoZSBkYXRhYmFzZSwgZGlyZWN0bHkgZGVsZXRlIHRoZQorICAgICAg
ICAvLyBkYXRhYmFzZS4KKyAgICAgICAgaXQtPnNlY29uZC0+ZGVsZXRlRGF0YWJhc2UoY2FsbGJh
Y2tzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBFdmVyeXRoaW5n
IGZyb20gbm93IG9uIHNob3VsZCBiZSBkb25lIG9uIGFub3RoZXIgdGhyZWFkLgorICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU+IGJhY2tpbmdTdG9yZSA9IG9wZW5CYWNraW5nU3RvcmUoc2VjdXJp
dHlPcmlnaW4sIGRhdGFEaXIpOworICAgIGlmICghYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNh
bGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNl
cHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlQmFj
a2VuZCA9IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZShuYW1lLCBiYWNraW5nU3RvcmUu
Z2V0KCksIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKSwgdGhpcywgdW5pcXVlSWRlbnRp
Zmllcik7CisgICAgbV9kYXRhYmFzZUJhY2tlbmRNYXAuc2V0KHVuaXF1ZUlkZW50aWZpZXIsIGRh
dGFiYXNlQmFja2VuZC5nZXQoKSk7CisgICAgZGF0YWJhc2VCYWNrZW5kLT5kZWxldGVEYXRhYmFz
ZShjYWxsYmFja3MpOworfQorCiBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuQmFja2luZ1N0b3JlKFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+
IHNlY3VyaXR5T3JpZ2luLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCiB7CiAgICAgY29uc3QgU3Ry
aW5nIGZpbGVJZGVudGlmaWVyID0gY29tcHV0ZUZpbGVJZGVudGlmaWVyKHNlY3VyaXR5T3JpZ2lu
LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5oCmluZGV4IDZlZTliYjI0MzAzMzAxZmFjNDE1YWEwNjkwYzYxYmE0ZjEyZDhkZWYuLjljMmYw
N2ZiNzA1NDdhMjEwM2E0Y2FkNzdkYjU2ZTU5M2YxYzQ5NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaApAQCAtNTcsNiArNTcsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CiAgICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFt
ZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpOwogCiBw
cml2YXRlOgogICAgIElEQkZhY3RvcnlCYWNrZW5kSW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oCmluZGV4IGM0MDE4ZWZm
OWRkNjRkYmM5Yjc5NDJlNTBjM2IwMjU1MjQyNzc5MzguLmU5MjU0NWQyY2ZmNjM5ZWYwN2VkYjEw
NjFkYmU1MzZjYjgyMTg5OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUzLDYgKzUzLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIGdldERhdGFiYXNlTmFtZXMoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFE
aXIpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpID0gMDsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGZhNGU1YjM0ODI2YjFkOTU5ZDU2
OTI1ZGJmODQ2ZTVhNDIwMDFlNjguLmNlYTFmZmY5OTBmMWEyNjZjOGU1M2IyNjg3ODcxYzg0YzI2
NGUzMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2lu
Z1N0b3JlLmNwcApAQCAtMjM0LDYgKzIzNCw0NyBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6OnNldElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdAog
ICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGVuZCkKK3sKKyAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRy
YW5zYWN0aW9uLT5jcmVhdGVJdGVyYXRvcigpOworICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBp
dC0+aXNWYWxpZCgpICYmIGNvbXBhcmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKCF0cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKwor
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcm
IG5hbWUpCit7CisgICAgaWYgKG1fY3VycmVudFRyYW5zYWN0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBSZWZQdHI8SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb24+
IHRyYW5zYWN0aW9uID0gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6VHJhbnNhY3Rpb246OmNyZWF0
ZSh0aGlzKTsKKyAgICB0cmFuc2FjdGlvbi0+YmVnaW4oKTsKKworICAgIGludDY0X3QgZGF0YWJh
c2VJZDsKKyAgICBTdHJpbmcgdmVyc2lvbjsKKyAgICBpZiAoIWV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKG5hbWUsIHZlcnNpb24sIGRhdGFiYXNlSWQpKSB7CisgICAgICAgIHRyYW5zYWN0aW9u
LT5yb2xsYmFjaygpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBjb25zdCBW
ZWN0b3I8Y2hhcj4gc3RhcnRLZXkgPSBEYXRhYmFzZU1ldGFEYXRhS2V5OjplbmNvZGUoZGF0YWJh
c2VJZCwgRGF0YWJhc2VNZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOworICAgIGNvbnN0IFZlY3Rv
cjxjaGFyPiBzdG9wS2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQg
KyAxLCBEYXRhYmFzZU1ldGFEYXRhS2V5OjprT3JpZ2luTmFtZSk7CisgICAgaWYgKCFkZWxldGVS
YW5nZShtX2N1cnJlbnRUcmFuc2FjdGlvbi5nZXQoKSwgc3RhcnRLZXksIHN0b3BLZXkpKSB7Cisg
ICAgICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+IGtleSA9IERhdGFiYXNlTmFtZUtleTo6ZW5j
b2RlKG1faWRlbnRpZmllciwgbmFtZSk7CisgICAgbV9jdXJyZW50VHJhbnNhY3Rpb24tPnJlbW92
ZShrZXkpOworCisgICAgdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCiBzdGF0aWMgYm9vbCBjaGVja09iamVjdFN0b3JlQW5kTWV0YURhdGFUeXBlKGNvbnN0IExl
dmVsREJJdGVyYXRvciogaXQsIGNvbnN0IFZlY3RvcjxjaGFyPiYgc3RvcEtleSwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IG1ldGFEYXRhVHlwZSkKIHsKICAgICBpZiAoIWl0LT5pc1Zh
bGlkKCkgfHwgY29tcGFyZUtleXMoaXQtPmtleSgpLCBzdG9wS2V5KSA+PSAwKQpAQCAtNDEzLDE3
ICs0NTQsNiBAQCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJgogICAgIHJldHVybiB0cnVlOwogfQog
Ci1zdGF0aWMgYm9vbCBkZWxldGVSYW5nZShMZXZlbERCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
LCBjb25zdCBWZWN0b3I8Y2hhcj4mIGJlZ2luLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGVuZCkKLXsK
LSAgICBPd25QdHI8TGV2ZWxEQkl0ZXJhdG9yPiBpdCA9IHRyYW5zYWN0aW9uLT5jcmVhdGVJdGVy
YXRvcigpOwotICAgIGZvciAoaXQtPnNlZWsoYmVnaW4pOyBpdC0+aXNWYWxpZCgpICYmIGNvbXBh
cmVLZXlzKGl0LT5rZXkoKSwgZW5kKSA8IDA7IGl0LT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKCF0
cmFuc2FjdGlvbi0+cmVtb3ZlKGl0LT5rZXkoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIHZvaWQgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFRyYW5zYWN0aW9uKTsKQEAgLTEzNzcs
OCArMTQwNyw2IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6YmFja2luZ1N0b3JlRXhp
c3RzKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbiwKICAgICByZXR1cm4gZmlsZUV4aXN0
cyhwYXRoKyIvQ1VSUkVOVCIpOwogfQogCi0vLyBGSVhNRTogZGVsZXRlRGF0YWJhc2Ugc2hvdWxk
IGJlIHBhcnQgb2YgSURCQmFja2luZ1N0b3JlLgotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
ICNlbmRpZiAvLyBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJM
ZXZlbERCQmFja2luZ1N0b3JlLmgKaW5kZXggYzFkM2FjNGRiZjk4ZmJmZWQ1NDg5MjQ4NTc4ZWM4
ZDJmM2I4NGUxZS4uODdiMDk3ZDA4YjY0Mjk5YTNiNTJlOGUyM2Q4MjNhZmFjZDc2YzNjNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAg
LTQ3LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVz
KFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzKTsKICAgICB2aXJ0dWFsIGJvb2wgZXh0cmFjdElE
QkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcmIGZvdW5kVmVyc2lv
biwgaW50NjRfdCYgZm91bmRJZCk7CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qm
IHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFi
YXNlKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3Rv
cmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9y
PFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0
b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKICAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25l
ZE9iamVjdFN0b3JlSWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJS
ZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXgg
ZjhmY2NlOGZlZjliNTlmNGNiYTI1OTIyNTAxOTMwMWZjMGJlNTk1MS4uZDEyNTZmMzMyYTk2ZGRm
OTlmNTBiMjVhMDkzMzNlZjBiMGNjYjMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVl
c3QuY3BwCkBAIC0zMDEsOCArMzAxLDggQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50
KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2
ZW50TmFtZXMoKS5zdWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCku
ZXJyb3JFdmVudCB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQp
OwogICAgIGJvb2wgZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNw
YXRjaChldmVudC5nZXQoKSwgdGFyZ2V0cyk7CiAKLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBv
ZiB0eXBlIElEQkN1cnNvciwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlmIChtX3Jlc3Vs
dCAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlwZSAmJiBtX3Jlc3Vs
dC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAvLyBJZiB0
aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1cnNvciwgb3IgYSBvbkJsb2NrZWQgZXZlbnQsIHRo
ZW4gd2UnbGwgZmlyZSBhZ2Fpbi4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVz
KCkuYmxvY2tlZEV2ZW50ICYmIG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55
OjpJREJDdXJzb3JUeXBlICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JX
aXRoVmFsdWVUeXBlKQogICAgICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3Ry
YW5zYWN0aW9uKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJG
YWN0b3J5QmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZh
Y3RvcnlCYWNrZW5kUHJveHkuY3BwCmluZGV4IDdhNjJlNTBlYmIxNWE1MmQ1NTU0YzYzNzA0ZTQ5
NGFiOTU1NjIwMGEuLjdiNjAzOGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0ZGNlZWU0YTBmOWMgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwCkBAIC05MSw2ICs5MSwxOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6
Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gYwogICAg
IG1fd2ViSURCRmFjdG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAordm9pZCBJREJGYWN0b3J5
QmFja2VuZFByb3h5OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBy
cE9yaWdpbiwgRnJhbWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2Vi
U2VjdXJpdHlPcmlnaW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJG
cmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCog
d2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNz
aW9uQ2xpZW50KCkgJiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVk
REIod2ViRnJhbWUsIG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KFdlYklEQkRhdGFiYXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFj
Y2VzcyB0aGUgZGF0YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93
ZWJJREJGYWN0b3J5LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MpLCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaApp
bmRleCBiYWYxZTA1ZTJjOTkyZjkyMWM3ZGQyN2Q0ZmQzMjZlOGE2YWE4NmVkLi5lMTRiOGNlYTk4
MmYzMTdlNDFkNDNhOGM5M2YxZDdkNjFmNjcxYzMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00Niw2ICs0Niw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2Fs
bGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZy
YW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0
YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNr
cz4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSos
IGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tl
bmRQcm94eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURC
RmFjdG9yeUltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9y
eUltcGwuY3BwCmluZGV4IDFjMDk2OGE1NTFjMmM4NDBiMDkwMjU0YzZhZDgwNGQyMTMzZjMwN2Uu
Ljg0YzFhM2Q0MmUxYWIxMmYzM2NkMjMyZDlmMTQ1YjZkODMwZWRkNmQgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKQEAgLTYwLDE3ICs2
MCwxOCBAQCBXZWJJREJGYWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIAogdm9pZCBX
ZWJJREJGYWN0b3J5SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxi
YWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBX
ZWJTdHJpbmcmIGRhdGFEaXIpCiB7Ci0gICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOwotCi0g
ICAgbV9pZGJGYWN0b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJREJDYWxsYmFja3NQcm94
eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOworICAgIG1f
aWRiRmFjdG9yeUJhY2tlbmQtPmdldERhdGFiYXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNy
ZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKIH0KIAogCiB2
b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURC
Q2FsbGJhY2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdl
YkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKQogewotICAgIFdlYlN0cmluZyBwYXRo
ID0gZGF0YURpcjsKKyAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxi
YWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgZGF0YURp
cik7Cit9CiAKLSAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNr
c1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7Cit2
b2lkIFdlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYg
b3JpZ2luLCBXZWJGcmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikKK3sKKyAgICBtX2lk
YkZhY3RvcnlCYWNrZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6
Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkZhY3RvcnlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJGYWN0b3J5SW1wbC5oCmluZGV4IDNlMDFkMWE2M2M4OTI0MDYxZjU3Yzg1NzdhZWFmNWJiNDE2
YmM2YzIuLmIzZTQ3NGRmOTI1NWU4NzdmMmZmNmQwZTYzMTAzNTU2MjQ2ZDE3MTkgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApAQCAtNDYsNiAr
NDYsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJ
REJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3Qg
V2ViU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJp
bmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2Vi
RnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIp
OwogCiBwcml2YXRlOgogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlPiBtX2lkYkZhY3RvcnlCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGFhMWZjODBjY2ExNmRiY2Nm
ZDQyMWZmMzMwNmY0OTJhOWFlZGZhNTUuLmNjMDdhMzAyYTM5MTUzNjQ0NTgwYjVlM2NmYzQzZmNl
ZjE3YzJhMjYgMTAwNzU1Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0xMC0yNSAgSm9jaGVuIEVpc2lu
Z2VyICA8am9jaGVuQGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSURCRmFjdG9y
eS5kZWxldGVEYXRhYmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NjI2MjIKKworICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0OiBVcGRh
dGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWw6IFVw
ZGF0ZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFz
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlv
bnMuaHRtbDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxl
dGVkYXRhYmFzZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vcGVu
LWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
aW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sOiBVcGRhdGVkLgorCiAyMDExLTEwLTI4
ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXNldCBs
aW5lIG51bWJlcnMgZm9yIHNjcmlwdHMgZ2VuZXJhdGVkIHdpdGggZG9jdW1lbnQud3JpdGUuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2lj
cy1leHBlY3RlZC50eHQKaW5kZXggZTljZjdhMjAzOWNhNmQ5ZmU0Zjk1ZGExMTMxNDY5MTViODky
MTVhMi4uY2I4NWI3NjQxZjc4NjRlMjRkN2QyNDI4OWMwOGY0NjYxYWZkYTI0NyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4
cGVjdGVkLnR4dApAQCAtOCwxNyArOCwyMyBAQCBQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZh
bHNlCiBQQVNTIHR5cGVvZiBpbmRleGVkREIub3BlbiA9PT0gJ2Z1bmN0aW9uJyBpcyB0cnVlCiBQ
QVNTIHR5cGVvZiBpbmRleGVkREIuY21wID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlw
ZW9mIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzID09PSAnZnVuY3Rpb24nIGlzIHRydWUKLWRl
bGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0IGltcGxlbWVudGVkLCBzbyB0aGlzIHdpbGwgZmFp
bDoKLUZBSUwgdHlwZW9mIGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJyBz
aG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorUEFTUyB0eXBlb2YgaW5kZXhlZERCLmRlbGV0ZURh
dGFiYXNlID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVz
KCkKIGRhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CiBQQVNTIGRhdGFiYXNlTmFt
ZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykgaXMgZmFsc2UK
IFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElT
VCcpIGlzIGZhbHNlCiBpbmRleGVkREIub3BlbihuYW1lLCBkZXNjcmlwdGlvbikKK2V2ZW50LnRh
cmdldC5yZXN1bHQuY2xvc2UoKQogaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQogZGF0YWJh
c2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlu
cygnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyB0cnVlCiBQQVNTIGRhdGFi
YXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxz
ZQoraW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJh
c2ljcycpCitpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpCitkYXRhYmFzZU5hbWVzID0gZXZl
bnQudGFyZ2V0LnJlc3VsdAorUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2lu
ZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcycpIGlzIGZhbHNlCitQQVNTIGRhdGFiYXNlTmFtZXMuY29u
dGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1QgRVhJU1QnKSBpcyBmYWxzZQoraW5kZXhlZERC
LmRlbGV0ZURhdGFiYXNlKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykKIFBBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAogVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MuaHRtbCBiL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwKaW5kZXggMjg1YTA2YzNl
MDczMTBmYmEwYWY5ZjdkZmEzMDdiZDNmZjk3MDc1Zi4uNjI4ZmVlZjNlMTk5YThlMjNmY2Y2NzAy
NzUyODMxYjE5NTI3NWY4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVk
ZGIvZmFjdG9yeS1iYXNpY3MuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9mYWN0b3J5LWJhc2ljcy5odG1sCkBAIC0yMyw3ICsyMyw2IEBAIGZ1bmN0aW9uIHRlc3QoKQog
ICAgIHNob3VsZEJlVHJ1ZSgidHlwZW9mIGluZGV4ZWREQi5jbXAgPT09ICdmdW5jdGlvbiciKTsK
ICAgICBzaG91bGRCZVRydWUoInR5cGVvZiBpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcyA9PT0g
J2Z1bmN0aW9uJyIpOwogCi0gICAgZGVidWcoImRlbGV0ZURhdGFiYXNlIEFQSSBpcyBub3QgeWV0
IGltcGxlbWVudGVkLCBzbyB0aGlzIHdpbGwgZmFpbDoiKTsKICAgICBzaG91bGRCZVRydWUoInR5
cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5jdGlvbiciKTsKIAogICAgIG5h
bWUgPSAnc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MnOwpAQCAtNDgsNiArNDcsNyBA
QCBmdW5jdGlvbiBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczEoKQogCiBmdW5jdGlvbiBvcGVuU3Vj
Y2VzcygpCiB7CisgICAgZXZhbEFuZExvZygiZXZlbnQudGFyZ2V0LnJlc3VsdC5jbG9zZSgpIik7
CiAgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCki
KTsKICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMjsKICAg
ICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKQEAgLTYwLDggKzYw
LDMyIEBAIGZ1bmN0aW9uIGdldERhdGFiYXNlTmFtZXNTdWNjZXNzMigpCiAgICAgc2hvdWxkQmVU
cnVlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwogICAgIHNob3Vs
ZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQgRE9FUyBOT1Qg
RVhJU1QnKSIpOwogCi0gICAgLy8gRklYTUU6IHRlc3QgaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNl
KGRhdGFiYXNlTmFtZSkKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0
ZURhdGFiYXNlKCciICsgbmFtZSArICInKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVs
ZXRlRGF0YWJhc2VTdWNjZXNzOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJv
ckNhbGxiYWNrOworfQogCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MoKQoreworICAg
IHJlcXVlc3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpIik7Cisg
ICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXREYXRhYmFzZU5hbWVzU3VjY2VzczM7CisgICAgcmVx
dWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGdl
dERhdGFiYXNlTmFtZXNTdWNjZXNzMygpCit7CisgICAgdmFyIGRhdGFiYXNlTmFtZXM7CisgICAg
ZXZhbEFuZExvZygiZGF0YWJhc2VOYW1lcyA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKyAgICBz
aG91bGRCZUZhbHNlKCJkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCciICsgbmFtZSArICInKSIpOwor
ICAgIHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFtZXMuY29udGFpbnMoJ0RBVEFCQVNFIFRIQVQg
RE9FUyBOT1QgRVhJU1QnKSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImluZGV4ZWRE
Qi5kZWxldGVEYXRhYmFzZSgnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CisgICAg
cmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxldGVEYXRhYmFzZVN1Y2Nlc3MyOworICAgIHJlcXVlc3Qu
b25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBkZWxldGVE
YXRhYmFzZVN1Y2Nlc3MyKCkKK3sKICAgICBkb25lKCk7CiB9CiAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFz
ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDYyMTdmNzUwZTY1ZDBhOTljZDNlZTIyNjg1ZDhh
OGYxMjFjYzQ0MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhl
ZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjggQEAK
K1Rlc3QgSW5kZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCit3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJh
c2UtdG8tZGVsZXRlJykKK2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorZGIuc2V0VmVyc2lvbign
bmV3IHZlcnNpb24nKQordHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIHRyYW5zICE9
PSBudWxsIGlzIHRydWUKK3N0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScs
IG51bGwpCitzdG9yZS5jcmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpCitQQVNTIHN0b3JlLmlu
ZGV4TmFtZXMuY29udGFpbnMoJ2luZGV4TmFtZScpIGlzIHRydWUKK3N0b3JlLmFkZCgndmFsdWUn
LCAna2V5JykKK2RiLnRyYW5zYWN0aW9uKCdzdG9yZU5hbWUnLCB3ZWJraXRJREJUcmFuc2FjdGlv
bi5SRUFEX1dSSVRFKQorc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZSgnc3RvcmVOYW1l
JykKK3N0b3JlLmdldCgna2V5JykKK1BBU1MgZXZlbnQudGFyZ2V0LnJlc3VsdCBpcyAidmFsdWUi
CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCityZXF1ZXN0ID0gd2Via2l0SW5kZXhlZERC
LmRlbGV0ZURhdGFiYXNlKCdkYXRhYmFzZS10by1kZWxldGUnKQord2Via2l0SW5kZXhlZERCLm9w
ZW4oJ2RhdGFiYXNlLXRvLWRlbGV0ZScpCitkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQKK2RiLnNl
dFZlcnNpb24oJ25ldyB2ZXJzaW9uJykKK1BBU1MgZGIub2JqZWN0U3RvcmVOYW1lcy5sZW5ndGgg
aXMgMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRl
ZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2Uv
aW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5iZmI4MWViMTg4MjgyMmFhZWMxZjkxN2MwMDQzZjFmMTVkM2JmNmEyCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1k
ZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNzAgQEAK
K1Rlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwgYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG9w
ZW4vc2V0VmVyc2lvbgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworaW5kZXhlZERC
ID0gd2luZG93LmluZGV4ZWREQiB8fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5t
b3pJbmRleGVkREI7CitQQVNTIGluZGV4ZWREQiA9PSBudWxsIGlzIGZhbHNlCisKK1RFU1Q6IGRl
bGV0ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzCit3aW5kb3cuZGJuYW1lID0gJ3Rl
c3QxJzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdCisnaC5vcGVuJworJ2gub3Bl
bi5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJhc2UoKScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAg
ICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZSgpLm9uYmxv
Y2tlZCcKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzJworUEFTUyB3aW5k
b3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0
YWJhc2UoKSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCxoLmNs
b3NlLGRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzIgorCitURVNUOiBkZWxldGVEYXRhYmFzZSBu
b3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xvc2UgaW1tZWRpYXRlbHkKK3dpbmRvdy5kYm5hbWUg
PSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydoLm9wZW4nCisn
aC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZSgpJworJ2gub252ZXJzaW9uY2hhbmdl
JworICAgIGggY2xvc2luZyBpbW1lZGlhdGVseQorJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJhc2Uo
KS5vbmJsb2NrZWQnCisnZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MnCitOT1RFOiBXaWxsIEZB
SUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCBzdGVwOyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAKK0ZBSUwgd2luZG93LnN0
ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJlIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURh
dGFiYXNlKCksaC5vbnZlcnNpb25jaGFuZ2UsaC5jbG9zZSxkZWxldGVEYXRhYmFzZSgpLm9uc3Vj
Y2Vzcy4gV2FzIGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlKCksaC5vbnZl
cnNpb25jaGFuZ2UsaC5jbG9zZSxkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCxkZWxldGVEYXRh
YmFzZSgpLm9uc3VjY2Vzcy4KKworVEVTVDogZGVsZXRlRGF0YWJhc2UgaXMgZGVsYXllZCBpZiBh
IFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcKK3dpbmRvdy5kYm5hbWUgPSAn
dGVzdDMnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydoLm9wZW4nCisnaC5v
cGVuLm9uc3VjY2VzcycKKydoLnNldFZlcnNpb24nCisnZGVsZXRlRGF0YWJhc2UoKScKKydoLnNl
dFZlcnNpb24ub25zdWNjZXNzJworJ2guc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScK
KydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkK
KydkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCcKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNl
KCkub25zdWNjZXNzJworUEFTUyB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBpcyAiaC5vcGVuLGgu
b3Blbi5vbnN1Y2Nlc3MsaC5zZXRWZXJzaW9uLGRlbGV0ZURhdGFiYXNlKCksaC5zZXRWZXJzaW9u
Lm9uc3VjY2VzcyxoLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUsaC5vbnZlcnNpb25j
aGFuZ2UsZGVsZXRlRGF0YWJhc2UoKS5vbmJsb2NrZWQsaC5jbG9zZSxkZWxldGVEYXRhYmFzZSgp
Lm9uc3VjY2VzcyIKKworVEVTVDogbXVsdGlwbGUgZGVsZXRlRGF0YWJhc2UgY2FsbHMKK3dpbmRv
dy5kYm5hbWUgPSAndGVzdDQnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KKydo
Lm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRhYmFzZSgxKScKKydkZWxldGVE
YXRhYmFzZSgyKScKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1dCBub3Qg
aW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZSgxKS5vbmJsb2NrZWQnCisnaC5vbnZlcnNpb25j
aGFuZ2UnCisgICAgaCBjbG9zaW5nLCBidXQgbm90IGltbWVkaWF0ZWx5CisnZGVsZXRlRGF0YWJh
c2UoMikub25ibG9ja2VkJworJ2guY2xvc2UnCisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZSgx
KS5vbnN1Y2Nlc3MnCisnZGVsZXRlRGF0YWJhc2UoMikub25zdWNjZXNzJworTk9URTogV2lsbCBG
QUlMIHdpdGggZXh0cmEgYm9ndXMgaC5vbnZlcnNpb25jaGFuZ2UvaC5jbG9zZSBzdGVwczsgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTI5CitGQUlMIHdpbmRvdy5z
dGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxkZWxldGVE
YXRhYmFzZSgxKSxkZWxldGVEYXRhYmFzZSgyKSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRh
YmFzZSgxKS5vbmJsb2NrZWQsZGVsZXRlRGF0YWJhc2UoMikub25ibG9ja2VkLGguY2xvc2UsZGVs
ZXRlRGF0YWJhc2UoMSkub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlKDIpLm9uc3VjY2Vzcy4gV2Fz
IGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlKDEpLGRlbGV0ZURhdGFiYXNl
KDIpLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlKDEpLm9uYmxvY2tlZCxoLm9udmVy
c2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZSgyKS5vbmJsb2NrZWQsaC5jbG9zZSxoLmNsb3NlLGRl
bGV0ZURhdGFiYXNlKDEpLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSgyKS5vbnN1Y2Nlc3MuCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFz
ZS1pbnRlcmFjdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3Rv
cnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjM3YjcxMzIw
YTFiZDg2ODEwODcwODFhNjJlOTVmM2U3NzYzOGRiOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2UtaW50ZXJhY3Rp
b25zLmh0bWwKQEAgLTAsMCArMSwyMzIgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc2hhcmVk
LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+CisKK2Rlc2NyaXB0aW9uKCJUZXN0
IHRoZSBkZWxldGVEYXRhYmFzZSBjYWxsIGFuZCBpdHMgaW50ZXJhY3Rpb24gd2l0aCBvcGVuL3Nl
dFZlcnNpb24iKTsKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBDb25uZWN0aW9uKGlk
KSB7CisgICAgaWQgPSBTdHJpbmcoaWQpOworICAgIHZhciBzZWxmID0gdGhpczsKKyAgICB0aGlz
Lm9wZW4gPSBmdW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxB
bmRMb2coIiciICsgaWQgKyAiLm9wZW4nIikpOworICAgICAgICB2YXIgcmVxID0gaW5kZXhlZERC
Lm9wZW4od2luZG93LmRibmFtZSk7CisgICAgICAgIHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVy
cm9yQ2FsbGJhY2s7CisgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgeworICAg
ICAgICAgICAgc2VsZi5oYW5kbGUgPSBlLnRhcmdldC5yZXN1bHQ7CisgICAgICAgICAgICB3aW5k
b3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vcGVuLm9uc3VjY2VzcyciKSk7
CisgICAgICAgICAgICBzZWxmLmhhbmRsZS5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbihlKSB7
CisgICAgICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCAr
ICIub252ZXJzaW9uY2hhbmdlJyIpKTsKKyAgICAgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRz
Lm9udmVyc2lvbikgeyBvcHRzLm9udmVyc2lvbi5jYWxsKHNlbGYpOyB9CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nl
c3MuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgIH07CisKKyAgICB0aGlzLmNsb3NlID0g
ZnVuY3Rpb24oKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsg
aWQgKyAiLmNsb3NlJyIpKTsKKyAgICAgICAgdGhpcy5oYW5kbGUuY2xvc2UoKTsKKyAgICB9Owor
CisgICAgdGhpcy5zZXRWZXJzaW9uID0gZnVuY3Rpb24ob3B0cykgeworICAgICAgICB3aW5kb3cu
c3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uJyIpKTsKKyAgICAg
ICAgdmFyIHJlcSA9IHRoaXMuaGFuZGxlLnNldFZlcnNpb24oU3RyaW5nKHdpbmRvdy52ZXIrKykp
OworICAgICAgICByZXEub25hYm9ydCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3aW5k
b3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYWJvcnQn
IikpOworICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vbmFib3J0KSB7IG9wdHMub25hYm9y
dC5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5j
dGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIg
KyBpZCArICIuc2V0VmVyc2lvbi5vbmJsb2NrZWQnIikpOworICAgICAgICAgICAgaWYgKG9wdHMg
JiYgb3B0cy5vbmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChzZWxmKTsgfQorICAgICAg
ICB9OworICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24ub25z
dWNjZXNzJyIpKTsKKyAgICAgICAgICAgIGlmIChzZWxmLmhhbmRsZS5vYmplY3RTdG9yZU5hbWVz
LmNvbnRhaW5zKCJ0ZXN0LXN0b3JlIiArIHdpbmRvdy52ZXIpKSB7CisgICAgICAgICAgICAgICAg
c2VsZi5oYW5kbGUuZGVsZXRlT2JqZWN0U3RvcmUoInRlc3Qtc3RvcmUiICsgd2luZG93LnZlcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc3RvcmUgPSBzZWxmLmhhbmRsZS5jcmVh
dGVPYmplY3RTdG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIHZh
ciBjb3VudCA9IDA7CisgICAgICAgICAgICBkb19hc3luY19wdXRzKCk7IC8vIEtlZXAgdGhpcyB0
cmFuc2FjdGlvbiBydW5uaW5nIGZvciBhIHdoaWxlCisgICAgICAgICAgICBmdW5jdGlvbiBkb19h
c3luY19wdXRzKCkgeworICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5wdXQoY291bnQs
IGNvdW50KTsKKyAgICAgICAgICAgICAgICByZXEub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNh
bGxiYWNrOworICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoKytjb3VudCA8IDEwKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkb19hc3luY19wdXRzKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiAr
IGlkICsgIi5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJyIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNz
LmNhbGwoc2VsZik7IH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07
CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rp
b24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsg
aWQgKyAiLnNldFZlcnNpb24ub25lcnJvciciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBv
cHRzLm9uZXJyb3IpIHsgb3B0cy5vbmVycm9yLmNhbGwoc2VsZik7IH0KKyAgICAgICAgfTsKKyAg
ICB9OworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZShpZCwgbmFtZSwgb3B0cykgeworICAg
IHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZSgiICsgaWQgKyAi
KSciKSk7CisgICAgdmFyIHJlcSA9IGluZGV4ZWREQi5kZWxldGVEYXRhYmFzZShuYW1lKTsKKyAg
ICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgd2luZG93LnN0ZXBzLnB1
c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlKCIgKyBpZCArICIpLm9uc3VjY2VzcyciKSk7
CisgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25zdWNjZXNzKSB7IG9wdHMub25zdWNjZXNzLmNh
bGwobnVsbCk7IH0KKyAgICB9OworICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGUpIHsKKyAg
ICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJ2RlbGV0ZURhdGFiYXNlKCIgKyBp
ZCArICIpLm9uZXJyb3InIikpOworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uZXJyb3IpIHsg
b3B0cy5vbmVycm9yLmNhbGwobnVsbCk7IH0KKyAgICB9OworICAgIHJlcS5vbmJsb2NrZWQgPSBm
dW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVs
ZXRlRGF0YWJhc2UoIiArIGlkICsgIikub25ibG9ja2VkJyIpKTsKKyAgICAgICAgaWYgKG9wdHMg
JiYgb3B0cy5vbmJsb2NrZWQpIHsgb3B0cy5vbmJsb2NrZWQuY2FsbChudWxsKTsgfQorICAgIH07
Cit9CisKKy8vIHJ1biBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IHRha2UgYSBjb250aW51YXRpb24g
ZnVuY3Rpb24KK2Z1bmN0aW9uIHJ1blN0ZXBzKGNvbW1hbmRzKSB7CisgICAgaWYgKGNvbW1hbmRz
Lmxlbmd0aCkgeworICAgICAgICB2YXIgY29tbWFuZCA9IGNvbW1hbmRzLnNoaWZ0KCk7CisgICAg
ICAgIGNvbW1hbmQoZnVuY3Rpb24oKSB7IHJ1blN0ZXBzKGNvbW1hbmRzKTsgfSk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0KCkgeworICAgIGluZGV4ZWREQiA9IGV2YWxBbmRMb2coImluZGV4
ZWREQiA9IHdpbmRvdy5pbmRleGVkREIgfHwgd2luZG93LndlYmtpdEluZGV4ZWREQiB8fCB3aW5k
b3cubW96SW5kZXhlZERCOyIpOworICAgIHNob3VsZEJlRmFsc2UoImluZGV4ZWREQiA9PSBudWxs
Iik7CisgICAgdGVzdDEoKTsKK30KKworZnVuY3Rpb24gdGVzdDEoKSB7CisgICAgZGVidWcoIiIp
OworICAgIGRlYnVnKCJURVNUOiBkZWxldGVEYXRhYmFzZSBibG9ja2VkIG9uIG9wZW4gaGFuZGxl
cyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVy
ID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJo
Iik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2Vzczog
ZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZlcnNpb246IGZ1bmN0
aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBo
IGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkiKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGguY2xvc2UoKTsgfSwgMCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgZnVuY3Rpb24o
ZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKCIiLCB3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgXSk7
CisgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5v
bnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFz
ZSgpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2Ui
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpLm9uYmxv
Y2tlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpLm9uc3VjY2VzcyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0
MigpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDIoKSB7CisgICAgZGVidWcoIiIpOworICAg
IGRlYnVnKCJURVNUOiBkZWxldGVEYXRhYmFzZSBub3QgYmxvY2tlZCB3aGVuIGhhbmRsZXMgY2xv
c2UgaW1tZWRpYXRlbHkiKTsKKyAgICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3Qy
Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9IFtdIik7CisgICAgdmFyIGggPSBuZXcg
Q29ubmVjdGlvbigiaCIpOworICAgIHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaC5vcGVu
KHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3NpbmcgaW1tZWRpYXRlbHkiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoLmNsb3NlKCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fSk7IH0sCisgICAg
ICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSgiIiwgd2luZG93LmRibmFtZSwg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0s
CisgICAgICAgIF0pOworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVn
KCJOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBkZWxldGVEYXRhYmFzZSgpLm9uYmxv
Y2tlZCBzdGVwOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMzAi
KTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmco
KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaC5vbnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRl
RGF0YWJhc2UoKS5vbnN1Y2Nlc3MiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS50
b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDMoKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Qz
KCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1ZygiVEVTVDogZGVsZXRlRGF0YWJhc2UgaXMg
ZGVsYXllZCBpZiBhIFZFUlNJT05fQ0hBTkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmciKTsKKyAg
ICBldmFsQW5kTG9nKCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3QzJzsgd2luZG93LnZlciA9IDE7IHdp
bmRvdy5zdGVwcyA9IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAg
IHJ1blN0ZXBzKFtmdW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5n
LCBidXQgbm90IGltbWVkaWF0ZWx5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBoLmNsb3NlKCk7IH0sIDApOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9fSk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGRv
TmV4dCkgeyBoLnNldFZlcnNpb24oKTsgZG9OZXh0KCk7IH0sCisgICAgICAgICAgICAgIGZ1bmN0
aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSgiIiwgd2luZG93LmRibmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge29uc3VjY2VzczogZmluaXNoVGVzdH0pOyB9LAorICAg
ICAgICAgICAgICBdKTsKKworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIHNo
b3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaC5zZXRWZXJzaW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRl
RGF0YWJhc2UoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVyc2lv
bi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZlcnNp
b24udHJhbnNhY3Rpb24tY29tcGxldGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJoLm9udmVyc2lvbmNoYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
bGV0ZURhdGFiYXNlKCkub25ibG9ja2VkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFi
YXNlKCkub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0udG9TdHJp
bmcoKSk7CisgICAgICAgIHRlc3Q0KCk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0NCgpIHsK
KyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IG11bHRpcGxlIGRlbGV0ZURhdGFiYXNl
IGNhbGxzIik7CisgICAgZXZhbEFuZExvZygid2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRv
dy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIpOworICAgIHZhciBoID0gbmV3IENvbm5lY3Rp
b24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rpb24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNj
ZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9udmVyc2lvbjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zygi
ICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAw
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX0pOyB9LAorICAgICAgICBmdW5j
dGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2UoIjEiLCB3aW5kb3cuZGJuYW1lKTsgZG9OZXh0
KCk7IH0sCisgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRhYmFzZSgiMiIsIHdp
bmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2VzczogZmlu
aXNoVGVzdH0pOyB9LAorICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgewor
ICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaC5vbnZlcnNp
b25jaGFuZ2UvaC5jbG9zZSBzdGVwczsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcxMTI5Iik7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0
ZXBzLnRvU3RyaW5nKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoLm9wZW4i
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9wZW4ub25zdWNjZXNzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoMSkiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgyKSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoMSkub25ibG9ja2VkIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoMikub25ibG9ja2VkIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKDEpLm9uc3VjY2VzcyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKDIpLm9uc3VjY2VzcyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICBkb25lKCk7
CisgICAgfQorfQorCit0ZXN0KCk7CisKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRh
YmFzZS5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVk
YXRhYmFzZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxM2EyZmY3YWVkYjNkMTNkNzlhYzAwZmY5ZjkxZGQy
MDVjZTNhYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKQEAgLTAsMCArMSwxMDIgQEAKKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LWZ1bmN0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvc2hhcmVkLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQ+
CisKK2Rlc2NyaXB0aW9uKCJUZXN0IEluZGV4ZWREQidzIHdlYmtpdEluZGV4ZWREQi5kZWxldGVE
YXRhYmFzZSgpLiIpOworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisKK2Z1bmN0aW9uIHRlc3QoKQorewor
ICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2Ut
dG8tZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHN0YXJ0U2V0VmVyc2lvbjsK
KyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVu
Y3Rpb24gc3RhcnRTZXRWZXJzaW9uKCkKK3sKKyAgICBkYiA9IGV2YWxBbmRMb2coImRiID0gZXZl
bnQudGFyZ2V0LnJlc3VsdCIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNldFZl
cnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0ZUV4
aXN0aW5nOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOwor
fQorCitmdW5jdGlvbiBkZWxldGVFeGlzdGluZygpCit7CisgICAgd2luZG93LnRyYW5zID0gZXZh
bEFuZExvZygidHJhbnMgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisgICAgc2hvdWxkQmVUcnVl
KCJ0cmFucyAhPT0gbnVsbCIpOworCisgICAgc3RvcmUgPSBldmFsQW5kTG9nKCJzdG9yZSA9IGRi
LmNyZWF0ZU9iamVjdFN0b3JlKCdzdG9yZU5hbWUnLCBudWxsKSIpOworCisgICAgd2luZG93Lmlu
ZGV4ID0gZXZhbEFuZExvZygic3RvcmUuY3JlYXRlSW5kZXgoJ2luZGV4TmFtZScsICcnKSIpOwor
ICAgIHNob3VsZEJlVHJ1ZSgic3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhOYW1lJyki
KTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJzdG9yZS5hZGQoJ3ZhbHVlJywgJ2tleScp
Iik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBnZXRWYWx1ZTsKKyAgICByZXF1ZXN0Lm9uZXJy
b3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0VmFsdWUoKQor
eworICAgIHRyYW5zYWN0aW9uID0gZXZhbEFuZExvZygiZGIudHJhbnNhY3Rpb24oJ3N0b3JlTmFt
ZScsIHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpIik7CisgICAgdHJhbnNhY3Rpb24u
b25hYm9ydCA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworICAgIHZhciBzdG9yZSA9IGV2YWxB
bmRMb2coInN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoJ3N0b3JlTmFtZScpIik7CisK
KyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygic3RvcmUuZ2V0KCdrZXknKSIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gYWRkSW5kZXg7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3Rl
ZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGFkZEluZGV4KCkKK3sKKyAgICBzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoImV2ZW50LnRhcmdldC5yZXN1bHQiLCAidmFsdWUiKTsKKworICAgIHJl
cXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7CisgICAg
cmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxldGVEYXRhYmFzZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3Ig
PSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZGVsZXRlRGF0YWJhc2Uo
KQoreworICAgIGRiLm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKCkgeyBkYi5jbG9zZSgpOyB9
CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coInJlcXVlc3QgPSB3ZWJraXRJbmRleGVkREIuZGVs
ZXRlRGF0YWJhc2UoJ2RhdGFiYXNlLXRvLWRlbGV0ZScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nl
c3MgPSByZW9wZW5EYXRhYmFzZTsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJy
b3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gcmVvcGVuRGF0YWJhc2UoKQoreworICAgIHJlcXVl
c3QgPSBldmFsQW5kTG9nKCJ3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRl
JykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHN0YXJ0U2V0VmVyc2lvbkFnYWluOworICAg
IHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlv
biBzdGFydFNldFZlcnNpb25BZ2FpbigpCit7CisgICAgcmRiID0gZXZhbEFuZExvZygiZGIgPSBl
dmVudC50YXJnZXQucmVzdWx0Iik7CisKKyAgICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0
VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOworICAgIHJlcXVlc3Qub25zdWNjZXNzID0gdmVyaWZ5
Tm90Rm91bmQ7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7
Cit9CisKK2Z1bmN0aW9uIHZlcmlmeU5vdEZvdW5kKCkKK3sKKyAgICBzaG91bGRCZSgiZGIub2Jq
ZWN0U3RvcmVOYW1lcy5sZW5ndGgiLCAiMCIpOworCisgICAgZG9uZSgpOworfQorCit0ZXN0KCk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0Cmlu
ZGV4IDI3MjhhMjlkMTMxYmU4YzNkMTE0ZWFlMTZiZTJmZDljMjRkYzBlMGMuLjk2YjA0NjhhZDE0
MWZkN2MyMjQ2ZWYzZmU0ZWMxMjNkYzhhZmUyNGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLWV4cGVjdGVkLnR4
dApAQCAtMzQsNyArMzQsNyBAQCB3aW5kb3cuZGJuYW1lID0gJ3Rlc3QyJzsgd2luZG93LnZlciA9
IDE7IHdpbmRvdy5zdGVwcyA9IFtdCiAnaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQnCiAnaDEuc2V0
VmVyc2lvbi5vbnN1Y2Nlc3MnCiAnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZScK
LU5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2Vk
IHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMKK05PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3Vz
IGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTEzMAogRkFJTCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91bGQg
YmUgaDEub3BlbixoMS5vcGVuLm9uc3VjY2VzcyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNzLGgx
LnNldFZlcnNpb24saDIub252ZXJzaW9uY2hhbmdlLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25z
dWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUuIFdhcyBoMS5vcGVuLGgx
Lm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbixo
Mi5vbnZlcnNpb25jaGFuZ2UsaDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQsaDEuc2V0
VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZS4KIAog
VEVTVDogb3BlbiBhbmQgc2V0VmVyc2lvbiBibG9ja2VkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJh
bnNhY3Rpb24gaXMgcnVubmluZyAtIGNsb3NlIHdoZW4gYmxvY2tlZApAQCAtNzEsNyArNzEsNyBA
QCB3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9
IFtdCiAnaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCiAnaDEuc2V0VmVyc2lvbi50cmFuc2FjdGlv
bi1jb21wbGV0ZScKICdoMy5vcGVuLm9uc3VjY2VzcycKLU5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4
dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8xMDAxMjMK
K05PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2Vk
IHN0ZXA7IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMAogRkFJ
TCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91bGQgYmUgaDEub3BlbixoMS5vcGVuLm9uc3Vj
Y2VzcyxoMi5vcGVuLGgyLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDMub3BlbixoMi5j
bG9zZSxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNv
bXBsZXRlLGgzLm9wZW4ub25zdWNjZXNzLiBXYXMgaDEub3BlbixoMS5vcGVuLm9uc3VjY2Vzcyxo
Mi5vcGVuLGgyLm9wZW4ub25zdWNjZXNzLGgxLnNldFZlcnNpb24saDMub3BlbixoMi5jbG9zZSxo
MS5zZXRWZXJzaW9uLm9uYmxvY2tlZCxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRWZXJz
aW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLGgzLm9wZW4ub25zdWNjZXNzLgogCiBURVNUOiBvcGVu
IGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNpb24u
aHRtbCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5o
dG1sCmluZGV4IDUyMDlkOGY0ODFjMzAyZDA1NWMyZTNiMWEzODExNThkYmJmZTBiNjEuLjVkMWQw
NTkwMDAyNzZkNTc5MjIwYTQ4ZjM0Mjc0OGU0MTZlZWFhYmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sCisrKyBiL0xheW91
dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sCkBAIC0xMzgs
NyArMTM4LDcgQEAgZnVuY3Rpb24gdGVzdDIoKSB7CiAgICAgICAgICAgICAgIF0pOwogCiAgICAg
ZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKLSAgICAgICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3
aXRoIGV4dHJhIGJvZ3VzIGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGNyYnVnLmNvbS8x
MDAxMjMiKTsKKyAgICAgICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3Vz
IGgxLnNldFZlcnNpb24ub25ibG9ja2VkIHN0ZXA7IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD03MTEzMCIpOwogICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndp
bmRvdy5zdGVwcy50b1N0cmluZygpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsi
aDEub3BlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgxLm9wZW4ub25zdWNj
ZXNzIiwKQEAgLTIxMSw3ICsyMTEsNyBAQCBmdW5jdGlvbiB0ZXN0NCgpIHsKICAgICAgICAgICAg
ICAgXSk7CiAKICAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgewotICAgICAgICBkZWJ1ZygiTk9U
RTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQgc3Rl
cDsgY3JidWcuY29tLzEwMDEyMyIpOworICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdp
dGggZXh0cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQgc3RlcDsgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwIik7CiAgICAgICAgIHNob3VsZEJlRXF1
YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyJoMS5vcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
aDEub3Blbi5vbnN1Y2Nlc3MiLApAQCAtMjkxLDggKzI5MSw2IEBAIGZ1bmN0aW9uIHRlc3Q2KCkg
ewogICAgIH0KIH0KIAotdmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0KIHRlc3QoKTsK
IAogPC9zY3JpcHQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112969</attachid>
            <date>2011-10-29 08:11:02 -0700</date>
            <delta_ts>2011-10-29 09:19:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62622-20111029171059.patch</filename>
            <type>text/plain</type>
            <size>53226</size>
            <attacher>jochen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTg4MDUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNzA5MmE2OWMwMWRiZjE1
OWYxZTFmZjAwM2FiMDQ1MjQ4NzM4NzEyLi5lYWE4MGM3MTdiYThjY2RmMGVkZjZmNTNlNTdjOWE4
Nzc1ZjI2YjI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTAtMjUgIEpvY2hl
biBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50IElE
QkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFuZy4K
KworICAgICAgICBUZXN0czogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFz
ZS1pbnRlcmFjdGlvbnMuaHRtbAorICAgICAgICAgICAgICAgc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1kZWxldGVkYXRhYmFzZS5odG1sCisKKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nRGVsZXRlQ2Fs
bDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OlBl
bmRpbmdEZWxldGVDYWxsOjpjYWxsYmFja3MpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0ZUNhbGw6OlBlbmRpbmdEZWxldGVDYWxsKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNlQmFja2Vu
ZEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3Blbklu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nl
c3NQZW5kaW5nQ2FsbHMpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6b3BlbkNvbm5lY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJGYWN0b3J5OjpkZWxldGVEYXRhYmFzZSk6CisgICAgICAgICogc3RvcmFnZS9J
REJGYWN0b3J5Lmg6CisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5LmlkbDoKKyAgICAgICAg
KiBzdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3Rv
cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlUmFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIHN0b3JhZ2UvSURCUmVx
dWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KToK
KwogMjAxMS0xMC0yOCAgUm9iZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgQ1NTIDIuMSBmYWlsdXJlOiBkeW5hbWljLXRvcC1jaGFuZ2UtMDAxIHRvIDAwNCBmYWlsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDNmYTdjYzk3NWFjMzJhZTc3YWRmODU5ZTBiMzY3
YjhjYmI4ZGI5ZDkuLjRlNDYyNDcxMjE0NzdiZTA3NDkyMGU5ZGVmYTQ5ZDNiMzI5ZTIzMGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTEtMTAtMjUgIEpv
Y2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW1wbGVtZW50
IElEQkZhY3RvcnkuZGVsZXRlRGF0YWJhc2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYyNjIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgVG9ueSBDaGFu
Zy4KKworICAgICAgICAqIHNyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYktpdDo6SURCRmFjdG9yeUJhY2tlbmRQcm94eTo6ZGVsZXRlRGF0YWJhc2UpOgorICAgICAg
ICAqIHNyYy9JREJGYWN0b3J5QmFja2VuZFByb3h5Lmg6CisgICAgICAgICogc3JjL1dlYklEQkZh
Y3RvcnlJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeUltcGw6OmdldERh
dGFiYXNlTmFtZXMpOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5SW1wbDo6b3Blbik6
CisgICAgICAgIChXZWJLaXQ6OldlYklEQkZhY3RvcnlJbXBsOjpkZWxldGVEYXRhYmFzZSk6Cisg
ICAgICAgICogc3JjL1dlYklEQkZhY3RvcnlJbXBsLmg6CisKIDIwMTEtMTAtMjggIFNhZHJ1bCBI
YWJpYiBDaG93ZGh1cnkgIDxzYWRydWxAY2hyb21pdW0ub3JnPgogIAogICAgICAgICBBZGQgc3Vw
cG9ydCBmb3Igc2VuZGluZyBzY3JvbGwtdXBkYXRlIGV2ZW50cyBmcm9tIEV2ZW50U2VuZGVyLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNmQ4ODFhNThiMzc1
MGFlMmQ4M2U0OTljYzk3MWE4YjQwMDAwZmIzMC4uNmIwYTA0MGY5ZmM0ZDJiODcwZDRmYWM0YWY0
YzQ2YWEwZjAzNDA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJCYWNr
aW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5o
CkBAIC01MCw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJh
c2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2
NF90JiBmb3VuZElkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZUlEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qm
IHJvd0lkKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUlEQkRhdGFiYXNlTWV0YURhdGEo
aW50NjRfdCByb3dJZCwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uKSA9IDA7CisgICAgdmlydHVhbCBi
b29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkgPSAwOwogCiAgICAgdmlydHVh
bCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90
PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYg
Zm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNy
ZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggOWFmMjJl
NDRiYzExYzFjNjdhYTJlYjRjNTM1YzZlNTY0ZmQ1M2ZhZi4uNTlmZjE0YTMzNWJiNmFkMmQ3OTVh
NDIzZjA3N2UyYzI3ZmZmN2ZiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lE
QkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC01NSw2ICs1NSwyMiBAQCBwcml2YXRlOgogICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IG1fY2FsbGJhY2tzOwogfTsKIAorY2xhc3MgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6UGVuZGluZ0RlbGV0ZUNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5k
aW5nRGVsZXRlQ2FsbD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBlbmRpbmdE
ZWxldGVDYWxsPiBjcmVhdGUoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKKyAg
ICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGVuZGluZ0RlbGV0ZUNhbGwoY2FsbGJh
Y2tzKSk7CisgICAgfQorICAgIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MoKSB7
IHJldHVybiBtX2NhbGxiYWNrczsgfQorCitwcml2YXRlOgorICAgIFBlbmRpbmdEZWxldGVDYWxs
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCisgICAgICAgIDogbV9jYWxsYmFj
a3MoY2FsbGJhY2tzKQorICAgIHsKKyAgICB9CisgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gbV9j
YWxsYmFja3M7Cit9OworCiBjbGFzcyBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpQZW5kaW5nU2V0
VmVyc2lvbkNhbGwgOiBwdWJsaWMgUmVmQ291bnRlZDxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxs
YmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tz
KQpAQCAtOTAsNyArMTA2LDEzIEBAIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OklEQkRhdGFiYXNl
QmFja2VuZEltcGwoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJCYWNraW5nU3RvCiAKICAgICBib29s
IHN1Y2Nlc3MgPSBtX2JhY2tpbmdTdG9yZS0+Z2V0SURCRGF0YWJhc2VNZXRhRGF0YShtX25hbWUs
IG1fdmVyc2lvbiwgbV9pZCk7CiAgICAgQVNTRVJUKHN1Y2Nlc3MgPT0gKG1faWQgIT0gSW52YWxp
ZElkKSk7Ci0gICAgaWYgKCFzdWNjZXNzICYmICFtX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSURCRGF0
YWJhc2VNZXRhRGF0YShtX25hbWUsIG1fdmVyc2lvbiwgbV9pZCkpCisgICAgaWYgKCFzdWNjZXNz
KQorICAgICAgICBvcGVuSW50ZXJuYWwoKTsKK30KKwordm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpvcGVuSW50ZXJuYWwoKQoreworICAgIGlmICghbV9iYWNraW5nU3RvcmUtPmNyZWF0ZUlE
QkRhdGFiYXNlTWV0YURhdGEobV9uYW1lLCBtX3ZlcnNpb24sIG1faWQpKQogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IE5lZWQgYmV0dGVyIGVycm9yIGhhbmRsaW5nLgog
ICAgIGxvYWRPYmplY3RTdG9yZXMoKTsKIH0KQEAgLTE5Miw3ICsyMTQsNyBAQCB2b2lkIElEQkRh
dGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNz
UmVmUHRyPElEQkNhbAogICAgIH0KICAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tlZCBp
ZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKICAgICAvLyBWZXJzaW9uQ2hh
bmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCi0gICAgLy8g
aHR0cDovL2NyYnVnLmNvbS8xMDAxMjMKKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzExMzAKICAgICBpZiAobV9kYXRhYmFzZUNhbGxiYWNrc1NldC5zaXpl
KCkgPiAxKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25CbG9ja2VkKCk7CiAgICAgICAgIFJlZlB0
cjxQZW5kaW5nU2V0VmVyc2lvbkNhbGw+IHBlbmRpbmdTZXRWZXJzaW9uQ2FsbCA9IFBlbmRpbmdT
ZXRWZXJzaW9uQ2FsbDo6Y3JlYXRlKHZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MpOwpAQCAtMjU4LDcgKzI4MCwyMSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnBy
b2Nlc3NQZW5kaW5nQ2FsbHMoKQogICAgICAgICBBU1NFUlQoIWVjKTsKICAgICB9CiAKLSAgICB3
aGlsZSAoIW1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiAmJiBtX3BlbmRpbmdTZXRW
ZXJzaW9uQ2FsbHMuaXNFbXB0eSgpICYmICFtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKSB7
CisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5n
U2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gUGVu
ZGluZyBjYWxscyBtYXkgYmUgcmVxdWV1ZWQuCisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxl
dGVDYWxsPiA+IHBlbmRpbmdEZWxldGVDYWxsczsKKyAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5z
d2FwKHBlbmRpbmdEZWxldGVDYWxscyk7CisgICAgd2hpbGUgKCFwZW5kaW5nRGVsZXRlQ2FsbHMu
aXNFbXB0eSgpKSB7CisgICAgICAgIFJlZlB0cjxQZW5kaW5nRGVsZXRlQ2FsbD4gcGVuZGluZ0Rl
bGV0ZUNhbGwgPSBwZW5kaW5nRGVsZXRlQ2FsbHMudGFrZUZpcnN0KCk7CisgICAgICAgIGRlbGV0
ZURhdGFiYXNlKHBlbmRpbmdEZWxldGVDYWxsLT5jYWxsYmFja3MoKSk7CisgICAgfQorCisgICAg
aWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVy
c2lvbkNhbGxzLmlzRW1wdHkoKSB8fCAhbV9wZW5kaW5nRGVsZXRlQ2FsbHMuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoIW1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5
KCkpIHsKICAgICAgICAgUmVmUHRyPFBlbmRpbmdPcGVuQ2FsbD4gcGVuZGluZ09wZW5DYWxsID0g
bV9wZW5kaW5nT3BlbkNhbGxzLnRha2VGaXJzdCgpOwogICAgICAgICBvcGVuQ29ubmVjdGlvbihw
ZW5kaW5nT3BlbkNhbGwtPmNhbGxiYWNrcygpKTsKICAgICB9CkBAIC0yODQsMTAgKzMyMCw0MyBA
QCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW4oUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4gY2FsbGJhY2tzKQogCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9w
ZW5Db25uZWN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0gICAg
aWYgKG1fcnVubmluZ1ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVy
c2lvbkNhbGxzLmlzRW1wdHkoKSkKKyAgICBpZiAoIW1fcGVuZGluZ0RlbGV0ZUNhbGxzLmlzRW1w
dHkoKSB8fCBtX3J1bm5pbmdWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24gfHwgIW1fcGVuZGluZ1Nl
dFZlcnNpb25DYWxscy5pc0VtcHR5KCkpCiAgICAgICAgIG1fcGVuZGluZ09wZW5DYWxscy5hcHBl
bmQoUGVuZGluZ09wZW5DYWxsOjpjcmVhdGUoY2FsbGJhY2tzKSk7Ci0gICAgZWxzZQorICAgIGVs
c2UgeworICAgICAgICBpZiAobV9pZCA9PSBJbnZhbGlkSWQpCisgICAgICAgICAgICBvcGVuSW50
ZXJuYWwoKTsKICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3ModGhpcyk7CisgICAgfQorfQor
Cit2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZURhdGFiYXNlKFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MpCit7CisgICAgaWYgKG1fcnVubmluZ1ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbiB8fCAhbV9wZW5kaW5nU2V0VmVyc2lvbkNhbGxzLmlzRW1wdHkoKSkg
eworICAgICAgICBtX3BlbmRpbmdEZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6
OmNyZWF0ZShwcnBDYWxsYmFja3MpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQ
dHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CisgICAgLy8gRklYTUU6
IE9ubHkgZmlyZSBvblZlcnNpb25DaGFuZ2UgaWYgdGhlcmUgdGhlIGNvbm5lY3Rpb24gaXNuJ3Qg
aW4KKyAgICAvLyB0aGUgcHJvY2VzcyBvZiBjbG9zaW5nLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEyOQorICAgIGZvciAoRGF0YWJhc2VDYWxsYmFj
a3NTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kYXRhYmFzZUNhbGxiYWNrc1NldC5iZWdpbigp
OyBpdCAhPSBtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmVuZCgpOyArK2l0KQorICAgICAgICAoKml0
KS0+b25WZXJzaW9uQ2hhbmdlKCIiKTsKKyAgICAvLyBGSVhNRTogT25seSBmaXJlIG9uQmxvY2tl
ZCBpZiB0aGVyZSBhcmUgb3BlbiBjb25uZWN0aW9ucyBhZnRlciB0aGUKKyAgICAvLyBWZXJzaW9u
Q2hhbmdlRXZlbnRzIGFyZSByZWNlaXZlZCwgbm90IGp1c3Qgc2V0IHVwIHRvIGZpcmUuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCisgICAgaWYg
KCFtX2RhdGFiYXNlQ2FsbGJhY2tzU2V0LmlzRW1wdHkoKSkgeworICAgICAgICBtX3BlbmRpbmdE
ZWxldGVDYWxscy5hcHBlbmQoUGVuZGluZ0RlbGV0ZUNhbGw6OmNyZWF0ZShjYWxsYmFja3MpKTsK
KyAgICAgICAgY2FsbGJhY2tzLT5vbkJsb2NrZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIW1fYmFja2luZ1N0b3JlLT5kZWxldGVEYXRhYmFzZShtX25hbWUpKSB7CisgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwgZXJyb3IuIikpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fdmVyc2lvbiA9ICIiOworICAgIG1faWQgPSBJbnZhbGlkSWQ7
CisgICAgbV9vYmplY3RTdG9yZXMuY2xlYXIoKTsKKyAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KIAogdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBwcnBD
YWxsYmFja3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oCmluZGV4IGU4YjEwODQ1MDEzMDRjZDE4ZjVmZjY2YTFhZDQ5ZThhYmY2YWNiZjAuLjdh
NWNlMWRhODNjOGI0NjFjZjNhZjg5YzExMzIxNTM0MTIwYjE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCkBAIC01OCw2ICs1OCw3IEBA
IHB1YmxpYzoKICAgICAvLyBGSVhNRTogUmVuYW1lICJvcGVuIiB0byBzb21ldGhpbmcgbW9yZSBk
ZXNjcmlwdGl2ZSwgbGlrZSByZWdpc3RlckZyb250RW5kQ2FsbGJhY2tzLgogICAgIHZvaWQgb3Bl
bihQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPik7CiAgICAgdm9pZCBvcGVuQ29ubmVj
dGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4pOworICAgIHZvaWQgZGVsZXRlRGF0YWJhc2Uo
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsKIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBj
b25zdCB7IHJldHVybiBtX25hbWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2ZXJzaW9uKCkgY29u
c3QgeyByZXR1cm4gbV92ZXJzaW9uOyB9CkBAIC03Nyw2ICs3OCw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbChjb25zdCBTdHJpbmcmIG5hbWUsIElEQkJh
Y2tpbmdTdG9yZSogZGF0YWJhc2UsIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqLCBJREJGYWN0
b3J5QmFja2VuZEltcGwqLCBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIpOwogCisgICAg
dm9pZCBvcGVuSW50ZXJuYWwoKTsKICAgICB2b2lkIGxvYWRPYmplY3RTdG9yZXMoKTsKICAgICB2
b2lkIHByb2Nlc3NQZW5kaW5nQ2FsbHMoKTsKIApAQCAtMTEwLDYgKzExMiw5IEBAIHByaXZhdGU6
CiAgICAgY2xhc3MgUGVuZGluZ09wZW5DYWxsOwogICAgIERlcXVlPFJlZlB0cjxQZW5kaW5nT3Bl
bkNhbGw+ID4gbV9wZW5kaW5nT3BlbkNhbGxzOwogCisgICAgY2xhc3MgUGVuZGluZ0RlbGV0ZUNh
bGw7CisgICAgRGVxdWU8UmVmUHRyPFBlbmRpbmdEZWxldGVDYWxsPiA+IG1fcGVuZGluZ0RlbGV0
ZUNhbGxzOworCiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+ID4gRGF0YWJhc2VDYWxsYmFja3NTZXQ7CiAgICAgRGF0YWJhc2VDYWxsYmFja3NTZXQg
bV9kYXRhYmFzZUNhbGxiYWNrc1NldDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
LmNwcAppbmRleCBhYjE2YjdkNmVkZGUyMzQ4MDJjMDVhMjZmYTAyOWNhNGEyNzk0MzVhLi4wNThj
NGQzZTVhZWQ5NmRkNzVmZTdhMjM0MzE4NTUyOTYwMmU5Nzk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCRmFjdG9yeS5jcHAKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJJREJLZXkuaCIK
ICNpbmNsdWRlICJJREJLZXlSYW5nZS5oIgogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKKyNpbmNs
dWRlICJJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNs
dWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgpAQCAtOTgsNiAr
OTksMjggQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJGYWN0b3J5OjpvcGVuKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICByZXR1cm4gcmVxdWVzdDsKIH0K
IAorUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gSURCRmFjdG9yeTo6ZGVsZXRl
RGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNvbnRleHQtPmlzRG9jdW1lbnQo
KSkgeworICAgICAgICAvLyBGSVhNRTogbWFrZSB0aGlzIHdvcmsgd2l0aCB3b3JrZXJzLgorICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdGF0aWNf
Y2FzdDxEb2N1bWVudCo+KGNvbnRleHQpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkgfHwg
IWRvY3VtZW50LT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKG5hbWUuaXNO
dWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9OX1RSQU5TSUVO
VF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIFJlZlB0cjxJREJWZXJzaW9u
Q2hhbmdlUmVxdWVzdD4gcmVxdWVzdCA9IElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0OjpjcmVhdGUo
ZG9jdW1lbnQsIElEQkFueTo6Y3JlYXRlTnVsbCgpLCAiIik7CisgICAgR3JvdXBTZXR0aW5ncyog
Z3JvdXBTZXR0aW5ncyA9IGRvY3VtZW50LT5wYWdlKCktPmdyb3VwKCkuZ3JvdXBTZXR0aW5ncygp
OworICAgIG1fZmFjdG9yeUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKG5hbWUsIHJlcXVlc3QsIGRv
Y3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1bWVudC0+ZnJhbWUoKSwgZ3JvdXBTZXR0aW5n
cy0+aW5kZXhlZERCRGF0YWJhc2VQYXRoKCkpOworICAgIHJldHVybiByZXF1ZXN0OworfQorCiBz
aG9ydCBJREJGYWN0b3J5OjpjbXAoUGFzc1JlZlB0cjxJREJLZXk+IGZpcnN0LCBQYXNzUmVmUHRy
PElEQktleT4gc2Vjb25kLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQoZmlyc3Qp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAppbmRleCA4OTM0MjFkMTgwOTRkNzM0MGFl
Mzk0ZGZhOGViMTI2ZjAzYTk5YzY3Li4xN2JmZjFkMWZjYmQyZjAzOWUyYmQ2YWZkYWJjOWY1ZWM4
OTJhYzgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaApAQCAtNDQsNiArNDQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlSYW5nZTsK
IGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCVmVyc2lvbkNoYW5n
ZVJlcXVlc3Q7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFzcyBJREJGYWN0
b3J5IDogcHVibGljIFJlZkNvdW50ZWQ8SURCRmFjdG9yeT4gewpAQCAtNTcsNiArNTgsNyBAQCBw
dWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBnZXREYXRhYmFzZU5hbWVzKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqKTsKIAogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgUGFzc1JlZlB0cjxJREJWZXJzaW9uQ2hhbmdlUmVxdWVzdD4gZGVsZXRlRGF0YWJh
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOwogCiAgICAgc2hvcnQgY21wKFBhc3NSZWZQdHI8SURCS2V5PiBmaXJzdCwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHNlY29uZCwgRXhjZXB0aW9uQ29kZSYpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJGYWN0b3J5LmlkbAppbmRleCAyM2ZhODcxZWJhN2UyN2VhZjhjN2E4OGUzYjc0ZTdiZjUw
NTU1YTQ1Li5jNDQ5OTZiYTBmOWFjYzhmYWViYmNjNWQwMmQ0Njg3OTZhNmQ4NjEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnkuaWRsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeS5pZGwKQEAgLTMyLDYgKzMyLDggQEAgbW9kdWxlIHN0
b3JhZ2UgewogCiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBJREJS
ZXF1ZXN0IG9wZW4oaW4gRE9NU3RyaW5nIG5hbWUpCiAgICAgICAgICAgICByYWlzZXMgKElEQkRh
dGFiYXNlRXhjZXB0aW9uKTsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRdIElEQlZlcnNpb25DaGFuZ2VSZXF1ZXN0IGRlbGV0ZURhdGFiYXNlKGluIERPTVN0cmluZyBu
YW1lKQorICAgICAgICAgICAgcmFpc2VzIChJREJEYXRhYmFzZUV4Y2VwdGlvbik7CiAKICAgICAg
ICAgc2hvcnQgY21wKGluIElEQktleSBmaXJzdCwgaW4gSURCS2V5IHNlY29uZCkKICAgICAgICAg
ICAgIHJhaXNlcyAoSURCRGF0YWJhc2VFeGNlcHRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ0NGQ2YWNkYmZiYjA3ZjA1
YmIyNTNlZWYzNjE1M2FkMTIzNjk4NmIuLmQxMjQ4MWQzZGMxMTEwOGIwNjhiYjYwMWJmYzM2Zjg4
ZDRjOTJlMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAKQEAgLTEyMiw2ICsxMjIsMzAgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZElt
cGw6Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EK
ICAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VC
YWNrZW5kLmdldCgpKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OmRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBkYXRhRGlyKQoreworICAgIGNvbnN0IFN0cmluZyB1bmlxdWVJZGVudGlm
aWVyID0gY29tcHV0ZVVuaXF1ZUlkZW50aWZpZXIobmFtZSwgc2VjdXJpdHlPcmlnaW4uZ2V0KCkp
OworCisgICAgSURCRGF0YWJhc2VCYWNrZW5kTWFwOjppdGVyYXRvciBpdCA9IG1fZGF0YWJhc2VC
YWNrZW5kTWFwLmZpbmQodW5pcXVlSWRlbnRpZmllcik7CisgICAgaWYgKGl0ICE9IG1fZGF0YWJh
c2VCYWNrZW5kTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgY29ubmVj
dGlvbnMgdG8gdGhlIGRhdGFiYXNlLCBkaXJlY3RseSBkZWxldGUgdGhlCisgICAgICAgIC8vIGRh
dGFiYXNlLgorICAgICAgICBpdC0+c2Vjb25kLT5kZWxldGVEYXRhYmFzZShjYWxsYmFja3MpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRklYTUU6IEV2ZXJ5dGhpbmcgZnJvbSBu
b3cgb24gc2hvdWxkIGJlIGRvbmUgb24gYW5vdGhlciB0aHJlYWQuCisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZT4gYmFja2luZ1N0b3JlID0gb3BlbkJhY2tpbmdTdG9yZShzZWN1cml0eU9yaWdp
biwgZGF0YURpcik7CisgICAgaWYgKCFiYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJJbnRlcm5hbCBlcnJvci4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2VCYWNrZW5kID0g
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlKG5hbWUsIGJhY2tpbmdTdG9yZS5nZXQoKSwg
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpLCB0aGlzLCB1bmlxdWVJZGVudGlmaWVyKTsK
KyAgICBtX2RhdGFiYXNlQmFja2VuZE1hcC5zZXQodW5pcXVlSWRlbnRpZmllciwgZGF0YWJhc2VC
YWNrZW5kLmdldCgpKTsKKyAgICBkYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZURhdGFiYXNlKGNhbGxi
YWNrcyk7Cit9CisKIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJREJGYWN0b3J5QmFja2Vu
ZEltcGw6Om9wZW5CYWNraW5nU3RvcmUoUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJp
dHlPcmlnaW4sIGNvbnN0IFN0cmluZyYgZGF0YURpcikKIHsKICAgICBjb25zdCBTdHJpbmcgZmls
ZUlkZW50aWZpZXIgPSBjb21wdXRlRmlsZUlkZW50aWZpZXIoc2VjdXJpdHlPcmlnaW4uZ2V0KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZElt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgKaW5k
ZXggNmVlOWJiMjQzMDMzMDFmYWM0MTVhYTA2OTBjNjFiYTRmMTJkOGRlZi4uOWMyZjA3ZmI3MDU0
N2EyMTAzYTRjYWQ3N2RiNTZlNTkzZjFjNDk0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5oCkBAIC01Nyw2ICs1Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRh
RGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4sIEZyYW1lKiwgY29u
c3QgU3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcik7CiAKIHByaXZhdGU6
CiAgICAgSURCRmFjdG9yeUJhY2tlbmRJbXBsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggYzQwMThlZmY5ZGQ2NGRi
YzliNzk0MmU1MGMzYjAyNTUyNDI3NzkzOC4uZTkyNTQ1ZDJjZmY2MzllZjA3ZWRiMTA2MWRiZTUz
NmNiODIxODk5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTMsNiArNTMsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiwgRnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFEaXIpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+LCBGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YURpcikgPSAwOwogfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggYzVkNmZiNGViNzMxNTFmNDljMjk1OTlkODY4
NzQyZTg2Mjc2MWJmNS4uOGNmZjkxYmE5ZDFhY2VkNDU5MjMzZDkzZDAzNGU2OWE1YjIxOWFiOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwCkBAIC0yMzksNiArMjM5LDQ3IEBAIGJvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6dXBk
YXRlSURCRGF0YWJhc2VNZXRhRGF0YShpbnQ2NF90IHJvd0lkLCBjb25zdCBTdHJpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK3N0YXRpYyBib29sIGRlbGV0ZVJhbmdlKExldmVsREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxjaGFyPiYgYmVnaW4sIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgZW5kKQoreworICAgIE93blB0cjxMZXZlbERCSXRlcmF0b3I+IGl0ID0gdHJhbnNhY3Rp
b24tPmNyZWF0ZUl0ZXJhdG9yKCk7CisgICAgZm9yIChpdC0+c2VlayhiZWdpbik7IGl0LT5pc1Zh
bGlkKCkgJiYgY29tcGFyZUtleXMoaXQtPmtleSgpLCBlbmQpIDwgMDsgaXQtPm5leHQoKSkgewor
ICAgICAgICBpZiAoIXRyYW5zYWN0aW9uLT5yZW1vdmUoaXQtPmtleSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitib29sIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSkK
K3sKKyAgICBpZiAobV9jdXJyZW50VHJhbnNhY3Rpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFJlZlB0cjxJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbj4gdHJhbnNh
Y3Rpb24gPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpUcmFuc2FjdGlvbjo6Y3JlYXRlKHRoaXMp
OworICAgIHRyYW5zYWN0aW9uLT5iZWdpbigpOworCisgICAgaW50NjRfdCBkYXRhYmFzZUlkOwor
ICAgIFN0cmluZyB2ZXJzaW9uOworICAgIGlmICghZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShuYW1l
LCB2ZXJzaW9uLCBkYXRhYmFzZUlkKSkgeworICAgICAgICB0cmFuc2FjdGlvbi0+cm9sbGJhY2so
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPGNoYXI+
IHN0YXJ0S2V5ID0gRGF0YWJhc2VNZXRhRGF0YUtleTo6ZW5jb2RlKGRhdGFiYXNlSWQsIERhdGFi
YXNlTWV0YURhdGFLZXk6OmtPcmlnaW5OYW1lKTsKKyAgICBjb25zdCBWZWN0b3I8Y2hhcj4gc3Rv
cEtleSA9IERhdGFiYXNlTWV0YURhdGFLZXk6OmVuY29kZShkYXRhYmFzZUlkICsgMSwgRGF0YWJh
c2VNZXRhRGF0YUtleTo6a09yaWdpbk5hbWUpOworICAgIGlmICghZGVsZXRlUmFuZ2UobV9jdXJy
ZW50VHJhbnNhY3Rpb24uZ2V0KCksIHN0YXJ0S2V5LCBzdG9wS2V5KSkgeworICAgICAgICB0cmFu
c2FjdGlvbi0+cm9sbGJhY2soKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGNvbnN0IFZlY3RvcjxjaGFyPiBrZXkgPSBEYXRhYmFzZU5hbWVLZXk6OmVuY29kZShtX2lkZW50
aWZpZXIsIG5hbWUpOworICAgIG1fY3VycmVudFRyYW5zYWN0aW9uLT5yZW1vdmUoa2V5KTsKKwor
ICAgIHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogc3RhdGlj
IGJvb2wgY2hlY2tPYmplY3RTdG9yZUFuZE1ldGFEYXRhVHlwZShjb25zdCBMZXZlbERCSXRlcmF0
b3IqIGl0LCBjb25zdCBWZWN0b3I8Y2hhcj4mIHN0b3BLZXksIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBtZXRhRGF0YVR5cGUpCiB7CiAgICAgaWYgKCFpdC0+aXNWYWxpZCgpIHx8IGNv
bXBhcmVLZXlzKGl0LT5rZXkoKSwgc3RvcEtleSkgPj0gMCkKQEAgLTQxOCwxNyArNDU5LDYgQEAg
Ym9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGNvbnN0IFN0cmluZyYKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJv
b2wgZGVsZXRlUmFuZ2UoTGV2ZWxEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVj
dG9yPGNoYXI+JiBiZWdpbiwgY29uc3QgVmVjdG9yPGNoYXI+JiBlbmQpCi17Ci0gICAgT3duUHRy
PExldmVsREJJdGVyYXRvcj4gaXQgPSB0cmFuc2FjdGlvbi0+Y3JlYXRlSXRlcmF0b3IoKTsKLSAg
ICBmb3IgKGl0LT5zZWVrKGJlZ2luKTsgaXQtPmlzVmFsaWQoKSAmJiBjb21wYXJlS2V5cyhpdC0+
a2V5KCksIGVuZCkgPCAwOyBpdC0+bmV4dCgpKSB7Ci0gICAgICAgIGlmICghdHJhbnNhY3Rpb24t
PnJlbW92ZShpdC0+a2V5KCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCiB2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0
ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ewogICAgIEFTU0VSVChtX2N1cnJlbnRUcmFuc2FjdGlvbik7CkBAIC0xMzgyLDggKzE0MTIsNiBA
QCBib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmJhY2tpbmdTdG9yZUV4aXN0cyhTZWN1cml0
eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sCiAgICAgcmV0dXJuIGZpbGVFeGlzdHMocGF0aCsiL0NV
UlJFTlQiKTsKIH0KIAotLy8gRklYTUU6IGRlbGV0ZURhdGFiYXNlIHNob3VsZCBiZSBwYXJ0IG9m
IElEQkJhY2tpbmdTdG9yZS4KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVs
REJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5oCmluZGV4IDlhMzdjMGQ3MDg2MzMxMWNiNmQyMTJiNjViY2JhZjc3NTg0YjZiY2Mu
LmRiMjRlNTFhMjAwZjNjYTg1Yzc2MGU5MGU5MjNiNmQyZDE0MzFhYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBAIC00OCw2ICs0OCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKTsK
ICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQpOwogICAgIHZpcnR1
YWwgYm9vbCB1cGRhdGVJREJEYXRhYmFzZU1ldGFEYXRhKGludDY0X3Qgcm93SWQsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZURhdGFiYXNlKGNvbnN0IFN0
cmluZyYgbmFtZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZv
dW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kQXV0b0luY3JlbWVudEZsYWdzKTsKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3Rv
cmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3Jl
SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1ZXN0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCUmVxdWVzdC5jcHAKaW5kZXggZjhmY2NlOGZlZjli
NTlmNGNiYTI1OTIyNTAxOTMwMWZjMGJlNTk1MS4uZDEyNTZmMzMyYTk2ZGRmOTlmNTBiMjVhMDkz
MzNlZjBiMGNjYjMxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJSZXF1
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlJlcXVlc3QuY3BwCkBAIC0z
MDEsOCArMzAxLDggQEAgYm9vbCBJREJSZXF1ZXN0OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQogICAgIEFTU0VSVChldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5z
dWNjZXNzRXZlbnQgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudCB8
fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5ibG9ja2VkRXZlbnQpOwogICAgIGJvb2wg
ZG9udFByZXZlbnREZWZhdWx0ID0gSURCRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChldmVudC5n
ZXQoKSwgdGFyZ2V0cyk7CiAKLSAgICAvLyBJZiB0aGUgcmVzdWx0IHdhcyBvZiB0eXBlIElEQkN1
cnNvciwgdGhlbiB3ZSdsbCBmaXJlIGFnYWluLgotICAgIGlmIChtX3Jlc3VsdCAmJiBtX3Jlc3Vs
dC0+dHlwZSgpICE9IElEQkFueTo6SURCQ3Vyc29yVHlwZSAmJiBtX3Jlc3VsdC0+dHlwZSgpICE9
IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKKyAgICAvLyBJZiB0aGUgcmVzdWx0IHdh
cyBvZiB0eXBlIElEQkN1cnNvciwgb3IgYSBvbkJsb2NrZWQgZXZlbnQsIHRoZW4gd2UnbGwgZmly
ZSBhZ2Fpbi4KKyAgICBpZiAoZXZlbnQtPnR5cGUoKSAhPSBldmVudE5hbWVzKCkuYmxvY2tlZEV2
ZW50ICYmIG1fcmVzdWx0ICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JU
eXBlICYmIG1fcmVzdWx0LT50eXBlKCkgIT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBl
KQogICAgICAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKIAogICAgIGlmIChtX3RyYW5zYWN0aW9uKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJGYWN0b3J5QmFja2Vu
ZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5k
UHJveHkuY3BwCmluZGV4IDdhNjJlNTBlYmIxNWE1MmQ1NTU0YzYzNzA0ZTQ5NGFiOTU1NjIwMGEu
LjdiNjAzOGIzNmFkOTQwZWM5NGExZDBkYWU1NDc0ZGNlZWU0YTBmOWMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuY3BwCkBA
IC05MSw2ICs5MSwxOSBAQCB2b2lkIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6Om9wZW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gYwogICAgIG1fd2ViSURCRmFj
dG9yeS0+b3BlbihuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCBvcmln
aW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKIH0KIAordm9pZCBJREJGYWN0b3J5QmFja2VuZFByb3h5
OjpkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycE9yaWdpbiwgRnJh
bWUqIGZyYW1lLCBjb25zdCBTdHJpbmcmIGRhdGFEaXIpCit7CisgICAgV2ViU2VjdXJpdHlPcmln
aW4gb3JpZ2luKHBycE9yaWdpbik7CisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZy
YW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdl
YkZyYW1lLT52aWV3SW1wbCgpOworICAgIGlmICh3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkg
JiYgIXdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dJbmRleGVkREIod2ViRnJhbWUs
IG5hbWUsIG9yaWdpbikpIHsKKyAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKFdlYklEQkRhdGFi
YXNlRXJyb3IoMCwgIlRoZSB1c2VyIGRlbmllZCBwZXJtaXNzaW9uIHRvIGFjY2VzcyB0aGUgZGF0
YWJhc2UuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJJREJGYWN0b3J5
LT5kZWxldGVEYXRhYmFzZShuYW1lLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3Mp
LCBvcmlnaW4sIHdlYkZyYW1lLCBkYXRhRGlyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkZhY3RvcnlCYWNrZW5kUHJveHkuaAppbmRleCBiYWYxZTA1
ZTJjOTkyZjkyMWM3ZGQyN2Q0ZmQzMjZlOGE2YWE4NmVkLi5lMTRiOGNlYTk4MmYzMTdlNDFkNDNh
OGM5M2YxZDdkNjFmNjcxYzMyIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJGYWN0b3J5QmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvSURCRmFjdG9yeUJhY2tlbmRQcm94eS5oCkBAIC00Niw2ICs0Niw3IEBAIHB1YmxpYzoKIAog
ICAgIHZpcnR1YWwgdm9pZCBnZXREYXRhYmFzZU5hbWVzKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6
OkZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihj
b25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4sIFdlYkNvcmU6OkZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBkYXRhRGlyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+LCBXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpcik7CiAKIHByaXZhdGU6CiAgICAgSURCRmFjdG9yeUJhY2tlbmRQcm94eSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuY3BwCmlu
ZGV4IDFjMDk2OGE1NTFjMmM4NDBiMDkwMjU0YzZhZDgwNGQyMTMzZjMwN2UuLjg0YzFhM2Q0MmUx
YWIxMmYzM2NkMjMyZDlmMTQ1YjZkODMwZWRkNmQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1wbC5jcHAKQEAgLTYwLDE3ICs2MCwxOCBAQCBXZWJJ
REJGYWN0b3J5SW1wbDo6fldlYklEQkZhY3RvcnlJbXBsKCkKIAogdm9pZCBXZWJJREJGYWN0b3J5
SW1wbDo6Z2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3Qg
V2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRh
dGFEaXIpCiB7Ci0gICAgV2ViU3RyaW5nIHBhdGggPSBkYXRhRGlyOwotCi0gICAgbV9pZGJGYWN0
b3J5QmFja2VuZC0+Z2V0RGF0YWJhc2VOYW1lcyhJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFk
b3B0UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIHBhdGgpOworICAgIG1faWRiRmFjdG9yeUJh
Y2tlbmQtPmdldERhdGFiYXNlTmFtZXMoSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0
cihjYWxsYmFja3MpKSwgb3JpZ2luLCAwLCBkYXRhRGlyKTsKIH0KIAogCiB2b2lkIFdlYklEQkZh
Y3RvcnlJbXBsOjpvcGVuKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViSURCQ2FsbGJhY2tzKiBj
YWxsYmFja3MsIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIFdlYkZyYW1lKiwgY29u
c3QgV2ViU3RyaW5nJiBkYXRhRGlyKQogewotICAgIFdlYlN0cmluZyBwYXRoID0gZGF0YURpcjsK
KyAgICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5Ojpj
cmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgZGF0YURpcik7Cit9CiAKLSAg
ICBtX2lkYkZhY3RvcnlCYWNrZW5kLT5vcGVuKG5hbWUsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVh
dGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIG9yaWdpbiwgMCwgcGF0aCk7Cit2b2lkIFdlYklEQkZh
Y3RvcnlJbXBsOjpkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNh
bGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJG
cmFtZSosIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpcikKK3sKKyAgICBtX2lkYkZhY3RvcnlCYWNr
ZW5kLT5kZWxldGVEYXRhYmFzZShuYW1lLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0
UHRyKGNhbGxiYWNrcykpLCBvcmlnaW4sIDAsIGRhdGFEaXIpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZh
Y3RvcnlJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJGYWN0b3J5SW1w
bC5oCmluZGV4IDNlMDFkMWE2M2M4OTI0MDYxZjU3Yzg1NzdhZWFmNWJiNDE2YmM2YzIuLmIzZTQ3
NGRmOTI1NWU4NzdmMmZmNmQwZTYzMTAzNTU2MjQ2ZDE3MTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkZhY3RvcnlJbXBsLmgKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCRmFjdG9yeUltcGwuaApAQCAtNDYsNiArNDYsNyBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RGF0YWJhc2VOYW1lcyhXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBk
YXRhRGlyKTsKICAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIGRhdGFEaXIpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5
T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpOwogCiBwcml2YXRl
OgogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBt
X2lkYkZhY3RvcnlCYWNrZW5kOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFjMjQxZGQ5NjBiNDE0ODc0ZGE3MTYxYWRjNjYx
YzQxN2NiY2E2YjQuLmMzNzhjOGM5ZWFjZWJjM2M3NWIzZjczZDFmNzJlZDY2ZTMyODg0ZTAgMTAw
NzU1Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMS0xMC0yNSAgSm9jaGVuIEVpc2luZ2VyICA8am9jaGVu
QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbXBsZW1lbnQgSURCRmFjdG9yeS5kZWxldGVEYXRh
YmFzZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2
MjIKKworICAgICAgICBSZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgICogc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAg
ICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWw6IFVwZGF0ZWQuCisgICAg
ICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0
YWJhc2UtaW50ZXJhY3Rpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL2luZGV4ZWRkYi9vcGVuLWNsb3NlLXZlcnNp
b24tZXhwZWN0ZWQudHh0OiBVcGRhdGVkLgorICAgICAgICAqIHN0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY2xvc2UtdmVyc2lvbi5odG1sOiBVcGRhdGVkLgorCiAyMDExLTEwLTI3ICBSb2JlcnQgSG9n
YW4gIDxyb2JlcnRAd2Via2l0Lm9yZz4KIAogICAgICAgICBDU1MgMi4xIGZhaWx1cmU6IGR5bmFt
aWMtdG9wLWNoYW5nZS0wMDEgdG8gMDA0IGZhaWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0
b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLWV4cGVjdGVkLnR4dAppbmRleCBlOWNm
N2EyMDM5Y2E2ZDlmZTRmOTVkYTExMzE0NjkxNWI4OTIxNWEyLi5jYjg1Yjc2NDFmNzg2NGUyNGQ3
ZDI0Mjg5YzA4ZjQ2NjFhZmRhMjQ3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2lu
ZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvc3Rv
cmFnZS9pbmRleGVkZGIvZmFjdG9yeS1iYXNpY3MtZXhwZWN0ZWQudHh0CkBAIC04LDE3ICs4LDIz
IEBAIFBBU1MgaW5kZXhlZERCID09IG51bGwgaXMgZmFsc2UKIFBBU1MgdHlwZW9mIGluZGV4ZWRE
Qi5vcGVuID09PSAnZnVuY3Rpb24nIGlzIHRydWUKIFBBU1MgdHlwZW9mIGluZGV4ZWREQi5jbXAg
PT09ICdmdW5jdGlvbicgaXMgdHJ1ZQogUEFTUyB0eXBlb2YgaW5kZXhlZERCLmdldERhdGFiYXNl
TmFtZXMgPT09ICdmdW5jdGlvbicgaXMgdHJ1ZQotZGVsZXRlRGF0YWJhc2UgQVBJIGlzIG5vdCB5
ZXQgaW1wbGVtZW50ZWQsIHNvIHRoaXMgd2lsbCBmYWlsOgotRkFJTCB0eXBlb2YgaW5kZXhlZERC
LmRlbGV0ZURhdGFiYXNlID09PSAnZnVuY3Rpb24nIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFsc2Uu
CitQQVNTIHR5cGVvZiBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UgPT09ICdmdW5jdGlvbicgaXMg
dHJ1ZQogaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKQogZGF0YWJhc2VOYW1lcyA9IGV2ZW50
LnRhcmdldC5yZXN1bHQKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnc3RvcmFnZS9pbmRl
eGVkZGIvZmFjdG9yeS1iYXNpY3MnKSBpcyBmYWxzZQogUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRh
aW5zKCdEQVRBQkFTRSBUSEFUIERPRVMgTk9UIEVYSVNUJykgaXMgZmFsc2UKIGluZGV4ZWREQi5v
cGVuKG5hbWUsIGRlc2NyaXB0aW9uKQorZXZlbnQudGFyZ2V0LnJlc3VsdC5jbG9zZSgpCiBpbmRl
eGVkREIuZ2V0RGF0YWJhc2VOYW1lcygpCiBkYXRhYmFzZU5hbWVzID0gZXZlbnQudGFyZ2V0LnJl
c3VsdAogUEFTUyBkYXRhYmFzZU5hbWVzLmNvbnRhaW5zKCdzdG9yYWdlL2luZGV4ZWRkYi9mYWN0
b3J5LWJhc2ljcycpIGlzIHRydWUKIFBBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJB
U0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIGlzIGZhbHNlCitpbmRleGVkREIuZGVsZXRlRGF0YWJh
c2UoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykKK2luZGV4ZWREQi5nZXREYXRh
YmFzZU5hbWVzKCkKK2RhdGFiYXNlTmFtZXMgPSBldmVudC50YXJnZXQucmVzdWx0CitQQVNTIGRh
dGFiYXNlTmFtZXMuY29udGFpbnMoJ3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzJykg
aXMgZmFsc2UKK1BBU1MgZGF0YWJhc2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VT
IE5PVCBFWElTVCcpIGlzIGZhbHNlCitpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ0RBVEFCQVNF
IFRIQVQgRE9FUyBOT1QgRVhJU1QnKQogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQog
CiBURVNUIENPTVBMRVRFCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9mYWN0b3J5LWJhc2ljcy5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFj
dG9yeS1iYXNpY3MuaHRtbAppbmRleCA4OTA1MWZkMGQ1NDE0ZmQ4MjVkNTcxZWQ2YTRlZGYwZjFi
MTA1ZDUxLi4wN2FkNDdiZGEyMmM5OTQ2MWE3OGQ0ZTNmNTJmNGNiZDFjZTMyMTNhIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWJhc2ljcy5odG1sCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktYmFzaWNzLmh0bWwKQEAg
LTIyLDcgKzIyLDYgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgc2hvdWxkQmVUcnVlKCJ0eXBlb2Yg
aW5kZXhlZERCLmNtcCA9PT0gJ2Z1bmN0aW9uJyIpOwogICAgIHNob3VsZEJlVHJ1ZSgidHlwZW9m
IGluZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzID09PSAnZnVuY3Rpb24nIik7CiAKLSAgICBkZWJ1
ZygiZGVsZXRlRGF0YWJhc2UgQVBJIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIHNvIHRoaXMgd2ls
bCBmYWlsOiIpOwogICAgIHNob3VsZEJlVHJ1ZSgidHlwZW9mIGluZGV4ZWREQi5kZWxldGVEYXRh
YmFzZSA9PT0gJ2Z1bmN0aW9uJyIpOwogCiAgICAgbmFtZSA9ICdzdG9yYWdlL2luZGV4ZWRkYi9m
YWN0b3J5LWJhc2ljcyc7CkBAIC00Nyw2ICs0Niw3IEBAIGZ1bmN0aW9uIGdldERhdGFiYXNlTmFt
ZXNTdWNjZXNzMSgpCiAKIGZ1bmN0aW9uIG9wZW5TdWNjZXNzKCkKIHsKKyAgICBldmFsQW5kTG9n
KCJldmVudC50YXJnZXQucmVzdWx0LmNsb3NlKCkiKTsKICAgICByZXF1ZXN0ID0gZXZhbEFuZExv
ZygiaW5kZXhlZERCLmdldERhdGFiYXNlTmFtZXMoKSIpOwogICAgIHJlcXVlc3Qub25zdWNjZXNz
ID0gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MyOwogICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhw
ZWN0ZWRFcnJvckNhbGxiYWNrOwpAQCAtNTksOCArNTksMzIgQEAgZnVuY3Rpb24gZ2V0RGF0YWJh
c2VOYW1lc1N1Y2Nlc3MyKCkKICAgICBzaG91bGRCZVRydWUoImRhdGFiYXNlTmFtZXMuY29udGFp
bnMoJyIgKyBuYW1lICsgIicpIik7CiAgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJhc2VOYW1lcy5j
b250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CiAKLSAgICAvLyBGSVhN
RTogdGVzdCBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKQorICAgIHJlcXVl
c3QgPSBldmFsQW5kTG9nKCJpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJyIgKyBuYW1lICsgIicp
Iik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBkZWxldGVEYXRhYmFzZVN1Y2Nlc3M7CisgICAg
cmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CiAKK2Z1bmN0aW9u
IGRlbGV0ZURhdGFiYXNlU3VjY2VzcygpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImlu
ZGV4ZWREQi5nZXREYXRhYmFzZU5hbWVzKCkiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGdl
dERhdGFiYXNlTmFtZXNTdWNjZXNzMzsKKyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVk
RXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gZ2V0RGF0YWJhc2VOYW1lc1N1Y2Nlc3MzKCkK
K3sKKyAgICB2YXIgZGF0YWJhc2VOYW1lczsKKyAgICBldmFsQW5kTG9nKCJkYXRhYmFzZU5hbWVz
ID0gZXZlbnQudGFyZ2V0LnJlc3VsdCIpOworICAgIHNob3VsZEJlRmFsc2UoImRhdGFiYXNlTmFt
ZXMuY29udGFpbnMoJyIgKyBuYW1lICsgIicpIik7CisgICAgc2hvdWxkQmVGYWxzZSgiZGF0YWJh
c2VOYW1lcy5jb250YWlucygnREFUQUJBU0UgVEhBVCBET0VTIE5PVCBFWElTVCcpIik7CisKKyAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygiaW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCdEQVRBQkFT
RSBUSEFUIERPRVMgTk9UIEVYSVNUJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0
ZURhdGFiYXNlU3VjY2VzczI7CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZURhdGFiYXNlU3VjY2VzczIoKQorewogICAg
IGRvbmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
ZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40NjIxN2Y3NTBlNjVkMGE5OWNkM2VlMjI2ODVkOGE4ZjEyMWNjNDQyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFz
ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOCBAQAorVGVzdCBJbmRleGVkREIncyB3ZWJraXRJ
bmRleGVkREIuZGVsZXRlRGF0YWJhc2UoKS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK3dlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKQorZGIgPSBldmVu
dC50YXJnZXQucmVzdWx0CitkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpCit0cmFucyA9IGV2
ZW50LnRhcmdldC5yZXN1bHQKK1BBU1MgdHJhbnMgIT09IG51bGwgaXMgdHJ1ZQorc3RvcmUgPSBk
Yi5jcmVhdGVPYmplY3RTdG9yZSgnc3RvcmVOYW1lJywgbnVsbCkKK3N0b3JlLmNyZWF0ZUluZGV4
KCdpbmRleE5hbWUnLCAnJykKK1BBU1Mgc3RvcmUuaW5kZXhOYW1lcy5jb250YWlucygnaW5kZXhO
YW1lJykgaXMgdHJ1ZQorc3RvcmUuYWRkKCd2YWx1ZScsICdrZXknKQorZGIudHJhbnNhY3Rpb24o
J3N0b3JlTmFtZScsIHdlYmtpdElEQlRyYW5zYWN0aW9uLlJFQURfV1JJVEUpCitzdG9yZSA9IHRy
YW5zYWN0aW9uLm9iamVjdFN0b3JlKCdzdG9yZU5hbWUnKQorc3RvcmUuZ2V0KCdrZXknKQorUEFT
UyBldmVudC50YXJnZXQucmVzdWx0IGlzICJ2YWx1ZSIKK2RiLnNldFZlcnNpb24oJ25ldyB2ZXJz
aW9uJykKK3JlcXVlc3QgPSB3ZWJraXRJbmRleGVkREIuZGVsZXRlRGF0YWJhc2UoJ2RhdGFiYXNl
LXRvLWRlbGV0ZScpCit3ZWJraXRJbmRleGVkREIub3BlbignZGF0YWJhc2UtdG8tZGVsZXRlJykK
K2RiID0gZXZlbnQudGFyZ2V0LnJlc3VsdAorZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKQor
UEFTUyBkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCBpcyAwCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
c3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVk
YXRhYmFzZS1pbnRlcmFjdGlvbnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmYjgxZWIxODgy
ODIyYWFlYzFmOTE3YzAwNDNmMWYxNWQzYmY2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9zdG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9u
cy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw3MCBAQAorVGVzdCB0aGUgZGVsZXRlRGF0YWJhc2Ug
Y2FsbCBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggb3Blbi9zZXRWZXJzaW9uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitpbmRleGVkREIgPSB3aW5kb3cuaW5kZXhlZERCIHx8IHdp
bmRvdy53ZWJraXRJbmRleGVkREIgfHwgd2luZG93Lm1vekluZGV4ZWREQjsKK1BBU1MgaW5kZXhl
ZERCID09IG51bGwgaXMgZmFsc2UKKworVEVTVDogZGVsZXRlRGF0YWJhc2UgYmxvY2tlZCBvbiBv
cGVuIGhhbmRsZXMKK3dpbmRvdy5kYm5hbWUgPSAndGVzdDEnOyB3aW5kb3cudmVyID0gMTsgd2lu
ZG93LnN0ZXBzID0gW10KKydoLm9wZW4nCisnaC5vcGVuLm9uc3VjY2VzcycKKydkZWxldGVEYXRh
YmFzZSgpJworJ2gub252ZXJzaW9uY2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1l
ZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkJworJ2guY2xvc2UnCisnZGVsZXRl
RGF0YWJhc2UoKS5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRvdy5zdGVwcy50b1N0cmluZygpIGlzICJo
Lm9wZW4saC5vcGVuLm9uc3VjY2VzcyxkZWxldGVEYXRhYmFzZSgpLGgub252ZXJzaW9uY2hhbmdl
LGRlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkLGguY2xvc2UsZGVsZXRlRGF0YWJhc2UoKS5vbnN1
Y2Nlc3MiCisKK1RFU1Q6IGRlbGV0ZURhdGFiYXNlIG5vdCBibG9ja2VkIHdoZW4gaGFuZGxlcyBj
bG9zZSBpbW1lZGlhdGVseQord2luZG93LmRibmFtZSA9ICd0ZXN0Mic7IHdpbmRvdy52ZXIgPSAx
OyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2RlbGV0
ZURhdGFiYXNlKCknCisnaC5vbnZlcnNpb25jaGFuZ2UnCisgICAgaCBjbG9zaW5nIGltbWVkaWF0
ZWx5CisnaC5jbG9zZScKKydkZWxldGVEYXRhYmFzZSgpLm9uYmxvY2tlZCcKKydkZWxldGVEYXRh
YmFzZSgpLm9uc3VjY2VzcycKK05PVEU6IFdpbGwgRkFJTCB3aXRoIGV4dHJhIGJvZ3VzIGRlbGV0
ZURhdGFiYXNlKCkub25ibG9ja2VkIHN0ZXA7IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03MTEzMAorRkFJTCB3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSBzaG91bGQgYmUg
aC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UoKSxoLm9udmVyc2lvbmNoYW5n
ZSxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5v
bnN1Y2Nlc3MsZGVsZXRlRGF0YWJhc2UoKSxoLm9udmVyc2lvbmNoYW5nZSxoLmNsb3NlLGRlbGV0
ZURhdGFiYXNlKCkub25ibG9ja2VkLGRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzLgorCitURVNU
OiBkZWxldGVEYXRhYmFzZSBpcyBkZWxheWVkIGlmIGEgVkVSU0lPTl9DSEFOR0UgdHJhbnNhY3Rp
b24gaXMgcnVubmluZword2luZG93LmRibmFtZSA9ICd0ZXN0Myc7IHdpbmRvdy52ZXIgPSAxOyB3
aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNzJworJ2guc2V0VmVy
c2lvbicKKydkZWxldGVEYXRhYmFzZSgpJworJ2guc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnCisnaC5z
ZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJworJ2gub252ZXJzaW9uY2hhbmdlJworICAg
IGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFiYXNlKCkub25ibG9j
a2VkJworJ2guY2xvc2UnCisnZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MnCitQQVNTIHdpbmRv
dy5zdGVwcy50b1N0cmluZygpIGlzICJoLm9wZW4saC5vcGVuLm9uc3VjY2VzcyxoLnNldFZlcnNp
b24sZGVsZXRlRGF0YWJhc2UoKSxoLnNldFZlcnNpb24ub25zdWNjZXNzLGguc2V0VmVyc2lvbi50
cmFuc2FjdGlvbi1jb21wbGV0ZSxoLm9udmVyc2lvbmNoYW5nZSxkZWxldGVEYXRhYmFzZSgpLm9u
YmxvY2tlZCxoLmNsb3NlLGRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzIgorCitURVNUOiBtdWx0
aXBsZSBkZWxldGVEYXRhYmFzZSBjYWxscword2luZG93LmRibmFtZSA9ICd0ZXN0NCc7IHdpbmRv
dy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXQorJ2gub3BlbicKKydoLm9wZW4ub25zdWNjZXNz
JworJ2RlbGV0ZURhdGFiYXNlKDEpJworJ2RlbGV0ZURhdGFiYXNlKDIpJworJ2gub252ZXJzaW9u
Y2hhbmdlJworICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlhdGVseQorJ2RlbGV0ZURhdGFi
YXNlKDEpLm9uYmxvY2tlZCcKKydoLm9udmVyc2lvbmNoYW5nZScKKyAgICBoIGNsb3NpbmcsIGJ1
dCBub3QgaW1tZWRpYXRlbHkKKydkZWxldGVEYXRhYmFzZSgyKS5vbmJsb2NrZWQnCisnaC5jbG9z
ZScKKydoLmNsb3NlJworJ2RlbGV0ZURhdGFiYXNlKDEpLm9uc3VjY2VzcycKKydkZWxldGVEYXRh
YmFzZSgyKS5vbnN1Y2Nlc3MnCitOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBoLm9u
dmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0ZXBzOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzExMjkKK0ZBSUwgd2luZG93LnN0ZXBzLnRvU3RyaW5nKCkgc2hvdWxkIGJl
IGgub3BlbixoLm9wZW4ub25zdWNjZXNzLGRlbGV0ZURhdGFiYXNlKDEpLGRlbGV0ZURhdGFiYXNl
KDIpLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNlKDEpLm9uYmxvY2tlZCxkZWxldGVE
YXRhYmFzZSgyKS5vbmJsb2NrZWQsaC5jbG9zZSxkZWxldGVEYXRhYmFzZSgxKS5vbnN1Y2Nlc3Ms
ZGVsZXRlRGF0YWJhc2UoMikub25zdWNjZXNzLiBXYXMgaC5vcGVuLGgub3Blbi5vbnN1Y2Nlc3Ms
ZGVsZXRlRGF0YWJhc2UoMSksZGVsZXRlRGF0YWJhc2UoMiksaC5vbnZlcnNpb25jaGFuZ2UsZGVs
ZXRlRGF0YWJhc2UoMSkub25ibG9ja2VkLGgub252ZXJzaW9uY2hhbmdlLGRlbGV0ZURhdGFiYXNl
KDIpLm9uYmxvY2tlZCxoLmNsb3NlLGguY2xvc2UsZGVsZXRlRGF0YWJhc2UoMSkub25zdWNjZXNz
LGRlbGV0ZURhdGFiYXNlKDIpLm9uc3VjY2Vzcy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlz
IHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9yYWdl
L2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLWludGVyYWN0aW9ucy5odG1sIGIvTGF5
b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFj
dGlvbnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzdiNzEzMjBhMWJkODY4MTA4NzA4MWE2MmU5NWYzZTc3
NjM4ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
ZmFjdG9yeS1kZWxldGVkYXRhYmFzZS1pbnRlcmFjdGlvbnMuaHRtbApAQCAtMCwwICsxLDIzMiBA
QAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFz
dC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMiPjwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgdGhlIGRlbGV0ZURhdGFiYXNlIGNhbGwg
YW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIG9wZW4vc2V0VmVyc2lvbiIpOworaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisKK2Z1bmN0aW9uIENvbm5lY3Rpb24oaWQpIHsKKyAgICBpZCA9IFN0cmluZyhpZCk7
CisgICAgdmFyIHNlbGYgPSB0aGlzOworICAgIHRoaXMub3BlbiA9IGZ1bmN0aW9uKG9wdHMpIHsK
KyAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIub3Blbici
KSk7CisgICAgICAgIHZhciByZXEgPSBpbmRleGVkREIub3Blbih3aW5kb3cuZGJuYW1lKTsKKyAg
ICAgICAgcmVxLm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKKyAgICAgICAgcmVx
Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICBzZWxmLmhhbmRsZSA9IGUu
dGFyZ2V0LnJlc3VsdDsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2co
IiciICsgaWQgKyAiLm9wZW4ub25zdWNjZXNzJyIpKTsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxl
Lm9udmVyc2lvbmNoYW5nZSA9IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICB3aW5kb3cu
c3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5vbnZlcnNpb25jaGFuZ2UnIikpOwor
ICAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub252ZXJzaW9uKSB7IG9wdHMub252ZXJz
aW9uLmNhbGwoc2VsZik7IH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBpZiAob3B0cyAm
JiBvcHRzLm9uc3VjY2VzcykgeyBvcHRzLm9uc3VjY2Vzcy5jYWxsKHNlbGYpOyB9CisgICAgICAg
IH07CisgICAgfTsKKworICAgIHRoaXMuY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgd2lu
ZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuY2xvc2UnIikpOworICAgICAg
ICB0aGlzLmhhbmRsZS5jbG9zZSgpOworICAgIH07CisKKyAgICB0aGlzLnNldFZlcnNpb24gPSBm
dW5jdGlvbihvcHRzKSB7CisgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIici
ICsgaWQgKyAiLnNldFZlcnNpb24nIikpOworICAgICAgICB2YXIgcmVxID0gdGhpcy5oYW5kbGUu
c2V0VmVyc2lvbihTdHJpbmcod2luZG93LnZlcisrKSk7CisgICAgICAgIHJlcS5vbmFib3J0ID0g
ZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAgIHdpbmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2co
IiciICsgaWQgKyAiLnNldFZlcnNpb24ub25hYm9ydCciKSk7CisgICAgICAgICAgICBpZiAob3B0
cyAmJiBvcHRzLm9uYWJvcnQpIHsgb3B0cy5vbmFib3J0LmNhbGwoc2VsZik7IH0KKyAgICAgICAg
fTsKKyAgICAgICAgcmVxLm9uYmxvY2tlZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICB3
aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInIiArIGlkICsgIi5zZXRWZXJzaW9uLm9uYmxv
Y2tlZCciKSk7CisgICAgICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRz
Lm9uYmxvY2tlZC5jYWxsKHNlbGYpOyB9CisgICAgICAgIH07CisgICAgICAgIHJlcS5vbnN1Y2Nl
c3MgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFu
ZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MnIikpOworICAgICAgICAgICAg
aWYgKHNlbGYuaGFuZGxlLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMoInRlc3Qtc3RvcmUiICsg
d2luZG93LnZlcikpIHsKKyAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZS5kZWxldGVPYmplY3RT
dG9yZSgidGVzdC1zdG9yZSIgKyB3aW5kb3cudmVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHZhciBzdG9yZSA9IHNlbGYuaGFuZGxlLmNyZWF0ZU9iamVjdFN0b3JlKCJ0ZXN0LXN0b3Jl
IiArIHdpbmRvdy52ZXIpOworICAgICAgICAgICAgdmFyIGNvdW50ID0gMDsKKyAgICAgICAgICAg
IGRvX2FzeW5jX3B1dHMoKTsgLy8gS2VlcCB0aGlzIHRyYW5zYWN0aW9uIHJ1bm5pbmcgZm9yIGEg
d2hpbGUKKyAgICAgICAgICAgIGZ1bmN0aW9uIGRvX2FzeW5jX3B1dHMoKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlcSA9IHN0b3JlLnB1dChjb3VudCwgY291bnQpOworICAgICAgICAgICAgICAg
IHJlcS5vbmVycm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7CisgICAgICAgICAgICAgICAg
cmVxLm9uc3VjY2VzcyA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgr
K2NvdW50IDwgMTApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRvX2FzeW5jX3B1dHMoKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdp
bmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIiciICsgaWQgKyAiLnNldFZlcnNpb24udHJhbnNh
Y3Rpb24tY29tcGxldGUnIikpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMgJiYg
b3B0cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChzZWxmKTsgfQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKyAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgd2lu
ZG93LnN0ZXBzLnB1c2goZXZhbEFuZExvZygiJyIgKyBpZCArICIuc2V0VmVyc2lvbi5vbmVycm9y
JyIpKTsKKyAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMub25lcnJvcikgeyBvcHRzLm9uZXJy
b3IuY2FsbChzZWxmKTsgfQorICAgICAgICB9OworICAgIH07Cit9CisKK2Z1bmN0aW9uIGRlbGV0
ZURhdGFiYXNlKGlkLCBuYW1lLCBvcHRzKSB7CisgICAgd2luZG93LnN0ZXBzLnB1c2goZXZhbEFu
ZExvZygiJ2RlbGV0ZURhdGFiYXNlKCIgKyBpZCArICIpJyIpKTsKKyAgICB2YXIgcmVxID0gaW5k
ZXhlZERCLmRlbGV0ZURhdGFiYXNlKG5hbWUpOworICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlv
biAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChldmFsQW5kTG9nKCInZGVsZXRlRGF0
YWJhc2UoIiArIGlkICsgIikub25zdWNjZXNzJyIpKTsKKyAgICAgICAgaWYgKG9wdHMgJiYgb3B0
cy5vbnN1Y2Nlc3MpIHsgb3B0cy5vbnN1Y2Nlc3MuY2FsbChudWxsKTsgfQorICAgIH07CisgICAg
cmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICB3aW5kb3cuc3RlcHMucHVzaChl
dmFsQW5kTG9nKCInZGVsZXRlRGF0YWJhc2UoIiArIGlkICsgIikub25lcnJvciciKSk7CisgICAg
ICAgIGlmIChvcHRzICYmIG9wdHMub25lcnJvcikgeyBvcHRzLm9uZXJyb3IuY2FsbChudWxsKTsg
fQorICAgIH07CisgICAgcmVxLm9uYmxvY2tlZCA9IGZ1bmN0aW9uIChlKSB7CisgICAgICAgIHdp
bmRvdy5zdGVwcy5wdXNoKGV2YWxBbmRMb2coIidkZWxldGVEYXRhYmFzZSgiICsgaWQgKyAiKS5v
bmJsb2NrZWQnIikpOworICAgICAgICBpZiAob3B0cyAmJiBvcHRzLm9uYmxvY2tlZCkgeyBvcHRz
Lm9uYmxvY2tlZC5jYWxsKG51bGwpOyB9CisgICAgfTsKK30KKworLy8gcnVuIGEgc2VyaWVzIG9m
IHN0ZXBzIHRoYXQgdGFrZSBhIGNvbnRpbnVhdGlvbiBmdW5jdGlvbgorZnVuY3Rpb24gcnVuU3Rl
cHMoY29tbWFuZHMpIHsKKyAgICBpZiAoY29tbWFuZHMubGVuZ3RoKSB7CisgICAgICAgIHZhciBj
b21tYW5kID0gY29tbWFuZHMuc2hpZnQoKTsKKyAgICAgICAgY29tbWFuZChmdW5jdGlvbigpIHsg
cnVuU3RlcHMoY29tbWFuZHMpOyB9KTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoKSB7Cisg
ICAgaW5kZXhlZERCID0gZXZhbEFuZExvZygiaW5kZXhlZERCID0gd2luZG93LmluZGV4ZWREQiB8
fCB3aW5kb3cud2Via2l0SW5kZXhlZERCIHx8IHdpbmRvdy5tb3pJbmRleGVkREI7Iik7CisgICAg
c2hvdWxkQmVGYWxzZSgiaW5kZXhlZERCID09IG51bGwiKTsKKyAgICB0ZXN0MSgpOworfQorCitm
dW5jdGlvbiB0ZXN0MSgpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0
ZURhdGFiYXNlIGJsb2NrZWQgb24gb3BlbiBoYW5kbGVzIik7CisgICAgZXZhbEFuZExvZygid2lu
ZG93LmRibmFtZSA9ICd0ZXN0MSc7IHdpbmRvdy52ZXIgPSAxOyB3aW5kb3cuc3RlcHMgPSBbXSIp
OworICAgIHZhciBoID0gbmV3IENvbm5lY3Rpb24oImgiKTsKKyAgICBydW5TdGVwcyhbZnVuY3Rp
b24oZG9OZXh0KSB7IGgub3Blbih7b25zdWNjZXNzOiBkb05leHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9udmVyc2lvbjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZWJ1ZygiICAgIGggY2xvc2luZywgYnV0IG5vdCBpbW1lZGlh
dGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChm
dW5jdGlvbigpIHsgaC5jbG9zZSgpOyB9LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfX0pOyB9LAorICAgICAgICBmdW5jdGlvbihkb05leHQpIHsgZGVsZXRlRGF0YWJhc2Uo
IiIsIHdpbmRvdy5kYm5hbWUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uc3VjY2Vz
czogZmluaXNoVGVzdH0pOyB9LAorICAgICAgICBdKTsKKyAgICBmdW5jdGlvbiBmaW5pc2hUZXN0
KCkgeworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmlu
ZygpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiaC5vcGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImRlbGV0ZURhdGFiYXNlKCkiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJoLm9udmVyc2lvbmNoYW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImRlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiaC5jbG9zZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGV0ZURhdGFiYXNlKCkub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0udG9TdHJpbmcoKSk7CisgICAgICAgIHRlc3QyKCk7CisgICAgfQorfQorCitmdW5jdGlv
biB0ZXN0MigpIHsKKyAgICBkZWJ1ZygiIik7CisgICAgZGVidWcoIlRFU1Q6IGRlbGV0ZURhdGFi
YXNlIG5vdCBibG9ja2VkIHdoZW4gaGFuZGxlcyBjbG9zZSBpbW1lZGlhdGVseSIpOworICAgIGV2
YWxBbmRMb2coIndpbmRvdy5kYm5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93
LnN0ZXBzID0gW10iKTsKKyAgICB2YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVu
U3RlcHMoW2Z1bmN0aW9uKGRvTmV4dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1
ZygiICAgIGggY2xvc2luZyBpbW1lZGlhdGVseSIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH19KTsgfSwKKyAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRl
bGV0ZURhdGFiYXNlKCIiLCB3aW5kb3cuZGJuYW1lLCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvbnN1Y2Nlc3M6IGZpbmlzaFRlc3R9KTsgfSwKKyAgICAgICAgXSk7CisgICAgZnVuY3Rp
b24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgZGVidWcoIk5PVEU6IFdpbGwgRkFJTCB3aXRoIGV4
dHJhIGJvZ3VzIGRlbGV0ZURhdGFiYXNlKCkub25ibG9ja2VkIHN0ZXA7IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTEzMCIpOworICAgICAgICBzaG91bGRCZUVxdWFs
VG9TdHJpbmcoIndpbmRvdy5zdGVwcy50b1N0cmluZygpIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFsiaC5vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5v
cGVuLm9uc3VjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGV0ZURh
dGFiYXNlKCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLm9udmVyc2lvbmNo
YW5nZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImguY2xvc2UiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpLm9uc3VjY2VzcyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLnRvU3RyaW5nKCkpOworICAgICAgICB0ZXN0
MygpOworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdDMoKSB7CisgICAgZGVidWcoIiIpOworICAg
IGRlYnVnKCJURVNUOiBkZWxldGVEYXRhYmFzZSBpcyBkZWxheWVkIGlmIGEgVkVSU0lPTl9DSEFO
R0UgdHJhbnNhY3Rpb24gaXMgcnVubmluZyIpOworICAgIGV2YWxBbmRMb2coIndpbmRvdy5kYm5h
bWUgPSAndGVzdDMnOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10iKTsKKyAgICB2
YXIgaCA9IG5ldyBDb25uZWN0aW9uKCJoIik7CisgICAgcnVuU3RlcHMoW2Z1bmN0aW9uKGRvTmV4
dCkgeyBoLm9wZW4oe29uc3VjY2VzczogZG9OZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvbnZlcnNpb246IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVidWcoIiAgICBoIGNsb3NpbmcsIGJ1dCBub3QgaW1tZWRpYXRlbHkiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o
KSB7IGguY2xvc2UoKTsgfSwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19
KTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGguc2V0VmVyc2lvbigpOyBk
b05leHQoKTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oZG9OZXh0KSB7IGRlbGV0ZURhdGFi
YXNlKCIiLCB3aW5kb3cuZGJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
b25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgICAgICAgIF0pOworCisgICAgZnVu
Y3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5k
b3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgu
b3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3Mi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLnNldFZlcnNpb24iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVEYXRhYmFzZSgpIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiaC5zZXRWZXJzaW9uLm9uc3VjY2VzcyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImguc2V0VmVyc2lvbi50cmFuc2FjdGlvbi1jb21wbGV0ZSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImgub252ZXJzaW9uY2hhbmdlIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoKS5vbmJsb2NrZWQi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0YWJhc2UoKS5vbnN1Y2Nlc3MiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXS50b1N0cmluZygpKTsKKyAgICAgICAgdGVzdDQoKTsK
KyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3Q0KCkgeworICAgIGRlYnVnKCIiKTsKKyAgICBkZWJ1
ZygiVEVTVDogbXVsdGlwbGUgZGVsZXRlRGF0YWJhc2UgY2FsbHMiKTsKKyAgICBldmFsQW5kTG9n
KCJ3aW5kb3cuZGJuYW1lID0gJ3Rlc3Q0Jzsgd2luZG93LnZlciA9IDE7IHdpbmRvdy5zdGVwcyA9
IFtdIik7CisgICAgdmFyIGggPSBuZXcgQ29ubmVjdGlvbigiaCIpOworICAgIHJ1blN0ZXBzKFtm
dW5jdGlvbihkb05leHQpIHsgaC5vcGVuKHtvbnN1Y2Nlc3M6IGRvTmV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb252ZXJzaW9uOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKCIgICAgaCBjbG9zaW5nLCBidXQgbm90IGlt
bWVkaWF0ZWx5Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeyBoLmNsb3NlKCk7IH0sIDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9fSk7IH0sCisgICAgICAgIGZ1bmN0aW9uKGRvTmV4dCkgeyBkZWxldGVEYXRh
YmFzZSgiMSIsIHdpbmRvdy5kYm5hbWUpOyBkb05leHQoKTsgfSwKKyAgICAgICAgZnVuY3Rpb24o
ZG9OZXh0KSB7IGRlbGV0ZURhdGFiYXNlKCIyIiwgd2luZG93LmRibmFtZSwgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb25zdWNjZXNzOiBmaW5pc2hUZXN0fSk7IH0sCisgICAgICAgIF0p
OworICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgIGRlYnVnKCJOT1RFOiBXaWxs
IEZBSUwgd2l0aCBleHRyYSBib2d1cyBoLm9udmVyc2lvbmNoYW5nZS9oLmNsb3NlIHN0ZXBzOyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzExMjkiKTsKKyAgICAgICAg
c2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMudG9TdHJpbmcoKSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBbImgub3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImgub3Blbi5vbnN1Y2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZWxldGVEYXRhYmFzZSgxKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlbGV0ZURhdGFiYXNlKDIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaC5v
bnZlcnNpb25jaGFuZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxldGVE
YXRhYmFzZSgxKS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZWxldGVEYXRhYmFzZSgyKS5vbmJsb2NrZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoLmNsb3NlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRlRGF0
YWJhc2UoMSkub25zdWNjZXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVs
ZXRlRGF0YWJhc2UoMikub25zdWNjZXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF0udG9TdHJpbmcoKSk7CisgICAgICAgIGRvbmUoKTsKKyAgICB9Cit9CisKK3Rlc3QoKTsKKwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdG9y
YWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwgYi9MYXlvdXRUZXN0cy9z
dG9yYWdlL2luZGV4ZWRkYi9mYWN0b3J5LWRlbGV0ZWRhdGFiYXNlLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NDEzYTJmZjdhZWRiM2QxM2Q3OWFjMDBmZjlmOTFkZDIwNWNlM2FiYwotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL2ZhY3RvcnktZGVsZXRlZGF0YWJhc2Uu
aHRtbApAQCAtMCwwICsxLDEwMiBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qt
ZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9zaGFyZWQuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdD4KKworZGVzY3JpcHRpb24oIlRlc3QgSW5k
ZXhlZERCJ3Mgd2Via2l0SW5kZXhlZERCLmRlbGV0ZURhdGFiYXNlKCkuIik7CitpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRp
bERvbmUoKTsKKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2co
IndlYmtpdEluZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVl
c3Qub25zdWNjZXNzID0gc3RhcnRTZXRWZXJzaW9uOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVu
ZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlvbiBzdGFydFNldFZlcnNpb24oKQor
eworICAgIGRiID0gZXZhbEFuZExvZygiZGIgPSBldmVudC50YXJnZXQucmVzdWx0Iik7CisKKyAg
ICByZXF1ZXN0ID0gZXZhbEFuZExvZygiZGIuc2V0VmVyc2lvbignbmV3IHZlcnNpb24nKSIpOwor
ICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZGVsZXRlRXhpc3Rpbmc7CisgICAgcmVxdWVzdC5vbmVy
cm9yID0gdW5leHBlY3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIGRlbGV0ZUV4aXN0
aW5nKCkKK3sKKyAgICB3aW5kb3cudHJhbnMgPSBldmFsQW5kTG9nKCJ0cmFucyA9IGV2ZW50LnRh
cmdldC5yZXN1bHQiKTsKKyAgICBzaG91bGRCZVRydWUoInRyYW5zICE9PSBudWxsIik7CisKKyAg
ICBzdG9yZSA9IGV2YWxBbmRMb2coInN0b3JlID0gZGIuY3JlYXRlT2JqZWN0U3RvcmUoJ3N0b3Jl
TmFtZScsIG51bGwpIik7CisKKyAgICB3aW5kb3cuaW5kZXggPSBldmFsQW5kTG9nKCJzdG9yZS5j
cmVhdGVJbmRleCgnaW5kZXhOYW1lJywgJycpIik7CisgICAgc2hvdWxkQmVUcnVlKCJzdG9yZS5p
bmRleE5hbWVzLmNvbnRhaW5zKCdpbmRleE5hbWUnKSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxB
bmRMb2coInN0b3JlLmFkZCgndmFsdWUnLCAna2V5JykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2Vz
cyA9IGdldFZhbHVlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxi
YWNrOworfQorCitmdW5jdGlvbiBnZXRWYWx1ZSgpCit7CisgICAgdHJhbnNhY3Rpb24gPSBldmFs
QW5kTG9nKCJkYi50cmFuc2FjdGlvbignc3RvcmVOYW1lJywgd2Via2l0SURCVHJhbnNhY3Rpb24u
UkVBRF9XUklURSkiKTsKKyAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdW5leHBlY3RlZEVycm9y
Q2FsbGJhY2s7CisgICAgdmFyIHN0b3JlID0gZXZhbEFuZExvZygic3RvcmUgPSB0cmFuc2FjdGlv
bi5vYmplY3RTdG9yZSgnc3RvcmVOYW1lJykiKTsKKworICAgIHJlcXVlc3QgPSBldmFsQW5kTG9n
KCJzdG9yZS5nZXQoJ2tleScpIik7CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSBhZGRJbmRleDsK
KyAgICByZXF1ZXN0Lm9uZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVu
Y3Rpb24gYWRkSW5kZXgoKQoreworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXZlbnQudGFy
Z2V0LnJlc3VsdCIsICJ2YWx1ZSIpOworCisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coImRiLnNl
dFZlcnNpb24oJ25ldyB2ZXJzaW9uJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGRlbGV0
ZURhdGFiYXNlOworICAgIHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNr
OworfQorCitmdW5jdGlvbiBkZWxldGVEYXRhYmFzZSgpCit7CisgICAgZGIub252ZXJzaW9uY2hh
bmdlID0gZnVuY3Rpb24oKSB7IGRiLmNsb3NlKCk7IH0KKyAgICByZXF1ZXN0ID0gZXZhbEFuZExv
ZygicmVxdWVzdCA9IHdlYmtpdEluZGV4ZWREQi5kZWxldGVEYXRhYmFzZSgnZGF0YWJhc2UtdG8t
ZGVsZXRlJykiKTsKKyAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IHJlb3BlbkRhdGFiYXNlOworICAg
IHJlcXVlc3Qub25lcnJvciA9IHVuZXhwZWN0ZWRFcnJvckNhbGxiYWNrOworfQorCitmdW5jdGlv
biByZW9wZW5EYXRhYmFzZSgpCit7CisgICAgcmVxdWVzdCA9IGV2YWxBbmRMb2coIndlYmtpdElu
ZGV4ZWREQi5vcGVuKCdkYXRhYmFzZS10by1kZWxldGUnKSIpOworICAgIHJlcXVlc3Qub25zdWNj
ZXNzID0gc3RhcnRTZXRWZXJzaW9uQWdhaW47CisgICAgcmVxdWVzdC5vbmVycm9yID0gdW5leHBl
Y3RlZEVycm9yQ2FsbGJhY2s7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0U2V0VmVyc2lvbkFnYWluKCkK
K3sKKyAgICByZGIgPSBldmFsQW5kTG9nKCJkYiA9IGV2ZW50LnRhcmdldC5yZXN1bHQiKTsKKwor
ICAgIHJlcXVlc3QgPSBldmFsQW5kTG9nKCJkYi5zZXRWZXJzaW9uKCduZXcgdmVyc2lvbicpIik7
CisgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSB2ZXJpZnlOb3RGb3VuZDsKKyAgICByZXF1ZXN0Lm9u
ZXJyb3IgPSB1bmV4cGVjdGVkRXJyb3JDYWxsYmFjazsKK30KKworZnVuY3Rpb24gdmVyaWZ5Tm90
Rm91bmQoKQoreworICAgIHNob3VsZEJlKCJkYi5vYmplY3RTdG9yZU5hbWVzLmxlbmd0aCIsICIw
Iik7CisKKyAgICBkb25lKCk7Cit9CisKK3Rlc3QoKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9z
ZS12ZXJzaW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N0b3JhZ2UvaW5kZXhlZGRiL29w
ZW4tY2xvc2UtdmVyc2lvbi1leHBlY3RlZC50eHQKaW5kZXggMjcyOGEyOWQxMzFiZThjM2QxMTRl
YWUxNmJlMmZkOWMyNGRjMGUwYy4uOTZiMDQ2OGFkMTQxZmQ3YzIyNDZlZjNmZTRlYzEyM2RjOGFm
ZTI0YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Blbi1jbG9z
ZS12ZXJzaW9uLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9zdG9yYWdlL2luZGV4ZWRk
Yi9vcGVuLWNsb3NlLXZlcnNpb24tZXhwZWN0ZWQudHh0CkBAIC0zNCw3ICszNCw3IEBAIHdpbmRv
dy5kYm5hbWUgPSAndGVzdDInOyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KICdo
MS5zZXRWZXJzaW9uLm9uYmxvY2tlZCcKICdoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcycKICdoMS5z
ZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJwotTk9URTogV2lsbCBGQUlMIHdpdGggZXh0
cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQgc3RlcDsgY3JidWcuY29tLzEwMDEyMwor
Tk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQg
c3RlcDsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCiBGQUlM
IHdpbmRvdy5zdGVwcy50b1N0cmluZygpIHNob3VsZCBiZSBoMS5vcGVuLGgxLm9wZW4ub25zdWNj
ZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMi5vbnZlcnNpb25j
aGFuZ2UsaDIuY2xvc2UsaDEuc2V0VmVyc2lvbi5vbnN1Y2Nlc3MsaDEuc2V0VmVyc2lvbi50cmFu
c2FjdGlvbi1jb21wbGV0ZS4gV2FzIGgxLm9wZW4saDEub3Blbi5vbnN1Y2Nlc3MsaDIub3Blbixo
Mi5vcGVuLm9uc3VjY2VzcyxoMS5zZXRWZXJzaW9uLGgyLm9udmVyc2lvbmNoYW5nZSxoMi5jbG9z
ZSxoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCxoMS5zZXRWZXJzaW9uLm9uc3VjY2VzcyxoMS5zZXRW
ZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlLgogCiBURVNUOiBvcGVuIGFuZCBzZXRWZXJzaW9u
IGJsb2NrZWQgaWYgYSBWRVJTSU9OX0NIQU5HRSB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIC0gY2xv
c2Ugd2hlbiBibG9ja2VkCkBAIC03MSw3ICs3MSw3IEBAIHdpbmRvdy5kYm5hbWUgPSAndGVzdDQn
OyB3aW5kb3cudmVyID0gMTsgd2luZG93LnN0ZXBzID0gW10KICdoMS5zZXRWZXJzaW9uLm9uc3Vj
Y2VzcycKICdoMS5zZXRWZXJzaW9uLnRyYW5zYWN0aW9uLWNvbXBsZXRlJwogJ2gzLm9wZW4ub25z
dWNjZXNzJwotTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5v
bmJsb2NrZWQgc3RlcDsgY3JidWcuY29tLzEwMDEyMworTk9URTogV2lsbCBGQUlMIHdpdGggZXh0
cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQgc3RlcDsgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwCiBGQUlMIHdpbmRvdy5zdGVwcy50b1N0cmluZygp
IHNob3VsZCBiZSBoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1
Y2Nlc3MsaDEuc2V0VmVyc2lvbixoMy5vcGVuLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25zdWNj
ZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUsaDMub3Blbi5vbnN1Y2Nlc3Mu
IFdhcyBoMS5vcGVuLGgxLm9wZW4ub25zdWNjZXNzLGgyLm9wZW4saDIub3Blbi5vbnN1Y2Nlc3Ms
aDEuc2V0VmVyc2lvbixoMy5vcGVuLGgyLmNsb3NlLGgxLnNldFZlcnNpb24ub25ibG9ja2VkLGgx
LnNldFZlcnNpb24ub25zdWNjZXNzLGgxLnNldFZlcnNpb24udHJhbnNhY3Rpb24tY29tcGxldGUs
aDMub3Blbi5vbnN1Y2Nlc3MuCiAKIFRFU1Q6IG9wZW4gYmxvY2tlZCBpZiBhIFZFUlNJT05fQ0hB
TkdFIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N0b3Jh
Z2UvaW5kZXhlZGRiL29wZW4tY2xvc2UtdmVyc2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvc3RvcmFn
ZS9pbmRleGVkZGIvb3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwKaW5kZXggMDIyZDQ0YjI4MzA0ZmQ2
ZWViZjA2YTg2MzgxODc2NWY1M2QwMGFhOC4uMmM4OTBhOWJmMTEyNzg0ODI3YmY1NWU3ZGQzZTQ1
MzJkOGQyM2E2NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIvb3Bl
bi1jbG9zZS12ZXJzaW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvc3RvcmFnZS9pbmRleGVkZGIv
b3Blbi1jbG9zZS12ZXJzaW9uLmh0bWwKQEAgLTEzNyw3ICsxMzcsNyBAQCBmdW5jdGlvbiB0ZXN0
MigpIHsKICAgICAgICAgICAgICAgXSk7CiAKICAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgewot
ICAgICAgICBkZWJ1ZygiTk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEuc2V0VmVy
c2lvbi5vbmJsb2NrZWQgc3RlcDsgY3JidWcuY29tLzEwMDEyMyIpOworICAgICAgICBkZWJ1Zygi
Tk9URTogV2lsbCBGQUlMIHdpdGggZXh0cmEgYm9ndXMgaDEuc2V0VmVyc2lvbi5vbmJsb2NrZWQg
c3RlcDsgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxMTMwIik7CiAg
ICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygid2luZG93LnN0ZXBzLnRvU3RyaW5nKCkiLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJoMS5vcGVuIiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiaDEub3Blbi5vbnN1Y2Nlc3MiLApAQCAtMjEwLDcgKzIxMCw3IEBA
IGZ1bmN0aW9uIHRlc3Q0KCkgewogICAgICAgICAgICAgICBdKTsKIAogICAgIGZ1bmN0aW9uIGZp
bmlzaFRlc3QoKSB7Ci0gICAgICAgIGRlYnVnKCJOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBi
b2d1cyBoMS5zZXRWZXJzaW9uLm9uYmxvY2tlZCBzdGVwOyBjcmJ1Zy5jb20vMTAwMTIzIik7Cisg
ICAgICAgIGRlYnVnKCJOT1RFOiBXaWxsIEZBSUwgd2l0aCBleHRyYSBib2d1cyBoMS5zZXRWZXJz
aW9uLm9uYmxvY2tlZCBzdGVwOyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzExMzAiKTsKICAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ3aW5kb3cuc3RlcHMu
dG9TdHJpbmcoKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgxLm9wZW4iLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoMS5vcGVuLm9uc3VjY2VzcyIsCkBAIC0y
OTAsOCArMjkwLDYgQEAgZnVuY3Rpb24gdGVzdDYoKSB7CiAgICAgfQogfQogCi12YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLQogdGVzdCgpOwogCiA8L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>