<?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>27966</bug_id>
          
          <creation_ts>2009-08-03 19:38:40 -0700</creation_ts>
          <short_desc>Race condition in the database code</short_desc>
          <delta_ts>2009-08-12 17:53:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>beidson</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>michaeln</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>136890</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-03 19:38:40 -0700</bug_when>
    <thetext>The WebCore DB code has a bug that can lead to a deadlock. Here are the details:

1. The user creates 2 handles to the same DB on the same page, and executes a transaction on each handle:
    db1 = openDatabase(&quot;Foo&quot;, &quot;1.0&quot;, &quot;Foo&quot;, 1000);
    db2 = openDatabase(&quot;Foo&quot;, &quot;1.0&quot;, &quot;Foo&quot;, 1000);
    db1.transaction(...);
    db2.transaction(...);

2. The main thread gets to db1.transaction() and schedules a task (#1) on the DB thread that will call SQLTransaction::openTransactionAndPreflight().
3. The main thread gets to db2.transaction() and schedules a task (#2) on the DB thread that will call SQLTransaction::openTransactionAndPreflight().
4. The DB thread executes SQLTransaction::openTransactionAndPreflight() for the first transaction (db1). It calls m_sqliteTransaction-&gt;begin() which makes SQLite acquire a lock on the DB file. Then the DB thread calls m_database-&gt;scheduleTransactionCallback() (which schedules a task on the main thread) and now the DB thread is done with task #1.
5. The DB thread moves on to task #2, which wants to run db2&apos;s transaction. The DB thread tries to execute SQLTransaction::openTransactionAndPreflight() for db2, and when it gets to m_sqliteTransaction-&gt;begin(), it blocks, because db1&apos;s transaction has the lock on the DB file.
6. So now the DB thread cannot finish transaction #2 until transaction #1 is done and releases the lock on the DB file, and it cannot move on with transaction #1 because it is blocked trying to acquire a lock for transaction #2.

Eventually, the call to m_sqliteDatabase for transaction #2 will fail (when sqlite&apos;s busy timeout is reached), transaction #2 will fail, and the DB thread will continue executing transaction #1, which should succeed.


Proposed solution: Add a &quot;transaction coordinator&quot; interface with 2 methods: aquireLock(SQLTransaction*) and releaseLock(SQLTransaction*); and add a step that calls TransactionCoordinator::aquireLock() before calling SQLTransaction::openTransactionAndPreflight() (m_nextStep in SQLTransaction&apos;s constructor would be set to this step), and another step that calls TransactionCoordinator::releaseLock() that is called at the end of every transaction.

Here&apos;s how the above example would work with these 2 steps:

1. The main thread gets to db1.transaction() and schedules task #1 on the DB thread that will call TransactionCoordinator::aquireLock();
2. The main thread gets to db2.transaction() and schedules task #2 on the DB thread that will call TransactionCoordinator::aquireLock();
3. The DB thread calls aquireLock() for db1&apos;s transaction, which returns &apos;true&apos; (success). The DB thread sets m_nextStep = &amp;SQLTransaction::openTransactionAndPreflight, and calls db1-&gt;scheduleTransactionCallback() as it does for all other steps.
4. The DB thread calls aquireLock() for db2&apos;s transaction. The transaction coordinator saves transaction #2 to the queue of pending transactions for the given database, and returns &apos;false&apos;. Since aquireLock() failed, the DB thread does not do anything else related to transaction #2.
5. Eventually, transaction #1 finishes executing (the DB thread is no longer blocked on other transactions), and releaseLock(transaction_1) is called. The transaction coordinator checks the list of pending transactions for the given database, and sees transaction #2 there. Before returning from releaseLock(), the transaction coordinator calls db2-&gt;scheduleTransactionCallback() to reschedule transaction #2.
6. Now the DB thread can acquire the lock for transaction #2 and run it without causing any deadlocks.

Thoughts? Suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137061</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-08-04 11:01:52 -0700</bug_when>
    <thetext>My first thought is that given this understanding we must be able to create a test case that demonstrates the deadlock. Can we do this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137062</commentid>
    <comment_count>2</comment_count>
      <attachid>34075</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-04 11:05:17 -0700</bug_when>
    <thetext>Created attachment 34075
test case that demonstrates the problem

(In reply to comment #1)
&gt; My first thought is that given this understanding we must be able to create a
&gt; test case that demonstrates the deadlock. Can we do this?

yes. attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137679</commentid>
    <comment_count>3</comment_count>
      <attachid>34233</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-06 16:03:19 -0700</bug_when>
    <thetext>Created attachment 34233
transaction coordinator + test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137686</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-06 16:39:03 -0700</bug_when>
    <thetext>I&apos;m not a webkit reviewer... some drive by comments all the same :)

50         OwnPtr&lt;HashMap&lt;String, Deque&lt;SQLTransaction*&gt;*&gt; &gt; m_pendingTransactions;

I think you could put RefPtr&lt;T&gt;&apos;s in the Deque to eliminate the manual refcounting.

51         Mutex m_pendingTransactionsGuard;

I think this should only be called on a particular DB thread, is the Mutex really needed?

47 SQLTransactionCoordinator::~SQLTransactionCoordinator()
48 {
49 }

What happens to transactions that don&apos;t actually start prior to the thread being killed. How do they get derefed?

210 void SQLTransaction::lockAquired()
211 {
212     m_nextStep = &amp;SQLTransaction::deliverOpenTransactionAndPreflightCallback;
213     LOG(StorageAPI, &quot;Scheduling deliverOpenTransactionAndPreflight for transaction %p\n&quot;, this);
214     m_database-&gt;scheduleTransactionCallback(this);
215 }

A the lockAcquired point, the system pings-pongs to the main thread and back again to the db thread. What is the reason for the &apos;deliverOpenTransactionAndPreflightCallback&apos; step? I&apos;m wondering if we can we skip straight to the openTransactionAndPreflight step at this point, without ping/ponging to the main thread.


217 void SQLTransaction::deliverOpenTransactionAndPreflightCallback()
218 {
219     m_nextStep = &amp;SQLTransaction::openTransactionAndPreflight;
220     LOG(StorageAPI, &quot;Scheduling openTransactionAndPreflight for transaction %p\n&quot;, this);
221     m_database-&gt;scheduleTransactionStep(this);
222 }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137714</commentid>
    <comment_count>5</comment_count>
      <attachid>34241</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-06 18:19:02 -0700</bug_when>
    <thetext>Created attachment 34241
patch + test case

(In reply to comment #4)

good comments!

&gt; 50         OwnPtr&lt;HashMap&lt;String, Deque&lt;SQLTransaction*&gt;*&gt; &gt;
&gt; m_pendingTransactions;
&gt; 
&gt; I think you could put RefPtr&lt;T&gt;&apos;s in the Deque to eliminate the manual
&gt; refcounting.

done. any way to do the same for the Deques? that is, can we wrap them into something that would delete them as soon as we exit the block of code that removes them from the hash map?

&gt; 51         Mutex m_pendingTransactionsGuard;
&gt; 
&gt; I think this should only be called on a particular DB thread, is the Mutex
&gt; really needed?

good catch, removed.

&gt; 47 SQLTransactionCoordinator::~SQLTransactionCoordinator()
&gt; 48 {
&gt; 49 }
&gt; 
&gt; What happens to transactions that don&apos;t actually start prior to the thread
&gt; being killed. How do they get derefed?

added code to clean up all pending transactions. i left it empty mostly because i wasn&apos;t sure what to do here and was hoping for some comments. is there anything else we might need to do other than cleaning up the transaction queues?

&gt; 210 void SQLTransaction::lockAquired()
&gt; 211 {
&gt; 212     m_nextStep =
&gt; &amp;SQLTransaction::deliverOpenTransactionAndPreflightCallback;
&gt; 213     LOG(StorageAPI, &quot;Scheduling deliverOpenTransactionAndPreflight for
&gt; transaction %p\n&quot;, this);
&gt; 214     m_database-&gt;scheduleTransactionCallback(this);
&gt; 215 }
&gt; 
&gt; A the lockAcquired point, the system pings-pongs to the main thread and back
&gt; again to the db thread. What is the reason for the
&gt; &apos;deliverOpenTransactionAndPreflightCallback&apos; step? I&apos;m wondering if we can we
&gt; skip straight to the openTransactionAndPreflight step at this point, without
&gt; ping/ponging to the main thread.

changed lockAquired() to call openTransactionAndPreflight() directly. i scheduled a task on the main thread only because i wanted to release the lock on SQLTransactionCoordinator::m_pendingTransactions as soon as possible (even though i guess it didn&apos;t matter, because the DB thread was doing the same amount of work in one order or another). but now that the lock is gone i don&apos;t think there&apos;s any reason to do this anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137742</commentid>
    <comment_count>6</comment_count>
      <attachid>34241</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-06 19:14:14 -0700</bug_when>
    <thetext>Comment on attachment 34241
patch + test case

Please avoid combining style cleanup with functional changes when possible. :)  By the time I got to TransactionCoordinator my eyes were sagging. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137906</commentid>
    <comment_count>7</comment_count>
      <attachid>34241</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 08:50:59 -0700</bug_when>
    <thetext>Comment on attachment 34241
patch + test case

Style violation:
48         virtual void aquireLock(SQLTransaction* transaction);
 49         virtual void releaseLock(SQLTransaction* transaction);

I&apos;ve looked again.  This is simply too big for me to review.  You might be able to find one of the Database guys who can do this for you though.  In the future, definitely try to make your patches smaller by not including code-cleanup in functional changes.  I suggest you try to track down one of the folks who have worked on storage via IRC.  Failing that, r- the patch and re-post a smaller piece.  I assume that it&apos;s not possible to land the layout test first since it will cause DRT to hang?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137972</commentid>
    <comment_count>8</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-07 10:46:52 -0700</bug_when>
    <thetext>Sorry, I won&apos;t combine clean ups with real changes in the future. I&apos;ll see if I can find somebody to review this, and if not, I&apos;ll resubmit the patch without the clean up.

The new test will crash without this patch, and storage tests will fail. If this is acceptable and will help with the review, please let me know and I&apos;ll put it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138002</commentid>
    <comment_count>9</comment_count>
      <attachid>34299</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-07 11:35:19 -0700</bug_when>
    <thetext>Created attachment 34299
patch + test case

Removed all style changes, should be easier to review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138141</commentid>
    <comment_count>10</comment_count>
      <attachid>34299</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-07 14:16:07 -0700</bug_when>
    <thetext>Comment on attachment 34299
patch + test case

Thank you!  This is much much more reviewable.

Why do we have one transaction coordinator per thread instead of per database?  if it was per database, then we would not need the hash to hold these queues, we could just hold them on each datbase?  Do transations span across datbases?

I find the test case very hard to read using anonymous functions.  If I were writing that I would have given the functions nice names, even if they were only defined locally.

It seems teh select/insert tests differ only in &quot;db1&quot; vs. &quot;db2&quot;.  Probably should be a single funtion which takes a name argument, no?

Likewise the openDatbasse call could be a function to make this more readable.  In general the test has too much copy/paste code. :(

Since no one else has stepped up yet, I think you&apos;re stuck with me! ;)

In general this looks great.  The layout test needs some cleanup.  And I need better understanding (ideally with explanation in teh ChagneLog) as to why it&apos;s designed this way with teh DatbaseThread holding the transaction coordinator instead of the datbase.  Also confusing that m_database is actually a datbaseThread it seems.

Why is a securityORiginCopy needeD?
 62     return database-&gt;securityOriginCopy()-&gt;databaseIdentifier() + &quot;:&quot; + database-&gt;stringIdentifier();

In general the ChangeLog could be more detailed.

anyway, I look forward to the next round!  This seems like a good fix.  Just needs to be presented more clearly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138214</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-07 16:51:40 -0700</bug_when>
    <thetext>Yes, much more readable without the style cleanup.

51         typedef Deque&lt;RefPtr&lt;SQLTransaction&gt; &gt; TransactionsQueue;
52         typedef HashMap&lt;String, TransactionsQueue*&gt; TransactionsHashMap;
53         OwnPtr&lt;TransactionsHashMap&gt; m_pendingTransactions;

Can you use an OwnPtr&lt;TransactionsQueue&gt; in the HashMap to avoid any manual cleanup in the dtor? When the TransactionsHashMap is deleted i think it would all be properly deleted and deferenced.

Also, can TransactionHashMap be an inline data member instead of held in an OwnPtr?

91     // Remove &apos;transaction&apos; from the queue of pending transactions
92     // &apos;transaction&apos; should always be the first transaction in this queue
93     ASSERT(pendingTransactions-&gt;first().get() == transaction);
94     pendingTransactions-&gt;removeFirst();

Just checking... are there any circumstanaces where a waiting transaction can run thru its &apos;fail&apos; sequence and call releaseLock() early?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138287</commentid>
    <comment_count>12</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-07 22:34:47 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 34299 [details])
&gt; Thank you!  This is much much more reviewable.

Sorry it wasn&apos;t like that from the very beginning.

&gt; Why do we have one transaction coordinator per thread instead of per database? 
&gt; if it was per database, then we would not need the hash to hold these queues,
&gt; we could just hold them on each datbase?  Do transations span across datbases?

To answer this, I feel like I need to explain a bit how transactions work in WebCore (sorry if you already know all this). Each transaction in WebCore is a sequence of steps. To start a transaction, the main thread schedules a task on the DB thread that runs the first step. After every step, the DB thread schedules a task back on the main thread that essentially says &quot;OK, I&apos;m done with this step, tell me what to do next&quot;. Then the main thread schedules the next step, and so on, until the transaction is complete (successfully, or with an error). So it is very common that the database thread would run a few steps from one transaction, then run a few steps from another transaction, then go back to the first transaction, and so on.

Now to get to your questions. The spec requires openDatabase() to always return a new Database object. WebCore not only returns a new object, but it also returns a new SQLite connection to the database (I believe it&apos;s the right thing to do). So you can end up with multiple Database instances (and connections) in the same document that point to the same database file. Now if in your Javascript code you started two transactions on two different Database objects that point to the same physical database (physical database == DB file, in SQLite&apos;s case), then it is very probable that the database thread will execute a few steps from your first transaction and then try to run some steps from your second transaction. This would result in a deadlock as described in this bug. So it&apos;s not enough to have a transaction queue per Database object (WebCore already has that); what you really want is a way to coordinate transactions across multiple Database instances that point to the same physical DB. This rules out the idea of having a transaction coordinator per Database instance. We could still have a transaction coordinator per &quot;physical database&quot; (that&apos;s shared by all Database instances pointing to the same database). However, there&apos;s no need to have (# physical databases) transaction coordinators. One instance per database thread is enough to make sure that the DB thread does not deadlock.

&gt; I find the test case very hard to read using anonymous functions.  If I were
&gt; writing that I would have given the functions nice names, even if they were
&gt; only defined locally.
&gt; 
&gt; It seems teh select/insert tests differ only in &quot;db1&quot; vs. &quot;db2&quot;.  Probably
&gt; should be a single funtion which takes a name argument, no?
&gt; 
&gt; Likewise the openDatbasse call could be a function to make this more readable. 
&gt; In general the test has too much copy/paste code. :(

refactored it, should be better now.

&gt; Since no one else has stepped up yet, I think you&apos;re stuck with me! ;)

oh no... :)

&gt; In general this looks great.  The layout test needs some cleanup.  And I need
&gt; better understanding (ideally with explanation in teh ChagneLog) as to why it&apos;s
&gt; designed this way with teh DatbaseThread holding the transaction coordinator
&gt; instead of the datbase.

I added a sentence to ChangeLog to explain the purpose of the transaction coordinator. I&apos;m not sure if it&apos;s enough, but at the same time I&apos;m not sure if it&apos;s ok to copy-paste my long explanation there either.

&gt; Also confusing that m_database is actually a
&gt; datbaseThread it seems.

Where? I added a DatabaseThread::transactionCoordinator() call, and a Database::transactionCoordinator() call (because SQLTransaction doesn&apos;t know about DatabaseThread). So calls like m_database-&gt;transactionCoordinator() are perfectly fine: we&apos;re asking the Database object on which a transaction is running to give us the transaction coordinator associated with the database thread for this document. Is this what you were referring to?

&gt; Why is a securityORiginCopy needeD?
&gt;  62     return database-&gt;securityOriginCopy()-&gt;databaseIdentifier() + &quot;:&quot; +
&gt; database-&gt;stringIdentifier();

Not needed anymore, fixed. I thought a database thread could service Databases on more than one origin, but I was wrong.

&gt; In general the ChangeLog could be more detailed.

How detailed should I make it?

&gt; anyway, I look forward to the next round!  This seems like a good fix.  Just
&gt; needs to be presented more clearly.

Please take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138288</commentid>
    <comment_count>13</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-07 22:39:13 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; 51         typedef Deque&lt;RefPtr&lt;SQLTransaction&gt; &gt; TransactionsQueue;
&gt; 52         typedef HashMap&lt;String, TransactionsQueue*&gt; TransactionsHashMap;
&gt; 53         OwnPtr&lt;TransactionsHashMap&gt; m_pendingTransactions;
&gt; 
&gt; Can you use an OwnPtr&lt;TransactionsQueue&gt; in the HashMap to avoid any manual
&gt; cleanup in the dtor? When the TransactionsHashMap is deleted i think it would
&gt; all be properly deleted and deferenced.
&gt; 
&gt; Also, can TransactionHashMap be an inline data member instead of held in an
&gt; OwnPtr?

After a long discussion with Michael, we decided to make TransactionsHashMap an inline data member. However, we couldn&apos;t find a good way to wrap TransactionsQueues inside the hash map into a smart pointer. Any suggestions here?

&gt; 91     // Remove &apos;transaction&apos; from the queue of pending transactions
&gt; 92     // &apos;transaction&apos; should always be the first transaction in this queue
&gt; 93     ASSERT(pendingTransactions-&gt;first().get() == transaction);
&gt; 94     pendingTransactions-&gt;removeFirst();
&gt; 
&gt; Just checking... are there any circumstanaces where a waiting transaction can
&gt; run thru its &apos;fail&apos; sequence and call releaseLock() early?

Again, after some investigation with Michael, we found a case where a transaction might fail before it even acquires a lock (Database::stop() is called after scheduling the first step of a transaction on the DB thread, but before the DB thread has a chance to start the task). So we added a m_lockAcquired flag to SQLTransaction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138293</commentid>
    <comment_count>14</comment_count>
      <attachid>34363</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-07 23:29:17 -0700</bug_when>
    <thetext>Created attachment 34363
patch + test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138420</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-08 13:42:18 -0700</bug_when>
    <thetext>&gt; &gt; 51         typedef Deque&lt;RefPtr&lt;SQLTransaction&gt; &gt; TransactionsQueue;
&gt; &gt; 52         typedef HashMap&lt;String, TransactionsQueue*&gt; TransactionsHashMap;
&gt; &gt; 53         OwnPtr&lt;TransactionsHashMap&gt; m_pendingTransactions;
&gt; &gt; 
&gt; &gt; Can you use an OwnPtr&lt;TransactionsQueue&gt; in the HashMap to avoid any manual
&gt; &gt; cleanup in the dtor? When the TransactionsHashMap is deleted i think it would
&gt; &gt; all be properly deleted and deferenced.

I think the mapped type can be the collection class (no ptr indirection involved). The code that operates on the map would have to change to use iterators to access references to the map elements (instead of making copies of the elements via the get(key) method. Then there would be no cleanup code required in the dtor (less code is good). WDYT?

There are examples of HashMap&lt;key, CollectionT&gt; in the code base that you can look at for examples. DOMApplicationCache&apos;s EventListenerMap is one example.

&gt; Again, after some investigation with Michael, we found a case where a
&gt; transaction might fail before it even acquires a lock (Database::stop() is
&gt; called after scheduling the first step of a transaction on the DB thread, but
&gt; before the DB thread has a chance to start the task). So we added a
&gt; m_lockAcquired flag to SQLTransaction.

I think the addition of the flag is a nice and easy way to handle the early exit case. We could also use the flag to make some assertions about not having missed other cases provided we reset it upon calling releaseLock() and ASSERT(!m_lockAcquired) in the dtor. We could also ASSERT(m_lockAcquired) in the processing of other transaction steps to make sure we haven&apos;t missed acquiring the lock in any cases. WDYT?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138762</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-10 11:56:04 -0700</bug_when>
    <thetext>WebKit generally avoids virtual methods where possible (a little less indirection in a lot of places adds up). It doesn&apos;t look like there&apos;s a need for the methods of the new class to be virtual. (also true for the other patch you have out for review).

In looking at this again, I think there are cases where we&apos;d expect the m_lockAcquired flag to be true in SQLTransaction&apos;s dtor. If the DBThread is shutdown (via requestTermination), no further transaction steps will occur since the task queue will have been killed. So an assertion may not be valid. I don&apos;t think that presents a problem when this interface is being used to coordinate amoung dbfiles executing on the same dbthread but this may give chromium grief when we&apos;re trying to use this interface to coordiate amoungst transactions against the same dbfile system wide.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138813</commentid>
    <comment_count>17</comment_count>
      <attachid>34512</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-10 14:13:43 -0700</bug_when>
    <thetext>Created attachment 34512
same patch

Michael, I think I addressed all your comments, please take another look.

m_lockAcquired: I added ASSERTs at the beginning of every task executed on the DB thread (+ openTransactionAndPreflight, which used to be and still kind of is the real first step). I&apos;m also checking this flag in the destructor, and if it&apos;s true, I call releaseLock(). Any reason not to do it? It seems to me like this approach should work in Chromium&apos;s case too. Minor concern: in order to be able to do this in the destructor, I have to set m_lockAcquired to false everywhere I call releaseLock() (otherwise releaseLock() will be called in the destructor again, and some assertions will fail). Is it somehow possible that releaseLock() is called (and the transaction is taken out of the queue), but m_lockAcquired is not reset to false right after that? I can&apos;t think of any case that would result in this behavior.

HashMap of collections: I used the same technique that you used in your code, and cleaned up the destructor. Please double-check that I don&apos;t have &quot;refactoring typos&quot; in this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138853</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-10 16:16:37 -0700</bug_when>
    <thetext>Getting closer...

85 SQLTransaction::~SQLTransaction()
86 {
 87     if (m_lockAcquired) {
 88         m_database-&gt;transactionCoordinator()-&gt;releaseLock(this);
 89         m_lockAcquired = false;
 90     }
91 }

I&apos;m fairly sure we don&apos;t want this call in the SQLTransaction dtor. The object is refcounted and may be finally released on some thread other than the DBThread.

It seems like this case should only come into play after the DBThread is shutdown (as a side effect of the document being closed), otherwise the transaction step processing should have done the right thing by now. I wonder if there may be some refinements to make specifically for the dbthread shutdown. A test case to queue up some xactions and then navigate away from the page could shed some light on things.

This seems clear, SQLTransactionCoordinator should not start new xactions if DatabaseThread.terminationRequested() is true.

Maybe we could use another method on the interface for the thread shutdown case?

    AutodrainedPool pool;
    while (true) {
        RefPtr&lt;DatabaseTask&gt; task;
        if (!m_queue.waitForMessage(task))
            break;

        task-&gt;performTask();

        pool.cycle();
    }

    m_transactionCoordiator-&gt;shutdown();

The coordinator could take appropiate actions with any remaining items at this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138881</commentid>
    <comment_count>19</comment_count>
      <attachid>34535</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-10 19:23:56 -0700</bug_when>
    <thetext>Created attachment 34535
patch

Addressed Michael&apos;s comments. Also, Michael suggested that it might be better to make SQLTransaction::lockAcquire() schedule an immediate task on the DB thread for SQLTransaction::openTransactionAndPreflight(), instead of directly calling this method. I agreed and made this change too, by adding a bool parameter to Database::scheduleTransactionStep() that defaults to false (true = scheduleImmediateTask(), false = scheduleTask()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139218</commentid>
    <comment_count>20</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2009-08-11 20:44:12 -0700</bug_when>
    <thetext>The code LGTM. Possibly some names could be tweeked to better fit webkit conventions? In all cases, you&apos;ll need a webkit reviewer to take a peek.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139427</commentid>
    <comment_count>21</comment_count>
      <attachid>34535</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 11:04:21 -0700</bug_when>
    <thetext>Comment on attachment 34535
patch

For the future (this one being in pre-existing code), WebKit code tends to favor early returns instead of long if-blocks:
544545     if (m_document-&gt;databaseThread()) {

Yes, our style is strange, but comments count as &quot;lines&quot; for multi-line if blocks and shoudl have  { } (I used to get this confused myself):
 87     if (pendingTransactions.isEmpty())
 88         // No more pending transactions; delete dbIdentifier&apos;s queue
 89         m_pendingTransactions.remove(it);
 90     else
 91         // We have more pending transactions; start the next one
 92         pendingTransactions.first()-&gt;lockAcquired();

No argument names when they don&apos;t add clarity:
 46         void acquireLock(SQLTransaction* transaction);
 47         void releaseLock(SQLTransaction* transaction);

Why not add named functions for these:
 34                      // statement success callback
 35                      function(result) { log(dbName + &quot; read statement succeeded&quot;); },
 36 
 37                      // statement failure callback
 38                      function(tx, error) { log(dbName + &quot; read statement failed: &quot; + error.message); });

Then you dont&apos; have to declare them twice, nor do you need the extra lines of comments or spaces because the method names make it obvious what you&apos;re doing.

function successCallback(testName) {
return function(result) { log(dbName + &quot; &quot; + testName + &quot; statement succeeded&quot;); }

successCallback(&quot;write&quot;)

If you wanted, you coudl even make them more general and cover the other places you use success/error callbacks too.

I&apos;m ready to r+ this, but I think we should go one more round (since iirc you are not yet a committer).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139611</commentid>
    <comment_count>22</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-12 15:40:27 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 34535 [details])
&gt; For the future (this one being in pre-existing code), WebKit code tends to
&gt; favor early returns instead of long if-blocks:
&gt; 544545     if (m_document-&gt;databaseThread()) {

fixed.

&gt; Yes, our style is strange, but comments count as &quot;lines&quot; for multi-line if
&gt; blocks and shoudl have  { } (I used to get this confused myself):
&gt;  87     if (pendingTransactions.isEmpty())
&gt;  88         // No more pending transactions; delete dbIdentifier&apos;s queue
&gt;  89         m_pendingTransactions.remove(it);
&gt;  90     else
&gt;  91         // We have more pending transactions; start the next one
&gt;  92         pendingTransactions.first()-&gt;lockAcquired();

fixed.

&gt; No argument names when they don&apos;t add clarity:
&gt;  46         void acquireLock(SQLTransaction* transaction);
&gt;  47         void releaseLock(SQLTransaction* transaction);

removed.

&gt; Why not add named functions for these:
&gt;  34                      // statement success callback
&gt;  35                      function(result) { log(dbName + &quot; read statement
&gt; succeeded&quot;); },
&gt;  36 
&gt;  37                      // statement failure callback
&gt;  38                      function(tx, error) { log(dbName + &quot; read statement
&gt; failed: &quot; + error.message); });
&gt; 
&gt; Then you dont&apos; have to declare them twice, nor do you need the extra lines of
&gt; comments or spaces because the method names make it obvious what you&apos;re doing.
&gt; 
&gt; function successCallback(testName) {
&gt; return function(result) { log(dbName + &quot; &quot; + testName + &quot; statement
&gt; succeeded&quot;); }
&gt; 
&gt; successCallback(&quot;write&quot;)

done.

&gt; If you wanted, you coudl even make them more general and cover the other places
&gt; you use success/error callbacks too.

we could do this, but since the messages are quite different (read vs. write, statement vs. transaction, and read/write doesn&apos;t even apply in case of a transaction callback), i feel like this would only lead to more complicated and unintuitive implementations for successCallback() and errorCallback(), as well as some pretty cryptic calls to these functions.

&gt; I&apos;m ready to r+ this, but I think we should go one more round (since iirc you
&gt; are not yet a committer).

i&apos;m working my way there. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139612</commentid>
    <comment_count>23</comment_count>
      <attachid>34701</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-12 15:41:03 -0700</bug_when>
    <thetext>Created attachment 34701
patch + test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139641</commentid>
    <comment_count>24</comment_count>
      <attachid>34701</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 16:25:20 -0700</bug_when>
    <thetext>Comment on attachment 34701
patch + test case

Passing &quot;read&quot; or &quot;write&quot; instead of a bool would have made the callsites more clear, but this is OK as is.

28 function statementSuccessCallback(dbName, isReadStatement)
 29 {
 30     log(dbName + &quot; &quot; + (isReadStatement ? &quot;read&quot; : &quot;write&quot;) + &quot; statement succeeded&quot;);
 31 }
 32 
 33 function statementErrorCallback(dbName, isReadStatement, error)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139650</commentid>
    <comment_count>25</comment_count>
      <attachid>34707</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-12 16:48:09 -0700</bug_when>
    <thetext>Created attachment 34707
patch + test case

Addressed Eric&apos;s last comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139651</commentid>
    <comment_count>26</comment_count>
      <attachid>34701</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 16:48:17 -0700</bug_when>
    <thetext>Comment on attachment 34701
patch + test case

Rejecting patch 34701 from commit-queue.  This patch will require manual commit.

Patch https://bugs.webkit.org/attachment.cgi?id=34701 from bug 27966 failed to download and apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139654</commentid>
    <comment_count>27</comment_count>
      <attachid>34707</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 16:51:24 -0700</bug_when>
    <thetext>Comment on attachment 34707
patch + test case

LGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139655</commentid>
    <comment_count>28</comment_count>
      <attachid>34707</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 16:51:38 -0700</bug_when>
    <thetext>Comment on attachment 34707
patch + test case

Rejecting patch 34707 from commit-queue.  This patch will require manual commit.

Patch https://bugs.webkit.org/attachment.cgi?id=34707 from bug 27966 failed to download and apply.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139656</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 16:51:54 -0700</bug_when>
    <thetext>Hunk #5 FAILED at 19315.
1 out of 5 hunks FAILED -- saving rejects to file WebCore/WebCore.xcodeproj/project.pbxproj.rej
patch -p0 &quot;WebCore/WebCore.xcodeproj/project.pbxproj&quot; returned 1.  Pass --force to ignore patch failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139663</commentid>
    <comment_count>30</comment_count>
      <attachid>34708</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2009-08-12 17:03:54 -0700</bug_when>
    <thetext>Created attachment 34708
patch + test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139670</commentid>
    <comment_count>31</comment_count>
      <attachid>34708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 17:16:57 -0700</bug_when>
    <thetext>Comment on attachment 34708
patch + test case

We&apos;ll try another round. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139680</commentid>
    <comment_count>32</comment_count>
      <attachid>34708</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 17:51:01 -0700</bug_when>
    <thetext>Comment on attachment 34708
patch + test case

Rejecting patch 34708 from commit-queue.  This patch will require manual commit.

Failed to run &quot;[&apos;git&apos;, &apos;svn&apos;, &apos;dcommit&apos;]&quot;  exit_code: 1  cwd: None</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139681</commentid>
    <comment_count>33</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 17:51:39 -0700</bug_when>
    <thetext>    The following files contain tab characters:

        trunk/WebCore/ChangeLog

    Please use spaces instead to indent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139682</commentid>
    <comment_count>34</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 17:53:01 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	A	LayoutTests/storage/multiple-transactions-on-different-handles-expected.txt
	A	LayoutTests/storage/multiple-transactions-on-different-handles.html
	M	WebCore/ChangeLog
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	WebCore/storage/Database.cpp
	M	WebCore/storage/Database.h
	M	WebCore/storage/DatabaseThread.cpp
	M	WebCore/storage/DatabaseThread.h
	M	WebCore/storage/SQLTransaction.cpp
	M	WebCore/storage/SQLTransaction.h
	A	WebCore/storage/SQLTransactionCoordinator.cpp
	A	WebCore/storage/SQLTransactionCoordinator.h
Committed r47170
	M	WebCore/storage/DatabaseThread.h
	M	WebCore/storage/SQLTransaction.cpp
	M	WebCore/storage/Database.h
	A	WebCore/storage/SQLTransactionCoordinator.cpp
	M	WebCore/storage/DatabaseThread.cpp
	M	WebCore/storage/Database.cpp
	M	WebCore/storage/SQLTransaction.h
	A	WebCore/storage/SQLTransactionCoordinator.h
	M	WebCore/ChangeLog
	M	WebCore/WebCore.vcproj/WebCore.vcproj
	M	WebCore/GNUmakefile.am
	M	WebCore/WebCore.gypi
	M	WebCore/WebCore.xcodeproj/project.pbxproj
	M	LayoutTests/ChangeLog
	A	LayoutTests/storage/multiple-transactions-on-different-handles-expected.txt
	A	LayoutTests/storage/multiple-transactions-on-different-handles.html
r47170 = 02db11b4350373f83f85041c33de18fb7410ec8b (trunk)
No changes between current HEAD and refs/remotes/trunk
Resetting to the latest refs/remotes/trunk
http://trac.webkit.org/changeset/47170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139683</commentid>
    <comment_count>35</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 17:53:15 -0700</bug_when>
    <thetext>Fixed and landed manually.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>34075</attachid>
            <date>2009-08-04 11:05:17 -0700</date>
            <delta_ts>2009-08-06 16:03:19 -0700</delta_ts>
            <desc>test case that demonstrates the problem</desc>
            <filename>db_test.html</filename>
            <type>text/html</type>
            <size>1594</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5UZXN0aW5nIDIgREIgb2JqZWN0cyBmb3IgdGhlIHNhbWUg
ZGF0YWJhc2U8L3RpdGxlPg0KPHNjcmlwdD4NCmZ1bmN0aW9uIGNyZWF0ZSgpIHsNCiAgdHJ5IHsN
CiAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIlRlc3REQiIsICIxLjAiLCAiVGVzdCBEQiIsIDEw
MDAwMCk7DQogICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsNCiAgICAgICAgdHguZXhl
Y3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIFRlc3QgKEZvbyBpbnQpOyIsIFtdLA0KICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkge30sIGZ1bmN0aW9uKHR4LCBlcnJvcikge30pOw0K
ICAgICAgICB9KTsNCiAgfSBjYXRjaChlcnIpIHt9DQp9DQoNCmZ1bmN0aW9uIHRlc3QoKSB7DQog
IHZhciBkYjEsIGRiMjsNCiAgdHJ5IHsNCiAgICBkYjEgPSBvcGVuRGF0YWJhc2UoIlRlc3REQiIs
ICIxLjAiLCAiVGVzdCBEQiIsIDEwMDAwMCk7DQogICAgZGIyID0gb3BlbkRhdGFiYXNlKCJUZXN0
REIiLCAiMS4wIiwgIlRlc3QgREIiLCAxMDAwMDApOw0KDQogICAgaWYgKGRiMSA9PSBkYjIpIHsN
CiAgICAgIGFsZXJ0KCJkYjEgPT0gZGIyIik7DQogICAgfSBlbHNlIHsNCiAgICAgIGRiMS50cmFu
c2FjdGlvbihmdW5jdGlvbih0eCkgew0KICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIFRlc3Q7IiwgW10sDQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
bihyZXN1bHQpIHt9LA0KICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9y
KSB7IGFsZXJ0KGVycm9yLm1lc3NhZ2UpOyB9KTsNCiAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJ
TlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoMSk7IiwgW10sDQogICAgICAgICAgICAgICAgICAgICAg
ICBmdW5jdGlvbihyZXN1bHQpIHsgYWxlcnQoIjEiKTsgfSwNCiAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBhbGVydChlcnJvci5tZXNzYWdlKTsgfSk7DQogICAg
ICAgICAgfSk7DQogICAgICBkYjIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsNCiAgICAgICAg
ICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsIFtdLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7fSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBhbGVydChlcnJvci5tZXNzYWdlKTsgfSk7DQog
ICAgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKDIpOyIsIFtd
LA0KICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7IGFsZXJ0KCIyIik7
IH0sDQogICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgYWxlcnQo
ZXJyb3IubWVzc2FnZSk7IH0pOw0KICAgICAgICAgIH0pOw0KICAgIH0NCiAgfSBjYXRjaChlcnIp
IHt9DQp9DQo8L3NjcmlwdD4NCjwvaGVhZD4NCjxib2R5IG9ubG9hZD0iY3JlYXRlKCkiPg0KPGJ1
dHRvbiBvbmNsaWNrPSJ0ZXN0KCkiPlRlc3Q8L2J1dHRvbj4NCjwvYm9keT4NCjwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34233</attachid>
            <date>2009-08-06 16:03:19 -0700</date>
            <delta_ts>2009-08-06 18:19:02 -0700</delta_ts>
            <desc>transaction coordinator + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>45384</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDktMDgtMDYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXggYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyBydW4gb24gdHdvIGRp
ZmZlcmVudAorICAgICAgICBkYXRhYmFzZSBoYW5kbGVzIHRvIHRoZSBzYW1lIERCLgorCisgICAg
ICAgIFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcyBpbiBhbGwgZmlsZXMgaW4gdGhpcyBwYXRj
aC4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy5odG1sCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3OTk2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRo
cmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OmRlYnVnU3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNoZWNr
QW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rp
b246OnBlcmZvcm1OZXh0U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
cGVyZm9ybVBlbmRpbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6YXF1aXJlTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0Fx
dWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJPcGVuVHJh
bnNhY3Rpb25BbmRQcmVmbGlnaHRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uOjpnZXROZXh0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6On5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldERhdGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjphcXVpcmVMb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDogQWRkZWQuCisKIDIwMDktMDgtMDYgIEZ1bWl0b3No
aSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY4NTQpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA2LDYgKzIxMDYsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAgXAogCVdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAogCiBl
bHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkocmV2aXNpb24gNDY4NTQpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMjk2MCw2ICsyOTYwLDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCcsCisgICAg
ICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAorICAgICAgICAg
ICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5oJywKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDY4NTQpCisr
KyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDU0MCw2ICszMDU0MCwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0Njg1NCkKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODM4LDYgKzM4MzgsOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9i
akNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0gKi87IHNl
dHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMi
OyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjEw
RkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJQjVBNjg0MjQw
RkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5IC8q
IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3
OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsKIAkJQkMwMEYw
MDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEYw
MDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpAQCAtODcwNSw2
ICs4NzA3LDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0
cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZU9i
akNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIxMEZGQUJF
OTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJFQUEwMEQyNDY4
OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZpbGVTeXN0ZW0u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1
NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3ODgsNiArOTc5Miw4IEBACiAJCTFBRTgyRUM5MENBQUUx
NzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0MDA3NjNDOTkg
LyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENENjVGMDQwMDc2
M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVFMENBQzU2NTcw
MDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzEyMiw2ICsxNzEyOCw3IEBACiAJCQkJ
NDFEMTY4RUUxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDFEMTY5MDYxMDIzOEI2NjAwOUJDODI3IC8qIEpTU2hhcmVkV29ya2VyQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2N0VCRjYxMDI5NjJCQTAwM0QyNTJBIC8qIERl
ZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQlCNUMxMTIz
QzEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xOTE3Myw2ICsxOTE4MCw3IEBACiAJCQkJNDFEMTY4RjAxMDIyNkVDNDAwOUJD
ODI3IC8qIEpTU2hhcmVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MUQxNjkwNTEwMjM4QjY2MDA5QkM4MjcgLyogSlNTaGFyZWRXb3JrZXJDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxNjdFQkY1MTAyOTYyQkEwMDNEMjUyQSAvKiBEZWZhdWx0U2hh
cmVkV29ya2VyUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNUMxMTIzQjEwMkI2
QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNDY4NTQpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgog
I2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2VuZGlmCiAKQEAgLTU4Myw2
ICs1ODQsMTEgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogICAg
IHJldHVybiB0YWJsZU5hbWVzOwogfQogCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRh
YmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKK30KKwog
U3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICBpZiAobV9kZWxldGVkKQpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDEwIEBAIGNsYXNzIERhdGFiYXNl
VGhyZWFkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTUUxSZXN1bHRTZXQ7CiBjbGFzcyBTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNsYXNzIFNRTFZhbHVlOwotICAgIAor
CiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBU
aHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlPiB7CkBAIC03MiwxMiArNzMsMTIgQEAgcHVibGljOgog
Ly8gRGlyZWN0IHN1cHBvcnQgZm9yIHRoZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCAKKyAgICB2b2lkIGNo
YW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1Zl
cnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgCisKIC8vIElu
dGVybmFsIGVuZ2luZSBzdXBwb3J0CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCk7CiAKQEAgLTkwLDcgKzkxLDcgQEAgcHVibGljOgogICAgIERvY3VtZW50
KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KICAgICBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbkNvcHkoKSBjb25zdDsKICAgICBT
dHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCBnZXRWZXJz
aW9uRnJvbURhdGFiYXNlKFN0cmluZyYpOwogICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5n
Jik7CkBAIC0xMDEsNyArMTAyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbG9zZSgpOwogICAg
IGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KLSAgICAKKwogICAgIHZv
aWQgc3RvcCgpOwogICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHBlZDsg
fQogCkBAIC0xMTYsNiArMTE3LDggQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFN0cmluZz4gcGVy
Zm9ybUdldFRhYmxlTmFtZXMoKTsKIAorICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZShE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBl
Y3RlZFZlcnNpb24pOwogCkBAIC0xMjQsNyArMTI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNj
aGVkdWxlVHJhbnNhY3Rpb24oKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFj
ayhTUUxUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsKLSAgICAKKwogICAgIE1lc3NhZ2VRdWV1ZTxSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOwogICAgIE11dGV4IG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzTXV0ZXg7CiAgICAgYm9vbCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
czsKQEAgLTEzOSw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpbGVuYW1lOwog
CiAgICAgYm9vbCBtX2RlbGV0ZWQ7Ci0gICAgCisKICAgICBib29sIG1fc3RvcHBlZDsKIAogICAg
IGJvb2wgbV9vcGVuZWQ7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlz
aW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDEzIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERhdGFi
YXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgpCiAgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBt
X3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IobmV3IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSkK
IHsKICAgICBtX3NlbGZSZWYgPSB0aGlzOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFk
LmgJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC00
Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
RGF0YWJhc2VUYXNrOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOwogCiBjbGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
PERhdGFiYXNlVGhyZWFkPiB7CiBwdWJsaWM6CkBAIC02MCw2ICs2Miw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CiAgICAgVGhyZWFkSWRlbnRp
ZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KIAorICAgIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3Ry
YW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZVRo
cmVhZCgpOwogCkBAIC03NSw2ICs3OSw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBzZXQga2Vl
cHMgdHJhY2sgb2YgdGhlIG9wZW4gZGF0YWJhc2VzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgb24gdGhp
cyB0aHJlYWQuCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiBEYXRhYmFz
ZVNldDsKICAgICBEYXRhYmFzZVNldCBtX29wZW5EYXRhYmFzZVNldDsKKworICAgIE93blB0cjxT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjQgKzUwLDI1IEBACiAjaW5jbHVkZSAiU1FMU3RhdGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKLS8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtu
b3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBh
IHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1pdC4gIAorLy8gVGhlcmUncyBubyB3YXkgb2Yg
a25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSByZXF1aXJlZCB3aGVu
IGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgogLy8gRm9yIG5vdywgd2UnbGwgYXJi
aXRyYXJpbHkgY2hvb3NlIGN1cnJlbnRRdW90YSArIDFtYi4KIC8vIEluIHRoZSBmdXR1cmUgd2Ug
ZGVjaWRlIHRvIHRyYWNrIGlmIGEgc2l6ZSBpbmNyZWFzZSB3YXNuJ3QgZW5vdWdoLCBhbmQgYXNr
IGZvciBsYXJnZXItYW5kLWxhcmdlciBpbmNyZWFzZXMgdW50aWwgaXRzIGVub3VnaC4KIHN0YXRp
YyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXNlID0gMTA0ODU3NjsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlv
bjo6Y3JlYXRlKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
PiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FM
VHJhbnNhY3Rpb246OmNyZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRiLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
c3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyKSk7CiB9CiAKLVNRTFRyYW5zYWN0aW9uOjpTUUxUcmFu
c2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4g
Y2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCAKK1NRTFRy
YW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQotICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNh
Y3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICA6IG1fbmV4dFN0ZXAoJlNR
TFRyYW5zYWN0aW9uOjphcXVpcmVMb2NrKQogICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxz
ZSkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikKQEAgLTk1
LDcgKzk2LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTChjb25zdCBTdAogICAg
IFBhZ2UqIHBhZ2UgPSBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlIHx8IHBhZ2UtPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKICAgICAg
ICAgcmVhZE9ubHlNb2RlID0gdHJ1ZTsKLSAgICAKKwogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+
IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJndW1lbnRz
LCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcmVhZE9ubHlNb2RlKTsKIAogICAgIGlmIChtX2Rh
dGFiYXNlLT5kZWxldGVkKCkpCkBAIC0xMTYsNyArMTE3LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6ZW5xdWV1ZVN0YXRlbWVudChQYQogI2lmbmRlZiBOREVCVUcKIGNvbnN0IGNoYXIqIFNRTFRy
YW5zYWN0aW9uOjpkZWJ1Z1N0ZXBOYW1lKFNRTFRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvblN0ZXBN
ZXRob2Qgc3RlcCkKIHsKLSAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFu
c2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmFx
dWlyZUxvY2spCisgICAgICAgIHJldHVybiAiYXF1aXJlTG9jayI7CisgICAgZWxzZSBpZiAoc3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKICAgICAg
ICAgcmV0dXJuICJvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQiOwogICAgIGVsc2UgaWYgKHN0
ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKQogICAgICAgICByZXR1cm4gInJ1
blN0YXRlbWVudHMiOwpAQCAtMTI0LDYgKzEyNyw4IEBAIGNvbnN0IGNoYXIqIFNRTFRyYW5zYWN0
aW9uOjpkZWJ1Z1N0ZXBOYW0KICAgICAgICAgcmV0dXJuICJwb3N0ZmxpZ2h0QW5kQ29tbWl0IjsK
ICAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrKQogICAgICAgICByZXR1cm4gImNsZWFudXBBZnRlclRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
OmRlbGl2ZXJPcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHRDYWxsYmFjaykKKyAgICAgICAgcmV0
dXJuICJkZWxpdmVyT3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0Q2FsbGJhY2siOwogICAgIGVs
c2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFj
aykKICAgICAgICAgcmV0dXJuICJkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayI7CiAgICAgZWxz
ZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2spCkBAIC0xNDUsMTMgKzE1MCwxMyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjaGVja0Fu
ZEhhbmRsZUNsb3NlCiB7CiAgICAgaWYgKCFtX2RhdGFiYXNlLT5zdG9wcGVkKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICAgICAgCisKICAgICAvLyBJZiB0aGUgZGF0YWJhc2Ugd2FzIHN0b3BwZWQs
IGRvbid0IGRvIGFueXRoaW5nIGFuZCBjYW5jZWwgcXVldWVkIHdvcmsKICAgICBMT0coU3RvcmFn
ZUFQSSwgIkRhdGFiYXNlIHdhcyBzdG9wcGVkIC0gY2FuY2VsbGluZyB3b3JrIGZvciB0aGlzIHRy
YW5zYWN0aW9uIik7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fc3RhdGVtZW50TXV0ZXgpOwog
ICAgIG1fc3RhdGVtZW50UXVldWUuY2xlYXIoKTsKICAgICBtX25leHRTdGVwID0gMDsKLSAgICAK
KwogICAgIC8vIFRoZSBjdXJyZW50IFNRTGl0ZSB0cmFuc2FjdGlvbiBzaG91bGQgYmUgc3RvcHBl
ZCwgYXMgd2VsbAogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uKSB7CiAgICAgICAgIG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPnN0b3AoKTsKQEAgLTE2NCwxNCArMTY5LDE1IEBAIGJvb2wgU1FMVHJh
bnNhY3Rpb246OnBlcmZvcm1OZXh0U3RlcCgpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJTdGVw
ICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKIAotICAgIEFTU0VSVChtX25leHRT
dGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IHx8Cisg
ICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphcXVpcmVMb2NrIHx8Cisg
ICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25B
bmRQcmVmbGlnaHQgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
OnJ1blN0YXRlbWVudHMgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rp
b246OnBvc3RmbGlnaHRBbmRDb21taXQgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FM
VHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayB8fAogICAgICAgICAgICBt
X25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrKTsKLSAgICAKKwogICAgIGNoZWNrQW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UoKTsK
LSAgICAKKwogICAgIGlmIChtX25leHRTdGVwKQogICAgICAgICAodGhpcy0+Km1fbmV4dFN0ZXAp
KCk7CiAKQEAgLTE4MywxOCArMTg5LDM4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1Q
ZW5kaW5nQ2FsbGIKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIkNhbGxiYWNrICVzXG4iLCBkZWJ1
Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKIAotICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgfHwKKyAgICBBU1NFUlQobV9u
ZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJPcGVuVHJhbnNhY3Rpb25BbmRQcmVm
bGlnaHRDYWxsYmFjayB8fAorICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2sgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9
PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgfHwKICAg
ICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRD
YWxsYmFjayB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVs
aXZlclF1b3RhSW5jcmVhc2VDYWxsYmFjayB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZT
UUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayk7CiAKICAgICBjaGVja0FuZEhh
bmRsZUNsb3NlZERhdGFiYXNlKCk7Ci0gICAgCisKICAgICBpZiAobV9uZXh0U3RlcCkKICAgICAg
ICAgKHRoaXMtPiptX25leHRTdGVwKSgpOwogfQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphcXVp
cmVMb2NrKCkKK3sKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmFx
dWlyZUxvY2sodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmxvY2tBcXVpcmVkKCkK
K3sKKyAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyT3BlblRyYW5zYWN0
aW9uQW5kUHJlZmxpZ2h0Q2FsbGJhY2s7CisgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5n
IGRlbGl2ZXJPcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgZm9yIHRyYW5zYWN0aW9uICVwXG4i
LCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhp
cyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJPcGVuVHJhbnNhY3Rpb25BbmRQ
cmVmbGlnaHRDYWxsYmFjaygpCit7CisgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6
b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0OworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1
bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0
aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlzKTsKK30K
Kwogdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKIHsK
ICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblBy
b2dyZXNzKCkpOwpAQCAtMjEwLDE0ICsyMzYsMTQgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3Bl
blRyYW5zYWN0aW9uQW5kUAogCiAgICAgLy8gU2V0IHRoZSBtYXhpbXVtIHVzYWdlIGZvciB0aGlz
IHRyYW5zYWN0aW9uCiAgICAgbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS5zZXRNYXhpbXVt
U2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKLSAgICAKKwogICAgIEFTU0VSVCghbV9z
cWxpdGVUcmFuc2FjdGlvbik7CiAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5zZXQobmV3IFNRTGl0
ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UpKTsKLSAgICAKKwogICAg
IG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CiAgICAgbV9zcWxp
dGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKLSAgICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9y
aXplci0+ZW5hYmxlKCk7ICAgIAotICAgIAorICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRo
b3JpemVyLT5lbmFibGUoKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXBzIDErMiAtIE9wZW4g
YSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0YWJhc2UsIGp1bXBpbmcgdG8gdGhlIGVycm9yIGNhbGxi
YWNrIGlmIHRoYXQgZmFpbHMKICAgICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jl
c3MoKSkgewogICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpOwpAQCAtMjI2LDcgKzI1Miw3IEBAIHZvaWQgU1FMVHJhbnNh
Y3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFAKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJv
cihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBUcmFuc2Fj
dGlvbiBTdGVwcyAzIC0gUGVmb3JtIHByZWZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJy
b3IgY2FsbGJhY2sgaWYgdGhleSBmYWlsCiAgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVy
LT5wZXJmb3JtUHJlZmxpZ2h0KHRoaXMpKSB7CiAgICAgICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+
bV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CkBAIC0yMzgsNyArMjY0
LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUAogICAgICAgICBo
YW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNCAtIEludm9rZSB0aGUgdHJhbnNhY3Rpb24g
Y2FsbGJhY2sgd2l0aCB0aGUgbmV3IFNRTFRyYW5zYWN0aW9uIG9iamVjdAogICAgIG1fbmV4dFN0
ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrOwogICAgIExP
RyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayBmb3Ig
dHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwpAQCAtMjgwLDcgKzMwNiw3IEBAIHZvaWQgU1FMVHJh
bnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQogICAgICAgICAgICAgbV9zaG91bGRSZXRyeUN1cnJl
bnRTdGF0ZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIEZJWE1FIC0gQW5vdGhlciBwbGFj
ZSB0aGF0IG5lZWRzIGZpeGluZyB1cCBhZnRlciA8cmRhcjovL3Byb2JsZW0vNTYyODQ2OD4gaXMg
YWRkcmVzc2VkLgogICAgICAgICAgICAgLy8gU2VlIDo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxp
Z2h0KCkgZm9yIGRpc2N1c3Npb24KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBSZXNl
dCB0aGUgbWF4aW11bSBzaXplIGhlcmUsIGFzIGl0IHdhcyBpbmNyZWFzZWQgdG8gYWxsb3cgdXMg
dG8gcmV0cnkgdGhpcyBzdGF0ZW1lbnQKICAgICAgICAgICAgIG1fZGF0YWJhc2UtPm1fc3FsaXRl
RGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11bVNpemUoKSk7CiAgICAg
ICAgIH0gZWxzZSB7CkBAIC0yOTAsMTQgKzMxNiwxNCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpy
dW5TdGF0ZW1lbnRzKCkKICAgICAgICAgICAgICAgICBoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJy
b3IoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IAorCiAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGFkdmFuY2UgdG8gdGhlIG5leHQgc3RhdGVt
ZW50CiAgICAgICAgICAgICBnZXROZXh0U3RhdGVtZW50KCk7CiAgICAgICAgIH0KICAgICB9IHdo
aWxlIChydW5DdXJyZW50U3RhdGVtZW50KCkpOwotICAgIAorCiAgICAgLy8gSWYgcnVuQ3VycmVu
dFN0YXRlbWVudCgpIHJldHVybmVkIGZhbHNlLCB0aGF0IG1lYW5zIGVpdGhlciB0aGVyZSB3YXMg
bm8gY3VycmVudCBzdGF0ZW1lbnQgdG8gcnVuLAotICAgIC8vIG9yIHRoZSBjdXJyZW50IHN0YXRl
bWVudCByZXF1aXJlcyBhIGNhbGxiYWNrIHRvIGNvbXBsZXRlLiAgSW4gdGhlIGxhdGVyIGNhc2Us
IGl0IGFsc28gc2NoZWR1bGVkIAorICAgIC8vIG9yIHRoZSBjdXJyZW50IHN0YXRlbWVudCByZXF1
aXJlcyBhIGNhbGxiYWNrIHRvIGNvbXBsZXRlLiAgSW4gdGhlIGxhdGVyIGNhc2UsIGl0IGFsc28g
c2NoZWR1bGVkCiAgICAgLy8gdGhlIGNhbGxiYWNrIG9yIHBlcmZvcm1lZCBhbnkgb3RoZXIgYWRk
aXRpb25hbCB3b3JrIHNvIHdlIGNhbiByZXR1cm4KICAgICBpZiAoIW1fY3VycmVudFN0YXRlbWVu
dCkKICAgICAgICAgcG9zdGZsaWdodEFuZENvbW1pdCgpOwpAQCAtMzA2LDcgKzMzMiw3IEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQogdm9pZCBTUUxUcmFuc2FjdGlvbjo6
Z2V0TmV4dFN0YXRlbWVudCgpCiB7CiAgICAgbV9jdXJyZW50U3RhdGVtZW50ID0gMDsKLSAgICAK
KwogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKICAgICBpZiAoIW1f
c3RhdGVtZW50UXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fY3VycmVudFN0YXRlbWVudCA9
IG1fc3RhdGVtZW50UXVldWUuZmlyc3QoKTsKQEAgLTMxOCw5ICszNDQsOSBAQCBib29sIFNRTFRy
YW5zYWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50CiB7CiAgICAgaWYgKCFtX2N1cnJlbnRTdGF0
ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICBtX2RhdGFiYXNl
LT5tX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKLSAgICAKKwogICAgIGlmIChtX2N1cnJl
bnRTdGF0ZW1lbnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsKICAgICAgICAgaWYgKG1f
ZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9uQ2hhbmdlZERhdGFiYXNl
KCkpIHsKICAgICAgICAgICAgIC8vIEZsYWcgdGhpcyB0cmFuc2FjdGlvbiBhcyBoYXZpbmcgY2hh
bmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVyIGRlbGVnYXRlIG5vdGlmaWNhdGlvbgpAQCAtMzI4
LDEwICszNTQsMTAgQEAgYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3VycmVudFN0YXRlbWVudAog
ICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGZpbGUg
Zm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCiAgICAgICAgICAgICBPcmlnaW5RdW90YU1hbmFn
ZXImIG1hbmFnZXIoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkub3JpZ2luUXVvdGFNYW5hZ2Vy
KCkpOwogICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdlcj4gbG9ja2VyKG1hbmFn
ZXIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1hbmFnZXIubWFya0RhdGFiYXNlKG1f
ZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICBpZiAo
bV9jdXJyZW50U3RhdGVtZW50LT5oYXNTdGF0ZW1lbnRDYWxsYmFjaygpKSB7CiAgICAgICAgICAg
ICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2s7
CiAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclN0YXRlbWVu
dENhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CkBAIC0zNDAsMTYgKzM2Niwx
NiBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50CiAgICAgICAgIH0K
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAgaWYgKG1fY3VycmVudFN0
YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkgewogICAgICAgICBtX25l
eHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzZUNhbGxiYWNrOwog
ICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclF1b3RhSW5jcmVhc2VD
YWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwogICAgICAgICBtX2RhdGFiYXNl
LT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0gICAgCisKICAgICBoYW5kbGVDdXJyZW50U3RhdGVtZW50RXJyb3IoKTsKLSAg
ICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMzcyLDcgKzM5OCw3IEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb246OmhhbmRsZUN1cnJlbnRTdGF0ZW0KIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVu
dCk7Ci0gICAgCisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDYuNiBhbmQgNi4zKGVycm9yKSAt
IElmIHRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgd2VudCB3cm9uZywganVtcCB0byB0aGUgdHJhbnNh
Y3Rpb24gZXJyb3IgY2FsbGJhY2sKICAgICAvLyBPdGhlcndpc2UsIGNvbnRpbnVlIHRvIGxvb3Ag
dGhyb3VnaCB0aGUgc3RhdGVtZW50IHF1ZXVlCiAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRy
dWU7CkBAIC0zOTAsMjcgKzQxNiwyNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVv
dGFJbmNyZWFzCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVudCk7CiAgICAgQVNTRVJU
KCFtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCk7Ci0gICAgCisKICAgICBQYWdlKiBwYWdl
ID0gbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgIEFTU0VSVChwYWdlKTsKLSAg
ICAKKwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0gbV9kYXRhYmFzZS0+c2Vj
dXJpdHlPcmlnaW5Db3B5KCk7Ci0gICAgCisKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgY3VycmVu
dFF1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFGb3JPcmlnaW4ob3JpZ2lu
LmdldCgpKTsKICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmV4Y2VlZGVkRGF0YWJhc2VR
dW90YShtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5mcmFtZSgpLCBtX2RhdGFiYXNlLT5zdHJpbmdJ
ZGVudGlmaWVyKCkpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdRdW90YSA9IERhdGFiYXNl
VHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKG9yaWdpbi5nZXQoKSk7Ci0gICAgCisK
ICAgICAvLyBJZiB0aGUgbmV3IHF1b3RhIGVuZGVkIHVwIGJlaW5nIGxhcmdlciB0aGFuIHRoZSBv
bGQgcXVvdGEsIHdlIHdpbGwgcmV0cnkgdGhlIHN0YXRlbWVudC4KICAgICBpZiAobmV3UXVvdGEg
PiBjdXJyZW50UXVvdGEpCiAgICAgICAgIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50ID0g
dHJ1ZTsKLSAgICAgICAgCisKICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpydW5T
dGF0ZW1lbnRzOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBydW5TdGF0ZW1lbnRz
IGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CiAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVU
cmFuc2FjdGlvblN0ZXAodGhpcyk7CiB9CiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGln
aHRBbmRDb21taXQoKQoteyAgICAKK3sKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDcgLSBQZWZv
cm0gcG9zdGZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhl
eSBmYWlsCiAgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUG9zdGZsaWdo
dCh0aGlzKSkgewogICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVy
cm9yKCk7CkBAIC00MTksMTAgKzQ0NSwxMCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0Zmxp
Z2h0QW5kQ29tbWl0CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgLy8gVHJhbnNhY3RvbiBTdGVwIDgrOSAt
IENvbW1pdCB0aGUgdHJhbnNhY3Rpb24sIGp1bXBpbmcgdG8gdGhlIGVycm9yIGNhbGxiYWNrIGlm
IHRoYXQgZmFpbHMKICAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2FjdGlvbik7Ci0gICAgCisKICAg
ICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwogICAgIG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwogICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRo
b3JpemVyLT5lbmFibGUoKTsKQEAgLTQzMywyMSArNDU5LDIxIEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OnBvc3RmbGlnaHRBbmRDb21taXQKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBUaGUgY29tbWl0
IHdhcyBzdWNjZXNzZnVsLCBub3RpZnkgdGhlIGRlbGVnYXRlcyBpZiB0aGUgdHJhbnNhY3Rpb24g
bW9kaWZpZWQgdGhpcyBkYXRhYmFzZQogICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCiAgICAg
ICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNjaGVkdWxlTm90aWZ5RGF0YWJhc2VDaGFu
Z2VkKG1fZGF0YWJhc2UtPm1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIG1fZGF0YWJhc2UtPm1fbmFt
ZSk7Ci0gICAgCisKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tzLCB0
byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIG1fZXJy
b3JDYWxsYmFjayA9IDA7Ci0gICAgCisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVs
aXZlciBzdWNjZXNzIGNhbGxiYWNrLCBpZiB0aGVyZSBpcyBvbmUKICAgICBpZiAobV9zdWNjZXNz
Q2FsbGJhY2spIHsKICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clN1Y2Nlc3NDYWxsYmFjazsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRl
bGl2ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKICAgICAg
ICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwotICAgIH0g
ZWxzZSAKKyAgICB9IGVsc2UKICAgICAgICAgY2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrKCk7
CiB9CiAKQEAgLTQ1Niw3ICs0ODIsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3Vj
Y2Vzc0NhbGxiCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBj
YWxsYmFjawogICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7CiAgICAgbV9zdWNjZXNzQ2Fs
bGJhY2stPmhhbmRsZUV2ZW50KCk7Ci0gICAgCisKICAgICAvLyBSZWxlYXNlIHRoZSBsYXN0IGNh
bGxiYWNrIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZQogICAgIG1fc3VjY2Vzc0NhbGxiYWNrID0g
MDsKIApAQCAtNDc0LDYgKzUwMCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clN1Y2Nlc3MKICAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBsZXRl
XG4iLCB0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIG1fbmV4dFN0ZXAgPSAwOworCisgICAgLy8gUmVs
ZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKIH0KIAogdm9pZCBTUUxUcmFuc2Fj
dGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGluQ2FsbGJhY2spCkBAIC00ODgsNyAr
NTE3LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcgogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAvLyBObyBlcnJvciBjYWxs
YmFjaywgc28gZmFzdC1mb3J3YXJkIHRvOgogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBS
b2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCiAgICAgaWYgKGluQ2FsbGJhY2spIHsKQEAgLTUwMyw3
ICs1MzIsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVyCiB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCkKIHsKICAg
ICBBU1NFUlQobV90cmFuc2FjdGlvbkVycm9yKTsKLSAgICAKKwogICAgIC8vIFRyYW5zYWN0aW9u
IFN0ZXAgMTIgLSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0
CiAgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgogICAg
IGlmIChtX2Vycm9yQ2FsbGJhY2spCkBAIC01MjAsMTggKzU0OSwxOCBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24p
IHsKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2Fj
dGlvbi4KICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJhY2soKTsKLSAgICAgICAg
CisKICAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0ZURhdGFiYXNlLnRyYW5zYWN0
aW9uSW5Qcm9ncmVzcygpKTsKICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwog
ICAgIH0KICAgICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7Ci0g
ICAgCisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gQW55IHN0aWxsLXBlbmRpbmcgc3Rh
dGVtZW50cyBpbiB0aGUgdHJhbnNhY3Rpb24gYXJlIGRpc2NhcmRlZC4KICAgICB7CiAgICAgICAg
IE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKICAgICAgICAgbV9zdGF0ZW1l
bnRRdWV1ZS5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRyYW5zYWN0aW9uIGlzIGNv
bXBsZXRlISAgVGhlcmUgaXMgbm8gbmV4dCBzdGVwCiAgICAgTE9HKFN0b3JhZ2VBUEksICJUcmFu
c2FjdGlvbiAlcCBpcyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yXG4iLCB0aGlzKTsKICAgICBBU1NF
UlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkp
OwpAQCAtNTQwLDYgKzU2OSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRy
YW5zYWMKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVu
Y2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7
CisKKyAgICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCisgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJ
KHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNRTFRy
YW5zYWN0aW9uV3JhcHBlcigpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUHJlZmxpZ2h0
KFNRTFRyYW5zYWN0aW9uKikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwZXJmb3JtUG9zdGZsaWdo
dChTUUxUcmFuc2FjdGlvbiopID0gMDsKLSAgICAKKwogICAgIHZpcnR1YWwgU1FMRXJyb3IqIHNx
bEVycm9yKCkgY29uc3QgPSAwOwogfTsKIApAQCAtNjksMTMgKzY5LDE0IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRlKERhdGFiYXNlKiwgUGFz
c1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlv
bkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25XcmFwcGVyPik7CiAKICAgICB+U1FMVHJhbnNhY3Rpb24oKTsKLSAgICAKLSAg
ICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgCisKKyAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3Ry
aW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywKICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJh
Y2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gY2FsbGJhY2tFcnJvciwg
RXhjZXB0aW9uQ29kZSYgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisKKyAgICB2b2lkIGxvY2tBcXVpcmVkKCk7CiAgICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAo
KTsKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsKLSAgICAKKwogICAgIERhdGFi
YXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7IH0KIAogcHJpdmF0ZToK
QEAgLTgzLDExICs4NCwxMyBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRlZiB2b2lkIChTUUxUcmFu
c2FjdGlvbjo6KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCkoKTsKICAgICBUcmFuc2FjdGlvblN0ZXBN
ZXRob2QgbV9uZXh0U3RlcDsKLSAgICAKKwogICAgIHZvaWQgZW5xdWV1ZVN0YXRlbWVudChQYXNz
UmVmUHRyPFNRTFN0YXRlbWVudD4pOwotICAgIAorCiAgICAgdm9pZCBjaGVja0FuZEhhbmRsZUNs
b3NlZERhdGFiYXNlKCk7Ci0gICAgCisKKyAgICB2b2lkIGFxdWlyZUxvY2soKTsKKyAgICB2b2lk
IGRlbGl2ZXJPcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHRDYWxsYmFjaygpOwogICAgIHZvaWQg
b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCk7CiAgICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rp
b25DYWxsYmFjaygpOwogICAgIHZvaWQgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKQEAgLTEw
OSw5ICsxMTIsOSBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICBSZWZQdHI8U1FMU3RhdGVtZW50
PiBtX2N1cnJlbnRTdGF0ZW1lbnQ7Ci0gICAgCisKICAgICBib29sIG1fZXhlY3V0ZVNxbEFsbG93
ZWQ7Ci0gICAgCisKICAgICBSZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRy
PFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gbV93cmFwcGVyOwogICAgIFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwpAQCAtMTIwLDEzICsxMjMsMTMgQEAgcHJpdmF0ZToK
ICAgICBSZWZQdHI8U1FMRXJyb3I+IG1fdHJhbnNhY3Rpb25FcnJvcjsKICAgICBib29sIG1fc2hv
dWxkUmV0cnlDdXJyZW50U3RhdGVtZW50OwogICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwot
ICAgIAorCiAgICAgTXV0ZXggbV9zdGF0ZW1lbnRNdXRleDsKICAgICBEZXF1ZTxSZWZQdHI8U1FM
U3RhdGVtZW50PiA+IG1fc3RhdGVtZW50UXVldWU7CiAKICAgICBPd25QdHI8U1FMaXRlVHJhbnNh
Y3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiB9OwotICAgIAorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZgpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgor
CisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9EZXF1ZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1NRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKQorICAgIDogbV9wZW5kaW5nVHJhbnNh
Y3Rpb25zKG5ldyBIYXNoTWFwPFN0cmluZywgRGVxdWU8U1FMVHJhbnNhY3Rpb24qPio+KCkpCit7
Cit9CisKK1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5TUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCkKK3sKK30KKworc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIoU1FMVHJh
bnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9IHRyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgcmV0dXJuIGRh
dGFiYXNlLT5zZWN1cml0eU9yaWdpbkNvcHkoKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiOiIg
KyBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3I6OmFxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQorewor
ICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rp
b24pOworCisgICAgTXV0ZXhMb2NrZXIgbG9ja1BlbmRpbmdUcmFuc2FjdGlvbnNNYXAobV9wZW5k
aW5nVHJhbnNhY3Rpb25zR3VhcmQpOworICAgIERlcXVlPFNRTFRyYW5zYWN0aW9uKj4qIHBlbmRp
bmdUcmFuc2FjdGlvbnMgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmdldChkYklkZW50aWZpZXIp
OworICAgIHRyYW5zYWN0aW9uLT5yZWYoKTsgIC8vIGRlcmVmKCkgY2FsbGVkIGluIHJlbGVhc2VM
b2NrKCkgd2hlbiB3ZSByZW1vdmUgdGhpcyB0cmFuc2FjdGlvbiBmcm9tIHRoZSBxdWV1ZQorCisg
ICAgaWYgKCFwZW5kaW5nVHJhbnNhY3Rpb25zKSB7CisgICAgICAgIC8vIE5vIHBlbmRpbmcgdHJh
bnNhY3Rpb25zIGZvciB0aGlzIERCCisgICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBuZXcg
RGVxdWU8U1FMVHJhbnNhY3Rpb24qPigpOworICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMt
PmFkZChkYklkZW50aWZpZXIsIHBlbmRpbmdUcmFuc2FjdGlvbnMpOworICAgICAgICBwZW5kaW5n
VHJhbnNhY3Rpb25zLT5hcHBlbmQodHJhbnNhY3Rpb24pOworCisgICAgICAgIC8vIFN0YXJ0IHRo
ZSB0cmFuc2FjdGlvbgorICAgICAgICB0cmFuc2FjdGlvbi0+bG9ja0FxdWlyZWQoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgLy8gQW5vdGhlciB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9uIHRoaXMg
REI7IHB1dCB0aGlzIG9uZSBpbiB0aGUgcXVldWUKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9u
cy0+YXBwZW5kKHRyYW5zYWN0aW9uKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgU3Ry
aW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CisK
KyAgICBNdXRleExvY2tlciBsb2NrUGVuZGluZ1RyYW5zYWN0aW9uc01hcChtX3BlbmRpbmdUcmFu
c2FjdGlvbnNHdWFyZCk7CisgICAgRGVxdWU8U1FMVHJhbnNhY3Rpb24qPiogcGVuZGluZ1RyYW5z
YWN0aW9ucyA9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy0+Z2V0KGRiSWRlbnRpZmllcik7CisgICAg
QVNTRVJUKHBlbmRpbmdUcmFuc2FjdGlvbnMpOworICAgIEFTU0VSVCghcGVuZGluZ1RyYW5zYWN0
aW9ucy0+aXNFbXB0eSgpKTsKKworICAgIC8vIFJlbW92ZSAndHJhbnNhY3Rpb24nIGZyb20gdGhl
IHF1ZXVlIG9mIHBlbmRpbmcgdHJhbnNhY3Rpb25zCisgICAgLy8gJ3RyYW5zYWN0aW9uJyBzaG91
bGQgYWx3YXlzIGJlIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiBpbiB0aGlzIHF1ZXVlCisgICAgU1FM
VHJhbnNhY3Rpb24qIGN1cnJlbnRUcmFuc2FjdGlvbiA9IHBlbmRpbmdUcmFuc2FjdGlvbnMtPmZp
cnN0KCk7CisgICAgQVNTRVJUKGN1cnJlbnRUcmFuc2FjdGlvbiA9PSB0cmFuc2FjdGlvbik7Cisg
ICAgcGVuZGluZ1RyYW5zYWN0aW9ucy0+cmVtb3ZlRmlyc3QoKTsKKyAgICBjdXJyZW50VHJhbnNh
Y3Rpb24tPmRlcmVmKCk7CisKKyAgICBpZiAocGVuZGluZ1RyYW5zYWN0aW9ucy0+aXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIE5vIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7IGRlbGV0ZSBkYklk
ZW50aWZpZXIncyBxdWV1ZQorICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPnJlbW92ZShk
YklkZW50aWZpZXIpOworICAgICAgICBkZWxldGUgcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7IHN0
YXJ0IHRoZSBuZXh0IG9uZQorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLT5maXJzdCgpLT5s
b2NrQXF1aXJlZCgpOworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisjZGVmaW5lIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3JfaAorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKKwor
ICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworICAgICAgICB2aXJ0dWFsIH5TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhcXVpcmVMb2NrKFNR
TFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbik7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWxlYXNl
TG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pOworICAgIHByaXZhdGU6CisgICAgICAg
IE93blB0cjxIYXNoTWFwPFN0cmluZywgRGVxdWU8U1FMVHJhbnNhY3Rpb24qPio+ID4gbV9wZW5k
aW5nVHJhbnNhY3Rpb25zOworICAgICAgICBNdXRleCBtX3BlbmRpbmdUcmFuc2FjdGlvbnNHdWFy
ZDsKKyAgICB9OworfQorCisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA0Njg2NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDA5LTA4LTA2ICBEdW1pdHJ1IERhbmlsaXVjICA8
ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI3OTY2
CisgICAgICAgIFJlZ3Jlc3Npb24gdGVzdC4gVGVzdHMgdGhhdCB0d28gdHJhbnNhY3Rpb25zIHJ1
biBvbiB0d28gZGlmZmVyZW50CisgICAgICAgIGhhbmRsZXMgdG8gdGhlIHNhbWUgREIgZG8gbm90
IGNhdXNlIGEgZGVhZGxvY2suCisKKyAgICAgICAgKiBzdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0
aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWw6
IEFkZGVkLgorCiAyMDA5LTA4LTA2ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogTGF5b3V0VGVzdHMvc3Rv
cmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtZXhwZWN0ZWQu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rp
b25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5k
bGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUaGlzIGlzIGEg
dGVzdCB0byBzZWUgaWYgcXVldWVpbmcgdXAgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZl
cmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay4K
K2RiMSByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMSB3cml0ZSBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkCitkYjEgdHJhbnNhY3Rpb24gc3VjY2VlZGVkCitkYjIgcmVhZCBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkCitkYjIgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHRyYW5zYWN0aW9uIHN1Y2Nl
ZWRlZAorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3Jh
Z2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1k
aWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9j
dW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGNvbXBs
ZXRlID0gMDsKKworZnVuY3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sKKyAgICBpZiAoKytjb21w
bGV0ZSA9PSAyICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCisvLyBXZSBuZWVkIHRvIGd1YXJhbnRl
ZSB0aGF0IHRoZSBUZXN0IHRhYmxlIGV4aXN0cyBiZWZvcmUgd2UgcnVuIG91ciB0ZXN0LgorLy8g
VGhlcmVmb3JlLCB0aGUgdGVzdCBjb2RlIGlzIGluIHRoZSBzdWNjZXNzQ2FsbGJhY2sgb2YgdGhl
IHRyYW5zYWN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgdGFibGUuCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIHRyeSB7CisgICAgICAgIHZhciBkYiA9IG9w
ZW5EYXRhYmFzZSgiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRsZXNUZXN0IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgcXVldWVpbmcgbXVsdGlwbGUgdHJh
bnNhY3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVzIGRvZXMgbm90IHJlc3VsdCBpbiBhIGRl
YWRsb2NrLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjc2OCk7CisgICAgICAg
IGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVjdXRlU3Fs
KCJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KSIsIFtdLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHt9LCBmdW5jdGlvbih0eCwgZXJy
b3IpIHt9KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAg
ICAgbG9nKCJDcmVhdGluZyB0aGUgVGVzdCB0YWJsZSBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdl
KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBkYjEg
PSBvcGVuRGF0YWJhc2UoIk11bHRpcGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVz
dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0
IHF1ZXVlaW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIgaGFuZGxlcyBk
b2VzIG5vdCByZXN1bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMzI3NjgpOworICAgICAgICAgICAgICAgIHZhciBkYjIgPSBvcGVuRGF0
YWJhc2UoIk11bHRpcGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlaW5n
IG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIgaGFuZGxlcyBkb2VzIG5vdCBy
ZXN1bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMzI3NjgpOworCisgICAgICAgICAgICAgICAgaWYgKGRiMSA9PSBkYjIpCisgICAgICAg
ICAgICAgICAgICAgIGxvZygiZmFpbHVyZTogZGIxID09IGRiMiIpOworICAgICAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIFRlc3Q7IiwgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHJlc3VsdCkgeyBsb2coImRiMSByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQiKTsg
fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVy
cm9yKSB7IGxvZygiZGIxIHJlYWQgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2Up
OyB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRP
IFRlc3QgVkFMVUVTICg/KTsiLCBbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkgeyBsb2coImRiMSB3cml0ZSBzdGF0ZW1lbnQgc3VjY2Vl
ZGVkIik7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KHR4LCBlcnJvcikgeyBsb2coImRiMSB3cml0ZSBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJyb3Iu
bWVzc2FnZSk7IH0pOworICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgewor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJkYjEgdHJhbnNhY3Rpb24gZmFpbGVkOiAiICsg
ZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRpb24o
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsb2coImRiMSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgZGIyLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0
OyIsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihy
ZXN1bHQpIHsgbG9nKCJkYjIgcmVhZCBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7IH0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBsb2co
ImRiMiByZWFkIHN0YXRlbWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsgfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVF
UyAoPyk7IiwgWzJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbihyZXN1bHQpIHsgbG9nKCJkYjIgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZCIpOyB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3Ip
IHsgbG9nKCJkYjIgd3JpdGUgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9
KTsKKyAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxvZygiZGIyIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3Nh
Z2UpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAg
ICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9n
KCJkYjIgdHJhbnNhY3Rpb24gc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBj
aGVja0NvbXBsZXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgIH0gY2F0Y2goZXJyKSB7fQorfQorCis8L3NjcmlwdD4K
KzxoZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgaXMgYSB0ZXN0IHRvIHNl
ZSBpZiBxdWV1ZWluZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRs
ZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34241</attachid>
            <date>2009-08-06 18:19:02 -0700</date>
            <delta_ts>2009-08-07 11:35:19 -0700</delta_ts>
            <desc>patch + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>43771</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njg2NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMDktMDgtMDYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXggYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyBydW4gb24gdHdvIGRp
ZmZlcmVudAorICAgICAgICBkYXRhYmFzZSBoYW5kbGVzIHRvIHRoZSBzYW1lIERCLgorCisgICAg
ICAgIFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlcyBpbiBhbGwgZmlsZXMgaW4gdGhpcyBwYXRj
aC4KKworICAgICAgICBUZXN0OiBzdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy5odG1sCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI3OTk2CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6
CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2U6OnRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IpOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAg
ICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFi
YXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZVRo
cmVhZC5oOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJh
bnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OmRlYnVnU3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNoZWNr
QW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rp
b246OnBlcmZvcm1OZXh0U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
cGVyZm9ybVBlbmRpbmdDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlv
bjo6YXF1aXJlTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0Fx
dWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJPcGVuVHJh
bnNhY3Rpb25BbmRQcmVmbGlnaHRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uOjpnZXROZXh0U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5z
YWN0aW9uOjpkZWxpdmVyU3RhdGVtZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXNlQ2FsbGJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFm
dGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I6On5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmdldERhdGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjphcXVpcmVMb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDogQWRkZWQuCisKIDIwMDktMDgtMDYgIEZ1bWl0b3No
aSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWxleGV5
IFByb3NrdXJ5YWtvdi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY4NTQpCisrKyBXZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA2LDYgKzIxMDYsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAgXAogCVdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5j
cHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAogCiBl
bHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkocmV2aXNpb24gNDY4NTQpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMjk2MCw2ICsyOTYwLDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
JywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCcsCisgICAg
ICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAorICAgICAgICAg
ICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5oJywKSW5k
ZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDY4NTQpCisr
KyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDU0MCw2ICszMDU0MCwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0
b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0Njg1NCkKKysrIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0z
ODM4LDYgKzM4MzgsOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9i
akNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0gKi87IHNl
dHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMi
OyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3RlbS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjEw
RkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJQjVBNjg0MjQw
RkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5IC8q
IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3
OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsKIAkJQkMwMEYw
MDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyogRE9NRmls
ZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMEYw
MDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpAQCAtODcwNSw2
ICs4NzA3LDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0
cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29yZU9i
akNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIxMEZGQUJF
OTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJFQUEwMEQyNDY4
OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZpbGVTeXN0ZW0u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1
NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
QzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJD
MDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk3ODgsNiArOTc5Miw4IEBACiAJCTFBRTgyRUM5MENBQUUx
NzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0MDA3NjNDOTkg
LyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENENjVGMDQwMDc2
M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVFMENBQzU2NTcw
MDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzEyMiw2ICsxNzEyOCw3IEBACiAJCQkJ
NDFEMTY4RUUxMDIyNkU4OTAwOUJDODI3IC8qIFNoYXJlZFdvcmtlclRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDFEMTY5MDYxMDIzOEI2NjAwOUJDODI3IC8qIEpTU2hhcmVkV29ya2VyQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDE2N0VCRjYxMDI5NjJCQTAwM0QyNTJBIC8qIERl
ZmF1bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmggaW4gSGVhZGVycyAqLywKKwkJCQlCNUMxMTIz
QzEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CkBAIC0xOTE3Myw2ICsxOTE4MCw3IEBACiAJCQkJNDFEMTY4RjAxMDIyNkVDNDAwOUJD
ODI3IC8qIEpTU2hhcmVkV29ya2VyQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk0MUQxNjkwNTEwMjM4QjY2MDA5QkM4MjcgLyogSlNTaGFyZWRXb3JrZXJDb250ZXh0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTQxNjdFQkY1MTAyOTYyQkEwMDNEMjUyQSAvKiBEZWZhdWx0U2hh
cmVkV29ya2VyUmVwb3NpdG9yeS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNUMxMTIzQjEwMkI2
QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNDY4NTQpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgog
I2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2VuZGlmCiAKQEAgLTU4Myw2
ICs1ODQsMTEgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogICAg
IHJldHVybiB0YWJsZU5hbWVzOwogfQogCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRh
YmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9j
dW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKK30KKwog
U3RyaW5nIERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICBpZiAobV9kZWxldGVkKQpJ
bmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmgJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDEwIEBAIGNsYXNzIERhdGFiYXNl
VGhyZWFkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTUUxSZXN1bHRTZXQ7CiBjbGFzcyBTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjsKIGNs
YXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNsYXNzIFNRTFZhbHVlOwotICAgIAor
CiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBEYXRhYmFzZSA6IHB1YmxpYyBU
aHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlPiB7CkBAIC03MiwxMiArNzMsMTIgQEAgcHVibGljOgog
Ly8gRGlyZWN0IHN1cHBvcnQgZm9yIHRoZSBET00gQVBJCiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RGF0YWJhc2U+IG9wZW5EYXRhYmFzZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxh
eU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1hdGVkU2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IFN0cmluZyB2ZXJzaW9uKCkgY29uc3Q7Ci0gICAgdm9pZCBjaGFuZ2VWZXJzaW9uKGNvbnN0IFN0
cmluZyYgb2xkVmVyc2lvbiwgY29uc3QgU3RyaW5nJiBuZXdWZXJzaW9uLCAKKyAgICB2b2lkIGNo
YW5nZVZlcnNpb24oY29uc3QgU3RyaW5nJiBvbGRWZXJzaW9uLCBjb25zdCBTdHJpbmcmIG5ld1Zl
cnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNr
PiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRD
YWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrKTsKICAgICB2b2lkIHRyYW5zYWN0aW9uKFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgCisKIC8vIElu
dGVybmFsIGVuZ2luZSBzdXBwb3J0CiAgICAgc3RhdGljIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VJ
bmZvVGFibGVOYW1lKCk7CiAKQEAgLTkwLDcgKzkxLDcgQEAgcHVibGljOgogICAgIERvY3VtZW50
KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7IH0KICAgICBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbkNvcHkoKSBjb25zdDsKICAgICBT
dHJpbmcgc3RyaW5nSWRlbnRpZmllcigpIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCBnZXRWZXJz
aW9uRnJvbURhdGFiYXNlKFN0cmluZyYpOwogICAgIGJvb2wgc2V0VmVyc2lvbkluRGF0YWJhc2Uo
Y29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRFeHBlY3RlZFZlcnNpb24oY29uc3QgU3RyaW5n
Jik7CkBAIC0xMDEsNyArMTAyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbG9zZSgpOwogICAg
IGJvb2wgb3BlbmVkKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuZWQ7IH0KLSAgICAKKwogICAgIHZv
aWQgc3RvcCgpOwogICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcHBlZDsg
fQogCkBAIC0xMTYsNiArMTE3LDggQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFN0cmluZz4gcGVy
Zm9ybUdldFRhYmxlTmFtZXMoKTsKIAorICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZShE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBl
Y3RlZFZlcnNpb24pOwogCkBAIC0xMjQsNyArMTI3LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNj
aGVkdWxlVHJhbnNhY3Rpb24oKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFj
ayhTUUxUcmFuc2FjdGlvbiopOwogICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FM
VHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsKLSAgICAKKwogICAgIE1lc3NhZ2VRdWV1ZTxSZWZQ
dHI8U1FMVHJhbnNhY3Rpb24+ID4gbV90cmFuc2FjdGlvblF1ZXVlOwogICAgIE11dGV4IG1fdHJh
bnNhY3Rpb25JblByb2dyZXNzTXV0ZXg7CiAgICAgYm9vbCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVz
czsKQEAgLTEzOSw3ICsxNDIsNyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2ZpbGVuYW1lOwog
CiAgICAgYm9vbCBtX2RlbGV0ZWQ7Ci0gICAgCisKICAgICBib29sIG1fc3RvcHBlZDsKIAogICAg
IGJvb2wgbV9vcGVuZWQ7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlz
aW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsMTEgKzM1LDEzIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJEYXRhYmFzZVRhc2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERhdGFi
YXNlVGhyZWFkOjpEYXRhYmFzZVRocmVhZCgpCiAgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBt
X3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IobmV3IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSkK
IHsKICAgICBtX3NlbGZSZWYgPSB0aGlzOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFi
YXNlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFk
LmgJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC00
Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
RGF0YWJhc2VUYXNrOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOwogCiBjbGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVk
PERhdGFiYXNlVGhyZWFkPiB7CiBwdWJsaWM6CkBAIC02MCw2ICs2Miw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CiAgICAgVGhyZWFkSWRlbnRp
ZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KIAorICAgIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3Ry
YW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZVRo
cmVhZCgpOwogCkBAIC03NSw2ICs3OSw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBzZXQga2Vl
cHMgdHJhY2sgb2YgdGhlIG9wZW4gZGF0YWJhc2VzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgb24gdGhp
cyB0aHJlYWQuCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiBEYXRhYmFz
ZVNldDsKICAgICBEYXRhYmFzZVNldCBtX29wZW5EYXRhYmFzZVNldDsKKworICAgIE93blB0cjxT
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsMjQgKzUwLDI1IEBACiAjaW5jbHVkZSAiU1FMU3RhdGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKICNpbmNsdWRlICJTUUxT
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKLS8vIFRoZXJlJ3Mgbm8gd2F5IG9mIGtu
b3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQgd2hlbiBh
IHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1pdC4gIAorLy8gVGhlcmUncyBubyB3YXkgb2Yg
a25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSByZXF1aXJlZCB3aGVu
IGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LgogLy8gRm9yIG5vdywgd2UnbGwgYXJi
aXRyYXJpbHkgY2hvb3NlIGN1cnJlbnRRdW90YSArIDFtYi4KIC8vIEluIHRoZSBmdXR1cmUgd2Ug
ZGVjaWRlIHRvIHRyYWNrIGlmIGEgc2l6ZSBpbmNyZWFzZSB3YXNuJ3QgZW5vdWdoLCBhbmQgYXNr
IGZvciBsYXJnZXItYW5kLWxhcmdlciBpbmNyZWFzZXMgdW50aWwgaXRzIGVub3VnaC4KIHN0YXRp
YyBjb25zdCBpbnQgRGVmYXVsdFF1b3RhU2l6ZUluY3JlYXNlID0gMTA0ODU3NjsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlv
bjo6Y3JlYXRlKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
PiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9y
Q2FsbGJhY2ssIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBh
c3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQorUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FM
VHJhbnNhY3Rpb246OmNyZWF0ZShEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCBQ
YXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFNRTFRyYW5zYWN0aW9uKGRiLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
c3VjY2Vzc0NhbGxiYWNrLCB3cmFwcGVyKSk7CiB9CiAKLVNRTFRyYW5zYWN0aW9uOjpTUUxUcmFu
c2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4g
Y2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNh
bGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrLCAKK1NRTFRy
YW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJh
bnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vz
c0NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQotICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNh
Y3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICA6IG1fbmV4dFN0ZXAoJlNR
TFRyYW5zYWN0aW9uOjphcXVpcmVMb2NrKQogICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxz
ZSkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikKQEAgLTk1
LDcgKzk2LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTChjb25zdCBTdAogICAg
IFBhZ2UqIHBhZ2UgPSBtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlIHx8IHBhZ2UtPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSkKICAgICAg
ICAgcmVhZE9ubHlNb2RlID0gdHJ1ZTsKLSAgICAKKwogICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+
IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJndW1lbnRz
LCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcmVhZE9ubHlNb2RlKTsKIAogICAgIGlmIChtX2Rh
dGFiYXNlLT5kZWxldGVkKCkpCkBAIC0xMTYsNyArMTE3LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6ZW5xdWV1ZVN0YXRlbWVudChQYQogI2lmbmRlZiBOREVCVUcKIGNvbnN0IGNoYXIqIFNRTFRy
YW5zYWN0aW9uOjpkZWJ1Z1N0ZXBOYW1lKFNRTFRyYW5zYWN0aW9uOjpUcmFuc2FjdGlvblN0ZXBN
ZXRob2Qgc3RlcCkKIHsKLSAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFu
c2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmFx
dWlyZUxvY2spCisgICAgICAgIHJldHVybiAiYXF1aXJlTG9jayI7CisgICAgZWxzZSBpZiAoc3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKICAgICAg
ICAgcmV0dXJuICJvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQiOwogICAgIGVsc2UgaWYgKHN0
ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKQogICAgICAgICByZXR1cm4gInJ1
blN0YXRlbWVudHMiOwpAQCAtMTQ1LDEzICsxNDgsMTMgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6
Y2hlY2tBbmRIYW5kbGVDbG9zZQogewogICAgIGlmICghbV9kYXRhYmFzZS0+c3RvcHBlZCgpKQog
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCiAgICAgLy8gSWYgdGhlIGRhdGFiYXNlIHdhcyBz
dG9wcGVkLCBkb24ndCBkbyBhbnl0aGluZyBhbmQgY2FuY2VsIHF1ZXVlZCB3b3JrCiAgICAgTE9H
KFN0b3JhZ2VBUEksICJEYXRhYmFzZSB3YXMgc3RvcHBlZCAtIGNhbmNlbGxpbmcgd29yayBmb3Ig
dGhpcyB0cmFuc2FjdGlvbiIpOwogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11
dGV4KTsKICAgICBtX3N0YXRlbWVudFF1ZXVlLmNsZWFyKCk7CiAgICAgbV9uZXh0U3RlcCA9IDA7
Ci0gICAgCisKICAgICAvLyBUaGUgY3VycmVudCBTUUxpdGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJl
IHN0b3BwZWQsIGFzIHdlbGwKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbikgewogICAgICAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5zdG9wKCk7CkBAIC0xNjQsMTQgKzE2NywxNCBAQCBib29s
IFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtTmV4dFN0ZXAoKQogewogICAgIExPRyhTdG9yYWdlQVBJ
LCAiU3RlcCAlc1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7CiAKLSAgICBBU1NFUlQo
bV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdo
dCB8fAorICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9j
ayB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVt
ZW50cyB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cG9zdGZs
aWdodEFuZENvbW1pdCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIHx8CiAgICAgICAgICAgIG1fbmV4dFN0ZXAg
PT0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sp
OwotICAgIAorCiAgICAgY2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFzZSgpOwotICAgIAorCiAg
ICAgaWYgKG1fbmV4dFN0ZXApCiAgICAgICAgICh0aGlzLT4qbV9uZXh0U3RlcCkoKTsKIApAQCAt
MTkwLDExICsxOTMsMjEgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxs
YgogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nl
c3NDYWxsYmFjayk7CiAKICAgICBjaGVja0FuZEhhbmRsZUNsb3NlZERhdGFiYXNlKCk7Ci0gICAg
CisKICAgICBpZiAobV9uZXh0U3RlcCkKICAgICAgICAgKHRoaXMtPiptX25leHRTdGVwKSgpOwog
fQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphcXVpcmVMb2NrKCkKK3sKKyAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmFxdWlyZUxvY2sodGhpcyk7Cit9CisKK3ZvaWQg
U1FMVHJhbnNhY3Rpb246OmxvY2tBcXVpcmVkKCkKK3sKKyAgICBvcGVuVHJhbnNhY3Rpb25BbmRQ
cmVmbGlnaHQoKTsKK30KKwogdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5k
UHJlZmxpZ2h0KCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2Uu
dHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwpAQCAtMjEwLDE0ICsyMjMsMTQgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUAogCiAgICAgLy8gU2V0IHRoZSBtYXhpbXVt
IHVzYWdlIGZvciB0aGlzIHRyYW5zYWN0aW9uCiAgICAgbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRh
YmFzZS5zZXRNYXhpbXVtU2l6ZShtX2RhdGFiYXNlLT5tYXhpbXVtU2l6ZSgpKTsKLSAgICAKKwog
ICAgIEFTU0VSVCghbV9zcWxpdGVUcmFuc2FjdGlvbik7CiAgICAgbV9zcWxpdGVUcmFuc2FjdGlv
bi5zZXQobmV3IFNRTGl0ZVRyYW5zYWN0aW9uKG1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2Up
KTsKLSAgICAKKwogICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxl
KCk7CiAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+YmVnaW4oKTsKLSAgICBtX2RhdGFiYXNlLT5t
X2RhdGFiYXNlQXV0aG9yaXplci0+ZW5hYmxlKCk7ICAgIAotICAgIAorICAgIG1fZGF0YWJhc2Ut
Pm1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXBzIDErMiAtIE9wZW4gYSB0cmFuc2FjdGlvbiB0byB0aGUgZGF0YWJhc2UsIGp1bXBpbmcgdG8g
dGhlIGVycm9yIGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKICAgICBpZiAoIW1fc3FsaXRlVHJhbnNh
Y3Rpb24tPmluUHJvZ3Jlc3MoKSkgewogICAgICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3Fs
aXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwpAQCAtMjI2LDcgKzIzOSw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFAKICAgICAgICAgaGFuZGxl
VHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisK
ICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwcyAzIC0gUGVmb3JtIHByZWZsaWdodCBzdGVwcywganVt
cGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhleSBmYWlsCiAgICAgaWYgKG1fd3JhcHBl
ciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUHJlZmxpZ2h0KHRoaXMpKSB7CiAgICAgICAgIEFTU0VS
VCghbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7
CkBAIC0yMzgsNyArMjUxLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9u
QW5kUAogICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNCAtIEludm9rZSB0
aGUgdHJhbnNhY3Rpb24gY2FsbGJhY2sgd2l0aCB0aGUgbmV3IFNRTFRyYW5zYWN0aW9uIG9iamVj
dAogICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNh
bGxiYWNrOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyVHJhbnNhY3Rp
b25DYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwpAQCAtMjgwLDcgKzI5Myw3
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQogICAgICAgICAgICAgbV9z
aG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQgPSBmYWxzZTsKICAgICAgICAgICAgIC8vIEZJWE1F
IC0gQW5vdGhlciBwbGFjZSB0aGF0IG5lZWRzIGZpeGluZyB1cCBhZnRlciA8cmRhcjovL3Byb2Js
ZW0vNTYyODQ2OD4gaXMgYWRkcmVzc2VkLgogICAgICAgICAgICAgLy8gU2VlIDo6b3BlblRyYW5z
YWN0aW9uQW5kUHJlZmxpZ2h0KCkgZm9yIGRpc2N1c3Npb24KLSAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICAvLyBSZXNldCB0aGUgbWF4aW11bSBzaXplIGhlcmUsIGFzIGl0IHdhcyBpbmNyZWFz
ZWQgdG8gYWxsb3cgdXMgdG8gcmV0cnkgdGhpcyBzdGF0ZW1lbnQKICAgICAgICAgICAgIG1fZGF0
YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2Uuc2V0TWF4aW11bVNpemUobV9kYXRhYmFzZS0+bWF4aW11
bVNpemUoKSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yOTAsMTQgKzMwMywxNCBAQCB2b2lkIFNR
TFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKCkKICAgICAgICAgICAgICAgICBoYW5kbGVDdXJy
ZW50U3RhdGVtZW50RXJyb3IoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIGFkdmFuY2UgdG8g
dGhlIG5leHQgc3RhdGVtZW50CiAgICAgICAgICAgICBnZXROZXh0U3RhdGVtZW50KCk7CiAgICAg
ICAgIH0KICAgICB9IHdoaWxlIChydW5DdXJyZW50U3RhdGVtZW50KCkpOwotICAgIAorCiAgICAg
Ly8gSWYgcnVuQ3VycmVudFN0YXRlbWVudCgpIHJldHVybmVkIGZhbHNlLCB0aGF0IG1lYW5zIGVp
dGhlciB0aGVyZSB3YXMgbm8gY3VycmVudCBzdGF0ZW1lbnQgdG8gcnVuLAotICAgIC8vIG9yIHRo
ZSBjdXJyZW50IHN0YXRlbWVudCByZXF1aXJlcyBhIGNhbGxiYWNrIHRvIGNvbXBsZXRlLiAgSW4g
dGhlIGxhdGVyIGNhc2UsIGl0IGFsc28gc2NoZWR1bGVkIAorICAgIC8vIG9yIHRoZSBjdXJyZW50
IHN0YXRlbWVudCByZXF1aXJlcyBhIGNhbGxiYWNrIHRvIGNvbXBsZXRlLiAgSW4gdGhlIGxhdGVy
IGNhc2UsIGl0IGFsc28gc2NoZWR1bGVkCiAgICAgLy8gdGhlIGNhbGxiYWNrIG9yIHBlcmZvcm1l
ZCBhbnkgb3RoZXIgYWRkaXRpb25hbCB3b3JrIHNvIHdlIGNhbiByZXR1cm4KICAgICBpZiAoIW1f
Y3VycmVudFN0YXRlbWVudCkKICAgICAgICAgcG9zdGZsaWdodEFuZENvbW1pdCgpOwpAQCAtMzA2
LDcgKzMxOSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMoKQogdm9pZCBT
UUxUcmFuc2FjdGlvbjo6Z2V0TmV4dFN0YXRlbWVudCgpCiB7CiAgICAgbV9jdXJyZW50U3RhdGVt
ZW50ID0gMDsKLSAgICAKKwogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4
KTsKICAgICBpZiAoIW1fc3RhdGVtZW50UXVldWUuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fY3Vy
cmVudFN0YXRlbWVudCA9IG1fc3RhdGVtZW50UXVldWUuZmlyc3QoKTsKQEAgLTMxOCw5ICszMzEs
OSBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJyZW50U3RhdGVtZW50CiB7CiAgICAgaWYg
KCFtX2N1cnJlbnRTdGF0ZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisK
ICAgICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9yaXplci0+cmVzZXQoKTsKLSAgICAKKwog
ICAgIGlmIChtX2N1cnJlbnRTdGF0ZW1lbnQtPmV4ZWN1dGUobV9kYXRhYmFzZS5nZXQoKSkpIHsK
ICAgICAgICAgaWYgKG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5sYXN0QWN0aW9u
Q2hhbmdlZERhdGFiYXNlKCkpIHsKICAgICAgICAgICAgIC8vIEZsYWcgdGhpcyB0cmFuc2FjdGlv
biBhcyBoYXZpbmcgY2hhbmdlZCB0aGUgZGF0YWJhc2UgZm9yIGxhdGVyIGRlbGVnYXRlIG5vdGlm
aWNhdGlvbgpAQCAtMzI4LDEwICszNDEsMTAgQEAgYm9vbCBTUUxUcmFuc2FjdGlvbjo6cnVuQ3Vy
cmVudFN0YXRlbWVudAogICAgICAgICAgICAgLy8gQWxzbyBkaXJ0eSB0aGUgc2l6ZSBvZiB0aGlz
IGRhdGFiYXNlIGZpbGUgZm9yIGNhbGN1bGF0aW5nIHF1b3RhIHVzYWdlCiAgICAgICAgICAgICBP
cmlnaW5RdW90YU1hbmFnZXImIG1hbmFnZXIoRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkub3Jp
Z2luUXVvdGFNYW5hZ2VyKCkpOwogICAgICAgICAgICAgTG9ja2VyPE9yaWdpblF1b3RhTWFuYWdl
cj4gbG9ja2VyKG1hbmFnZXIpOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIG1hbmFnZXIu
bWFya0RhdGFiYXNlKG1fZGF0YWJhc2UuZ2V0KCkpOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
KwogICAgICAgICBpZiAobV9jdXJyZW50U3RhdGVtZW50LT5oYXNTdGF0ZW1lbnRDYWxsYmFjaygp
KSB7CiAgICAgICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3Rh
dGVtZW50Q2FsbGJhY2s7CiAgICAgICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcg
ZGVsaXZlclN0YXRlbWVudENhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CkBA
IC0zNDAsMTYgKzM1MywxNiBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpydW5DdXJyZW50U3RhdGVt
ZW50CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIAorCiAgICAg
aWYgKG1fY3VycmVudFN0YXRlbWVudC0+bGFzdEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSkg
ewogICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyUXVvdGFJbmNy
ZWFzZUNhbGxiYWNrOwogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZl
clF1b3RhSW5jcmVhc2VDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwogICAg
ICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7CiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAgICBoYW5kbGVDdXJyZW50U3RhdGVt
ZW50RXJyb3IoKTsKLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMzcyLDcgKzM4
NSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZUN1cnJlbnRTdGF0ZW0KIHZvaWQgU1FM
VHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjaygpCiB7CiAgICAgQVNTRVJUKG1f
Y3VycmVudFN0YXRlbWVudCk7Ci0gICAgCisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDYuNiBh
bmQgNi4zKGVycm9yKSAtIElmIHRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgd2VudCB3cm9uZywganVt
cCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2sKICAgICAvLyBPdGhlcndpc2UsIGNv
bnRpbnVlIHRvIGxvb3AgdGhyb3VnaCB0aGUgc3RhdGVtZW50IHF1ZXVlCiAgICAgbV9leGVjdXRl
U3FsQWxsb3dlZCA9IHRydWU7CkBAIC0zOTAsMjcgKzQwMywyNyBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpkZWxpdmVyUXVvdGFJbmNyZWFzCiB7CiAgICAgQVNTRVJUKG1fY3VycmVudFN0YXRlbWVu
dCk7CiAgICAgQVNTRVJUKCFtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudCk7Ci0gICAgCisK
ICAgICBQYWdlKiBwYWdlID0gbV9kYXRhYmFzZS0+ZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgIEFT
U0VSVChwYWdlKTsKLSAgICAKKwogICAgIFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gb3JpZ2luID0g
bV9kYXRhYmFzZS0+c2VjdXJpdHlPcmlnaW5Db3B5KCk7Ci0gICAgCisKICAgICB1bnNpZ25lZCBs
b25nIGxvbmcgY3VycmVudFF1b3RhID0gRGF0YWJhc2VUcmFja2VyOjp0cmFja2VyKCkucXVvdGFG
b3JPcmlnaW4ob3JpZ2luLmdldCgpKTsKICAgICBwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPmV4
Y2VlZGVkRGF0YWJhc2VRdW90YShtX2RhdGFiYXNlLT5kb2N1bWVudCgpLT5mcmFtZSgpLCBtX2Rh
dGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCkpOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdR
dW90YSA9IERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnF1b3RhRm9yT3JpZ2luKG9yaWdpbi5n
ZXQoKSk7Ci0gICAgCisKICAgICAvLyBJZiB0aGUgbmV3IHF1b3RhIGVuZGVkIHVwIGJlaW5nIGxh
cmdlciB0aGFuIHRoZSBvbGQgcXVvdGEsIHdlIHdpbGwgcmV0cnkgdGhlIHN0YXRlbWVudC4KICAg
ICBpZiAobmV3UXVvdGEgPiBjdXJyZW50UXVvdGEpCiAgICAgICAgIG1fc2hvdWxkUmV0cnlDdXJy
ZW50U3RhdGVtZW50ID0gdHJ1ZTsKLSAgICAgICAgCisKICAgICBtX25leHRTdGVwID0gJlNRTFRy
YW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGlu
ZyBydW5TdGF0ZW1lbnRzIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CiAgICAgbV9kYXRh
YmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAodGhpcyk7CiB9CiAKIHZvaWQgU1FMVHJhbnNh
Y3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQoKQoteyAgICAKK3sKICAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDcgLSBQZWZvcm0gcG9zdGZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3Ig
Y2FsbGJhY2sgaWYgdGhleSBmYWlsCiAgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5w
ZXJmb3JtUG9zdGZsaWdodCh0aGlzKSkgewogICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBt
X3dyYXBwZXItPnNxbEVycm9yKCk7CkBAIC00MTksMTAgKzQzMiwxMCBAQCB2b2lkIFNRTFRyYW5z
YWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJy
b3IoZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAgICAgLy8gVHJhbnNh
Y3RvbiBTdGVwIDgrOSAtIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24sIGp1bXBpbmcgdG8gdGhlIGVy
cm9yIGNhbGxiYWNrIGlmIHRoYXQgZmFpbHMKICAgICBBU1NFUlQobV9zcWxpdGVUcmFuc2FjdGlv
bik7Ci0gICAgCisKICAgICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJs
ZSgpOwogICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOwogICAgIG1fZGF0YWJhc2Ut
Pm1fZGF0YWJhc2VBdXRob3JpemVyLT5lbmFibGUoKTsKQEAgLTQzMywyMSArNDQ2LDIxIEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQKICAgICAgICAgaGFuZGxlVHJh
bnNhY3Rpb25FcnJvcihmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBUaGUgY29tbWl0IHdhcyBzdWNjZXNzZnVsLCBub3RpZnkgdGhlIGRlbGVnYXRlcyBpZiB0
aGUgdHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZQogICAgIGlmIChtX21vZGlmaWVk
RGF0YWJhc2UpCiAgICAgICAgIERhdGFiYXNlVHJhY2tlcjo6dHJhY2tlcigpLnNjaGVkdWxlTm90
aWZ5RGF0YWJhc2VDaGFuZ2VkKG1fZGF0YWJhc2UtPm1fc2VjdXJpdHlPcmlnaW4uZ2V0KCksIG1f
ZGF0YWJhc2UtPm1fbmFtZSk7Ci0gICAgCisKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVk
ZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sg
PSAwOwogICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7Ci0gICAgCisKICAgICAvLyBUcmFuc2FjdGlv
biBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNrLCBpZiB0aGVyZSBpcyBvbmUKICAg
ICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsKICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEks
ICJTY2hlZHVsaW5nIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4i
LCB0aGlzKTsKICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNr
KHRoaXMpOwotICAgIH0gZWxzZSAKKyAgICB9IGVsc2UKICAgICAgICAgY2xlYW51cEFmdGVyU3Vj
Y2Vzc0NhbGxiYWNrKCk7CiB9CiAKQEAgLTQ1Niw3ICs0NjksNyBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERl
bGl2ZXIgc3VjY2VzcyBjYWxsYmFjawogICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7CiAg
ICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7Ci0gICAgCisKICAgICAvLyBSZWxl
YXNlIHRoZSBsYXN0IGNhbGxiYWNrIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZQogICAgIG1fc3Vj
Y2Vzc0NhbGxiYWNrID0gMDsKIApAQCAtNDc0LDYgKzQ4Nyw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmNsZWFudXBBZnRlclN1Y2Nlc3MKICAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9u
ICVwIGlzIGNvbXBsZXRlXG4iLCB0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3Fs
aXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIG1fbmV4dFN0ZXAgPSAw
OworCisgICAgLy8gUmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCisgICAgbV9kYXRh
YmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKIH0KIAog
dm9pZCBTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGluQ2FsbGJh
Y2spCkBAIC00ODgsNyArNTA0LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNh
Y3Rpb25FcgogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICAv
LyBObyBlcnJvciBjYWxsYmFjaywgc28gZmFzdC1mb3J3YXJkIHRvOgogICAgIC8vIFRyYW5zYWN0
aW9uIFN0ZXAgMTIgLSBSb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24uCiAgICAgaWYgKGluQ2FsbGJh
Y2spIHsKQEAgLTUwMyw3ICs1MTksNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFu
c2FjdGlvbkVyCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNh
bGxiYWNrKCkKIHsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbkVycm9yKTsKLSAgICAKKwogICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFj
ayB3aXRoIHRoZSBsYXN0CiAgICAgLy8gZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRy
YW5zYWN0aW9uLgogICAgIGlmIChtX2Vycm9yQ2FsbGJhY2spCkBAIC01MjAsMTggKzUzNiwxOCBA
QCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiAgICAgaWYgKG1fc3Fs
aXRlVHJhbnNhY3Rpb24pIHsKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxi
YWNrIHRoZSB0cmFuc2FjdGlvbi4KICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+cm9sbGJh
Y2soKTsKLSAgICAgICAgCisKICAgICAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0ZURh
dGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKICAgICAgICAgbV9zcWxpdGVUcmFuc2Fj
dGlvbi5jbGVhcigpOwogICAgIH0KICAgICBtX2RhdGFiYXNlLT5tX2RhdGFiYXNlQXV0aG9yaXpl
ci0+ZW5hYmxlKCk7Ci0gICAgCisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gQW55IHN0
aWxsLXBlbmRpbmcgc3RhdGVtZW50cyBpbiB0aGUgdHJhbnNhY3Rpb24gYXJlIGRpc2NhcmRlZC4K
ICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3N0YXRlbWVudE11dGV4KTsKICAg
ICAgICAgbV9zdGF0ZW1lbnRRdWV1ZS5jbGVhcigpOwogICAgIH0KLSAgICAKKwogICAgIC8vIFRy
YW5zYWN0aW9uIGlzIGNvbXBsZXRlISAgVGhlcmUgaXMgbm8gbmV4dCBzdGVwCiAgICAgTE9HKFN0
b3JhZ2VBUEksICJUcmFuc2FjdGlvbiAlcCBpcyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yXG4iLCB0
aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJhbnNhY3Rp
b25JblByb2dyZXNzKCkpOwpAQCAtNTQwLDYgKzU1Niw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OmNsZWFudXBBZnRlclRyYW5zYWMKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgY2FsbGJhY2tzLCB0
byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIG1fZXJy
b3JDYWxsYmFjayA9IDA7CisKKyAgICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRh
dGFiYXNlCisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNl
TG9jayh0aGlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDQ2ODU0KQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgflNRTFRyYW5zYWN0aW9uV3JhcHBlcigpIHsgfQogICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtUHJlZmxpZ2h0KFNRTFRyYW5zYWN0aW9uKikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBw
ZXJmb3JtUG9zdGZsaWdodChTUUxUcmFuc2FjdGlvbiopID0gMDsKLSAgICAKKwogICAgIHZpcnR1
YWwgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29uc3QgPSAwOwogfTsKIApAQCAtNjksMTMgKzY5LDE0
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gY3JlYXRl
KERhdGFiYXNlKiwgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiwgUGFzc1JlZlB0
cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+LCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4s
IFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPik7CiAKICAgICB+U1FMVHJhbnNhY3Rp
b24oKTsKLSAgICAKLSAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1l
bnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgCisKKyAgICB2b2lkIGV4ZWN1
dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4m
IGFyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRD
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4g
Y2FsbGJhY2tFcnJvciwgRXhjZXB0aW9uQ29kZSYgZSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisKKyAgICB2b2lkIGxvY2tBcXVpcmVkKCk7CiAgICAgYm9vbCBw
ZXJmb3JtTmV4dFN0ZXAoKTsKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsKLSAg
ICAKKwogICAgIERhdGFiYXNlKiBkYXRhYmFzZSgpIHsgcmV0dXJuIG1fZGF0YWJhc2UuZ2V0KCk7
IH0KIAogcHJpdmF0ZToKQEAgLTgzLDExICs4NCwxMiBAQCBwcml2YXRlOgogCiAgICAgdHlwZWRl
ZiB2b2lkIChTUUxUcmFuc2FjdGlvbjo6KlRyYW5zYWN0aW9uU3RlcE1ldGhvZCkoKTsKICAgICBU
cmFuc2FjdGlvblN0ZXBNZXRob2QgbV9uZXh0U3RlcDsKLSAgICAKKwogICAgIHZvaWQgZW5xdWV1
ZVN0YXRlbWVudChQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4pOwotICAgIAorCiAgICAgdm9pZCBj
aGVja0FuZEhhbmRsZUNsb3NlZERhdGFiYXNlKCk7Ci0gICAgCisKKyAgICB2b2lkIGFxdWlyZUxv
Y2soKTsKICAgICB2b2lkIG9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpOwogICAgIHZvaWQg
ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2soKTsKICAgICB2b2lkIHNjaGVkdWxlVG9SdW5TdGF0
ZW1lbnRzKCk7CkBAIC0xMDksOSArMTExLDkgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgUmVm
UHRyPFNRTFN0YXRlbWVudD4gbV9jdXJyZW50U3RhdGVtZW50OwotICAgIAorCiAgICAgYm9vbCBt
X2V4ZWN1dGVTcWxBbGxvd2VkOwotICAgIAorCiAgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFi
YXNlOwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IG1fd3JhcHBlcjsKICAgICBS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKQEAgLTEyMCwxMyArMTIy
LDEzIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNRTEVycm9yPiBtX3RyYW5zYWN0aW9uRXJyb3I7
CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1fbW9k
aWZpZWREYXRhYmFzZTsKLSAgICAKKwogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAg
RGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwogCiAgICAgT3du
UHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOwogfTsKLSAgICAKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZS5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6U1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpCisgICAgOiBtX3BlbmRpbmdUcmFuc2FjdGlvbnMobmV3IFRyYW5z
YWN0aW9uc0hhc2hNYXAoKSkKK3sKK30KKworU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6flNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKQoreworICAgIGZvciAoVHJhbnNhY3Rpb25zSGFzaE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmJlZ2luKCk7IGl0ICE9IG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVHJhbnNhY3Rpb25z
UXVldWUqIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmdldChp
dC0+Zmlyc3QpOworICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPnJlbW92ZShpdCk7Cisg
ICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMtPmNsZWFyKCk7CisgICAgICAgIGRlbGV0ZSBwZW5k
aW5nVHJhbnNhY3Rpb25zOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlk
ZW50aWZpZXIoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIERhdGFiYXNlKiBk
YXRhYmFzZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7
CisgICAgcmV0dXJuIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbkNvcHkoKS0+ZGF0YWJhc2VJZGVu
dGlmaWVyKCkgKyAiOiIgKyBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOworfQorCit2b2lk
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uKQoreworICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50
aWZpZXIodHJhbnNhY3Rpb24pOworCisgICAgVHJhbnNhY3Rpb25zUXVldWUqIHBlbmRpbmdUcmFu
c2FjdGlvbnMgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmdldChkYklkZW50aWZpZXIpOworICAg
IGlmICghcGVuZGluZ1RyYW5zYWN0aW9ucykgeworICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5z
YWN0aW9ucyBmb3IgdGhpcyBEQgorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zID0gbmV3IFRy
YW5zYWN0aW9uc1F1ZXVlKCk7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy0+YWRkKGRi
SWRlbnRpZmllciwgcGVuZGluZ1RyYW5zYWN0aW9ucyk7CisgICAgICAgIHBlbmRpbmdUcmFuc2Fj
dGlvbnMtPmFwcGVuZCh0cmFuc2FjdGlvbik7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5z
YWN0aW9uCisgICAgICAgIHRyYW5zYWN0aW9uLT5sb2NrQXF1aXJlZCgpOworICAgIH0gZWxzZQor
ICAgICAgICAvLyBBbm90aGVyIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gdGhpcyBEQjsgcHV0
IHRoaXMgb25lIGluIHRoZSBxdWV1ZQorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLT5hcHBl
bmQodHJhbnNhY3Rpb24pOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJl
bGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBTdHJpbmcgZGJJ
ZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKworICAgIFRy
YW5zYWN0aW9uc1F1ZXVlKiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gbV9wZW5kaW5nVHJhbnNhY3Rp
b25zLT5nZXQoZGJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucyk7
CisgICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLT5pc0VtcHR5KCkpOworCisgICAgLy8g
UmVtb3ZlICd0cmFuc2FjdGlvbicgZnJvbSB0aGUgcXVldWUgb2YgcGVuZGluZyB0cmFuc2FjdGlv
bnMKKyAgICAvLyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRyYW5z
YWN0aW9uIGluIHRoaXMgcXVldWUKKyAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy0+Zmly
c3QoKS5nZXQoKSA9PSB0cmFuc2FjdGlvbik7CisgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy0+cmVt
b3ZlRmlyc3QoKTsKKworICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gTm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRp
ZmllcidzIHF1ZXVlCisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy0+cmVtb3ZlKGRiSWRl
bnRpZmllcik7CisgICAgICAgIGRlbGV0ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIFdlIGhhdmUgbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgc3RhcnQg
dGhlIG5leHQgb25lCisgICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMtPmZpcnN0KCktPmxvY2tB
cXVpcmVkKCk7CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvcl9oCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFz
cyBTUUxUcmFuc2FjdGlvbjsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworICAg
ICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBhcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pOwor
ICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9u
PiA+IFRyYW5zYWN0aW9uc1F1ZXVlOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBU
cmFuc2FjdGlvbnNRdWV1ZSo+IFRyYW5zYWN0aW9uc0hhc2hNYXA7CisgICAgICAgIE93blB0cjxU
cmFuc2FjdGlvbnNIYXNoTWFwPiBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgfTsKK30KKwor
I2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NDY4NjQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNCBAQAorMjAwOS0wOC0wNiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNzk2NgorICAgICAgICBSZWdyZXNz
aW9uIHRlc3QuIFRlc3RzIHRoYXQgdHdvIHRyYW5zYWN0aW9ucyBydW4gb24gdHdvIGRpZmZlcmVu
dAorICAgICAgICBoYW5kbGVzIHRvIHRoZSBzYW1lIERCIGRvIG5vdCBjYXVzZSBhIGRlYWRsb2Nr
LgorCisgICAgICAgICogc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sOiBBZGRlZC4KKwogMjAwOS0w
OC0wNiAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBFcmljIFNlaWRlbC4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJh
bnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdl
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIHF1
ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0
aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suCitkYjEgcmVhZCBzdGF0ZW1l
bnQgc3VjY2VlZGVkCitkYjEgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIxIHRyYW5zYWN0
aW9uIHN1Y2NlZWRlZAorZGIyIHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHdyaXRlIHN0
YXRlbWVudCBzdWNjZWVkZWQKK2RiMiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQKKwpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRs
ZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK3ZhciBjb21wbGV0ZSA9IDA7CisKK2Z1bmN0
aW9uIGNoZWNrQ29tcGxldGlvbigpCit7CisgICAgaWYgKCsrY29tcGxldGUgPT0gMiAmJiB3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKworLy8gV2UgbmVlZCB0byBndWFyYW50ZWUgdGhhdCB0aGUgVGVzdCB0
YWJsZSBleGlzdHMgYmVmb3JlIHdlIHJ1biBvdXIgdGVzdC4KKy8vIFRoZXJlZm9yZSwgdGhlIHRl
c3QgY29kZSBpcyBpbiB0aGUgc3VjY2Vzc0NhbGxiYWNrIG9mIHRoZSB0cmFuc2FjdGlvbiB0aGF0
IGNyZWF0ZXMgdGhlIHRhYmxlLgorZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
OworICAgIH0KKyAgICB0cnkgeworICAgICAgICB2YXIgZGIgPSBvcGVuRGF0YWJhc2UoIk11bHRp
cGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRvIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlaW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZm
ZXJlbnQgREIgaGFuZGxlcyBkb2VzIG5vdCByZXN1bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMzI3NjgpOworICAgICAgICBkYi50cmFuc2FjdGlvbihm
dW5jdGlvbih0eCkgeworICAgICAgICAgICAgdHguZXhlY3V0ZVNxbCgiQ1JFQVRFIFRBQkxFIElG
IE5PVCBFWElTVFMgVGVzdCAoRm9vIGludCkiLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24ocmVzdWx0KSB7fSwgZnVuY3Rpb24odHgsIGVycm9yKSB7fSk7CisgICAgICAg
ICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxvZygiQ3JlYXRpbmcg
dGhlIFRlc3QgdGFibGUgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGIxID0gb3BlbkRhdGFiYXNlKCJN
dWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBxdWV1ZWluZyBtdWx0aXBs
ZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IERCIGhhbmRsZXMgZG9lcyBub3QgcmVzdWx0IGlu
IGEgZGVhZGxvY2suIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMy
NzY4KTsKKyAgICAgICAgICAgICAgICB2YXIgZGIyID0gb3BlbkRhdGFiYXNlKCJNdWx0aXBsZVRy
YW5zYWN0aW9uc09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiVGVzdCB0byBtYWtlIHN1cmUgdGhhdCBxdWV1ZWluZyBtdWx0aXBsZSB0cmFuc2Fj
dGlvbnMgb24gZGlmZmVyZW50IERCIGhhbmRsZXMgZG9lcyBub3QgcmVzdWx0IGluIGEgZGVhZGxv
Y2suIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyNzY4KTsKKwor
ICAgICAgICAgICAgICAgIGlmIChkYjEgPT0gZGIyKQorICAgICAgICAgICAgICAgICAgICBsb2co
ImZhaWx1cmU6IGRiMSA9PSBkYjIiKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGIxLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsIFtd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQp
IHsgbG9nKCJkYjEgcmVhZCBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7IH0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBsb2coImRiMSBy
ZWFkIHN0YXRlbWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoPyk7
IiwgWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihy
ZXN1bHQpIHsgbG9nKCJkYjEgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZCIpOyB9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgbG9n
KCJkYjEgd3JpdGUgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKyAg
ICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvZygiZGIxIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgICAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJkYjEg
dHJhbnNhY3Rpb24gc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0Nv
bXBsZXRpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAg
IGRiMi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
dHguZXhlY3V0ZVNxbCgiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCBbXSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7IGxvZygiZGIy
IHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZCIpOyB9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgbG9nKCJkYjIgcmVhZCBzdGF0ZW1l
bnQgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7IH0pOworICAgICAgICAgICAgICAgICAgICAg
ICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKD8pOyIsIFsyXSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7IGxv
ZygiZGIyIHdyaXRlIHN0YXRlbWVudCBzdWNjZWVkZWQiKTsgfSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IGxvZygiZGIyIHdyaXRl
IHN0YXRlbWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsgfSk7CisgICAgICAgICAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2co
ImRiMiB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgICAgICAgICAgICAgICAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZygiZGIyIHRyYW5zYWN0aW9u
IHN1Y2NlZWRlZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0pOworICB9IGNhdGNoKGVycikge30KK30KKworPC9zY3JpcHQ+Cis8aGVhZD4KKzxib2R5IG9u
bG9hZD0icnVuVGVzdCgpOyI+CitUaGlzIGlzIGEgdGVzdCB0byBzZWUgaWYgcXVldWVpbmcgdXAg
bXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRh
dGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay48YnI+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34299</attachid>
            <date>2009-08-07 11:35:19 -0700</date>
            <delta_ts>2009-08-07 23:29:17 -0700</delta_ts>
            <desc>patch + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27816</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NjkwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMDktMDgtMDcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXggYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBvbiB0
d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERCLgor
CisgICAgICAgIFRlc3Q6IHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVu
dC1oYW5kbGVzLmh0bWwKKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdl
YkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3Rv
cmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rp
b25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAq
IHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VU
aHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToKKyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFk
Lmg6CisgICAgICAgIChXZWJDb3JlOjpEYXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGlu
YXRvcik6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVnU3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
VHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbjo6YXF1aXJlTG9jayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
bG9ja0FxdWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBB
ZnRlclN1Y2Nlc3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmg6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6On5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldERhdGFiYXNlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjphcXVpcmVMb2NrKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaDogQWRkZWQuCisKIDIwMDktMDgtMDcg
IEFkYW0gVHJlYXQgIDxhZGFtLnRyZWF0QHRvcmNobW9iaWxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDY5MDApCisrKyBXZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTA5LDYgKzIxMDksOCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAg
XAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2su
aAogCiBlbHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDY5MDApCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lw
aQkod29ya2luZyBjb3B5KQpAQCAtMjk2Myw2ICsyOTYzLDggQEAKICAgICAgICAgICAgICdzdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCcs
CisgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAorICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5o
JywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDY5
MDApCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zMDU1Niw2ICszMDU1NiwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NjkwMCkKKysr
IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zODQ1LDYgKzM4NDUsOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyogV2Vi
Q29yZU9iakNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0g
Ki87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJh
dGlvbnMiOyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5
c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVB
Njg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJQjVB
Njg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAwRDI0
Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyog
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZDNDYw
MDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyog
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1MDBG
RDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsKIAkJ
QkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyog
RE9NRmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJ
bnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpAQCAt
ODcyMSw2ICs4NzIzLDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVP
YmpDRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2Vi
Q29yZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIx
MEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxl
U3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJFQUEw
MEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZpbGVT
eXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDYsNiArOTgxMCw4IEBACiAJCTFBRTgyRUM5
MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8q
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0MDA3
NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENENjVG
MDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVFMENB
QzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzE3Nyw2ICsxNzE4Myw3IEBA
CiAJCQkJMEZGNTAyNjMxMDJCQTkyQzAwNjZGMzlBIC8qIERPTU1lZGlhSW50ZXJuYWwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjUwMjZBMTAyQkE5NDMwMDY2RjM5QSAvKiBKU01lZGlhLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY1MDI3MjEwMkJBOTZBMDA2NkYzOUEgLyogTWVkaWEuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5MjI0LDYgKzE5MjMxLDcgQEAKIAkJ
CQkwRkY1MDI1QzEwMkJBOTAxMDA2NkYzOUEgLyogRE9NTWVkaWEubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkY1MDI2OTEwMkJBOTQzMDA2NkYzOUEgLyogSlNNZWRpYS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY1MDI3MTEwMkJBOTZBMDA2NkYzOUEgLyogTWVkaWEuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDQ2OTAwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNsdWRl
ICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KICNlbmRpZgogCkBAIC01ODMsNiArNTg0LDExIEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNl
OjpwZXJmb3JtR2V0VGFibGUKICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAorU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCk7Cit9CisKIFN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiB7
CiAgICAgaWYgKG1fZGVsZXRlZCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA0NjkwMCkK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTUUxS
ZXN1bHRTZXQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNs
YXNzIFNRTFZhbHVlOwogICAgIApAQCAtMTE2LDYgKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKKyAgICBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgRGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uKTsKIApJbmRleDogV2ViQ29yZS9zdG9yYWdlL0Rh
dGFiYXNlVGhyZWFkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VU
aHJlYWQuY3BwCShyZXZpc2lvbiA0NjkwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRo
cmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBEYXRhYmFzZVRocmVhZDo6RGF0YWJhc2VUaHJlYWQoKQogICAgIDogbV90aHJl
YWRJRCgwKQorICAgICwgbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKG5ldyBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCkpCiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKIH0KSW5kZXg6IFdlYkNv
cmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFn
ZS9EYXRhYmFzZVRocmVhZC5oCShyZXZpc2lvbiA0NjkwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9NZXNzYWdlUXVldWUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgpAQCAtNDIsNiArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBE
YXRhYmFzZTsKIGNsYXNzIERhdGFiYXNlVGFzazsKIGNsYXNzIERvY3VtZW50OworY2xhc3MgU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvcjsKIAogY2xhc3MgRGF0YWJhc2VUaHJlYWQgOiBwdWJsaWMg
VGhyZWFkU2FmZVNoYXJlZDxEYXRhYmFzZVRocmVhZD4gewogcHVibGljOgpAQCAtNjAsNiArNjIs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWNvcmREYXRhYmFzZUNsb3NlZChEYXRhYmFzZSopOwog
ICAgIFRocmVhZElkZW50aWZpZXIgZ2V0VGhyZWFkSUQoKSB7IHJldHVybiBtX3RocmVhZElEOyB9
CiAKKyAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmdldCgpOyB9CisKIHByaXZhdGU6
CiAgICAgRGF0YWJhc2VUaHJlYWQoKTsKIApAQCAtNzUsNiArNzksOCBAQCBwcml2YXRlOgogICAg
IC8vIFRoaXMgc2V0IGtlZXBzIHRyYWNrIG9mIHRoZSBvcGVuIGRhdGFiYXNlcyB0aGF0IGhhdmUg
YmVlbiB1c2VkIG9uIHRoaXMgdGhyZWFkLgogICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8RGF0
YWJhc2U+ID4gRGF0YWJhc2VTZXQ7CiAgICAgRGF0YWJhc2VTZXQgbV9vcGVuRGF0YWJhc2VTZXQ7
CisKKyAgICBPd25QdHI8U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcj4gbV90cmFuc2FjdGlvbkNv
b3JkaW5hdG9yOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA0NjkwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNs
dWRlICJTUUxTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRDYWxsYmFjay5oIgog
I2luY2x1ZGUgIlNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2suaCIKKyNpbmNsdWRlICJTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKIAogLy8gVGhlcmUn
cyBubyB3YXkgb2Yga25vd2luZyBleGFjdGx5IGhvdyBtdWNoIG1vcmUgc3BhY2Ugd2lsbCBiZSBy
ZXF1aXJlZCB3aGVuIGEgc3RhdGVtZW50IGhpdHMgdGhlIHF1b3RhIGxpbWl0LiAgCkBAIC02Nyw3
ICs2OCw3IEBAIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb24+IFNRTFRyYW5zYWN0aW8KIAogU1FM
VHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKiBkYiwgUGFzc1JlZlB0cjxTUUxU
cmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbkVy
cm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIFBhc3NSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNj
ZXNzQ2FsbGJhY2ssIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiB3cmFwcGVyKQotICAgIDogbV9uZXh0U3RlcCgmU1FMVHJh
bnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKKyAgICA6IG1fbmV4dFN0ZXAo
JlNRTFRyYW5zYWN0aW9uOjphcXVpcmVMb2NrKQogICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChm
YWxzZSkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikKQEAg
LTExNiw4ICsxMTcsOCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjplbnF1ZXVlU3RhdGVtZW50KFBh
CiAjaWZuZGVmIE5ERUJVRwogY29uc3QgY2hhciogU1FMVHJhbnNhY3Rpb246OmRlYnVnU3RlcE5h
bWUoU1FMVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uU3RlcE1ldGhvZCBzdGVwKQogewotICAgIGlm
IChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KQot
ICAgICAgICByZXR1cm4gIm9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCI7CisgICAgaWYgKHN0
ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphcXVpcmVMb2NrKQorICAgICAgICByZXR1cm4gImFxdWly
ZUxvY2siOwogICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1l
bnRzKQogICAgICAgICByZXR1cm4gInJ1blN0YXRlbWVudHMiOwogICAgIGVsc2UgaWYgKHN0ZXAg
PT0gJlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KQpAQCAtMTY0LDcgKzE2NSw3
IEBAIGJvb2wgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0U3RlcCgpCiB7CiAgICAgTE9HKFN0
b3JhZ2VBUEksICJTdGVwICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKIAotICAg
IEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5k
UHJlZmxpZ2h0IHx8CisgICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjph
cXVpcmVMb2NrIHx8CiAgICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpy
dW5TdGF0ZW1lbnRzIHx8CiAgICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
Ojpwb3N0ZmxpZ2h0QW5kQ29tbWl0IHx8CiAgICAgICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRy
YW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzQ2FsbGJhY2sgfHwKQEAgLTE5NSw2ICsxOTYs
MTYgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cGVyZm9ybVBlbmRpbmdDYWxsYgogICAgICAgICAo
dGhpcy0+Km1fbmV4dFN0ZXApKCk7CiB9CiAKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmFxdWlyZUxv
Y2soKQoreworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YXF1aXJl
TG9jayh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQoKQorewor
ICAgIG9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpOworfQorCiB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKQogewogICAgIEFTU0VSVCghbV9kYXRh
YmFzZS0+bV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CkBAIC00NzQs
NiArNDg1LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2VzcwogICAg
IExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGVcbiIsIHRoaXMpOwog
ICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJv
Z3Jlc3MoKSk7CiAgICAgbV9uZXh0U3RlcCA9IDA7CisKKyAgICAvLyBSZWxlYXNlIHRoZSBsb2Nr
IG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9y
KCktPnJlbGVhc2VMb2NrKHRoaXMpOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVU
cmFuc2FjdGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjaykKQEAgLTU0MCw2ICs1NTQsOSBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiAgICAgLy8gTm93IHJlbGVhc2Ug
b3VyIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNr
ID0gMDsKICAgICBtX2Vycm9yQ2FsbGJhY2sgPSAwOworCisgICAgLy8gTm93IHJlbGVhc2UgdGhl
IGxvY2sgb24gdGhpcyBkYXRhYmFzZQorICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA0NjkwMCkKKysrIFdlYkNv
cmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1l
bnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgCiAgICAgICAgICAgICAgICAg
ICAgIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUm
IGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZvaWQg
bG9ja0FxdWlyZWQoKTsKICAgICBib29sIHBlcmZvcm1OZXh0U3RlcCgpOwogICAgIHZvaWQgcGVy
Zm9ybVBlbmRpbmdDYWxsYmFjaygpOwogICAgIApAQCAtODgsNiArODksNyBAQCBwcml2YXRlOgog
ICAgIAogICAgIHZvaWQgY2hlY2tBbmRIYW5kbGVDbG9zZWREYXRhYmFzZSgpOwogICAgIAorICAg
IHZvaWQgYXF1aXJlTG9jaygpOwogICAgIHZvaWQgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0
KCk7CiAgICAgdm9pZCBkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygpOwogICAgIHZvaWQgc2No
ZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRhYmFzZS5oIgorI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6U1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpCisgICAgOiBtX3BlbmRpbmdUcmFuc2FjdGlvbnMobmV3IFRyYW5zYWN0aW9uc0hh
c2hNYXAoKSkKK3sKK30KKworU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6flNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IoKQoreworICAgIGZvciAoVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0
b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmJlZ2luKCk7IGl0ICE9IG1fcGVuZGluZ1Ry
YW5zYWN0aW9ucy0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUqIHBl
bmRpbmdUcmFuc2FjdGlvbnMgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmdldChpdC0+Zmlyc3Qp
OworICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPnJlbW92ZShpdCk7CisgICAgICAgIHBl
bmRpbmdUcmFuc2FjdGlvbnMtPmNsZWFyKCk7CisgICAgICAgIGRlbGV0ZSBwZW5kaW5nVHJhbnNh
Y3Rpb25zOworICAgIH0KK30KKworc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZpZXIo
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIERhdGFiYXNlKiBkYXRhYmFzZSA9
IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAgcmV0
dXJuIGRhdGFiYXNlLT5zZWN1cml0eU9yaWdpbkNvcHkoKS0+ZGF0YWJhc2VJZGVudGlmaWVyKCkg
KyAiOiIgKyBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOworfQorCit2b2lkIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I6OmFxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQoreworICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJh
bnNhY3Rpb24pOworCisgICAgVHJhbnNhY3Rpb25zUXVldWUqIHBlbmRpbmdUcmFuc2FjdGlvbnMg
PSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMtPmdldChkYklkZW50aWZpZXIpOworICAgIGlmICghcGVu
ZGluZ1RyYW5zYWN0aW9ucykgeworICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5zYWN0aW9ucyBm
b3IgdGhpcyBEQgorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zID0gbmV3IFRyYW5zYWN0aW9u
c1F1ZXVlKCk7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy0+YWRkKGRiSWRlbnRpZmll
ciwgcGVuZGluZ1RyYW5zYWN0aW9ucyk7CisgICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMtPmFw
cGVuZCh0cmFuc2FjdGlvbik7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5zYWN0aW9uCisg
ICAgICAgIHRyYW5zYWN0aW9uLT5sb2NrQXF1aXJlZCgpOworICAgIH0gZWxzZQorICAgICAgICAv
LyBBbm90aGVyIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gdGhpcyBEQjsgcHV0IHRoaXMgb25l
IGluIHRoZSBxdWV1ZQorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLT5hcHBlbmQodHJhbnNh
Y3Rpb24pOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VMb2Nr
KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBTdHJpbmcgZGJJZGVudGlmaWVy
ID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKworICAgIFRyYW5zYWN0aW9u
c1F1ZXVlKiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLT5nZXQo
ZGJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucyk7CisgICAgQVNT
RVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLT5pc0VtcHR5KCkpOworCisgICAgLy8gUmVtb3ZlICd0
cmFuc2FjdGlvbicgZnJvbSB0aGUgcXVldWUgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMKKyAgICAv
LyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGlu
IHRoaXMgcXVldWUKKyAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy0+Zmlyc3QoKS5nZXQo
KSA9PSB0cmFuc2FjdGlvbik7CisgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy0+cmVtb3ZlRmlyc3Qo
KTsKKworICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLT5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gTm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRpZmllcidzIHF1
ZXVlCisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy0+cmVtb3ZlKGRiSWRlbnRpZmllcik7
CisgICAgICAgIGRlbGV0ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIFdlIGhhdmUgbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgc3RhcnQgdGhlIG5leHQg
b25lCisgICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMtPmZpcnN0KCktPmxvY2tBcXVpcmVkKCk7
CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cl9oCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBTUUxUcmFu
c2FjdGlvbjsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IgeworICAgIHB1
YmxpYzoKKyAgICAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworICAgICAgICB2aXJ0
dWFsIH5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBh
cXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pOworICAgIHByaXZh
dGU6CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IFRyYW5z
YWN0aW9uc1F1ZXVlOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBUcmFuc2FjdGlv
bnNRdWV1ZSo+IFRyYW5zYWN0aW9uc0hhc2hNYXA7CisgICAgICAgIE93blB0cjxUcmFuc2FjdGlv
bnNIYXNoTWFwPiBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgfTsKK30KKworI2VuZGlmIC8v
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDY5MDApCisr
KyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAor
MjAwOS0wOC0wNyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZ3Jlc3Npb24gdGVz
dC4gVGVzdHMgdGhhdCB0d28gdHJhbnNhY3Rpb25zIHRoYXQgcnVuIG9uIHR3bworICAgICAgICBk
aWZmZXJlbnQgaGFuZGxlcyBmb3IgdGhlIHNhbWUgREIgZG8gbm90IGNhdXNlIGEgZGVhZGxvY2su
CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWc/aWQ9Mjc5NjYKKwor
ICAgICAgICAqIHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5k
bGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9tdWx0aXBsZS10cmFu
c2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogQWRkZWQuCisKIDIwMDktMDgtMDcg
IE1pa2UgRmVudG9uICA8bWlrZS5mZW50b25AdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBs
ZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZl
cmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUaGlzIGlzIGEgdGVzdCB0byBzZWUg
aWYgcXVldWVpbmcgdXAgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRpZmZlcmVudCBoYW5kbGVz
IHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9jay4KK2RiMSByZWFkIHN0
YXRlbWVudCBzdWNjZWVkZWQKK2RiMSB3cml0ZSBzdGF0ZW1lbnQgc3VjY2VlZGVkCitkYjEgdHJh
bnNhY3Rpb24gc3VjY2VlZGVkCitkYjIgcmVhZCBzdGF0ZW1lbnQgc3VjY2VlZGVkCitkYjIgd3Jp
dGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHRyYW5zYWN0aW9uIHN1Y2NlZWRlZAorCkluZGV4
OiBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUt
dHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFu
ZGxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQuYm9keS5p
bm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGNvbXBsZXRlID0gMDsKKwor
ZnVuY3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sKKyAgICBpZiAoKytjb21wbGV0ZSA9PSAyICYm
IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSgpOworfQorCisvLyBXZSBuZWVkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBU
ZXN0IHRhYmxlIGV4aXN0cyBiZWZvcmUgd2UgcnVuIG91ciB0ZXN0LgorLy8gVGhlcmVmb3JlLCB0
aGUgdGVzdCBjb2RlIGlzIGluIHRoZSBzdWNjZXNzQ2FsbGJhY2sgb2YgdGhlIHRyYW5zYWN0aW9u
IHRoYXQgY3JlYXRlcyB0aGUgdGFibGUuCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxE
b25lKCk7CisgICAgfQorICAgIHRyeSB7CisgICAgICAgIHZhciBkYiA9IG9wZW5EYXRhYmFzZSgi
TXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRsZXNUZXN0IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgcXVldWVpbmcgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9u
IGRpZmZlcmVudCBEQiBoYW5kbGVzIGRvZXMgbm90IHJlc3VsdCBpbiBhIGRlYWRsb2NrLiIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMjc2OCk7CisgICAgICAgIGRiLnRyYW5zYWN0
aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KSIsIFtdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHt9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHt9KTsKKyAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDcmVh
dGluZyB0aGUgVGVzdCB0YWJsZSBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAg
ICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZhciBkYjEgPSBvcGVuRGF0YWJh
c2UoIk11bHRpcGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlaW5nIG11
bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIgaGFuZGxlcyBkb2VzIG5vdCByZXN1
bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMzI3NjgpOworICAgICAgICAgICAgICAgIHZhciBkYjIgPSBvcGVuRGF0YWJhc2UoIk11bHRp
cGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJUZXN0IHRvIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlaW5nIG11bHRpcGxlIHRy
YW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgREIgaGFuZGxlcyBkb2VzIG5vdCByZXN1bHQgaW4gYSBk
ZWFkbG9jay4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzI3Njgp
OworCisgICAgICAgICAgICAgICAgaWYgKGRiMSA9PSBkYjIpCisgICAgICAgICAgICAgICAgICAg
IGxvZygiZmFpbHVyZTogZGIxID09IGRiMiIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBkYjEudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIFRlc3Q7
IiwgW10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJl
c3VsdCkgeyBsb2coImRiMSByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQiKTsgfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IGxvZygi
ZGIxIHJlYWQgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVT
ICg/KTsiLCBbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHJlc3VsdCkgeyBsb2coImRiMSB3cml0ZSBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7IH0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikg
eyBsb2coImRiMSB3cml0ZSBzdGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7IH0p
OworICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbG9nKCJkYjEgdHJhbnNhY3Rpb24gZmFpbGVkOiAiICsgZXJyb3IubWVzc2Fn
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2co
ImRiMSB0cmFuc2FjdGlvbiBzdWNjZWVkZWQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNo
ZWNrQ29tcGxldGlvbigpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg
ICAgICAgZGIyLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsIFtdLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHsgbG9n
KCJkYjIgcmVhZCBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7IH0sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBsb2coImRiMiByZWFkIHN0
YXRlbWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQgSU5UTyBUZXN0IFZBTFVFUyAoPyk7IiwgWzJd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQp
IHsgbG9nKCJkYjIgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZCIpOyB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgbG9nKCJkYjIg
d3JpdGUgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKyAgICAgICAg
ICAgICAgICAgICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGxvZygiZGIyIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgICAgICAgICAgICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCJkYjIgdHJhbnNh
Y3Rpb24gc3VjY2VlZGVkIik7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRp
b24oKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSk7CisgIH0gY2F0Y2goZXJyKSB7fQorfQorCis8L3NjcmlwdD4KKzxoZWFkPgorPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBxdWV1ZWlu
ZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhlIHNh
bWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="18467"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34363</attachid>
            <date>2009-08-07 23:29:17 -0700</date>
            <delta_ts>2009-08-10 14:13:43 -0700</delta_ts>
            <desc>patch + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>27881</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0Njk1MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDYgQEAKKzIwMDktMDgtMDcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXhpbmcgYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBv
biB0d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERC
LiBBZGRpbmcgYSBwZXItREIgdGhyZWFkCisgICAgICAgIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9y
IHRoYXQgYWxsb3dzIHRoZSBEQiB0aHJlYWQgdG8gcnVuIG9ubHkgb25lCisgICAgICAgIHRyYW5z
YWN0aW9uIHBlciBEQiBmaWxlIGF0IGFueSBnaXZlbiB0aW1lLgorCisgICAgICAgIEFkZGluZyBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcyBidWcuCisJCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVn
U3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
On5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmdldERhdGFi
YXNlSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjphcXVpcmVMb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3I6OnJlbGVhc2VMb2NrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaDogQWRkZWQuCisKIDIwMDktMDgtMDcgIE9saXZlciBIdW50ICA8b2xpdmVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBBbm90aGVyIGF0dGVtcHQgdG8gZml4IHdpbmRvd3MuCkluZGV4
OiBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHJldmlzaW9uIDQ2OTUwKQorKysgV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjExMCw2ICsyMTEwLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uaCBcCiAJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCBc
CisJV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBcCisJV2ViQ29y
ZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgKIAogZWxzZQpJbmRleDogV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDQ2OTUwKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI5NjIs
NiArMjk2Miw4IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oJywKKyAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2UuY3BwJywK
ICAgICAgICAgICAgICdzdG9yYWdlL1N0b3JhZ2UuaCcsCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9uIDQ2OTUwKQorKysgV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzA1NTYsNiArMzA1NTYsMTQg
QEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
c3RvcmFnZVxTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5cc3RvcmFnZVxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gNDY5NTApCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzg0OSw2ICszODQ5LDggQEAKIAkJ
QjUwRjVCODEwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjUwRjVCODAwRTk2Q0Q5OTAw
QUQ3MUE2IC8qIFdlYkNvcmVPYmpDRXh0cmFzLm1tICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9G
TEFHUyA9ICItV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIjsgfTsgfTsKIAkJQjVBNjg0MjIw
RkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEI1QTY4NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBT
UUxpdGVGaWxlU3lzdGVtLmggKi87IH07CiAJCUI1QTY4NDI0MEZGQUJFQUEwMEQyNDY4OSAvKiBT
UUxpdGVGaWxlU3lzdGVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEI1QTY4NDIzMEZGQUJFQUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNw
cCAqLzsgfTsKKwkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjVDMTEyMzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
Y3BwICovOyB9OworCQlCNUMxMTIzQzEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
aCAqLzsgfTsKIAkJQkMwMEYwMDQwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBFRkZFMEUwQTE4NTUw
MEZEMDRFMyAvKiBET01GaWxlLmggKi87IH07CiAJCUJDMDBGMDA1MEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEVGRkYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gKi87IH07CiAJCUJDMDBG
MDA2MEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDBGMDAwMEUwQTE4NTUwMEZEMDRFMyAv
KiBET01GaWxlSW50ZXJuYWwuaCAqLzsgfTsKQEAgLTg3MjUsNiArODcyNyw4IEBACiAJCUI1MEY1
QjgwMEU5NkNEOTkwMEFENzFBNiAvKiBXZWJDb3JlT2JqQ0V4dHJhcy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkNvcmVPYmpDRXh0cmFzLm1tOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCNUE2ODQyMTBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRl
RmlsZVN5c3RlbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTUUxpdGVGaWxl
U3lzdGVtLmg7IHBhdGggPSBzcWwvU1FMaXRlRmlsZVN5c3RlbS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlCNUE2ODQyMzBGRkFCRUFBMDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3Rl
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTUUxpdGVGaWxlU3lz
dGVtLmNwcDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lzdGVtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQjVDMTEyMzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMEVGRkUwRTBBMTg1NTAwRkQw
NEUzIC8qIERPTUZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NRmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAwRUZGRjBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IERPTUZpbGUubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDBGMDAwMEUwQTE4
NTUwMEZEMDRFMyAvKiBET01GaWxlSW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gRE9NRmlsZUludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC05ODA4LDYgKzk4MTIsOCBAQAogCQkxQUU4MkVDOTBDQUFFMTc3MDAyMjM3QUUgLyogc3RvcmFn
ZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJQjVDMTEy
MzkxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwICovLAor
CQkJCUI1QzExMjNBMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
LmggKi8sCiAJCQkJNTE0MTg1RUQwQ0Q2NUYwNDAwNzYzQzk5IC8qIENoYW5nZVZlcnNpb25XcmFw
cGVyLmNwcCAqLywKIAkJCQk1MTQxODVFQzBDRDY1RjA0MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lv
bldyYXBwZXIuaCAqLywKIAkJCQk1MTk2MTE1RTBDQUM1NjU3MDAxMEE4MEMgLyogRGF0YWJhc2Uu
Y3BwICovLApAQCAtMTcxODUsNiArMTcxOTEsNyBAQAogCQkJCTQ5NDg0RkM4MTAyQ0YyM0MwMDE4
N0REMyAvKiBDYW52YXNQaXhlbEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OTQ4NEZDQjEw
MkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggaW4gSGVhZGVycyAq
LywKIAkJCQk0OTQ4NEZDRTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzU3R5bGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCUI1QzExMjNDMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE5MjM2LDYgKzE5MjQzLDcgQEAKIAkJCQk0
OTQ4NEZDNzEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUGl4ZWxBcnJheS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0OTQ4NEZDQTEwMkNGMjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkNEMTAyQ0YyM0MwMDE4N0REMyAv
KiBDYW52YXNTdHlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlCNUMxMTIzQjEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNDY5NTApCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAi
U1FMaXRlRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1
ZGUgIlNRTFJlc3VsdFNldC5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
aCIKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogI2VuZGlmCiAKQEAgLTU4Myw2ICs1ODQs
MTEgQEAgVmVjdG9yPFN0cmluZz4gRGF0YWJhc2U6OnBlcmZvcm1HZXRUYWJsZQogICAgIHJldHVy
biB0YWJsZU5hbWVzOwogfQogCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiBEYXRhYmFzZTo6
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnQt
PmRhdGFiYXNlVGhyZWFkKCktPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKTsKK30KKwogU3RyaW5n
IERhdGFiYXNlOjp2ZXJzaW9uKCkgY29uc3QKIHsKICAgICBpZiAobV9kZWxldGVkKQpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L0RhdGFiYXNlLmgJKHJldmlzaW9uIDQ2OTUwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDcgQEAgY2xhc3MgRGF0YWJhc2VUaHJlYWQ7
CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIFNRTFJlc3VsdFNldDsKIGNsYXNzIFNRTFRyYW5zYWN0
aW9uQ2FsbGJhY2s7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwogY2xhc3MgU1FM
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogY2xhc3MgU1FMVmFsdWU7CiAgICAgCkBAIC0xMTYs
NiArMTE3LDggQEAgcHVibGljOgogCiAgICAgVmVjdG9yPFN0cmluZz4gcGVyZm9ybUdldFRhYmxl
TmFtZXMoKTsKIAorICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZShEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBleHBlY3RlZFZlcnNpb24p
OwogCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHJldmlzaW9uIDQ2OTUwKQor
KysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzUsMTEgKzM1LDEzIEBACiAjaW5jbHVkZSAiRGF0YWJhc2UuaCIKICNpbmNsdWRlICJEYXRhYmFz
ZVRhc2suaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIERhdGFiYXNlVGhyZWFkOjpE
YXRhYmFzZVRocmVhZCgpCiAgICAgOiBtX3RocmVhZElEKDApCisgICAgLCBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3IobmV3IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSkKIHsKICAgICBtX3Nl
bGZSZWYgPSB0aGlzOwogfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgJKHJldmlzaW9u
IDQ2OTUwKQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CkBAIC00Miw2ICs0Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3MgRGF0YWJhc2VUYXNr
OwogY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwogCiBj
bGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlVGhy
ZWFkPiB7CiBwdWJsaWM6CkBAIC02MCw2ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY29y
ZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNlKik7CiAgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJl
YWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFkSUQ7IH0KIAorICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCk7IH0KKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZVRocmVhZCgpOwogCkBA
IC03NSw2ICs3OSw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBzZXQga2VlcHMgdHJhY2sgb2Yg
dGhlIG9wZW4gZGF0YWJhc2VzIHRoYXQgaGF2ZSBiZWVuIHVzZWQgb24gdGhpcyB0aHJlYWQuCiAg
ICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0cjxEYXRhYmFzZT4gPiBEYXRhYmFzZVNldDsKICAgICBE
YXRhYmFzZVNldCBtX29wZW5EYXRhYmFzZVNldDsKKworICAgIE93blB0cjxTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9u
IDQ2OTUwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgogI2luY2x1
ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNrLmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjay5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNs
dWRlICJTUUxWYWx1ZS5oIgogCiAvLyBUaGVyZSdzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkg
aG93IG11Y2ggbW9yZSBzcGFjZSB3aWxsIGJlIHJlcXVpcmVkIHdoZW4gYSBzdGF0ZW1lbnQgaGl0
cyB0aGUgcXVvdGEgbGltaXQuICAKQEAgLTY3LDcgKzY4LDcgQEAgUGFzc1JlZlB0cjxTUUxUcmFu
c2FjdGlvbj4gU1FMVHJhbnNhY3RpbwogCiBTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24o
RGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNr
LCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
UGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjaywgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBw
ZXIpCi0gICAgOiBtX25leHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5k
UHJlZmxpZ2h0KQorICAgIDogbV9uZXh0U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2Nr
KQogICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkKICAgICAsIG1fZGF0YWJhc2UoZGIp
CiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikKQEAgLTc2LDYgKzc3LDcgQEAgU1FMVHJhbnNhY3Rp
b246OlNRTFRyYW5zYWN0aW9uKERhdGFiYXNlKgogICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9y
Q2FsbGJhY2spCiAgICAgLCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKICAg
ICAsIG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkKKyAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNl
KQogewogICAgIEFTU0VSVChtX2RhdGFiYXNlKTsKIH0KQEAgLTExNiw4ICsxMTgsOCBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uOjplbnF1ZXVlU3RhdGVtZW50KFBhCiAjaWZuZGVmIE5ERUJVRwogY29u
c3QgY2hhciogU1FMVHJhbnNhY3Rpb246OmRlYnVnU3RlcE5hbWUoU1FMVHJhbnNhY3Rpb246OlRy
YW5zYWN0aW9uU3RlcE1ldGhvZCBzdGVwKQogewotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2Fj
dGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KQotICAgICAgICByZXR1cm4gIm9wZW5U
cmFuc2FjdGlvbkFuZFByZWZsaWdodCI7CisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjphY3F1aXJlTG9jaykKKyAgICAgICAgcmV0dXJuICJhY3F1aXJlTG9jayI7CiAgICAgZWxzZSBp
ZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnJ1blN0YXRlbWVudHMpCiAgICAgICAgIHJldHVy
biAicnVuU3RhdGVtZW50cyI7CiAgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
OnBvc3RmbGlnaHRBbmRDb21taXQpCkBAIC0xNTcsNiArMTU5LDkgQEAgdm9pZCBTUUxUcmFuc2Fj
dGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZQogICAgICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uLT5z
dG9wKCk7CiAgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICB9CisKKyAg
ICBpZiAobV9sb2NrQWNxdWlyZWQpCisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CiB9CiAKIApAQCAtMTY0LDcgKzE2OSw3IEBA
IGJvb2wgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0U3RlcCgpCiB7CiAgICAgTE9HKFN0b3Jh
Z2VBUEksICJTdGVwICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKIAotICAgIEFT
U0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJl
ZmxpZ2h0IHx8CisgICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1
aXJlTG9jayB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cnVu
U3RhdGVtZW50cyB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6
cG9zdGZsaWdodEFuZENvbW1pdCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFu
c2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIHx8CkBAIC0xOTUsNiArMjAwLDE3
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1QZW5kaW5nQ2FsbGIKICAgICAgICAgKHRo
aXMtPiptX25leHRTdGVwKSgpOwogfQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9j
aygpCit7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1aXJl
TG9jayh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVkKCkKK3sK
KyAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7CisgICAgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxp
Z2h0KCk7Cit9CisKIHZvaWQgU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZs
aWdodCgpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0ZURhdGFiYXNlLnRyYW5z
YWN0aW9uSW5Qcm9ncmVzcygpKTsKQEAgLTQ3NCw2ICs0OTAsOSBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzCiAgICAgTE9HKFN0b3JhZ2VBUEksICJUcmFuc2FjdGlv
biAlcCBpcyBjb21wbGV0ZVxuIiwgdGhpcyk7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3Nx
bGl0ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKICAgICBtX25leHRTdGVwID0g
MDsKKworICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBkYXRhYmFzZQorICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CiB9CiAK
IHZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxi
YWNrKQpAQCAtNTQwLDYgKzU1OSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clRyYW5zYWMKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgY2FsbGJhY2tzLCB0byBicmVhayByZWZl
cmVuY2UgY3ljbGVzLgogICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIG1fZXJyb3JDYWxsYmFjayA9
IDA7CisKKyAgICAvLyBOb3cgcmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCisgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmgJKHJldmlzaW9uIDQ2OTUwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTczLDYgKzczLDcgQEAgcHVibGljOgogICAgIHZvaWQgZXhlY3V0
ZVNRTChjb25zdCBTdHJpbmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCAKICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRD
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4g
Y2FsbGJhY2tFcnJvciwgRXhjZXB0aW9uQ29kZSYgZSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgCisgICAgdm9pZCBsb2NrQWNxdWlyZWQoKTsKICAgICBib29sIHBl
cmZvcm1OZXh0U3RlcCgpOwogICAgIHZvaWQgcGVyZm9ybVBlbmRpbmdDYWxsYmFjaygpOwogICAg
IApAQCAtODgsNiArODksNyBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY2hlY2tBbmRIYW5k
bGVDbG9zZWREYXRhYmFzZSgpOwogICAgIAorICAgIHZvaWQgYWNxdWlyZUxvY2soKTsKICAgICB2
b2lkIG9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCgpOwogICAgIHZvaWQgZGVsaXZlclRyYW5z
YWN0aW9uQ2FsbGJhY2soKTsKICAgICB2b2lkIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7CkBA
IC0xMjAsNiArMTIyLDcgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8U1FMRXJyb3I+IG1fdHJhbnNh
Y3Rpb25FcnJvcjsKICAgICBib29sIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50OwogICAg
IGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOworICAgIGJvb2wgbV9sb2NrQWNxdWlyZWQ7CiAgICAg
CiAgICAgTXV0ZXggbV9zdGF0ZW1lbnRNdXRleDsKICAgICBEZXF1ZTxSZWZQdHI8U1FMU3RhdGVt
ZW50PiA+IG1fc3RhdGVtZW50UXVldWU7CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIKKyNp
bmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OlNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IoKQoreworfQorCitTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjp+U1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpCit7CisgICAgZm9yIChUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVy
YXRvciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5iZWdpbigpOyBpdCAhPSBtX3BlbmRpbmdU
cmFuc2FjdGlvbnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUqIHBl
bmRpbmdUcmFuc2FjdGlvbnMgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZ2V0KGl0LT5maXJzdCk7
CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUoaXQpOworICAgICAgICBkZWxl
dGUgcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICB9Cit9CisKK3N0YXRpYyBTdHJpbmcgZ2V0RGF0
YWJhc2VJZGVudGlmaWVyKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBEYXRh
YmFzZSogZGF0YWJhc2UgPSB0cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0
YWJhc2UpOworICAgIHJldHVybiBkYXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOworfQorCit2
b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9u
KiB0cmFuc2FjdGlvbikKK3sKKyAgICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJ
ZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKworICAgIFRyYW5zYWN0aW9uc1F1ZXVlKiBwZW5kaW5n
VHJhbnNhY3Rpb25zID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmdldChkYklkZW50aWZpZXIpOwor
ICAgIGlmICghcGVuZGluZ1RyYW5zYWN0aW9ucykgeworICAgICAgICAvLyBObyBwZW5kaW5nIHRy
YW5zYWN0aW9ucyBmb3IgdGhpcyBEQgorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zID0gbmV3
IFRyYW5zYWN0aW9uc1F1ZXVlKCk7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5hZGQo
ZGJJZGVudGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25zKTsKKyAgICAgICAgcGVuZGluZ1RyYW5z
YWN0aW9ucy0+YXBwZW5kKHRyYW5zYWN0aW9uKTsKKworICAgICAgICAvLyBTdGFydCB0aGUgdHJh
bnNhY3Rpb24KKyAgICAgICAgdHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOworICAgIH0gZWxz
ZQorICAgICAgICAvLyBBbm90aGVyIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gdGhpcyBEQjsg
cHV0IHRoaXMgb25lIGluIHRoZSBxdWV1ZQorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLT5h
cHBlbmQodHJhbnNhY3Rpb24pOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6
OnJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBTdHJpbmcg
ZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKworICAg
IFRyYW5zYWN0aW9uc1F1ZXVlKiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gbV9wZW5kaW5nVHJhbnNh
Y3Rpb25zLmdldChkYklkZW50aWZpZXIpOworICAgIEFTU0VSVChwZW5kaW5nVHJhbnNhY3Rpb25z
KTsKKyAgICBBU1NFUlQoIXBlbmRpbmdUcmFuc2FjdGlvbnMtPmlzRW1wdHkoKSk7CisKKyAgICAv
LyBSZW1vdmUgJ3RyYW5zYWN0aW9uJyBmcm9tIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIHRyYW5zYWN0
aW9ucworICAgIC8vICd0cmFuc2FjdGlvbicgc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3QgdHJh
bnNhY3Rpb24gaW4gdGhpcyBxdWV1ZQorICAgIEFTU0VSVChwZW5kaW5nVHJhbnNhY3Rpb25zLT5m
aXJzdCgpLmdldCgpID09IHRyYW5zYWN0aW9uKTsKKyAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLT5y
ZW1vdmVGaXJzdCgpOworICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLT5pc0VtcHR5KCkpIHsK
KyAgICAgICAgLy8gTm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRp
ZmllcidzIHF1ZXVlCisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUoZGJJZGVu
dGlmaWVyKTsKKyAgICAgICAgZGVsZXRlIHBlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBzdGFydCB0
aGUgbmV4dCBvbmUKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy0+Zmlyc3QoKS0+bG9ja0Fj
cXVpcmVkKCk7CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvcl9oCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFz
aC5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFz
cyBTUUxUcmFuc2FjdGlvbjsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpOworICAg
ICAgICB2aXJ0dWFsIH5TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgcmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsK
KyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxTUUxUcmFuc2FjdGlv
bj4gPiBUcmFuc2FjdGlvbnNRdWV1ZTsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
VHJhbnNhY3Rpb25zUXVldWUqPiBUcmFuc2FjdGlvbnNIYXNoTWFwOworICAgICAgICBUcmFuc2Fj
dGlvbnNIYXNoTWFwIG1fcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICB9OworfQorCisjZW5kaWYg
Ly8gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0Njk1MCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBA
CisyMDA5LTA4LTA3ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVncmVzc2lvbiB0
ZXN0LiBUZXN0cyB0aGF0IHR3byB0cmFuc2FjdGlvbnMgdGhhdCBydW4gb24gdHdvCisgICAgICAg
IGRpZmZlcmVudCBoYW5kbGVzIGZvciB0aGUgc2FtZSBEQiBkbyBub3QgY2F1c2UgYSBkZWFkbG9j
ay4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zz9pZD0yNzk2Ngor
CisgICAgICAgICogc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhh
bmRsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL211bHRpcGxlLXRy
YW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sOiBBZGRlZC4KKwogMjAwOS0wOC0w
NyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IENhbWVyb24gWndhcmljaC4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJh
bnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQt
aGFuZGxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdl
L211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIHF1
ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0
aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suCitkYjEgcmVhZCBzdGF0ZW1l
bnQgc3VjY2VlZGVkCitkYjEgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIxIHRyYW5zYWN0
aW9uIHN1Y2NlZWRlZAorZGIyIHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHdyaXRlIHN0
YXRlbWVudCBzdWNjZWVkZWQKK2RiMiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQKKwpJbmRleDogTGF5
b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRs
ZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5z
YWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3Jp
cHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHkuaW5uZXJI
VE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK3ZhciBjb21wbGV0ZSA9IDA7CisKK2Z1bmN0
aW9uIGNoZWNrQ29tcGxldGlvbigpCit7CisgICAgLy8gVGhlIHRlc3Qgc2hvdWxkIGVuZCBhZnRl
ciB0d28gdHJhbnNhY3Rpb25zCisgICAgaWYgKCsrY29tcGxldGUgPT0gMiAmJiB3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKK30KKworLy8gT3BlbnMgdGhlIGRhdGFiYXNlIHVzZWQgaW4gdGhpcyB0ZXN0IGNhc2UK
K2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVuRGF0YWJhc2Uo
Ik11bHRpcGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0IHRvIG1h
a2Ugc3VyZSB0aGF0IHF1ZXVlaW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQg
REIgaGFuZGxlcyBkb2VzIG5vdCByZXN1bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAgICAgICAg
ICAgICAgICAgICAgMzI3NjgpOworfQorCisvLyBSdW5zIGEgdHJhbnNhY3Rpb24gb24gdGhlIGdp
dmVuIGRhdGFiYXNlCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvbihkYiwgZGJOYW1lLCB2YWwpCit7
CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAvLyBFeGVjdXRlIGEg
cmVhZC1vbmx5IHN0YXRlbWVudAorICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCBDT1VOVCgq
KSBGUk9NIFRlc3Q7IiwgW10sCisgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZW1lbnQgc3Vj
Y2VzcyBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7IGxv
ZyhkYk5hbWUgKyAiIHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZCIpOyB9LAorCisgICAgICAgICAg
ICAgICAgICAgICAvLyBzdGF0ZW1lbnQgZmFpbHVyZSBjYWxsYmFjaworICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IGxvZyhkYk5hbWUgKyAiIHJlYWQgc3RhdGVtZW50
IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKworICAgICAgIC8vIEV4ZWN1dGUgYSB3
cml0ZSBzdGF0ZW1lbnQgdG8gbWFrZSBzdXJlIFNRTGl0ZSB0cmllcyB0byBhY3F1aXJlIGFuIGV4
Y2x1c2l2ZSBsb2NrIG9uIHRoZSBEQiBmaWxlCisgICAgICAgdHguZXhlY3V0ZVNxbCgiSU5TRVJU
IElOVE8gVGVzdCBWQUxVRVMgKD8pOyIsIFt2YWxdLAorICAgICAgICAgICAgICAgICAgICAgLy8g
U3RhdGVtZW50IHN1Y2Nlc3MgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KHJlc3VsdCkgeyBsb2coZGJOYW1lICsgIiB3cml0ZSBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7IH0s
CisKKyAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlbWVudCBmYWlsdXJlIGNhbGxiYWNrCisg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgbG9nKGRiTmFtZSArICIg
d3JpdGUgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKyAgICAgICB9
LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAvLyBUcmFuc2FjdGlvbiBmYWlsdXJlIGNh
bGxiYWNrCisgICAgICAgICAgIGxvZyhkYk5hbWUgKyAiIHRyYW5zYWN0aW9uIGZhaWxlZDogIiAr
IGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICAgICB9
LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgLy8gVHJhbnNhY3Rpb24gc3VjY2VzcyBjYWxsYmFj
aworICAgICAgICAgICBsb2coZGJOYW1lICsgIiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQiKTsKKyAg
ICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgfSk7Cit9CisKKy8vIFdlIG5lZWQg
dG8gZ3VhcmFudGVlIHRoYXQgdGhlIFRlc3QgdGFibGUgZXhpc3RzIGJlZm9yZSB3ZSBydW4gb3Vy
IHRlc3QuCisvLyBUaGVyZWZvcmUsIHRoZSB0ZXN0IGNvZGUgaXMgaW4gdGhlIHN1Y2Nlc3NDYWxs
YmFjayBvZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSB0YWJsZS4KK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAg
ICB2YXIgZGIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1
bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIFRlc3QgdGFibGUgaWYgaXQg
ZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJ
RiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIsIFtdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbihyZXN1bHQpIHt9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHt9KTsKKyAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDcmVhdGlu
ZyB0aGUgVGVzdCB0YWJsZSBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAg
IH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBUZXN0IHRhYmxlIHdhcyBj
cmVhdGVkIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERh
dGFiYXNlKCk7CisgICAgICAgICAgICAgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2UoKTsK
KyAgICAgICAgICAgICAgICBpZiAoZGIxID09IGRiMikKKyAgICAgICAgICAgICAgICAgICAgbG9n
KCJmYWlsdXJlOiBkYjEgPT0gZGIyIik7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgImRiMSIsIDEpOworICAgICAgICAgICAg
ICAgICAgICBydW5UcmFuc2FjdGlvbihkYjIsICJkYjIiLCAyKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9KTsKKyAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0PgorPGhl
YWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlm
IHF1ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0
byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34512</attachid>
            <date>2009-08-10 14:13:43 -0700</date>
            <delta_ts>2009-08-10 19:23:56 -0700</delta_ts>
            <desc>same patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>28854</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDgtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXhpbmcgYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBv
biB0d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERC
LiBBZGRpbmcgYSBwZXItREIgdGhyZWFkCisgICAgICAgIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9y
IHRoYXQgYWxsb3dzIHRoZSBEQiB0aHJlYWQgdG8gcnVuIG9ubHkgb25lCisgICAgICAgIHRyYW5z
YWN0aW9uIHBlciBEQiBmaWxlIGF0IGFueSBnaXZlbiB0aW1lLgorCisgICAgICAgIEFkZGluZyBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcyBidWcuCisJCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVn
U3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IEFkZGVkLgorCiAyMDA5
LTA4LTEwICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcwMDApCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTExLDYgKzIxMTEsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaAogCiBlbHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjk2Myw2ICsyOTYzLDggQEAKICAgICAgICAgICAgICdz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2su
aCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFn
ZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDcwMDApCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDU5Niw2ICszMDU5NiwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzAwMCkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zODQ5LDYgKzM4NDksOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyog
V2ViQ29yZU9iakNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMu
bW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiOyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmls
ZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJ
QjVBNjg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZD
NDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1
MDBGRDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsK
IAkJQkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpA
QCAtODcyNSw2ICs4NzI3LDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4
NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVG
aWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJF
QUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2
QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8q
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDgsNiArOTgxMiw4IEBACiAJCTFBRTgy
RUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4
IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0
MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENE
NjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVF
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzE4NSw2ICsxNzE5MSw3
IEBACiAJCQkJNDk0ODRGQzgxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkNCMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkNFMTAyQ0YyM0MwMDE4
N0REMyAvKiBDYW52YXNTdHlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjVDMTEyM0MxMDJCNkM0
NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMTkyMzYsNiArMTkyNDMsNyBAQAogCQkJCTQ5NDg0RkM3MTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNQaXhlbEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkNBMTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDk0ODRGQ0QxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lv
biA0NzAwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVk
ZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjZW5kaWYKIApAQCAtNTgzLDYgKzU4NCwxMSBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFz
ZTo6cGVyZm9ybUdldFRhYmxlCiAgICAgcmV0dXJuIHRhYmxlTmFtZXM7CiB9CiAKK1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpOworfQorCiBTdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAog
ewogICAgIGlmIChtX2RlbGV0ZWQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNDcwMDAp
CisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiAr
NTcsNyBAQCBjbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgU1FM
UmVzdWx0U2V0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25DYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CiBj
bGFzcyBTUUxWYWx1ZTsKICAgICAKQEAgLTExNiw2ICsxMTcsOCBAQCBwdWJsaWM6CiAKICAgICBW
ZWN0b3I8U3RyaW5nPiBwZXJmb3JtR2V0VGFibGVOYW1lcygpOwogCisgICAgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIERhdGFiYXNlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbik7CiAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZVRocmVhZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
VGhyZWFkLmNwcAkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VU
aHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTMgQEAKICNpbmNsdWRlICJE
YXRhYmFzZS5oIgogI2luY2x1ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkxvZ2dpbmcu
aCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogRGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkKICAgICA6IG1fdGhy
ZWFkSUQoMCkKKyAgICAsIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvcihuZXcgU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvcigpKQogewogICAgIG1fc2VsZlJlZiA9IHRoaXM7CiB9CkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUaHJlYWQuaAkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
RGF0YWJhc2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9U
aHJlYWRpbmcuaD4KQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
RGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVRhc2s7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiAKIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGlj
IFRocmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIHB1YmxpYzoKQEAgLTYwLDYgKzYy
LDggQEAgcHVibGljOgogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsK
ICAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsg
fQogCisgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRv
cigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorCiBwcml2YXRl
OgogICAgIERhdGFiYXNlVGhyZWFkKCk7CiAKQEAgLTc1LDYgKzc5LDggQEAgcHJpdmF0ZToKICAg
ICAvLyBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhhdCBoYXZl
IGJlZW4gdXNlZCBvbiB0aGlzIHRocmVhZC4KICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPERh
dGFiYXNlPiA+IERhdGFiYXNlU2V0OwogICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFiYXNlU2V0
OworCisgICAgT3duUHRyPFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25D
b29yZGluYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5j
bHVkZSAiU1FMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIK
ICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKIC8vIFRoZXJl
J3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUg
cmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1pdC4gIApAQCAtNjcs
NyArNjgsNyBAQCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlvCiAKIFNR
TFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FM
VHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3Vj
Y2Vzc0NhbGxiYWNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKLSAgICA6IG1fbmV4dFN0ZXAoJlNRTFRy
YW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCisgICAgOiBtX25leHRTdGVw
KCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAgICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2Vk
KGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fd3JhcHBlcih3cmFwcGVyKQpA
QCAtNzYsMTIgKzc3LDE3IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFz
ZSoKICAgICAsIG1fZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQogICAgICwgbV9zaG91bGRS
ZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX21vZGlmaWVkRGF0YWJhc2UoZmFs
c2UpCisgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKIHsKICAgICBBU1NFUlQobV9kYXRhYmFz
ZSk7CiB9CiAKIFNRTFRyYW5zYWN0aW9uOjp+U1FMVHJhbnNhY3Rpb24oKQogeworICAgIGlmICht
X2xvY2tBY3F1aXJlZCkgeworICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5h
dG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOworICAgICAgICBtX2xvY2tBY3F1aXJlZCA9IGZhbHNl
OworICAgIH0KIH0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTChjb25zdCBTdHJp
bmcmIHNxbFN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNz
UmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrPiBjYWxsYmFja0Vycm9yLCBFeGNlcHRpb25Db2RlJiBlKQpAQCAt
MTE2LDggKzEyMiw4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmVucXVldWVTdGF0ZW1lbnQoUGEK
ICNpZm5kZWYgTkRFQlVHCiBjb25zdCBjaGFyKiBTUUxUcmFuc2FjdGlvbjo6ZGVidWdTdGVwTmFt
ZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0ZXApCiB7Ci0gICAgaWYg
KHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCi0g
ICAgICAgIHJldHVybiAib3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IjsKKyAgICBpZiAoc3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQorICAgICAgICByZXR1cm4gImFjcXVp
cmVMb2NrIjsKICAgICBlbHNlIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVt
ZW50cykKICAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1lbnRzIjsKICAgICBlbHNlIGlmIChzdGVw
ID09ICZTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCkKQEAgLTE1Nyw2ICsxNjMs
MTEgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZQogICAgICAgICBt
X3NxbGl0ZVRyYW5zYWN0aW9uLT5zdG9wKCk7CiAgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24u
Y2xlYXIoKTsKICAgICB9CisKKyAgICBpZiAobV9sb2NrQWNxdWlyZWQpIHsKKyAgICAgICAgbV9k
YXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKKyAg
ICAgICAgbV9sb2NrQWNxdWlyZWQgPSBmYWxzZTsKKyAgICB9CiB9CiAKIApAQCAtMTY0LDcgKzE3
NSw3IEBAIGJvb2wgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0U3RlcCgpCiB7CiAgICAgTE9H
KFN0b3JhZ2VBUEksICJTdGVwICVzXG4iLCBkZWJ1Z1N0ZXBOYW1lKG1fbmV4dFN0ZXApKTsKIAot
ICAgIEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9u
QW5kUHJlZmxpZ2h0IHx8CisgICAgQVNTRVJUKG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjphY3F1aXJlTG9jayB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6cnVuU3RhdGVtZW50cyB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2Fj
dGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZT
UUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIHx8CkBAIC0xOTUsOSAr
MjA2LDIxIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1QZW5kaW5nQ2FsbGIKICAgICAg
ICAgKHRoaXMtPiptX25leHRTdGVwKSgpOwogfQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1
aXJlTG9jaygpCit7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5h
Y3F1aXJlTG9jayh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVk
KCkKK3sKKyAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7CisgICAgb3BlblRyYW5zYWN0aW9uQW5k
UHJlZmxpZ2h0KCk7Cit9CisKIHZvaWQgU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodCgpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0ZURhdGFiYXNl
LnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOwog
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5nIGFuZCBwcmVmbGlnaHRpbmcgdHJhbnNhY3Rp
b24gJXAiLCB0aGlzKTsKIApAQCAtMjczLDYgKzI5Niw4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OnNjaGVkdWxlVG9SdW5TdGF0ZW0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50
cygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIC8vIElmIHRoZXJlIGlz
IGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVkIHVwIHRoYXQgYXJlIGFsbCBzdWNjZXNzZnVs
IGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKICAgICAvLyBTUUxTdGF0ZW1lbnRDYWxsYmFjayBvYmpl
Y3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2ggdGhlIHF1ZXVlCiAgICAgZG8gewpAQCAtNDEx
LDYgKzQzNiw4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUluY3JlYXMKIAog
dm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCgpCiB7ICAgIAorICAgIEFT
U0VSVChtX2xvY2tBY3F1aXJlZCk7CisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDcgLSBQZWZv
cm0gcG9zdGZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgdGhl
eSBmYWlsCiAgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3JtUG9zdGZsaWdo
dCh0aGlzKSkgewogICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBwZXItPnNxbEVy
cm9yKCk7CkBAIC00NjksMTEgKzQ5NiwxNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVy
U3VjY2Vzc0NhbGxiCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3ND
YWxsYmFjaygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIC8vIFRyYW5z
YWN0aW9uIFN0ZXAgMTEgLSBFbmQgdHJhbnNhY3Rpb24gc3RlcHMKICAgICAvLyBUaGVyZSBpcyBu
byBuZXh0IHN0ZXAKICAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVwIGlzIGNvbXBs
ZXRlXG4iLCB0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2Uu
dHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIG1fbmV4dFN0ZXAgPSAwOworCisgICAgLy8g
UmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCisgICAgbV9kYXRhYmFzZS0+dHJhbnNh
Y3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKKyAgICBtX2xvY2tBY3F1aXJl
ZCA9IGZhbHNlOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVy
cm9yKGJvb2wgaW5DYWxsYmFjaykKQEAgLTUxNiw2ICs1NDksOCBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBB
ZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVp
cmVkKTsKKwogICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7
CiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsKICAgICAgICAgLy8gVHJhbnNhY3Rpb24g
U3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbi4KQEAgLTU0MCw2ICs1NzUsMTAgQEAg
dm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhYwogICAgIC8vIE5vdyByZWxl
YXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgbV9jYWxs
YmFjayA9IDA7CiAgICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKworICAgIC8vIE5vdyByZWxlYXNl
IHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOworICAgIG1fbG9ja0FjcXVpcmVkID0gZmFs
c2U7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5oCShyZXZpc2lvbiA0NzAwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4
ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1
ZT4mIGFyZ3VtZW50cywgCiAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJh
Y2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7CiAgICAgYm9v
bCBwZXJmb3JtTmV4dFN0ZXAoKTsKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsK
ICAgICAKQEAgLTg4LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNoZWNrQW5k
SGFuZGxlQ2xvc2VkRGF0YWJhc2UoKTsKICAgICAKKyAgICB2b2lkIGFjcXVpcmVMb2NrKCk7CiAg
ICAgdm9pZCBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKTsKICAgICB2b2lkIGRlbGl2ZXJU
cmFuc2FjdGlvbkNhbGxiYWNrKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygp
OwpAQCAtMTIwLDYgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNRTEVycm9yPiBtX3Ry
YW5zYWN0aW9uRXJyb3I7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsK
ICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKKyAgICBib29sIG1fbG9ja0FjcXVpcmVkOwog
ICAgIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRyPFNRTFN0
YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRGF0YWJhc2UuaCIK
KyNpbmNsdWRlICJTUUxUcmFuc2FjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBTdHJpbmcgZ2V0RGF0YWJhc2VJZGVudGlmaWVyKFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBEYXRhYmFzZSogZGF0YWJhc2UgPSB0cmFu
c2FjdGlvbi0+ZGF0YWJhc2UoKTsKKyAgICBBU1NFUlQoZGF0YWJhc2UpOworICAgIHJldHVybiBk
YXRhYmFzZS0+c3RyaW5nSWRlbnRpZmllcigpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3I6OmFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAg
ICBTdHJpbmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9u
KTsKKworICAgIFRyYW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJh
bnNhY3Rpb25zLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBpZiAoaXQgPT0gbV9wZW5kaW5nVHJh
bnNhY3Rpb25zLmVuZCgpKSB7CisgICAgICAgIC8vIE5vIHBlbmRpbmcgdHJhbnNhY3Rpb25zIGZv
ciB0aGlzIERCCisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlIHBlbmRpbmdUcmFuc2FjdGlvbnM7
CisgICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRyYW5zYWN0aW9uKTsKKyAgICAg
ICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmFkZChkYklkZW50aWZpZXIsIHBlbmRpbmdUcmFuc2Fj
dGlvbnMpOworCisgICAgICAgIC8vIFN0YXJ0IHRoZSB0cmFuc2FjdGlvbgorICAgICAgICB0cmFu
c2FjdGlvbi0+bG9ja0FjcXVpcmVkKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gQW5vdGhl
ciB0cmFuc2FjdGlvbiBpcyBydW5uaW5nIG9uIHRoaXMgREI7IHB1dCB0aGlzIG9uZSBpbiB0aGUg
cXVldWUKKyAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUmIHBlbmRpbmdUcmFuc2FjdGlvbnMgPSBp
dC0+c2Vjb25kOworICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlv
bik7CisgICAgfQorfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnJlbGVhc2VM
b2NrKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikKK3sKKyAgICBTdHJpbmcgZGJJZGVudGlm
aWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKworICAgIFRyYW5zYWN0
aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmZpbmQoZGJJ
ZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nVHJhbnNhY3Rpb25zLmVuZCgp
KTsKKyAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0aW9ucyA9IGl0LT5zZWNv
bmQ7CisgICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSk7CisKKyAgICAv
LyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIGlu
IHRoaXMgcXVldWUKKyAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLmdldCgp
ID09IHRyYW5zYWN0aW9uKTsKKworICAgIC8vIFJlbW92ZSAndHJhbnNhY3Rpb24nIGZyb20gdGhl
IHF1ZXVlIG9mIHBlbmRpbmcgdHJhbnNhY3Rpb25zCisgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5y
ZW1vdmVGaXJzdCgpOworICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHkoKSkKKyAg
ICAgICAgLy8gTm8gbW9yZSBwZW5kaW5nIHRyYW5zYWN0aW9uczsgZGVsZXRlIGRiSWRlbnRpZmll
cidzIHF1ZXVlCisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5yZW1vdmUoaXQpOworICAg
IGVsc2UKKyAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBzdGFy
dCB0aGUgbmV4dCBvbmUKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5maXJzdCgpLT5sb2Nr
QWNxdWlyZWQoKTsKK30KKworfQpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCisjZGVmaW5lIFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3JfaAorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIK
KyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU1FM
VHJhbnNhY3Rpb247CisKKyAgICBjbGFzcyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIHZvaWQgYWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5z
YWN0aW9uKTsKKyAgICAgICAgdm9pZCByZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNh
Y3Rpb24pOworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiA+IFRyYW5zYWN0aW9uc1F1ZXVlOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBUcmFuc2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKKyAgICAgICAg
VHJhbnNhY3Rpb25zSGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgfTsKK30KKwor
I2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
NDcwMDApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwxNSBAQAorMjAwOS0wOC0wNyAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZ3Jl
c3Npb24gdGVzdC4gVGVzdHMgdGhhdCB0d28gdHJhbnNhY3Rpb25zIHRoYXQgcnVuIG9uIHR3bwor
ICAgICAgICBkaWZmZXJlbnQgaGFuZGxlcyBmb3IgdGhlIHNhbWUgREIgZG8gbm90IGNhdXNlIGEg
ZGVhZGxvY2suCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWc/aWQ9
Mjc5NjYKKworICAgICAgICAqIHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZl
cmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFnZS9tdWx0
aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogQWRkZWQuCisKIDIw
MDktMDgtMDcgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVy
ZW50LWhhbmRsZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3Rv
cmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKK1RoaXMgaXMgYSB0ZXN0IHRvIHNlZSBp
ZiBxdWV1ZWluZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMg
dG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLgorZGIxIHJlYWQgc3Rh
dGVtZW50IHN1Y2NlZWRlZAorZGIxIHdyaXRlIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMSB0cmFu
c2FjdGlvbiBzdWNjZWVkZWQKK2RiMiByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMiB3cml0
ZSBzdGF0ZW1lbnQgc3VjY2VlZGVkCitkYjIgdHJhbnNhY3Rpb24gc3VjY2VlZGVkCisKSW5kZXg6
IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1o
YW5kbGVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10
cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5k
bGVzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTIgQEAKKzxodG1sPgorPGhlYWQ+Cis8
c2NyaXB0PgorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1bWVudC5ib2R5Lmlu
bmVySFRNTCArPSBtZXNzYWdlICsgIjxicj4iOworfQorCit2YXIgY29tcGxldGUgPSAwOworCitm
dW5jdGlvbiBjaGVja0NvbXBsZXRpb24oKQoreworICAgIC8vIFRoZSB0ZXN0IHNob3VsZCBlbmQg
YWZ0ZXIgdHdvIHRyYW5zYWN0aW9ucworICAgIGlmICgrK2NvbXBsZXRlID09IDIgJiYgd2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3Rp
ZnlEb25lKCk7Cit9CisKKy8vIE9wZW5zIHRoZSBkYXRhYmFzZSB1c2VkIGluIHRoaXMgdGVzdCBj
YXNlCitmdW5jdGlvbiBvcGVuVGVzdERhdGFiYXNlKCkKK3sKKyAgICByZXR1cm4gb3BlbkRhdGFi
YXNlKCJNdWx0aXBsZVRyYW5zYWN0aW9uc09uRGlmZmVyZW50SGFuZGxlc1Rlc3QiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIjEuMCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGVzdCB0
byBtYWtlIHN1cmUgdGhhdCBxdWV1ZWluZyBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVy
ZW50IERCIGhhbmRsZXMgZG9lcyBub3QgcmVzdWx0IGluIGEgZGVhZGxvY2suIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIDMyNzY4KTsKK30KKworLy8gUnVucyBhIHRyYW5zYWN0aW9uIG9uIHRo
ZSBnaXZlbiBkYXRhYmFzZQorZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb24oZGIsIGRiTmFtZSwgdmFs
KQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgLy8gRXhlY3V0
ZSBhIHJlYWQtb25seSBzdGF0ZW1lbnQKKyAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxFQ1QgQ09V
TlQoKikgRlJPTSBUZXN0OyIsIFtdLAorICAgICAgICAgICAgICAgICAgICAgLy8gc3RhdGVtZW50
IHN1Y2Nlc3MgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkg
eyBsb2coZGJOYW1lICsgIiByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQiKTsgfSwKKworICAgICAg
ICAgICAgICAgICAgICAgLy8gc3RhdGVtZW50IGZhaWx1cmUgY2FsbGJhY2sKKyAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBsb2coZGJOYW1lICsgIiByZWFkIHN0YXRl
bWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsgfSk7CisKKyAgICAgICAvLyBFeGVjdXRl
IGEgd3JpdGUgc3RhdGVtZW50IHRvIG1ha2Ugc3VyZSBTUUxpdGUgdHJpZXMgdG8gYWNxdWlyZSBh
biBleGNsdXNpdmUgbG9jayBvbiB0aGUgREIgZmlsZQorICAgICAgIHR4LmV4ZWN1dGVTcWwoIklO
U0VSVCBJTlRPIFRlc3QgVkFMVUVTICg/KTsiLCBbdmFsXSwKKyAgICAgICAgICAgICAgICAgICAg
IC8vIFN0YXRlbWVudCBzdWNjZXNzIGNhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbihyZXN1bHQpIHsgbG9nKGRiTmFtZSArICIgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZCIp
OyB9LAorCisgICAgICAgICAgICAgICAgICAgICAvLyBTdGF0ZW1lbnQgZmFpbHVyZSBjYWxsYmFj
aworICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IGxvZyhkYk5hbWUg
KyAiIHdyaXRlIHN0YXRlbWVudCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsgfSk7CisgICAg
ICAgfSwgZnVuY3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgLy8gVHJhbnNhY3Rpb24gZmFpbHVy
ZSBjYWxsYmFjaworICAgICAgICAgICBsb2coZGJOYW1lICsgIiB0cmFuc2FjdGlvbiBmYWlsZWQ6
ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAg
ICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgIC8vIFRyYW5zYWN0aW9uIHN1Y2Nlc3MgY2Fs
bGJhY2sKKyAgICAgICAgICAgbG9nKGRiTmFtZSArICIgdHJhbnNhY3Rpb24gc3VjY2VlZGVkIik7
CisgICAgICAgICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgICAgIH0pOworfQorCisvLyBXZSBu
ZWVkIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBUZXN0IHRhYmxlIGV4aXN0cyBiZWZvcmUgd2UgcnVu
IG91ciB0ZXN0LgorLy8gVGhlcmVmb3JlLCB0aGUgdGVzdCBjb2RlIGlzIGluIHRoZSBzdWNjZXNz
Q2FsbGJhY2sgb2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgdGFibGUuCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdHJ5IHsKKyAg
ICAgICAgdmFyIGRiID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICBkYi50cmFuc2FjdGlv
bihmdW5jdGlvbih0eCkgeworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBUZXN0IHRhYmxlIGlm
IGl0IGRvZXMgbm90IGV4aXN0CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFC
TEUgSUYgTk9UIEVYSVNUUyBUZXN0IChGb28gaW50KTsiLCBbXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24ocmVzdWx0KSB7fSwgZnVuY3Rpb24odHgsIGVycm9yKSB7fSk7Cisg
ICAgICAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxvZygiQ3Jl
YXRpbmcgdGhlIFRlc3QgdGFibGUgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgVGVzdCB0YWJsZSB3
YXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICB2YXIgZGIxID0gb3BlblRl
c3REYXRhYmFzZSgpOworICAgICAgICAgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNl
KCk7CisgICAgICAgICAgICAgICAgaWYgKGRiMSA9PSBkYjIpCisgICAgICAgICAgICAgICAgICAg
IGxvZygiZmFpbHVyZTogZGIxID09IGRiMiIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBydW5UcmFuc2FjdGlvbihkYjEsICJkYjEiLCAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgcnVuVHJhbnNhY3Rpb24oZGIyLCAiZGIyIiwgMik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSk7CisgICAgfSBjYXRjaChlcnIpIHt9Cit9Cis8L3NjcmlwdD4K
KzxoZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgaXMgYSB0ZXN0IHRvIHNl
ZSBpZiBxdWV1ZWluZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRs
ZXMgdG8gdGhlIHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34535</attachid>
            <date>2009-08-10 19:23:56 -0700</date>
            <delta_ts>2009-08-12 15:41:03 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30566</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzAwMCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDgtMTAgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXhpbmcgYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBv
biB0d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERC
LiBBZGRpbmcgYSBwZXItREIgdGhyZWFkCisgICAgICAgIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9y
IHRoYXQgYWxsb3dzIHRoZSBEQiB0aHJlYWQgdG8gcnVuIG9ubHkgb25lCisgICAgICAgIHRyYW5z
YWN0aW9uIHBlciBEQiBmaWxlIGF0IGFueSBnaXZlbiB0aW1lLgorCisgICAgICAgIEFkZGluZyBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcyBidWcuCisJCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVn
U3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IEFkZGVkLgorCiAyMDA5
LTA4LTEwICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcwMDApCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTExLDYgKzIxMTEsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaAogCiBlbHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjk2Myw2ICsyOTYzLDggQEAKICAgICAgICAgICAgICdz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2su
aCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFn
ZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDcwMDApCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDU5Niw2ICszMDU5NiwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzAwMCkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zODQ5LDYgKzM4NDksOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyog
V2ViQ29yZU9iakNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMu
bW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiOyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmls
ZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJ
QjVBNjg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZD
NDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1
MDBGRDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsK
IAkJQkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpA
QCAtODcyNSw2ICs4NzI3LDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4
NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVG
aWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJF
QUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2
QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8q
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MDgsNiArOTgxMiw4IEBACiAJCTFBRTgy
RUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4
IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0
MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENE
NjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVF
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzE4NSw2ICsxNzE5MSw3
IEBACiAJCQkJNDk0ODRGQzgxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1BpeGVsQXJyYXkuaCBp
biBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkNCMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5NDg0RkNFMTAyQ0YyM0MwMDE4
N0REMyAvKiBDYW52YXNTdHlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQjVDMTEyM0MxMDJCNkM0
NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpA
QCAtMTkyMzYsNiArMTkyNDMsNyBAQAogCQkJCTQ5NDg0RkM3MTAyQ0YyM0MwMDE4N0REMyAvKiBD
YW52YXNQaXhlbEFycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5NDg0RkNBMTAyQ0YyM0Mw
MDE4N0REMyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNDk0ODRGQ0QxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0eWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUI1QzExMjNCMTAyQjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3Jk
aW5hdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lv
biA0NzAwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAjaW5jbHVk
ZSAiU1FMaXRlU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCisjaW5jbHVk
ZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAjZW5kaWYKIApAQCAtNTM5LDEyICs1NDAsMTUgQEAgdm9pZCBEYXRhYmFzZTo6c2NoZWR1
bGVUcmFuc2FjdGlvbigpCiAgICAgICAgIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzID0gZmFsc2U7
CiB9CiAKLXZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbikKK3ZvaWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25TdGVw
KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVseSkKIHsKICAgICBp
ZiAobV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkgewogICAgICAgICBSZWZQdHI8RGF0YWJh
c2VUcmFuc2FjdGlvblRhc2s+IHRhc2sgPSBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzazo6Y3JlYXRl
KHRyYW5zYWN0aW9uKTsKICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFi
YXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0aGUgdHJhbnNhY3Rpb24gc3RlcFxuIiwgdGFzay5n
ZXQoKSk7Ci0gICAgICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlVGFz
ayh0YXNrLnJlbGVhc2UoKSk7CisgICAgICAgIGlmIChpbW1lZGlhdGVseSkKKyAgICAgICAgICAg
IG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCktPnNjaGVkdWxlSW1tZWRpYXRlVGFzayh0YXNr
LnJlbGVhc2UoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZG9jdW1lbnQtPmRhdGFi
YXNlVGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJlbGVhc2UoKSk7CiAgICAgfQogfQogCkBA
IC01ODMsNiArNTg3LDExIEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNlOjpwZXJmb3JtR2V0VGFi
bGUKICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAorU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ciogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdAoreworICAgIHJldHVy
biBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCk7
Cit9CisKIFN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiB7CiAgICAgaWYgKG1fZGVs
ZXRlZCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA0NzAwMCkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw3IEBAIGNsYXNzIERh
dGFiYXNlVGhyZWFkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTUUxSZXN1bHRTZXQ7CiBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNsYXNzIFNRTFZhbHVlOwog
ICAgIApAQCAtMTE2LDYgKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIFZlY3RvcjxTdHJpbmc+IHBl
cmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKKyAgICBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKiB0
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgRGF0YWJhc2Uo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgZXhw
ZWN0ZWRWZXJzaW9uKTsKIApAQCAtMTIzLDcgKzEyNiw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb25DYWxs
YmFjayhTUUxUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAo
U1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsKKyAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rp
b25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBpbW1lZGlhdGVseSA9IGZh
bHNlKTsKICAgICAKICAgICBNZXNzYWdlUXVldWU8UmVmUHRyPFNRTFRyYW5zYWN0aW9uPiA+IG1f
dHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzc011dGV4
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCShyZXZpc2lvbiA0NzAwMCkKKysr
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDExICszNSwxMyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiRGF0YWJhc2VU
YXNrLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEYXRhYmFzZVRocmVhZDo6RGF0
YWJhc2VUaHJlYWQoKQogICAgIDogbV90aHJlYWRJRCgwKQorICAgICwgbV90cmFuc2FjdGlvbkNv
b3JkaW5hdG9yKG5ldyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkpCiB7CiAgICAgbV9zZWxm
UmVmID0gdGhpczsKIH0KQEAgLTk3LDYgKzk5LDkgQEAgdm9pZCogRGF0YWJhc2VUaHJlYWQ6OmRh
dGFiYXNlVGhyZWFkKCkKICAgICAgICAgcG9vbC5jeWNsZSgpOwogICAgIH0KIAorICAgIC8vIENs
ZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGRhdGFi
YXNlIHRocmVhZAorICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+c2h1dGRvd24oKTsKKwog
ICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVhZCAlaSBhbmQgY2xlYXIg
dGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVudGx5IGhhcyAlaSByZWYo
cykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAgIC8vIENsb3NlIHRoZSBk
YXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlzIGVuc3VyZXMgdGhhdCBp
ZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFyZSByb2xsZWQgYmFjayBh
bmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCkluZGV4OiBXZWJDb3JlL3N0b3Jh
Z2UvRGF0YWJhc2VUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2VUaHJlYWQuaAkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VU
aHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTWVzc2Fn
ZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgRGF0YWJhc2U7
CiBjbGFzcyBEYXRhYmFzZVRhc2s7CiBjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CiAKIGNsYXNzIERhdGFiYXNlVGhyZWFkIDogcHVibGljIFRocmVhZFNh
ZmVTaGFyZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIHB1YmxpYzoKQEAgLTYwLDYgKzYyLDggQEAgcHVi
bGljOgogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJhc2UqKTsKICAgICBUaHJl
YWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJlYWRJRDsgfQogCisgICAg
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIHsgcmV0
dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorCiBwcml2YXRlOgogICAgIERh
dGFiYXNlVGhyZWFkKCk7CiAKQEAgLTc1LDYgKzc5LDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGlz
IHNldCBrZWVwcyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhhdCBoYXZlIGJlZW4gdXNl
ZCBvbiB0aGlzIHRocmVhZC4KICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVmUHRyPERhdGFiYXNlPiA+
IERhdGFiYXNlU2V0OwogICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFiYXNlU2V0OworCisgICAg
T3duUHRyPFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNhY3Rpb25Db29yZGluYXRv
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uLmNwcAkocmV2aXNpb24gNDcwMDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU1FM
U3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJhY2suaCIKICNpbmNsdWRl
ICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKIC8vIFRoZXJlJ3Mgbm8gd2F5
IG9mIGtub3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdpbGwgYmUgcmVxdWlyZWQg
d2hlbiBhIHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1pdC4gIApAQCAtNjcsNyArNjgsNyBA
QCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlvCiAKIFNRTFRyYW5zYWN0
aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rp
b25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxi
YWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxi
YWNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNRTFRyYW5z
YWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKLSAgICA6IG1fbmV4dFN0ZXAoJlNRTFRyYW5zYWN0aW9u
OjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCisgICAgOiBtX25leHRTdGVwKCZTUUxUcmFu
c2FjdGlvbjo6YWNxdWlyZUxvY2spCiAgICAgLCBtX2V4ZWN1dGVTcWxBbGxvd2VkKGZhbHNlKQog
ICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fd3JhcHBlcih3cmFwcGVyKQpAQCAtNzYsNiAr
NzcsNyBAQCBTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqCiAgICAgLCBt
X2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKICAgICAsIG1fc2hvdWxkUmV0cnlDdXJyZW50
U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQorICAgICwg
bV9sb2NrQWNxdWlyZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2UpOwogfQpAQCAt
MTE2LDcgKzExOCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmVucXVldWVTdGF0ZW1lbnQoUGEK
ICNpZm5kZWYgTkRFQlVHCiBjb25zdCBjaGFyKiBTUUxUcmFuc2FjdGlvbjo6ZGVidWdTdGVwTmFt
ZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0ZXApCiB7Ci0gICAgaWYg
KHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCisg
ICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaykKKyAgICAgICAgcmV0
dXJuICJhY3F1aXJlTG9jayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKICAgICAgICAgcmV0dXJuICJvcGVuVHJhbnNh
Y3Rpb25BbmRQcmVmbGlnaHQiOwogICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9u
OjpydW5TdGF0ZW1lbnRzKQogICAgICAgICByZXR1cm4gInJ1blN0YXRlbWVudHMiOwpAQCAtMTU3
LDYgKzE2MSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2UKICAg
ICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+c3RvcCgpOwogICAgICAgICBtX3NxbGl0ZVRyYW5z
YWN0aW9uLmNsZWFyKCk7CiAgICAgfQorCisgICAgaWYgKG1fbG9ja0FjcXVpcmVkKQorICAgICAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMp
OwogfQogCiAKQEAgLTE2NCw3ICsxNzEsOCBAQCBib29sIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3Jt
TmV4dFN0ZXAoKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAlc1xuIiwgZGVidWdTdGVw
TmFtZShtX25leHRTdGVwKSk7CiAKLSAgICBBU1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNh
Y3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCB8fAorICAgIEFTU0VSVChtX25leHRT
dGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2sgfHwKKyAgICAgICAgICAgbV9uZXh0
U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCB8fAog
ICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50cyB8
fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFu
ZENvbW1pdCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6Y2xl
YW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIHx8CkBAIC0xOTUsOSArMjAzLDIzIEBAIHZvaWQgU1FM
VHJhbnNhY3Rpb246OnBlcmZvcm1QZW5kaW5nQ2FsbGIKICAgICAgICAgKHRoaXMtPiptX25leHRT
dGVwKSgpOwogfQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9jaygpCit7CisgICAg
bV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1aXJlTG9jayh0aGlzKTsK
K30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVkKCkKK3sKKyAgICBtX2xvY2tB
Y3F1aXJlZCA9IHRydWU7CisgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0OworICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBv
cGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uU3RlcCh0aGlz
LCB0cnVlKTsKK30KKwogdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJl
ZmxpZ2h0KCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRlRGF0YWJhc2UudHJh
bnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7CiAKICAg
ICBMT0coU3RvcmFnZUFQSSwgIk9wZW5pbmcgYW5kIHByZWZsaWdodGluZyB0cmFuc2FjdGlvbiAl
cCIsIHRoaXMpOwogCkBAIC0yNzMsNiArMjk1LDggQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6c2No
ZWR1bGVUb1J1blN0YXRlbQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKCkK
IHsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCiAgICAgLy8gSWYgdGhlcmUgaXMgYSBz
ZXJpZXMgb2Ygc3RhdGVtZW50cyBxdWV1ZWQgdXAgdGhhdCBhcmUgYWxsIHN1Y2Nlc3NmdWwgYW5k
IGhhdmUgbm8gYXNzb2NpYXRlZAogICAgIC8vIFNRTFN0YXRlbWVudENhbGxiYWNrIG9iamVjdHMs
IHRoZW4gd2UgY2FuIGJ1cm4gdGhyb3VnaCB0aGUgcXVldWUKICAgICBkbyB7CkBAIC00MTEsNiAr
NDM1LDggQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3RhSW5jcmVhcwogCiB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KCkKIHsgICAgCisgICAgQVNTRVJU
KG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNyAtIFBlZm9ybSBw
b3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxsYmFjayBpZiB0aGV5IGZh
aWwKICAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZvcm1Qb3N0ZmxpZ2h0KHRo
aXMpKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fd3JhcHBlci0+c3FsRXJyb3Io
KTsKQEAgLTQ2OSwxMSArNDk1LDE2IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNj
ZXNzQ2FsbGIKIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxi
YWNrKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCiAgICAgLy8gVHJhbnNhY3Rp
b24gU3RlcCAxMSAtIEVuZCB0cmFuc2FjdGlvbiBzdGVwcwogICAgIC8vIFRoZXJlIGlzIG5vIG5l
eHQgc3RlcAogICAgIExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24gJXAgaXMgY29tcGxldGVc
biIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+bV9zcWxpdGVEYXRhYmFzZS50cmFu
c2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgbV9uZXh0U3RlcCA9IDA7CisKKyAgICAvLyBSZWxl
YXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOwogfQogCiB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjaykKQEAgLTUxNiw2ICs1
NDcsOCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25FCiAKIHZvaWQg
U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpCiB7
CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIG1fZGF0YWJhc2UtPm1fZGF0YWJh
c2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24pIHsK
ICAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNrIHRoZSB0cmFuc2FjdGlv
bi4KQEAgLTU0MCw2ICs1NzMsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJU
cmFuc2FjCiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJl
bmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNrID0gMDsKICAgICBtX2Vycm9yQ2FsbGJhY2sgPSAw
OworCisgICAgLy8gTm93IHJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBkYXRhYmFzZQorICAgIG1f
ZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFzZUxvY2sodGhpcyk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
CShyZXZpc2lvbiA0NzAwMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGV4ZWN1dGVT
UUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFy
Z3VtZW50cywgCiAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGNh
bGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7CiAgICAgYm9vbCBwZXJm
b3JtTmV4dFN0ZXAoKTsKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2FsbGJhY2soKTsKICAgICAK
QEAgLTg4LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNoZWNrQW5kSGFuZGxl
Q2xvc2VkRGF0YWJhc2UoKTsKICAgICAKKyAgICB2b2lkIGFjcXVpcmVMb2NrKCk7CiAgICAgdm9p
ZCBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKTsKICAgICB2b2lkIGRlbGl2ZXJUcmFuc2Fj
dGlvbkNhbGxiYWNrKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwpAQCAt
MTIwLDYgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNRTEVycm9yPiBtX3RyYW5zYWN0
aW9uRXJyb3I7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBi
b29sIG1fbW9kaWZpZWREYXRhYmFzZTsKKyAgICBib29sIG1fbG9ja0FjcXVpcmVkOwogICAgIAog
ICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVmUHRyPFNRTFN0YXRlbWVu
dD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRhdGFiYXNlLmgiCisjaW5j
bHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRpZmllcihTUUxUcmFuc2Fj
dGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0gdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAgICByZXR1cm4gZGF0YWJh
c2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5h
dG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgU3Ry
aW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0cmFuc2FjdGlvbik7CisK
KyAgICBUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5maW5kKGRiSWRlbnRpZmllcik7CisgICAgaWYgKGl0ID09IG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5lbmQoKSkgeworICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5zYWN0aW9ucyBmb3IgdGhp
cyBEQgorICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJhbnNhY3Rpb25zOworICAg
ICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlvbik7CisgICAgICAgIG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCBwZW5kaW5nVHJhbnNhY3Rpb25z
KTsKKworICAgICAgICAvLyBTdGFydCB0aGUgdHJhbnNhY3Rpb24KKyAgICAgICAgdHJhbnNhY3Rp
b24tPmxvY2tBY3F1aXJlZCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEFub3RoZXIgdHJh
bnNhY3Rpb24gaXMgcnVubmluZyBvbiB0aGlzIERCOyBwdXQgdGhpcyBvbmUgaW4gdGhlIHF1ZXVl
CisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNl
Y29uZDsKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24pOwor
ICAgIH0KK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOjpyZWxlYXNlTG9jayhT
UUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBkYklkZW50aWZp
ZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOworCisgICAgVHJhbnNhY3Rp
b25zSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklk
ZW50aWZpZXIpOworICAgIEFTU0VSVChpdCAhPSBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkp
OworICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rpb25zID0gaXQtPnNlY29u
ZDsKKyAgICBBU1NFUlQoIXBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKTsKKworICAgIC8v
ICd0cmFuc2FjdGlvbicgc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3QgdHJhbnNhY3Rpb24gaW4g
dGhpcyBxdWV1ZQorICAgIEFTU0VSVChwZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCkuZ2V0KCkg
PT0gdHJhbnNhY3Rpb24pOworCisgICAgLy8gUmVtb3ZlICd0cmFuc2FjdGlvbicgZnJvbSB0aGUg
cXVldWUgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMKKyAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLnJl
bW92ZUZpcnN0KCk7CisgICAgaWYgKHBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAg
ICAgICAvLyBObyBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBkZWxldGUgZGJJZGVudGlmaWVy
J3MgcXVldWUKKyAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJlbW92ZShpdCk7CisgICAg
ZWxzZQorICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7IHN0YXJ0
IHRoZSBuZXh0IG9uZQorICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmZpcnN0KCktPmxvY2tB
Y3F1aXJlZCgpOworfQorCit2b2lkIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I6OnNodXRkb3du
KCkKK3sKKyAgICAvLyBDbGVhbiB1cCBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMgZm9yIGFsbCBk
YXRhYmFzZXMKKyAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuY2xlYXIoKTsKK30KKworfQpJbmRl
eDogV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
cl9oCisjZGVmaW5lIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAorCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4K
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisgICAgY2xhc3MgU1FMVHJhbnNhY3Rpb247CisKKyAgICBjbGFz
cyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZvaWQg
YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsKKyAgICAgICAgdm9pZCBy
ZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pOworICAgICAgICB2b2lkIHNo
dXRkb3duKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBEZXF1ZTxSZWZQdHI8U1FM
VHJhbnNhY3Rpb24+ID4gVHJhbnNhY3Rpb25zUXVldWU7CisgICAgICAgIHR5cGVkZWYgSGFzaE1h
cDxTdHJpbmcsIFRyYW5zYWN0aW9uc1F1ZXVlPiBUcmFuc2FjdGlvbnNIYXNoTWFwOworICAgICAg
ICBUcmFuc2FjdGlvbnNIYXNoTWFwIG1fcGVuZGluZ1RyYW5zYWN0aW9uczsKKyAgICB9OworfQor
CisjZW5kaWYgLy8gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcl9oCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biA0NzAwMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE1IEBACisyMDA5LTA4LTA3ICBEdW1pdHJ1IERhbmlsaXVjICA8ZHVtaUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVn
cmVzc2lvbiB0ZXN0LiBUZXN0cyB0aGF0IHR3byB0cmFuc2FjdGlvbnMgdGhhdCBydW4gb24gdHdv
CisgICAgICAgIGRpZmZlcmVudCBoYW5kbGVzIGZvciB0aGUgc2FtZSBEQiBkbyBub3QgY2F1c2Ug
YSBkZWFkbG9jay4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zz9p
ZD0yNzk2NgorCisgICAgICAgICogc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlm
ZmVyZW50LWhhbmRsZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdG9yYWdlL211
bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sOiBBZGRlZC4KKwog
MjAwOS0wOC0wNyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlw
bGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9z
dG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorVGhpcyBpcyBhIHRlc3QgdG8gc2Vl
IGlmIHF1ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxl
cyB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suCitkYjEgcmVhZCBz
dGF0ZW1lbnQgc3VjY2VlZGVkCitkYjEgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIxIHRy
YW5zYWN0aW9uIHN1Y2NlZWRlZAorZGIyIHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHdy
aXRlIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQKKwpJbmRl
eDogTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhh
bmRsZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHku
aW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK3ZhciBjb21wbGV0ZSA9IDA7CisK
K2Z1bmN0aW9uIGNoZWNrQ29tcGxldGlvbigpCit7CisgICAgLy8gVGhlIHRlc3Qgc2hvdWxkIGVu
ZCBhZnRlciB0d28gdHJhbnNhY3Rpb25zCisgICAgaWYgKCsrY29tcGxldGUgPT0gMiAmJiB3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKworLy8gT3BlbnMgdGhlIGRhdGFiYXNlIHVzZWQgaW4gdGhpcyB0ZXN0
IGNhc2UKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVuRGF0
YWJhc2UoIk11bHRpcGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRvIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlaW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZm
ZXJlbnQgREIgaGFuZGxlcyBkb2VzIG5vdCByZXN1bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgMzI3NjgpOworfQorCisvLyBSdW5zIGEgdHJhbnNhY3Rpb24gb24g
dGhlIGdpdmVuIGRhdGFiYXNlCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvbihkYiwgZGJOYW1lLCB2
YWwpCit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAvLyBFeGVj
dXRlIGEgcmVhZC1vbmx5IHN0YXRlbWVudAorICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCBD
T1VOVCgqKSBGUk9NIFRlc3Q7IiwgW10sCisgICAgICAgICAgICAgICAgICAgICAvLyBzdGF0ZW1l
bnQgc3VjY2VzcyBjYWxsYmFjaworICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24ocmVzdWx0
KSB7IGxvZyhkYk5hbWUgKyAiIHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZCIpOyB9LAorCisgICAg
ICAgICAgICAgICAgICAgICAvLyBzdGF0ZW1lbnQgZmFpbHVyZSBjYWxsYmFjaworICAgICAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IGxvZyhkYk5hbWUgKyAiIHJlYWQgc3Rh
dGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKworICAgICAgIC8vIEV4ZWN1
dGUgYSB3cml0ZSBzdGF0ZW1lbnQgdG8gbWFrZSBzdXJlIFNRTGl0ZSB0cmllcyB0byBhY3F1aXJl
IGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBEQiBmaWxlCisgICAgICAgdHguZXhlY3V0ZVNxbCgi
SU5TRVJUIElOVE8gVGVzdCBWQUxVRVMgKD8pOyIsIFt2YWxdLAorICAgICAgICAgICAgICAgICAg
ICAgLy8gU3RhdGVtZW50IHN1Y2Nlc3MgY2FsbGJhY2sKKyAgICAgICAgICAgICAgICAgICAgIGZ1
bmN0aW9uKHJlc3VsdCkgeyBsb2coZGJOYW1lICsgIiB3cml0ZSBzdGF0ZW1lbnQgc3VjY2VlZGVk
Iik7IH0sCisKKyAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXRlbWVudCBmYWlsdXJlIGNhbGxi
YWNrCisgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgbG9nKGRiTmFt
ZSArICIgd3JpdGUgc3RhdGVtZW50IGZhaWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOyB9KTsKKyAg
ICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAvLyBUcmFuc2FjdGlvbiBmYWls
dXJlIGNhbGxiYWNrCisgICAgICAgICAgIGxvZyhkYk5hbWUgKyAiIHRyYW5zYWN0aW9uIGZhaWxl
ZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAg
ICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgLy8gVHJhbnNhY3Rpb24gc3VjY2VzcyBj
YWxsYmFjaworICAgICAgICAgICBsb2coZGJOYW1lICsgIiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQi
KTsKKyAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgfSk7Cit9CisKKy8vIFdl
IG5lZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIFRlc3QgdGFibGUgZXhpc3RzIGJlZm9yZSB3ZSBy
dW4gb3VyIHRlc3QuCisvLyBUaGVyZWZvcmUsIHRoZSB0ZXN0IGNvZGUgaXMgaW4gdGhlIHN1Y2Nl
c3NDYWxsYmFjayBvZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSB0YWJsZS4KK2Z1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikg
eworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgewor
ICAgICAgICB2YXIgZGIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiLnRyYW5zYWN0
aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIFRlc3QgdGFibGUg
aWYgaXQgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBU
QUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIsIFtdLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHt9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHt9KTsK
KyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJD
cmVhdGluZyB0aGUgVGVzdCB0YWJsZSBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAg
ICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBUZXN0IHRhYmxl
IHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIHZhciBkYjEgPSBvcGVu
VGVzdERhdGFiYXNlKCk7CisgICAgICAgICAgICAgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJh
c2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGIxID09IGRiMikKKyAgICAgICAgICAgICAgICAg
ICAgbG9nKCJmYWlsdXJlOiBkYjEgPT0gZGIyIik7CisgICAgICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgImRiMSIsIDEpOworICAgICAg
ICAgICAgICAgICAgICBydW5UcmFuc2FjdGlvbihkYjIsICJkYjIiLCAyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0
PgorPGhlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyBpcyBhIHRlc3QgdG8g
c2VlIGlmIHF1ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFu
ZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgorPC9i
b2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="18691"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34701</attachid>
            <date>2009-08-12 15:41:03 -0700</date>
            <delta_ts>2009-08-12 16:48:16 -0700</delta_ts>
            <desc>patch + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30896</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzE1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDgtMTIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXhpbmcgYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBv
biB0d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERC
LiBBZGRpbmcgYSBwZXItREIgdGhyZWFkCisgICAgICAgIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9y
IHRoYXQgYWxsb3dzIHRoZSBEQiB0aHJlYWQgdG8gcnVuIG9ubHkgb25lCisgICAgICAgIHRyYW5z
YWN0aW9uIHBlciBEQiBmaWxlIGF0IGFueSBnaXZlbiB0aW1lLgorCisgICAgICAgIEFkZGluZyBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcyBidWcuCisJCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVn
U3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IEFkZGVkLgorCiAyMDA5
LTA4LTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcxNTEpCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTE0LDYgKzIxMTQsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaAogCiBlbHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjk2MCw2ICsyOTYwLDggQEAKICAgICAgICAgICAgICdz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2su
aCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFn
ZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDcxNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDcyOCw2ICszMDcyOCwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzE1MSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zODYxLDYgKzM4NjEsOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyog
V2ViQ29yZU9iakNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMu
bW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiOyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmls
ZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJ
QjVBNjg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZD
NDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1
MDBGRDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsK
IAkJQkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpA
QCAtODc1MSw2ICs4NzUzLDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4
NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVG
aWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJF
QUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2
QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8q
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MzYsNiArOTg0MCw4IEBACiAJCTFBRTgy
RUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4
IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0
MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENE
NjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVF
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzI0Nyw2ICsxNzI1Myw3
IEBACiAJCQkJNDk0ODRGQ0IxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENh
bnZhc1N0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFMjlBNjEwMkZBOTYyMDA3RkMxNEUg
LyogV29ya2VyUmVwb3J0aW5nUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1QzExMjNDMTAy
QjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE5MzAzLDYgKzE5MzEwLDcgQEAKIAkJCQk0OTQ4NEZDNzEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzUGl4ZWxBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDQTEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQ5NDg0RkNEMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2
aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2VuZGlmCiAKQEAgLTUzOSwxMyArNTQwLDE3IEBAIHZvaWQgRGF0YWJhc2U6OnNj
aGVkdWxlVHJhbnNhY3Rpb24oKQogICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZh
bHNlOwogfQogCi12b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9u
U3RlcChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHkpCiB7Ci0g
ICAgaWYgKG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCkpIHsKLSAgICAgICAgUmVmUHRyPERh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNy
ZWF0ZSh0cmFuc2FjdGlvbik7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzayAlcCBmb3IgdGhlIHRyYW5zYWN0aW9uIHN0ZXBcbiIsIHRh
c2suZ2V0KCkpOworICAgIGlmICghbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0g
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbik7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0aGUg
dHJhbnNhY3Rpb24gc3RlcFxuIiwgdGFzay5nZXQoKSk7CisgICAgaWYgKGltbWVkaWF0ZWx5KQor
ICAgICAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRh
c2sodGFzay5yZWxlYXNlKCkpOworICAgIGVsc2UKICAgICAgICAgbV9kb2N1bWVudC0+ZGF0YWJh
c2VUaHJlYWQoKS0+c2NoZWR1bGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICB9CiB9CiAKIHZv
aWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCkBAIC01ODMsNiArNTg4LDExIEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNl
OjpwZXJmb3JtR2V0VGFibGUKICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAorU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCk7Cit9CisKIFN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiB7
CiAgICAgaWYgKG1fZGVsZXRlZCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA0NzE1MSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTUUxS
ZXN1bHRTZXQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNs
YXNzIFNRTFZhbHVlOwogICAgIApAQCAtMTE2LDYgKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKKyAgICBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgRGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uKTsKIApAQCAtMTIzLDcgKzEyNiw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKICAgICB2b2lkIHNjaGVkdWxl
VHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2NoZWR1bGVU
cmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsKKyAgICB2b2lkIHNj
aGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBp
bW1lZGlhdGVseSA9IGZhbHNlKTsKICAgICAKICAgICBNZXNzYWdlUXVldWU8UmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzc011dGV4OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCShyZXZp
c2lvbiA0NzE1MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEYXRh
YmFzZVRocmVhZDo6RGF0YWJhc2VUaHJlYWQoKQogICAgIDogbV90aHJlYWRJRCgwKQorICAgICwg
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKG5ldyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkp
CiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKIH0KQEAgLTk3LDYgKzk5LDkgQEAgdm9pZCogRGF0
YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgcG9vbC5jeWNsZSgpOwogICAg
IH0KIAorICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9u
cyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAorICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+
c2h1dGRvd24oKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVh
ZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVu
dGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAg
IC8vIENsb3NlIHRoZSBkYXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlz
IGVuc3VyZXMgdGhhdCBpZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFy
ZSByb2xsZWQgYmFjayBhbmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAkocmV2aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVRhc2s7CiBjbGFzcyBEb2N1bWVudDsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiAKIGNsYXNzIERhdGFiYXNlVGhyZWFkIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIHB1YmxpYzoKQEAgLTYw
LDYgKzYyLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJh
c2UqKTsKICAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJl
YWRJRDsgfQogCisgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorCiBw
cml2YXRlOgogICAgIERhdGFiYXNlVGhyZWFkKCk7CiAKQEAgLTc1LDYgKzc5LDggQEAgcHJpdmF0
ZToKICAgICAvLyBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhh
dCBoYXZlIGJlZW4gdXNlZCBvbiB0aGlzIHRocmVhZC4KICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVm
UHRyPERhdGFiYXNlPiA+IERhdGFiYXNlU2V0OwogICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFi
YXNlU2V0OworCisgICAgT3duUHRyPFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
CiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJh
Y2suaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKIC8v
IFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdp
bGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1pdC4gIApA
QCAtNjcsNyArNjgsNyBAQCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlv
CiAKIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKLSAgICA6IG1fbmV4dFN0ZXAo
JlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCisgICAgOiBtX25l
eHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAgICAgLCBtX2V4ZWN1dGVTcWxB
bGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fd3JhcHBlcih3cmFw
cGVyKQpAQCAtNzYsNiArNzcsNyBAQCBTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0
YWJhc2UqCiAgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKICAgICAsIG1fc2hv
dWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmllZERhdGFiYXNl
KGZhbHNlKQorICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0
YWJhc2UpOwogfQpAQCAtMTE2LDcgKzExOCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmVucXVl
dWVTdGF0ZW1lbnQoUGEKICNpZm5kZWYgTkRFQlVHCiBjb25zdCBjaGFyKiBTUUxUcmFuc2FjdGlv
bjo6ZGVidWdTdGVwTmFtZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0
ZXApCiB7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25B
bmRQcmVmbGlnaHQpCisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9j
aykKKyAgICAgICAgcmV0dXJuICJhY3F1aXJlTG9jayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKICAgICAgICAgcmV0
dXJuICJvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQiOwogICAgIGVsc2UgaWYgKHN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKQogICAgICAgICByZXR1cm4gInJ1blN0YXRl
bWVudHMiOwpAQCAtMTU3LDYgKzE2MSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5k
SGFuZGxlQ2xvc2UKICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+c3RvcCgpOwogICAgICAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgfQorCisgICAgaWYgKG1fbG9ja0Fj
cXVpcmVkKQorICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJl
bGVhc2VMb2NrKHRoaXMpOwogfQogCiAKQEAgLTE2NCw3ICsxNzEsOCBAQCBib29sIFNRTFRyYW5z
YWN0aW9uOjpwZXJmb3JtTmV4dFN0ZXAoKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAl
c1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7CiAKLSAgICBBU1NFUlQobV9uZXh0U3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCB8fAorICAg
IEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2sgfHwKKyAg
ICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6
cnVuU3RhdGVtZW50cyB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIHx8CkBAIC0xOTUsOSArMjAz
LDIzIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1QZW5kaW5nQ2FsbGIKICAgICAgICAg
KHRoaXMtPiptX25leHRTdGVwKSgpOwogfQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1aXJl
TG9jaygpCit7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1
aXJlTG9jayh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVkKCkK
K3sKKyAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7CisgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0OworICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkgZm9y
IHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5z
YWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKK30KKwogdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3Fs
aXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2xvY2tB
Y3F1aXJlZCk7CiAKICAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5pbmcgYW5kIHByZWZsaWdodGlu
ZyB0cmFuc2FjdGlvbiAlcCIsIHRoaXMpOwogCkBAIC0yNzMsNiArMjk1LDggQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbjo6c2NoZWR1bGVUb1J1blN0YXRlbQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpy
dW5TdGF0ZW1lbnRzKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCiAgICAgLy8g
SWYgdGhlcmUgaXMgYSBzZXJpZXMgb2Ygc3RhdGVtZW50cyBxdWV1ZWQgdXAgdGhhdCBhcmUgYWxs
IHN1Y2Nlc3NmdWwgYW5kIGhhdmUgbm8gYXNzb2NpYXRlZAogICAgIC8vIFNRTFN0YXRlbWVudENh
bGxiYWNrIG9iamVjdHMsIHRoZW4gd2UgY2FuIGJ1cm4gdGhyb3VnaCB0aGUgcXVldWUKICAgICBk
byB7CkBAIC00MTEsNiArNDM1LDggQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3Rh
SW5jcmVhcwogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KCkKIHsg
ICAgCisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxs
YmFjayBpZiB0aGV5IGZhaWwKICAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZv
cm1Qb3N0ZmxpZ2h0KHRoaXMpKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fd3Jh
cHBlci0+c3FsRXJyb3IoKTsKQEAgLTQ2OSwxMSArNDk1LDE2IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJTdWNjZXNzQ2FsbGIKIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFm
dGVyU3VjY2Vzc0NhbGxiYWNrKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCiAg
ICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMSAtIEVuZCB0cmFuc2FjdGlvbiBzdGVwcwogICAgIC8v
IFRoZXJlIGlzIG5vIG5leHQgc3RlcAogICAgIExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24g
JXAgaXMgY29tcGxldGVcbiIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+bV9zcWxp
dGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgbV9uZXh0U3RlcCA9IDA7
CisKKyAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOwogfQogCiB2
b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGJvb2wgaW5DYWxsYmFj
aykKQEAgLTUxNiw2ICs1NDcsOCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNh
Y3Rpb25FCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIG1fZGF0
YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CiAgICAgaWYgKG1fc3FsaXRl
VHJhbnNhY3Rpb24pIHsKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNr
IHRoZSB0cmFuc2FjdGlvbi4KQEAgLTU0MCw2ICs1NzMsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywg
dG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNrID0gMDsKICAgICBtX2Vy
cm9yQ2FsbGJhY2sgPSAwOworCisgICAgLy8gTm93IHJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBk
YXRhYmFzZQorICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFz
ZUxvY2sodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA0NzE1MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgCiAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7
CiAgICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAoKTsKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2Fs
bGJhY2soKTsKICAgICAKQEAgLTg4LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGNoZWNrQW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UoKTsKICAgICAKKyAgICB2b2lkIGFjcXVpcmVM
b2NrKCk7CiAgICAgdm9pZCBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKTsKICAgICB2b2lk
IGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRvUnVuU3Rh
dGVtZW50cygpOwpAQCAtMTIwLDYgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNRTEVy
cm9yPiBtX3RyYW5zYWN0aW9uRXJyb3I7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0
YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKKyAgICBib29sIG1fbG9ja0Fj
cXVpcmVkOwogICAgIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVm
UHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRp
ZmllcihTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgRGF0YWJhc2UqIGRhdGFi
YXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAg
ICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKK30KKwordm9pZCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCit7CisgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0
cmFuc2FjdGlvbik7CisKKyAgICBUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7CisgICAgaWYgKGl0ID09IG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5z
YWN0aW9ucyBmb3IgdGhpcyBEQgorICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJh
bnNhY3Rpb25zOworICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlv
bik7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCBwZW5k
aW5nVHJhbnNhY3Rpb25zKTsKKworICAgICAgICAvLyBTdGFydCB0aGUgdHJhbnNhY3Rpb24KKyAg
ICAgICAgdHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIEFub3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZyBvbiB0aGlzIERCOyBwdXQgdGhpcyBv
bmUgaW4gdGhlIHF1ZXVlCisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNh
Y3Rpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQo
dHJhbnNhY3Rpb24pOworICAgIH0KK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0
cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwor
CisgICAgVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2Fj
dGlvbnMuZmluZChkYklkZW50aWZpZXIpOworICAgIEFTU0VSVChpdCAhPSBtX3BlbmRpbmdUcmFu
c2FjdGlvbnMuZW5kKCkpOworICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rp
b25zID0gaXQtPnNlY29uZDsKKyAgICBBU1NFUlQoIXBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0
eSgpKTsKKworICAgIC8vICd0cmFuc2FjdGlvbicgc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3Qg
dHJhbnNhY3Rpb24gaW4gdGhpcyBxdWV1ZQorICAgIEFTU0VSVChwZW5kaW5nVHJhbnNhY3Rpb25z
LmZpcnN0KCkuZ2V0KCkgPT0gdHJhbnNhY3Rpb24pOworCisgICAgLy8gUmVtb3ZlICd0cmFuc2Fj
dGlvbicgZnJvbSB0aGUgcXVldWUgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMKKyAgICBwZW5kaW5n
VHJhbnNhY3Rpb25zLnJlbW92ZUZpcnN0KCk7CisgICAgaWYgKHBlbmRpbmdUcmFuc2FjdGlvbnMu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE5vIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7IGRl
bGV0ZSBkYklkZW50aWZpZXIncyBxdWV1ZQorICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMu
cmVtb3ZlKGl0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGlu
ZyB0cmFuc2FjdGlvbnM7IHN0YXJ0IHRoZSBuZXh0IG9uZQorICAgICAgICBwZW5kaW5nVHJhbnNh
Y3Rpb25zLmZpcnN0KCktPmxvY2tBY3F1aXJlZCgpOworICAgIH0KK30KKwordm9pZCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCit7CisgICAgLy8gQ2xlYW4gdXAgYWxsIHBl
bmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0YWJhc2VzCisgICAgbV9wZW5kaW5nVHJhbnNh
Y3Rpb25zLmNsZWFyKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAorI2RlZmluZSBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yX2gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
IFNRTFRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICB2b2lkIGFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKik7
CisgICAgICAgIHZvaWQgcmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBzaHV0ZG93bigpOworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRy
PFNRTFRyYW5zYWN0aW9uPiA+IFRyYW5zYWN0aW9uc1F1ZXVlOworICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBUcmFuc2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKKyAg
ICAgICAgVHJhbnNhY3Rpb25zSGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgfTsK
K30KKworI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gNDcxNTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAwOS0wOC0xMiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZ3Jlc3Npb24gdGVzdC4gVGVzdHMgdGhhdCB0d28gdHJhbnNhY3Rpb25zIHRoYXQgcnVuIG9u
IHR3bworICAgICAgICBkaWZmZXJlbnQgaGFuZGxlcyBmb3IgdGhlIHNhbWUgREIgZG8gbm90IGNh
dXNlIGEgZGVhZGxvY2suCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWc/aWQ9Mjc5NjYKKworICAgICAgICAqIHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9u
LWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogQWRkZWQu
CisKIDIwMDktMDgtMTIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAg
IE5vIHJldmlldywganVzdCBmaXhpbmcgbGluZS1lbmRpbmdzLgpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNh
Y3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1o
YW5kbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUaGlzIGlz
IGEgdGVzdCB0byBzZWUgaWYgcXVldWVpbmcgdXAgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRp
ZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9j
ay4KK2RiMSByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMSB3cml0ZSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkCitkYjEgdHJhbnNhY3Rpb24gc3VjY2VlZGVkCitkYjIgcmVhZCBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkCitkYjIgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHRyYW5zYWN0aW9uIHN1
Y2NlZWRlZAorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9u
cy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGNv
bXBsZXRlID0gMDsKKworZnVuY3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sKKyAgICAvLyBUaGUg
dGVzdCBzaG91bGQgZW5kIGFmdGVyIHR3byB0cmFuc2FjdGlvbnMKKyAgICBpZiAoKytjb21wbGV0
ZSA9PSAyICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCisvLyBPcGVucyB0aGUgZGF0YWJhc2UgdXNl
ZCBpbiB0aGlzIHRlc3QgY2FzZQorZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAg
cmV0dXJuIG9wZW5EYXRhYmFzZSgiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRs
ZXNUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgcXVldWVpbmcgbXVsdGlwbGUgdHJhbnNh
Y3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVzIGRvZXMgbm90IHJlc3VsdCBpbiBhIGRlYWRs
b2NrLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAzMjc2OCk7Cit9CisKK2Z1bmN0aW9uIHN0
YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayhkYk5hbWUsIGlzUmVhZFN0YXRlbWVudCkKK3sKKyAgICBs
b2coZGJOYW1lICsgIiAiICsgKGlzUmVhZFN0YXRlbWVudCA/ICJyZWFkIiA6ICJ3cml0ZSIpICsg
IiBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7Cit9CisKK2Z1bmN0aW9uIHN0YXRlbWVudEVycm9yQ2Fs
bGJhY2soZGJOYW1lLCBpc1JlYWRTdGF0ZW1lbnQsIGVycm9yKQoreworICAgIGxvZyhkYk5hbWUg
KyAiICIgKyAoaXNSZWFkU3RhdGVtZW50ID8gInJlYWQiIDogIndyaXRlIikgKyAiIHN0YXRlbWVu
dCBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKK30KKworLy8gUnVucyBhIHRyYW5zYWN0aW9u
IG9uIHRoZSBnaXZlbiBkYXRhYmFzZQorZnVuY3Rpb24gcnVuVHJhbnNhY3Rpb24oZGIsIGRiTmFt
ZSwgdmFsKQoreworICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgLy8g
RXhlY3V0ZSBhIHJlYWQtb25seSBzdGF0ZW1lbnQKKyAgICAgICB0eC5leGVjdXRlU3FsKCJTRUxF
Q1QgQ09VTlQoKikgRlJPTSBUZXN0OyIsIFtdLAorICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b24ocmVzdWx0KSB7IHN0YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayhkYk5hbWUsIHRydWUpOyB9LAor
ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IHN0YXRlbWVudEVycm9y
Q2FsbGJhY2soZGJOYW1lLCB0cnVlLCBlcnJvcik7IH0pOworCisgICAgICAgLy8gRXhlY3V0ZSBh
IHdyaXRlIHN0YXRlbWVudCB0byBtYWtlIHN1cmUgU1FMaXRlIHRyaWVzIHRvIGFjcXVpcmUgYW4g
ZXhjbHVzaXZlIGxvY2sgb24gdGhlIERCIGZpbGUKKyAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNF
UlQgSU5UTyBUZXN0IFZBTFVFUyAoPyk7IiwgW3ZhbF0sCisgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbihyZXN1bHQpIHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKGRiTmFtZSwgZmFsc2Up
OyB9LAorICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IHN0YXRlbWVu
dEVycm9yQ2FsbGJhY2soZGJOYW1lLCBmYWxzZSwgZXJyb3IpOyB9KTsKKyAgICAgICB9LCBmdW5j
dGlvbihlcnJvcikgeworICAgICAgICAgICAvLyBUcmFuc2FjdGlvbiBmYWlsdXJlIGNhbGxiYWNr
CisgICAgICAgICAgIGxvZyhkYk5hbWUgKyAiIHRyYW5zYWN0aW9uIGZhaWxlZDogIiArIGVycm9y
Lm1lc3NhZ2UpOworICAgICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsKKyAgICAgICB9LCBmdW5j
dGlvbigpIHsKKyAgICAgICAgICAgLy8gVHJhbnNhY3Rpb24gc3VjY2VzcyBjYWxsYmFjaworICAg
ICAgICAgICBsb2coZGJOYW1lICsgIiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQiKTsKKyAgICAgICAg
ICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgfSk7Cit9CisKKy8vIFdlIG5lZWQgdG8gZ3Vh
cmFudGVlIHRoYXQgdGhlIFRlc3QgdGFibGUgZXhpc3RzIGJlZm9yZSB3ZSBydW4gb3VyIHRlc3Qu
CisvLyBUaGVyZWZvcmUsIHRoZSB0ZXN0IGNvZGUgaXMgaW4gdGhlIHN1Y2Nlc3NDYWxsYmFjayBv
ZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSB0YWJsZS4KK2Z1bmN0aW9uIHJ1blRl
c3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkgeworICAgICAgICB2YXIg
ZGIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9u
KHR4KSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIFRlc3QgdGFibGUgaWYgaXQgZG9lcyBu
b3QgZXhpc3QKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFURSBUQUJMRSBJRiBOT1Qg
RVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIsIFtdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBm
dW5jdGlvbihyZXN1bHQpIHt9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHt9KTsKKyAgICAgICAgICAg
IH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9nKCJDcmVhdGluZyB0aGUg
VGVzdCB0YWJsZSBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAgICAgICAgICAgIH0sIGZ1
bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBUZXN0IHRhYmxlIHdhcyBjcmVhdGVk
IHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIHZhciBkYjEgPSBvcGVuVGVzdERhdGFiYXNl
KCk7CisgICAgICAgICAgICAgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0YWJhc2UoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoZGIxID09IGRiMikKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJmYWls
dXJlOiBkYjEgPT0gZGIyIik7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgImRiMSIsIDEpOworICAgICAgICAgICAgICAgICAg
ICBydW5UcmFuc2FjdGlvbihkYjIsICJkYjIiLCAyKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9KTsKKyAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2NyaXB0PgorPGhlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyBpcyBhIHRlc3QgdG8gc2VlIGlmIHF1ZXVl
aW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxlcyB0byB0aGUg
c2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgorPC9ib2R5PgorPC9odG1s
Pgo=
</data>
<flag name="review"
          id="18892"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="18896"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34707</attachid>
            <date>2009-08-12 16:48:09 -0700</date>
            <delta_ts>2009-08-12 17:03:54 -0700</delta_ts>
            <desc>patch + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30854</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzE1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDgtMTIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXhpbmcgYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBv
biB0d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERC
LiBBZGRpbmcgYSBwZXItREIgdGhyZWFkCisgICAgICAgIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9y
IHRoYXQgYWxsb3dzIHRoZSBEQiB0aHJlYWQgdG8gcnVuIG9ubHkgb25lCisgICAgICAgIHRyYW5z
YWN0aW9uIHBlciBEQiBmaWxlIGF0IGFueSBnaXZlbiB0aW1lLgorCisgICAgICAgIEFkZGluZyBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcyBidWcuCisJCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVn
U3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IEFkZGVkLgorCiAyMDA5
LTA4LTEyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcxNTEpCisrKyBX
ZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTE0LDYgKzIxMTQsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5j
cHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvci5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2suaAogCiBlbHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUu
Z3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjk2MCw2ICsyOTYwLDggQEAKICAgICAgICAgICAgICdz
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFu
c2FjdGlvbi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2su
aCcsCisgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAor
ICAgICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFn
ZS5oJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
NDcxNTEpCisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0zMDcyOCw2ICszMDcyOCwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJ
CQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzE1MSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0zODYxLDYgKzM4NjEsOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyog
V2ViQ29yZU9iakNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMu
bW0gKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNs
YXJhdGlvbnMiOyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmls
ZVN5c3RlbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjVBNjg0MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJ
QjVBNjg0MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAw
RDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2
MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZD
NDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1Nzgg
LyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1
MDBGRDA0RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsK
IAkJQkMwMEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMg
LyogRE9NRmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZp
bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpA
QCAtODc1MSw2ICs4NzUzLDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNv
cmVPYmpDRXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0g
V2ViQ29yZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4
NDIxMEZGQUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVG
aWxlU3lzdGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJF
QUEwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZp
bGVTeXN0ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2
QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8q
IFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5h
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MzYsNiArOTg0MCw4IEBACiAJCTFBRTgy
RUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4
IC8qIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0
MDA3NjNDOTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENE
NjVGMDQwMDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVF
MENBQzU2NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzI0Nyw2ICsxNzI1Myw3
IEBACiAJCQkJNDk0ODRGQ0IxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENh
bnZhc1N0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFMjlBNjEwMkZBOTYyMDA3RkMxNEUg
LyogV29ya2VyUmVwb3J0aW5nUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1QzExMjNDMTAy
QjZDNDYwMDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKQEAgLTE5MzAzLDYgKzE5MzEwLDcgQEAKIAkJCQk0OTQ4NEZDNzEwMkNGMjNDMDAxODdERDMg
LyogQ2FudmFzUGl4ZWxBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OTQ4NEZDQTEwMkNG
MjNDMDAxODdERDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTQ5NDg0RkNEMTAyQ0YyM0MwMDE4N0REMyAvKiBDYW52YXNTdHlsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRh
YmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2
aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIlNRTGl0ZVN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgorI2lu
Y2x1ZGUgIlNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgogI2VuZGlmCiAKQEAgLTUzOSwxMyArNTQwLDE3IEBAIHZvaWQgRGF0YWJhc2U6OnNj
aGVkdWxlVHJhbnNhY3Rpb24oKQogICAgICAgICBtX3RyYW5zYWN0aW9uSW5Qcm9ncmVzcyA9IGZh
bHNlOwogfQogCi12b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFu
c2FjdGlvbiogdHJhbnNhY3Rpb24pCit2b2lkIERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9u
U3RlcChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgaW1tZWRpYXRlbHkpCiB7Ci0g
ICAgaWYgKG1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCkpIHsKLSAgICAgICAgUmVmUHRyPERh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0gRGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNy
ZWF0ZSh0cmFuc2FjdGlvbik7Ci0gICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBE
YXRhYmFzZVRyYW5zYWN0aW9uVGFzayAlcCBmb3IgdGhlIHRyYW5zYWN0aW9uIHN0ZXBcbiIsIHRh
c2suZ2V0KCkpOworICAgIGlmICghbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUmVmUHRyPERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrPiB0YXNrID0g
RGF0YWJhc2VUcmFuc2FjdGlvblRhc2s6OmNyZWF0ZSh0cmFuc2FjdGlvbik7CisgICAgTE9HKFN0
b3JhZ2VBUEksICJTY2hlZHVsaW5nIERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrICVwIGZvciB0aGUg
dHJhbnNhY3Rpb24gc3RlcFxuIiwgdGFzay5nZXQoKSk7CisgICAgaWYgKGltbWVkaWF0ZWx5KQor
ICAgICAgICBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT5zY2hlZHVsZUltbWVkaWF0ZVRh
c2sodGFzay5yZWxlYXNlKCkpOworICAgIGVsc2UKICAgICAgICAgbV9kb2N1bWVudC0+ZGF0YWJh
c2VUaHJlYWQoKS0+c2NoZWR1bGVUYXNrKHRhc2sucmVsZWFzZSgpKTsKLSAgICB9CiB9CiAKIHZv
aWQgRGF0YWJhc2U6OnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiog
dHJhbnNhY3Rpb24pCkBAIC01ODMsNiArNTg4LDExIEBAIFZlY3RvcjxTdHJpbmc+IERhdGFiYXNl
OjpwZXJmb3JtR2V0VGFibGUKICAgICByZXR1cm4gdGFibGVOYW1lczsKIH0KIAorU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogRGF0YWJhc2U6OnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCk7Cit9CisKIFN0cmluZyBEYXRhYmFzZTo6dmVyc2lvbigpIGNvbnN0CiB7
CiAgICAgaWYgKG1fZGVsZXRlZCkKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA0NzE1MSkK
KysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1
Nyw3IEBAIGNsYXNzIERhdGFiYXNlVGhyZWFkOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBTUUxS
ZXN1bHRTZXQ7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkNhbGxiYWNrOworY2xhc3MgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKIGNsYXNzIFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKIGNs
YXNzIFNRTFZhbHVlOwogICAgIApAQCAtMTE2LDYgKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIFZl
Y3RvcjxTdHJpbmc+IHBlcmZvcm1HZXRUYWJsZU5hbWVzKCk7CiAKKyAgICBTUUxUcmFuc2FjdGlv
bkNvb3JkaW5hdG9yKiB0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3Q7CisKIHByaXZhdGU6
CiAgICAgRGF0YWJhc2UoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgZXhwZWN0ZWRWZXJzaW9uKTsKIApAQCAtMTIzLDcgKzEyNiw3IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIHNjaGVkdWxlVHJhbnNhY3Rpb24oKTsKICAgICB2b2lkIHNjaGVkdWxl
VHJhbnNhY3Rpb25DYWxsYmFjayhTUUxUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgc2NoZWR1bGVU
cmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKTsKKyAgICB2b2lkIHNj
aGVkdWxlVHJhbnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgYm9vbCBp
bW1lZGlhdGVseSA9IGZhbHNlKTsKICAgICAKICAgICBNZXNzYWdlUXVldWU8UmVmUHRyPFNRTFRy
YW5zYWN0aW9uPiA+IG1fdHJhbnNhY3Rpb25RdWV1ZTsKICAgICBNdXRleCBtX3RyYW5zYWN0aW9u
SW5Qcm9ncmVzc011dGV4OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCShyZXZp
c2lvbiA0NzE1MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM1LDExICszNSwxMyBAQAogI2luY2x1ZGUgIkRhdGFiYXNlLmgiCiAjaW5j
bHVkZSAiRGF0YWJhc2VUYXNrLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEYXRh
YmFzZVRocmVhZDo6RGF0YWJhc2VUaHJlYWQoKQogICAgIDogbV90aHJlYWRJRCgwKQorICAgICwg
bV90cmFuc2FjdGlvbkNvb3JkaW5hdG9yKG5ldyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkp
CiB7CiAgICAgbV9zZWxmUmVmID0gdGhpczsKIH0KQEAgLTk3LDYgKzk5LDkgQEAgdm9pZCogRGF0
YWJhc2VUaHJlYWQ6OmRhdGFiYXNlVGhyZWFkKCkKICAgICAgICAgcG9vbC5jeWNsZSgpOwogICAg
IH0KIAorICAgIC8vIENsZWFuIHVwIHRoZSBsaXN0IG9mIGFsbCBwZW5kaW5nIHRyYW5zYWN0aW9u
cyBvbiB0aGlzIGRhdGFiYXNlIHRocmVhZAorICAgIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci0+
c2h1dGRvd24oKTsKKwogICAgIExPRyhTdG9yYWdlQVBJLCAiQWJvdXQgdG8gZGV0YWNoIHRocmVh
ZCAlaSBhbmQgY2xlYXIgdGhlIHJlZiB0byBEYXRhYmFzZVRocmVhZCAlcCwgd2hpY2ggY3VycmVu
dGx5IGhhcyAlaSByZWYocykiLCBtX3RocmVhZElELCB0aGlzLCByZWZDb3VudCgpKTsKIAogICAg
IC8vIENsb3NlIHRoZSBkYXRhYmFzZXMgdGhhdCB3ZSByYW4gdHJhbnNhY3Rpb25zIG9uLiBUaGlz
IGVuc3VyZXMgdGhhdCBpZiBhbnkgdHJhbnNhY3Rpb25zIGFyZSBzdGlsbCBvcGVuLCB0aGV5IGFy
ZSByb2xsZWQgYmFjayBhbmQgd2UgZG9uJ3QgbGVhdmUgdGhlIGRhdGFiYXNlIGluIGFuCkluZGV4
OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAkocmV2aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvRGF0YWJhc2VUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNs
dWRlIDx3dGYvTWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KQEAgLTQyLDYgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
Y2xhc3MgRGF0YWJhc2U7CiBjbGFzcyBEYXRhYmFzZVRhc2s7CiBjbGFzcyBEb2N1bWVudDsKK2Ns
YXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I7CiAKIGNsYXNzIERhdGFiYXNlVGhyZWFkIDog
cHVibGljIFRocmVhZFNhZmVTaGFyZWQ8RGF0YWJhc2VUaHJlYWQ+IHsKIHB1YmxpYzoKQEAgLTYw
LDYgKzYyLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVjb3JkRGF0YWJhc2VDbG9zZWQoRGF0YWJh
c2UqKTsKICAgICBUaHJlYWRJZGVudGlmaWVyIGdldFRocmVhZElEKCkgeyByZXR1cm4gbV90aHJl
YWRJRDsgfQogCisgICAgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29y
ZGluYXRvcigpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQorCiBw
cml2YXRlOgogICAgIERhdGFiYXNlVGhyZWFkKCk7CiAKQEAgLTc1LDYgKzc5LDggQEAgcHJpdmF0
ZToKICAgICAvLyBUaGlzIHNldCBrZWVwcyB0cmFjayBvZiB0aGUgb3BlbiBkYXRhYmFzZXMgdGhh
dCBoYXZlIGJlZW4gdXNlZCBvbiB0aGlzIHRocmVhZC4KICAgICB0eXBlZGVmIEhhc2hTZXQ8UmVm
UHRyPERhdGFiYXNlPiA+IERhdGFiYXNlU2V0OwogICAgIERhdGFiYXNlU2V0IG1fb3BlbkRhdGFi
YXNlU2V0OworCisgICAgT3duUHRyPFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3I+IG1fdHJhbnNh
Y3Rpb25Db29yZGluYXRvcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gNDcxNTEpCisrKyBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
CiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50Q2FsbGJh
Y2suaCIKICNpbmNsdWRlICJTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmgiCisjaW5jbHVkZSAi
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAKIC8v
IFRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgZXhhY3RseSBob3cgbXVjaCBtb3JlIHNwYWNlIHdp
bGwgYmUgcmVxdWlyZWQgd2hlbiBhIHN0YXRlbWVudCBoaXRzIHRoZSBxdW90YSBsaW1pdC4gIApA
QCAtNjcsNyArNjgsNyBAQCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0aW9uPiBTUUxUcmFuc2FjdGlv
CiAKIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSogZGIsIFBhc3NSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBQYXNzUmVmUHRyPFZvaWRDYWxsYmFj
az4gc3VjY2Vzc0NhbGxiYWNrLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNz
UmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gd3JhcHBlcikKLSAgICA6IG1fbmV4dFN0ZXAo
JlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCisgICAgOiBtX25l
eHRTdGVwKCZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2spCiAgICAgLCBtX2V4ZWN1dGVTcWxB
bGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fd3JhcHBlcih3cmFw
cGVyKQpAQCAtNzYsNiArNzcsNyBAQCBTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0
YWJhc2UqCiAgICAgLCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKICAgICAsIG1fc2hv
dWxkUmV0cnlDdXJyZW50U3RhdGVtZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmllZERhdGFiYXNl
KGZhbHNlKQorICAgICwgbV9sb2NrQWNxdWlyZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fZGF0
YWJhc2UpOwogfQpAQCAtMTE2LDcgKzExOCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmVucXVl
dWVTdGF0ZW1lbnQoUGEKICNpZm5kZWYgTkRFQlVHCiBjb25zdCBjaGFyKiBTUUxUcmFuc2FjdGlv
bjo6ZGVidWdTdGVwTmFtZShTUUxUcmFuc2FjdGlvbjo6VHJhbnNhY3Rpb25TdGVwTWV0aG9kIHN0
ZXApCiB7Ci0gICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25B
bmRQcmVmbGlnaHQpCisgICAgaWYgKHN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjphY3F1aXJlTG9j
aykKKyAgICAgICAgcmV0dXJuICJhY3F1aXJlTG9jayI7CisgICAgZWxzZSBpZiAoc3RlcCA9PSAm
U1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCkKICAgICAgICAgcmV0
dXJuICJvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQiOwogICAgIGVsc2UgaWYgKHN0ZXAgPT0g
JlNRTFRyYW5zYWN0aW9uOjpydW5TdGF0ZW1lbnRzKQogICAgICAgICByZXR1cm4gInJ1blN0YXRl
bWVudHMiOwpAQCAtMTU3LDYgKzE2MSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5k
SGFuZGxlQ2xvc2UKICAgICAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbi0+c3RvcCgpOwogICAgICAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgfQorCisgICAgaWYgKG1fbG9ja0Fj
cXVpcmVkKQorICAgICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJl
bGVhc2VMb2NrKHRoaXMpOwogfQogCiAKQEAgLTE2NCw3ICsxNzEsOCBAQCBib29sIFNRTFRyYW5z
YWN0aW9uOjpwZXJmb3JtTmV4dFN0ZXAoKQogewogICAgIExPRyhTdG9yYWdlQVBJLCAiU3RlcCAl
c1xuIiwgZGVidWdTdGVwTmFtZShtX25leHRTdGVwKSk7CiAKLSAgICBBU1NFUlQobV9uZXh0U3Rl
cCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodCB8fAorICAg
IEFTU0VSVChtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2sgfHwKKyAg
ICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFuc2FjdGlvbkFu
ZFByZWZsaWdodCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6
cnVuU3RhdGVtZW50cyB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxUcmFuc2FjdGlv
bjo6cG9zdGZsaWdodEFuZENvbW1pdCB8fAogICAgICAgICAgICBtX25leHRTdGVwID09ICZTUUxU
cmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyU3VjY2Vzc0NhbGxiYWNrIHx8CkBAIC0xOTUsOSArMjAz
LDIzIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBlcmZvcm1QZW5kaW5nQ2FsbGIKICAgICAgICAg
KHRoaXMtPiptX25leHRTdGVwKSgpOwogfQogCit2b2lkIFNRTFRyYW5zYWN0aW9uOjphY3F1aXJl
TG9jaygpCit7CisgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5hY3F1
aXJlTG9jayh0aGlzKTsKK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbjo6bG9ja0FjcXVpcmVkKCkK
K3sKKyAgICBtX2xvY2tBY3F1aXJlZCA9IHRydWU7CisgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0OworICAgIExPRyhTdG9yYWdlQVBJ
LCAiU2NoZWR1bGluZyBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgaW1tZWRpYXRlbHkgZm9y
IHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5z
YWN0aW9uU3RlcCh0aGlzLCB0cnVlKTsKK30KKwogdm9pZCBTUUxUcmFuc2FjdGlvbjo6b3BlblRy
YW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCkKIHsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3Fs
aXRlRGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOworICAgIEFTU0VSVChtX2xvY2tB
Y3F1aXJlZCk7CiAKICAgICBMT0coU3RvcmFnZUFQSSwgIk9wZW5pbmcgYW5kIHByZWZsaWdodGlu
ZyB0cmFuc2FjdGlvbiAlcCIsIHRoaXMpOwogCkBAIC0yNzMsNiArMjk1LDggQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbjo6c2NoZWR1bGVUb1J1blN0YXRlbQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpy
dW5TdGF0ZW1lbnRzKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCiAgICAgLy8g
SWYgdGhlcmUgaXMgYSBzZXJpZXMgb2Ygc3RhdGVtZW50cyBxdWV1ZWQgdXAgdGhhdCBhcmUgYWxs
IHN1Y2Nlc3NmdWwgYW5kIGhhdmUgbm8gYXNzb2NpYXRlZAogICAgIC8vIFNRTFN0YXRlbWVudENh
bGxiYWNrIG9iamVjdHMsIHRoZW4gd2UgY2FuIGJ1cm4gdGhyb3VnaCB0aGUgcXVldWUKICAgICBk
byB7CkBAIC00MTEsNiArNDM1LDggQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclF1b3Rh
SW5jcmVhcwogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KCkKIHsg
ICAgCisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIC8vIFRyYW5zYWN0aW9uIFN0
ZXAgNyAtIFBlZm9ybSBwb3N0ZmxpZ2h0IHN0ZXBzLCBqdW1waW5nIHRvIHRoZSBlcnJvciBjYWxs
YmFjayBpZiB0aGV5IGZhaWwKICAgICBpZiAobV93cmFwcGVyICYmICFtX3dyYXBwZXItPnBlcmZv
cm1Qb3N0ZmxpZ2h0KHRoaXMpKSB7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IG1fd3Jh
cHBlci0+c3FsRXJyb3IoKTsKQEAgLTQ2OSwxMSArNDk1LDE2IEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmRlbGl2ZXJTdWNjZXNzQ2FsbGIKIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFm
dGVyU3VjY2Vzc0NhbGxiYWNrKCkKIHsKKyAgICBBU1NFUlQobV9sb2NrQWNxdWlyZWQpOworCiAg
ICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMSAtIEVuZCB0cmFuc2FjdGlvbiBzdGVwcwogICAgIC8v
IFRoZXJlIGlzIG5vIG5leHQgc3RlcAogICAgIExPRyhTdG9yYWdlQVBJLCAiVHJhbnNhY3Rpb24g
JXAgaXMgY29tcGxldGVcbiIsIHRoaXMpOwogICAgIEFTU0VSVCghbV9kYXRhYmFzZS0+bV9zcWxp
dGVEYXRhYmFzZS50cmFuc2FjdGlvbkluUHJvZ3Jlc3MoKSk7CiAgICAgbV9uZXh0U3RlcCA9IDA7
CisKKyAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0YWJhc2UKKyAgICBtX2RhdGFi
YXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VMb2NrKHRoaXMpOwogfQogCiB2
b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2FjdGlvbkVycm9yKGJvb2wgaW5DYWxsYmFj
aykKQEAgLTUxNiw2ICs1NDcsOCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNh
Y3Rpb25FCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjaygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIG1fZGF0
YWJhc2UtPm1fZGF0YWJhc2VBdXRob3JpemVyLT5kaXNhYmxlKCk7CiAgICAgaWYgKG1fc3FsaXRl
VHJhbnNhY3Rpb24pIHsKICAgICAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIFJvbGxiYWNr
IHRoZSB0cmFuc2FjdGlvbi4KQEAgLTU0MCw2ICs1NzMsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpjbGVhbnVwQWZ0ZXJUcmFuc2FjCiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywg
dG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KICAgICBtX2NhbGxiYWNrID0gMDsKICAgICBtX2Vy
cm9yQ2FsbGJhY2sgPSAwOworCisgICAgLy8gTm93IHJlbGVhc2UgdGhlIGxvY2sgb24gdGhpcyBk
YXRhYmFzZQorICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+cmVsZWFz
ZUxvY2sodGhpcyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9T
UUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA0NzE1MSkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw2ICs3Myw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGV4ZWN1dGVTUUwoY29uc3QgU3RyaW5nJiBzcWxTdGF0ZW1lbnQsIGNvbnN0IFZlY3Rv
cjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgCiAgICAgICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8
U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+IGNhbGxiYWNrRXJyb3IsIEV4Y2VwdGlvbkNvZGUmIGUpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHZvaWQgbG9ja0FjcXVpcmVkKCk7
CiAgICAgYm9vbCBwZXJmb3JtTmV4dFN0ZXAoKTsKICAgICB2b2lkIHBlcmZvcm1QZW5kaW5nQ2Fs
bGJhY2soKTsKICAgICAKQEAgLTg4LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGNoZWNrQW5kSGFuZGxlQ2xvc2VkRGF0YWJhc2UoKTsKICAgICAKKyAgICB2b2lkIGFjcXVpcmVM
b2NrKCk7CiAgICAgdm9pZCBvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQoKTsKICAgICB2b2lk
IGRlbGl2ZXJUcmFuc2FjdGlvbkNhbGxiYWNrKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRvUnVuU3Rh
dGVtZW50cygpOwpAQCAtMTIwLDYgKzEyMiw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFNRTEVy
cm9yPiBtX3RyYW5zYWN0aW9uRXJyb3I7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0
YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsKKyAgICBib29sIG1fbG9ja0Fj
cXVpcmVkOwogICAgIAogICAgIE11dGV4IG1fc3RhdGVtZW50TXV0ZXg7CiAgICAgRGVxdWU8UmVm
UHRyPFNRTFN0YXRlbWVudD4gPiBtX3N0YXRlbWVudFF1ZXVlOwpJbmRleDogV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRh
dGFiYXNlLmgiCisjaW5jbHVkZSAiU1FMVHJhbnNhY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRGVx
dWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgU3RyaW5nIGdldERhdGFiYXNlSWRlbnRp
ZmllcihTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgRGF0YWJhc2UqIGRhdGFi
YXNlID0gdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCk7CisgICAgQVNTRVJUKGRhdGFiYXNlKTsKKyAg
ICByZXR1cm4gZGF0YWJhc2UtPnN0cmluZ0lkZW50aWZpZXIoKTsKK30KKwordm9pZCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjphY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rp
b24pCit7CisgICAgU3RyaW5nIGRiSWRlbnRpZmllciA9IGdldERhdGFiYXNlSWRlbnRpZmllcih0
cmFuc2FjdGlvbik7CisKKyAgICBUcmFuc2FjdGlvbnNIYXNoTWFwOjppdGVyYXRvciBpdCA9IG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5maW5kKGRiSWRlbnRpZmllcik7CisgICAgaWYgKGl0ID09IG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5lbmQoKSkgeworICAgICAgICAvLyBObyBwZW5kaW5nIHRyYW5z
YWN0aW9ucyBmb3IgdGhpcyBEQgorICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSBwZW5kaW5nVHJh
bnNhY3Rpb25zOworICAgICAgICBwZW5kaW5nVHJhbnNhY3Rpb25zLmFwcGVuZCh0cmFuc2FjdGlv
bik7CisgICAgICAgIG1fcGVuZGluZ1RyYW5zYWN0aW9ucy5hZGQoZGJJZGVudGlmaWVyLCBwZW5k
aW5nVHJhbnNhY3Rpb25zKTsKKworICAgICAgICAvLyBTdGFydCB0aGUgdHJhbnNhY3Rpb24KKyAg
ICAgICAgdHJhbnNhY3Rpb24tPmxvY2tBY3F1aXJlZCgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIEFub3RoZXIgdHJhbnNhY3Rpb24gaXMgcnVubmluZyBvbiB0aGlzIERCOyBwdXQgdGhpcyBv
bmUgaW4gdGhlIHF1ZXVlCisgICAgICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNh
Y3Rpb25zID0gaXQtPnNlY29uZDsKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQo
dHJhbnNhY3Rpb24pOworICAgIH0KK30KKwordm9pZCBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9y
OjpyZWxlYXNlTG9jayhTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24pCit7CisgICAgaWYgKG1f
cGVuZGluZ1RyYW5zYWN0aW9ucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0
cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJhbnNhY3Rpb24pOwor
CisgICAgVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX3BlbmRpbmdUcmFuc2Fj
dGlvbnMuZmluZChkYklkZW50aWZpZXIpOworICAgIEFTU0VSVChpdCAhPSBtX3BlbmRpbmdUcmFu
c2FjdGlvbnMuZW5kKCkpOworICAgIFRyYW5zYWN0aW9uc1F1ZXVlJiBwZW5kaW5nVHJhbnNhY3Rp
b25zID0gaXQtPnNlY29uZDsKKyAgICBBU1NFUlQoIXBlbmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0
eSgpKTsKKworICAgIC8vICd0cmFuc2FjdGlvbicgc2hvdWxkIGFsd2F5cyBiZSB0aGUgZmlyc3Qg
dHJhbnNhY3Rpb24gaW4gdGhpcyBxdWV1ZQorICAgIEFTU0VSVChwZW5kaW5nVHJhbnNhY3Rpb25z
LmZpcnN0KCkuZ2V0KCkgPT0gdHJhbnNhY3Rpb24pOworCisgICAgLy8gUmVtb3ZlICd0cmFuc2Fj
dGlvbicgZnJvbSB0aGUgcXVldWUgb2YgcGVuZGluZyB0cmFuc2FjdGlvbnMKKyAgICBwZW5kaW5n
VHJhbnNhY3Rpb25zLnJlbW92ZUZpcnN0KCk7CisgICAgaWYgKHBlbmRpbmdUcmFuc2FjdGlvbnMu
aXNFbXB0eSgpKSB7CisgICAgICAgIC8vIE5vIG1vcmUgcGVuZGluZyB0cmFuc2FjdGlvbnM7IGRl
bGV0ZSBkYklkZW50aWZpZXIncyBxdWV1ZQorICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMu
cmVtb3ZlKGl0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBXZSBoYXZlIG1vcmUgcGVuZGlu
ZyB0cmFuc2FjdGlvbnM7IHN0YXJ0IHRoZSBuZXh0IG9uZQorICAgICAgICBwZW5kaW5nVHJhbnNh
Y3Rpb25zLmZpcnN0KCktPmxvY2tBY3F1aXJlZCgpOworICAgIH0KK30KKwordm9pZCBTUUxUcmFu
c2FjdGlvbkNvb3JkaW5hdG9yOjpzaHV0ZG93bigpCit7CisgICAgLy8gQ2xlYW4gdXAgYWxsIHBl
bmRpbmcgdHJhbnNhY3Rpb25zIGZvciBhbGwgZGF0YWJhc2VzCisgICAgbV9wZW5kaW5nVHJhbnNh
Y3Rpb25zLmNsZWFyKCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaAorI2RlZmluZSBTUUxUcmFuc2FjdGlvbkNv
b3JkaW5hdG9yX2gKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNo
LmgiCisjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgIGNsYXNz
IFNRTFRyYW5zYWN0aW9uOworCisgICAgY2xhc3MgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICB2b2lkIGFjcXVpcmVMb2NrKFNRTFRyYW5zYWN0aW9uKik7
CisgICAgICAgIHZvaWQgcmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qKTsKKyAgICAgICAgdm9p
ZCBzaHV0ZG93bigpOworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRy
PFNRTFRyYW5zYWN0aW9uPiA+IFRyYW5zYWN0aW9uc1F1ZXVlOworICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBUcmFuc2FjdGlvbnNRdWV1ZT4gVHJhbnNhY3Rpb25zSGFzaE1hcDsKKyAg
ICAgICAgVHJhbnNhY3Rpb25zSGFzaE1hcCBtX3BlbmRpbmdUcmFuc2FjdGlvbnM7CisgICAgfTsK
K30KKworI2VuZGlmIC8vIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3JfaApJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gNDcxNTEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAwOS0wOC0xMiAgRHVtaXRydSBEYW5pbGl1YyAgPGR1bWlAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlZ3Jlc3Npb24gdGVzdC4gVGVzdHMgdGhhdCB0d28gdHJhbnNhY3Rpb25zIHRoYXQgcnVuIG9u
IHR3bworICAgICAgICBkaWZmZXJlbnQgaGFuZGxlcyBmb3IgdGhlIHNhbWUgREIgZG8gbm90IGNh
dXNlIGEgZGVhZGxvY2suCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWc/aWQ9Mjc5NjYKKworICAgICAgICAqIHN0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9u
LWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogc3RvcmFn
ZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMuaHRtbDogQWRkZWQu
CisKIDIwMDktMDgtMTIgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAg
IE5vIHJldmlldywganVzdCBmaXhpbmcgbGluZS1lbmRpbmdzLgpJbmRleDogTGF5b3V0VGVzdHMv
c3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhhbmRsZXMtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNh
Y3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1o
YW5kbGVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACitUaGlzIGlz
IGEgdGVzdCB0byBzZWUgaWYgcXVldWVpbmcgdXAgbXVsdGlwbGUgdHJhbnNhY3Rpb25zIG9uIGRp
ZmZlcmVudCBoYW5kbGVzIHRvIHRoZSBzYW1lIGRhdGFiYXNlIHJlc3VsdHMgaW4gYSBkZWFkbG9j
ay4KK2RiMSByZWFkIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMSB3cml0ZSBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkCitkYjEgdHJhbnNhY3Rpb24gc3VjY2VlZGVkCitkYjIgcmVhZCBzdGF0ZW1lbnQgc3Vj
Y2VlZGVkCitkYjIgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHRyYW5zYWN0aW9uIHN1
Y2NlZWRlZAorCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9u
cy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N0
b3JhZ2UvbXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1v
bi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk2IEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
ZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICI8YnI+IjsKK30KKwordmFyIGNv
bXBsZXRlID0gMDsKKworZnVuY3Rpb24gY2hlY2tDb21wbGV0aW9uKCkKK3sKKyAgICAvLyBUaGUg
dGVzdCBzaG91bGQgZW5kIGFmdGVyIHR3byB0cmFuc2FjdGlvbnMKKyAgICBpZiAoKytjb21wbGV0
ZSA9PSAyICYmIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQorCisvLyBPcGVucyB0aGUgZGF0YWJhc2UgdXNl
ZCBpbiB0aGlzIHRlc3QgY2FzZQorZnVuY3Rpb24gb3BlblRlc3REYXRhYmFzZSgpCit7CisgICAg
cmV0dXJuIG9wZW5EYXRhYmFzZSgiTXVsdGlwbGVUcmFuc2FjdGlvbnNPbkRpZmZlcmVudEhhbmRs
ZXNUZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIxLjAiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIlRlc3QgdG8gbWFrZSBzdXJlIHRoYXQgcXVldWVpbmcgbXVsdGlwbGUgdHJhbnNh
Y3Rpb25zIG9uIGRpZmZlcmVudCBEQiBoYW5kbGVzIGRvZXMgbm90IHJlc3VsdCBpbiBhIGRlYWRs
b2NrLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAzMjc2OCk7Cit9CisKK2Z1bmN0aW9uIHN0
YXRlbWVudFN1Y2Nlc3NDYWxsYmFjayhkYk5hbWUsIHN0YXRlbWVudFR5cGUpCit7CisgICAgbG9n
KGRiTmFtZSArICIgIiArIHN0YXRlbWVudFR5cGUgKyAiIHN0YXRlbWVudCBzdWNjZWVkZWQiKTsK
K30KKworZnVuY3Rpb24gc3RhdGVtZW50RXJyb3JDYWxsYmFjayhkYk5hbWUsIHN0YXRlbWVudFR5
cGUsIGVycm9yKQoreworICAgIGxvZyhkYk5hbWUgKyAiICIgKyBzdGF0ZW1lbnRUeXBlICsgIiBz
dGF0ZW1lbnQgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7Cit9CisKKy8vIFJ1bnMgYSB0cmFu
c2FjdGlvbiBvbiB0aGUgZ2l2ZW4gZGF0YWJhc2UKK2Z1bmN0aW9uIHJ1blRyYW5zYWN0aW9uKGRi
LCBkYk5hbWUsIHZhbCkKK3sKKyAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbih0eCkgeworICAg
ICAgIC8vIEV4ZWN1dGUgYSByZWFkLW9ubHkgc3RhdGVtZW50CisgICAgICAgdHguZXhlY3V0ZVNx
bCgiU0VMRUNUIENPVU5UKCopIEZST00gVGVzdDsiLCBbXSwKKyAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHJlc3VsdCkgeyBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2soZGJOYW1lLCAicmVh
ZCIpOyB9LAorICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odHgsIGVycm9yKSB7IHN0YXRl
bWVudEVycm9yQ2FsbGJhY2soZGJOYW1lLCAicmVhZCIsIGVycm9yKTsgfSk7CisKKyAgICAgICAv
LyBFeGVjdXRlIGEgd3JpdGUgc3RhdGVtZW50IHRvIG1ha2Ugc3VyZSBTUUxpdGUgdHJpZXMgdG8g
YWNxdWlyZSBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUgREIgZmlsZQorICAgICAgIHR4LmV4ZWN1
dGVTcWwoIklOU0VSVCBJTlRPIFRlc3QgVkFMVUVTICg/KTsiLCBbdmFsXSwKKyAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKHJlc3VsdCkgeyBzdGF0ZW1lbnRTdWNjZXNzQ2FsbGJhY2soZGJO
YW1lLCAid3JpdGUiKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJv
cikgeyBzdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGRiTmFtZSwgIndyaXRlIiwgZXJyb3IpOyB9KTsK
KyAgICAgICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAvLyBUcmFuc2FjdGlvbiBm
YWlsdXJlIGNhbGxiYWNrCisgICAgICAgICAgIGxvZyhkYk5hbWUgKyAiIHRyYW5zYWN0aW9uIGZh
aWxlZDogIiArIGVycm9yLm1lc3NhZ2UpOworICAgICAgICAgICBjaGVja0NvbXBsZXRpb24oKTsK
KyAgICAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgLy8gVHJhbnNhY3Rpb24gc3VjY2Vz
cyBjYWxsYmFjaworICAgICAgICAgICBsb2coZGJOYW1lICsgIiB0cmFuc2FjdGlvbiBzdWNjZWVk
ZWQiKTsKKyAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgfSk7Cit9CisKKy8v
IFdlIG5lZWQgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIFRlc3QgdGFibGUgZXhpc3RzIGJlZm9yZSB3
ZSBydW4gb3VyIHRlc3QuCisvLyBUaGVyZWZvcmUsIHRoZSB0ZXN0IGNvZGUgaXMgaW4gdGhlIHN1
Y2Nlc3NDYWxsYmFjayBvZiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBjcmVhdGVzIHRoZSB0YWJsZS4K
K2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisKKyAgICB0cnkg
eworICAgICAgICB2YXIgZGIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgIGRiLnRyYW5z
YWN0aW9uKGZ1bmN0aW9uKHR4KSB7CisgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIFRlc3QgdGFi
bGUgaWYgaXQgZG9lcyBub3QgZXhpc3QKKyAgICAgICAgICAgIHR4LmV4ZWN1dGVTcWwoIkNSRUFU
RSBUQUJMRSBJRiBOT1QgRVhJU1RTIFRlc3QgKEZvbyBpbnQpOyIsIFtdLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1bHQpIHt9LCBmdW5jdGlvbih0eCwgZXJyb3IpIHt9
KTsKKyAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7CisgICAgICAgICAgICAgICAgbG9n
KCJDcmVhdGluZyB0aGUgVGVzdCB0YWJsZSBmYWlsZWQ6ICIgKyBlcnJvci5tZXNzYWdlKTsKKyAg
ICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBUZXN0IHRh
YmxlIHdhcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgICAgIHZhciBkYjEgPSBv
cGVuVGVzdERhdGFiYXNlKCk7CisgICAgICAgICAgICAgICAgdmFyIGRiMiA9IG9wZW5UZXN0RGF0
YWJhc2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGIxID09IGRiMikKKyAgICAgICAgICAgICAg
ICAgICAgbG9nKCJmYWlsdXJlOiBkYjEgPT0gZGIyIik7CisgICAgICAgICAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHJ1blRyYW5zYWN0aW9uKGRiMSwgImRiMSIsIDEpOworICAg
ICAgICAgICAgICAgICAgICBydW5UcmFuc2FjdGlvbihkYjIsICJkYjIiLCAyKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9KTsKKyAgICB9IGNhdGNoKGVycikge30KK30KKzwvc2Ny
aXB0PgorPGhlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKTsiPgorVGhpcyBpcyBhIHRlc3Qg
dG8gc2VlIGlmIHF1ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQg
aGFuZGxlcyB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suPGJyPgor
PC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="18901"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="18902"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34708</attachid>
            <date>2009-08-12 17:03:54 -0700</date>
            <delta_ts>2009-08-12 17:51:01 -0700</delta_ts>
            <desc>patch + test case</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30840</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzE2NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMDktMDgtMTIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBGaXhpbmcgYSBkZWFkbG9jayBjYXVzZWQgYnkgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBv
biB0d28KKyAgICAgICAgZGlmZmVyZW50IGRhdGFiYXNlIGhhbmRsZXMgZm9yIHRoZSBzYW1lIERC
LiBBZGRpbmcgYSBwZXItREIgdGhyZWFkCisgICAgICAgIHRyYW5zYWN0aW9uIGNvb3JkaW5hdG9y
IHRoYXQgYWxsb3dzIHRoZSBEQiB0aHJlYWQgdG8gcnVuIG9ubHkgb25lCisgICAgICAgIHRyYW5z
YWN0aW9uIHBlciBEQiBmaWxlIGF0IGFueSBnaXZlbiB0aW1lLgorCisgICAgICAgIEFkZGluZyBh
IHJlZ3Jlc3Npb24gdGVzdCBmb3IgdGhpcyBidWcuCisJCisgICAgICAgIFRlc3Q6IHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWwKKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjc5OTYKKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEYXRhYmFzZTo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAg
ICogc3RvcmFnZS9EYXRhYmFzZS5oOgorICAgICAgICAqIHN0b3JhZ2UvRGF0YWJhc2VUaHJlYWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YWJhc2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKToK
KyAgICAgICAgKiBzdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmg6CisgICAgICAgIChXZWJDb3JlOjpE
YXRhYmFzZVRocmVhZDo6dHJhbnNhY3Rpb25Db29yZGluYXRvcik6CisgICAgICAgICogc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6
U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlYnVn
U3RlcE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBlcmZvcm1OZXh0
U3RlcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6YXF1aXJlTG9jayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6bG9ja0FxdWlyZWQpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25F
cnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmg6CisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDogQWRkZWQuCisgICAg
ICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmg6IEFkZGVkLgorCiAyMDA5
LTA4LTEyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkocmV2aXNpb24gNDcxNjUpCisrKyBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0yMTE2LDYgKzIxMTYsOCBAQCB3ZWJj
b3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAgXAog
CVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oIFwKIAlXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb25DYWxsYmFjay5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvci5oIFwKKwlXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRv
ci5jcHAgXAogCVdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2suaAog
CiBlbHNlCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNDcxNjUpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQko
d29ya2luZyBjb3B5KQpAQCAtMjk2Miw2ICsyOTYyLDggQEAKICAgICAgICAgICAgICdzdG9yYWdl
L1NRTFRyYW5zYWN0aW9uLmNwcCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTFRyYW5zYWN0aW9uQ2FsbGJhY2suaCcsCisg
ICAgICAgICAgICAnc3RvcmFnZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgnLAorICAgICAg
ICAgICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAnLAogICAgICAgICAg
ICAgJ3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrLmgnLAogICAgICAgICAgICAg
J3N0b3JhZ2UvU3RvcmFnZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvU3RvcmFnZS5oJywK
SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gNDcxNjUp
CisrKyBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDczNiw2ICszMDczNiwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHN0b3JhZ2VcU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0NzE2NSkKKysrIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zODYyLDYgKzM4NjIsOCBAQAogCQlCNTBGNUI4MTBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29y
ZU9iakNFeHRyYXMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCNTBGNUI4MDBFOTZDRDk5MDBBRDcxQTYgLyogV2ViQ29yZU9iakNFeHRyYXMubW0gKi87
IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlv
bnMiOyB9OyB9OwogCQlCNUE2ODQyMjBGRkFCRTk4MDBEMjQ2ODkgLyogU1FMaXRlRmlsZVN5c3Rl
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0
MjEwRkZBQkU5ODAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uaCAqLzsgfTsKIAkJQjVBNjg0
MjQwRkZBQkVBQTAwRDI0Njg5IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjVBNjg0MjMwRkZBQkVBQTAwRDI0Njg5
IC8qIFNRTGl0ZUZpbGVTeXN0ZW0uY3BwICovOyB9OworCQlCNUMxMTIzQjEwMkI2QzQ2MDAwOTY1
NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi87IH07CisJCUI1QzExMjNDMTAyQjZDNDYwMDA5
NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCNUMxMTIzQTEwMkI2QzQ2MDAwOTY1NzggLyogU1FM
VHJhbnNhY3Rpb25Db29yZGluYXRvci5oICovOyB9OwogCQlCQzAwRjAwNDBFMEExODU1MDBGRDA0
RTMgLyogRE9NRmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkMwMEVGRkUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUuaCAqLzsgfTsKIAkJQkMw
MEYwMDUwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGUubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAwRUZGRjBFMEExODU1MDBGRDA0RTMgLyogRE9N
RmlsZS5tbSAqLzsgfTsKIAkJQkMwMEYwMDYwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRl
cm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMw
MEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICovOyB9OwpAQCAtODc1
NCw2ICs4NzU2LDggQEAKIAkJQjUwRjVCODAwRTk2Q0Q5OTAwQUQ3MUE2IC8qIFdlYkNvcmVPYmpD
RXh0cmFzLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2ViQ29y
ZU9iakNFeHRyYXMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIxMEZG
QUJFOTgwMEQyNDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uaDsgcGF0aCA9IHNxbC9TUUxpdGVGaWxlU3lz
dGVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUI1QTY4NDIzMEZGQUJFQUEwMEQy
NDY4OSAvKiBTUUxpdGVGaWxlU3lzdGVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IFNRTGl0ZUZpbGVTeXN0ZW0uY3BwOyBwYXRoID0gc3FsL1NRTGl0ZUZpbGVTeXN0
ZW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCNUMxMTIzOTEwMkI2QzQ2MDAw
OTY1NzggLyogU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQzAwRUZGRTBFMEExODU1MDBGRDA0RTMgLyogRE9NRmlsZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBET01GaWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDMDBFRkZGMEUwQTE4NTUwMEZEMDRFMyAvKiBET01GaWxlLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NRmlsZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMwMEYwMDAwRTBBMTg1NTAwRkQwNEUzIC8qIERPTUZpbGVJbnRlcm5hbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01GaWxlSW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk4MzksNiArOTg0Myw4IEBACiAJCTFBRTgyRUM5MENB
QUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQlCNUMxMTIzOTEwMkI2QzQ2MDAwOTY1NzggLyogU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5jcHAgKi8sCisJCQkJQjVDMTEyM0ExMDJCNkM0NjAwMDk2NTc4IC8qIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCAqLywKIAkJCQk1MTQxODVFRDBDRDY1RjA0MDA3NjND
OTkgLyogQ2hhbmdlVmVyc2lvbldyYXBwZXIuY3BwICovLAogCQkJCTUxNDE4NUVDMENENjVGMDQw
MDc2M0M5OSAvKiBDaGFuZ2VWZXJzaW9uV3JhcHBlci5oICovLAogCQkJCTUxOTYxMTVFMENBQzU2
NTcwMDEwQTgwQyAvKiBEYXRhYmFzZS5jcHAgKi8sCkBAIC0xNzI1Miw2ICsxNzI1OCw3IEBACiAJ
CQkJNDk0ODRGQ0IxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDk0ODRGQ0UxMDJDRjIzQzAwMTg3REQzIC8qIENhbnZhc1N0
eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTZFMjlBNjEwMkZBOTYyMDA3RkMxNEUgLyogV29y
a2VyUmVwb3J0aW5nUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCUI1QzExMjNDMTAyQjZDNDYw
MDA5NjU3OCAvKiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTE5MzEwLDYgKzE5MzE3LDcgQEAKIAkJCQk0OTQ4NEZDRDEwMkNGMjNDMDAxODdERDMgLyogQ2Fu
dmFzU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5MjI2MkQxMDMyMTA3QjAwNkU3RDVE
IC8qIEpTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5
MjI2MkYxMDMyMTA4NDAwNkU3RDVEIC8qIEpTQ1NTUnVsZUxpc3RDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQjVDMTEyM0IxMDJCNkM0NjAwMDk2NTc4IC8qIFNRTFRyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAJKHJldmlz
aW9uIDQ3MTY1KQorKysgV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNiArNTAsNyBAQAogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKICNpbmNs
dWRlICJTUUxpdGVTdGF0ZW1lbnQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIKKyNpbmNs
dWRlICJTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KICNlbmRpZgogCkBAIC01MzksMTMgKzU0MCwxNyBAQCB2b2lkIERhdGFiYXNlOjpzY2hl
ZHVsZVRyYW5zYWN0aW9uKCkKICAgICAgICAgbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3MgPSBmYWxz
ZTsKIH0KIAotdm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvblN0ZXAoU1FMVHJhbnNh
Y3Rpb24qIHRyYW5zYWN0aW9uKQordm9pZCBEYXRhYmFzZTo6c2NoZWR1bGVUcmFuc2FjdGlvblN0
ZXAoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uLCBib29sIGltbWVkaWF0ZWx5KQogewotICAg
IGlmIChtX2RvY3VtZW50LT5kYXRhYmFzZVRocmVhZCgpKSB7Ci0gICAgICAgIFJlZlB0cjxEYXRh
YmFzZVRyYW5zYWN0aW9uVGFzaz4gdGFzayA9IERhdGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpjcmVh
dGUodHJhbnNhY3Rpb24pOwotICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgRGF0
YWJhc2VUcmFuc2FjdGlvblRhc2sgJXAgZm9yIHRoZSB0cmFuc2FjdGlvbiBzdGVwXG4iLCB0YXNr
LmdldCgpKTsKKyAgICBpZiAoIW1fZG9jdW1lbnQtPmRhdGFiYXNlVGhyZWFkKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIFJlZlB0cjxEYXRhYmFzZVRyYW5zYWN0aW9uVGFzaz4gdGFzayA9IERh
dGFiYXNlVHJhbnNhY3Rpb25UYXNrOjpjcmVhdGUodHJhbnNhY3Rpb24pOworICAgIExPRyhTdG9y
YWdlQVBJLCAiU2NoZWR1bGluZyBEYXRhYmFzZVRyYW5zYWN0aW9uVGFzayAlcCBmb3IgdGhlIHRy
YW5zYWN0aW9uIHN0ZXBcbiIsIHRhc2suZ2V0KCkpOworICAgIGlmIChpbW1lZGlhdGVseSkKKyAg
ICAgICAgbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+c2NoZWR1bGVJbW1lZGlhdGVUYXNr
KHRhc2sucmVsZWFzZSgpKTsKKyAgICBlbHNlCiAgICAgICAgIG1fZG9jdW1lbnQtPmRhdGFiYXNl
VGhyZWFkKCktPnNjaGVkdWxlVGFzayh0YXNrLnJlbGVhc2UoKSk7Ci0gICAgfQogfQogCiB2b2lk
IERhdGFiYXNlOjpzY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qIHRy
YW5zYWN0aW9uKQpAQCAtNTgzLDYgKzU4OCwxMSBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhYmFzZTo6
cGVyZm9ybUdldFRhYmxlCiAgICAgcmV0dXJuIHRhYmxlTmFtZXM7CiB9CiAKK1NRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IqIERhdGFiYXNlOjp0cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9kb2N1bWVudC0+ZGF0YWJhc2VUaHJlYWQoKS0+dHJhbnNhY3Rpb25D
b29yZGluYXRvcigpOworfQorCiBTdHJpbmcgRGF0YWJhc2U6OnZlcnNpb24oKSBjb25zdAogewog
ICAgIGlmIChtX2RlbGV0ZWQpCkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkocmV2aXNpb24gNDcxNjUpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcs
NyBAQCBjbGFzcyBEYXRhYmFzZVRocmVhZDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgU1FMUmVz
dWx0U2V0OwogY2xhc3MgU1FMVHJhbnNhY3Rpb25DYWxsYmFjazsKK2NsYXNzIFNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CiBjbGFzcyBTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7CiBjbGFz
cyBTUUxWYWx1ZTsKICAgICAKQEAgLTExNiw2ICsxMTcsOCBAQCBwdWJsaWM6CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBwZXJmb3JtR2V0VGFibGVOYW1lcygpOwogCisgICAgU1FMVHJhbnNhY3Rpb25D
b29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0OworCiBwcml2YXRlOgog
ICAgIERhdGFiYXNlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbik7CiAKQEAgLTEyMyw3ICsxMjYsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBzY2hlZHVsZVRyYW5zYWN0aW9uKCk7CiAgICAgdm9pZCBzY2hlZHVsZVRy
YW5zYWN0aW9uQ2FsbGJhY2soU1FMVHJhbnNhY3Rpb24qKTsKLSAgICB2b2lkIHNjaGVkdWxlVHJh
bnNhY3Rpb25TdGVwKFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbik7CisgICAgdm9pZCBzY2hl
ZHVsZVRyYW5zYWN0aW9uU3RlcChTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24sIGJvb2wgaW1t
ZWRpYXRlbHkgPSBmYWxzZSk7CiAgICAgCiAgICAgTWVzc2FnZVF1ZXVlPFJlZlB0cjxTUUxUcmFu
c2FjdGlvbj4gPiBtX3RyYW5zYWN0aW9uUXVldWU7CiAgICAgTXV0ZXggbV90cmFuc2FjdGlvbklu
UHJvZ3Jlc3NNdXRleDsKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZVRocmVhZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmNwcAkocmV2aXNp
b24gNDcxNjUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2VUaHJlYWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSwxMSArMzUsMTMgQEAKICNpbmNsdWRlICJEYXRhYmFzZS5oIgogI2luY2x1
ZGUgIkRhdGFiYXNlVGFzay5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTUUxU
cmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRGF0YWJh
c2VUaHJlYWQ6OkRhdGFiYXNlVGhyZWFkKCkKICAgICA6IG1fdGhyZWFkSUQoMCkKKyAgICAsIG1f
dHJhbnNhY3Rpb25Db29yZGluYXRvcihuZXcgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcigpKQog
ewogICAgIG1fc2VsZlJlZiA9IHRoaXM7CiB9CkBAIC05Nyw2ICs5OSw5IEBAIHZvaWQqIERhdGFi
YXNlVGhyZWFkOjpkYXRhYmFzZVRocmVhZCgpCiAgICAgICAgIHBvb2wuY3ljbGUoKTsKICAgICB9
CiAKKyAgICAvLyBDbGVhbiB1cCB0aGUgbGlzdCBvZiBhbGwgcGVuZGluZyB0cmFuc2FjdGlvbnMg
b24gdGhpcyBkYXRhYmFzZSB0aHJlYWQKKyAgICBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3ItPnNo
dXRkb3duKCk7CisKICAgICBMT0coU3RvcmFnZUFQSSwgIkFib3V0IHRvIGRldGFjaCB0aHJlYWQg
JWkgYW5kIGNsZWFyIHRoZSByZWYgdG8gRGF0YWJhc2VUaHJlYWQgJXAsIHdoaWNoIGN1cnJlbnRs
eSBoYXMgJWkgcmVmKHMpIiwgbV90aHJlYWRJRCwgdGhpcywgcmVmQ291bnQoKSk7CiAKICAgICAv
LyBDbG9zZSB0aGUgZGF0YWJhc2VzIHRoYXQgd2UgcmFuIHRyYW5zYWN0aW9ucyBvbi4gVGhpcyBl
bnN1cmVzIHRoYXQgaWYgYW55IHRyYW5zYWN0aW9ucyBhcmUgc3RpbGwgb3BlbiwgdGhleSBhcmUg
cm9sbGVkIGJhY2sgYW5kIHdlIGRvbid0IGxlYXZlIHRoZSBkYXRhYmFzZSBpbiBhbgpJbmRleDog
V2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9z
dG9yYWdlL0RhdGFiYXNlVGhyZWFkLmgJKHJldmlzaW9uIDQ3MTY1KQorKysgV2ViQ29yZS9zdG9y
YWdlL0RhdGFiYXNlVGhyZWFkLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVk
ZSA8d3RmL01lc3NhZ2VRdWV1ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3
dGYvVGhyZWFkaW5nLmg+CkBAIC00Miw2ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIERhdGFiYXNlOwogY2xhc3MgRGF0YWJhc2VUYXNrOwogY2xhc3MgRG9jdW1lbnQ7CitjbGFz
cyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yOwogCiBjbGFzcyBEYXRhYmFzZVRocmVhZCA6IHB1
YmxpYyBUaHJlYWRTYWZlU2hhcmVkPERhdGFiYXNlVGhyZWFkPiB7CiBwdWJsaWM6CkBAIC02MCw2
ICs2Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY29yZERhdGFiYXNlQ2xvc2VkKERhdGFiYXNl
Kik7CiAgICAgVGhyZWFkSWRlbnRpZmllciBnZXRUaHJlYWRJRCgpIHsgcmV0dXJuIG1fdGhyZWFk
SUQ7IH0KIAorICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRp
bmF0b3IoKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29vcmRpbmF0b3IuZ2V0KCk7IH0KKwogcHJp
dmF0ZToKICAgICBEYXRhYmFzZVRocmVhZCgpOwogCkBAIC03NSw2ICs3OSw4IEBAIHByaXZhdGU6
CiAgICAgLy8gVGhpcyBzZXQga2VlcHMgdHJhY2sgb2YgdGhlIG9wZW4gZGF0YWJhc2VzIHRoYXQg
aGF2ZSBiZWVuIHVzZWQgb24gdGhpcyB0aHJlYWQuCiAgICAgdHlwZWRlZiBIYXNoU2V0PFJlZlB0
cjxEYXRhYmFzZT4gPiBEYXRhYmFzZVNldDsKICAgICBEYXRhYmFzZVNldCBtX29wZW5EYXRhYmFz
ZVNldDsKKworICAgIE93blB0cjxTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yPiBtX3RyYW5zYWN0
aW9uQ29vcmRpbmF0b3I7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Rv
cmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9uIDQ3MTY1KQorKysgV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAog
I2luY2x1ZGUgIlNRTFN0YXRlbWVudC5oIgogI2luY2x1ZGUgIlNRTFN0YXRlbWVudENhbGxiYWNr
LmgiCiAjaW5jbHVkZSAiU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5oIgorI2luY2x1ZGUgIlNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogCiAvLyBU
aGVyZSdzIG5vIHdheSBvZiBrbm93aW5nIGV4YWN0bHkgaG93IG11Y2ggbW9yZSBzcGFjZSB3aWxs
IGJlIHJlcXVpcmVkIHdoZW4gYSBzdGF0ZW1lbnQgaGl0cyB0aGUgcXVvdGEgbGltaXQuICAKQEAg
LTY3LDcgKzY4LDcgQEAgUGFzc1JlZlB0cjxTUUxUcmFuc2FjdGlvbj4gU1FMVHJhbnNhY3Rpbwog
CiBTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqIGRiLCBQYXNzUmVmUHRy
PFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgUGFzc1JlZlB0cjxWb2lkQ2FsbGJhY2s+
IHN1Y2Nlc3NDYWxsYmFjaywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1Jl
ZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IHdyYXBwZXIpCi0gICAgOiBtX25leHRTdGVwKCZT
UUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KQorICAgIDogbV9uZXh0
U3RlcCgmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrKQogICAgICwgbV9leGVjdXRlU3FsQWxs
b3dlZChmYWxzZSkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBl
cikKQEAgLTc2LDYgKzc3LDcgQEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKERhdGFi
YXNlKgogICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCiAgICAgLCBtX3Nob3Vs
ZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShm
YWxzZSkKKyAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNlKQogewogICAgIEFTU0VSVChtX2RhdGFi
YXNlKTsKIH0KQEAgLTExNiw3ICsxMTgsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjplbnF1ZXVl
U3RhdGVtZW50KFBhCiAjaWZuZGVmIE5ERUJVRwogY29uc3QgY2hhciogU1FMVHJhbnNhY3Rpb246
OmRlYnVnU3RlcE5hbWUoU1FMVHJhbnNhY3Rpb246OlRyYW5zYWN0aW9uU3RlcE1ldGhvZCBzdGVw
KQogewotICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6b3BlblRyYW5zYWN0aW9uQW5k
UHJlZmxpZ2h0KQorICAgIGlmIChzdGVwID09ICZTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxvY2sp
CisgICAgICAgIHJldHVybiAiYWNxdWlyZUxvY2siOworICAgIGVsc2UgaWYgKHN0ZXAgPT0gJlNR
TFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQpCiAgICAgICAgIHJldHVy
biAib3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IjsKICAgICBlbHNlIGlmIChzdGVwID09ICZT
UUxUcmFuc2FjdGlvbjo6cnVuU3RhdGVtZW50cykKICAgICAgICAgcmV0dXJuICJydW5TdGF0ZW1l
bnRzIjsKQEAgLTE1Nyw2ICsxNjEsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhh
bmRsZUNsb3NlCiAgICAgICAgIG1fc3FsaXRlVHJhbnNhY3Rpb24tPnN0b3AoKTsKICAgICAgICAg
bV9zcWxpdGVUcmFuc2FjdGlvbi5jbGVhcigpOwogICAgIH0KKworICAgIGlmIChtX2xvY2tBY3F1
aXJlZCkKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxl
YXNlTG9jayh0aGlzKTsKIH0KIAogCkBAIC0xNjQsNyArMTcxLDggQEAgYm9vbCBTUUxUcmFuc2Fj
dGlvbjo6cGVyZm9ybU5leHRTdGVwKCkKIHsKICAgICBMT0coU3RvcmFnZUFQSSwgIlN0ZXAgJXNc
biIsIGRlYnVnU3RlcE5hbWUobV9uZXh0U3RlcCkpOwogCi0gICAgQVNTRVJUKG1fbmV4dFN0ZXAg
PT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQcmVmbGlnaHQgfHwKKyAgICBB
U1NFUlQobV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OmFjcXVpcmVMb2NrIHx8CisgICAg
ICAgICAgIG1fbmV4dFN0ZXAgPT0gJlNRTFRyYW5zYWN0aW9uOjpvcGVuVHJhbnNhY3Rpb25BbmRQ
cmVmbGlnaHQgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246OnJ1
blN0YXRlbWVudHMgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJhbnNhY3Rpb246
OnBvc3RmbGlnaHRBbmRDb21taXQgfHwKICAgICAgICAgICAgbV9uZXh0U3RlcCA9PSAmU1FMVHJh
bnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3NDYWxsYmFjayB8fApAQCAtMTk1LDkgKzIwMywy
MyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwZXJmb3JtUGVuZGluZ0NhbGxiCiAgICAgICAgICh0
aGlzLT4qbV9uZXh0U3RlcCkoKTsKIH0KIAordm9pZCBTUUxUcmFuc2FjdGlvbjo6YWNxdWlyZUxv
Y2soKQoreworICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+YWNxdWly
ZUxvY2sodGhpcyk7Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb246OmxvY2tBY3F1aXJlZCgpCit7
CisgICAgbV9sb2NrQWNxdWlyZWQgPSB0cnVlOworICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNh
Y3Rpb246Om9wZW5UcmFuc2FjdGlvbkFuZFByZWZsaWdodDsKKyAgICBMT0coU3RvcmFnZUFQSSwg
IlNjaGVkdWxpbmcgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0IGltbWVkaWF0ZWx5IGZvciB0
cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2Fj
dGlvblN0ZXAodGhpcywgdHJ1ZSk7Cit9CisKIHZvaWQgU1FMVHJhbnNhY3Rpb246Om9wZW5UcmFu
c2FjdGlvbkFuZFByZWZsaWdodCgpCiB7CiAgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5tX3NxbGl0
ZURhdGFiYXNlLnRyYW5zYWN0aW9uSW5Qcm9ncmVzcygpKTsKKyAgICBBU1NFUlQobV9sb2NrQWNx
dWlyZWQpOwogCiAgICAgTE9HKFN0b3JhZ2VBUEksICJPcGVuaW5nIGFuZCBwcmVmbGlnaHRpbmcg
dHJhbnNhY3Rpb24gJXAiLCB0aGlzKTsKIApAQCAtMjczLDYgKzI5NSw4IEBAIHZvaWQgU1FMVHJh
bnNhY3Rpb246OnNjaGVkdWxlVG9SdW5TdGF0ZW0KIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6cnVu
U3RhdGVtZW50cygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAgIC8vIElm
IHRoZXJlIGlzIGEgc2VyaWVzIG9mIHN0YXRlbWVudHMgcXVldWVkIHVwIHRoYXQgYXJlIGFsbCBz
dWNjZXNzZnVsIGFuZCBoYXZlIG5vIGFzc29jaWF0ZWQKICAgICAvLyBTUUxTdGF0ZW1lbnRDYWxs
YmFjayBvYmplY3RzLCB0aGVuIHdlIGNhbiBidXJuIHRocm91Z2ggdGhlIHF1ZXVlCiAgICAgZG8g
ewpAQCAtNDExLDYgKzQzNSw4IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJRdW90YUlu
Y3JlYXMKIAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCgpCiB7ICAg
IAorICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7CisKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVw
IDcgLSBQZWZvcm0gcG9zdGZsaWdodCBzdGVwcywganVtcGluZyB0byB0aGUgZXJyb3IgY2FsbGJh
Y2sgaWYgdGhleSBmYWlsCiAgICAgaWYgKG1fd3JhcHBlciAmJiAhbV93cmFwcGVyLT5wZXJmb3Jt
UG9zdGZsaWdodCh0aGlzKSkgewogICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBtX3dyYXBw
ZXItPnNxbEVycm9yKCk7CkBAIC00NjksMTEgKzQ5NSwxNiBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3VjY2Vzc0NhbGxiCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clN1Y2Nlc3NDYWxsYmFjaygpCiB7CisgICAgQVNTRVJUKG1fbG9ja0FjcXVpcmVkKTsKKwogICAg
IC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTEgLSBFbmQgdHJhbnNhY3Rpb24gc3RlcHMKICAgICAvLyBU
aGVyZSBpcyBubyBuZXh0IHN0ZXAKICAgICBMT0coU3RvcmFnZUFQSSwgIlRyYW5zYWN0aW9uICVw
IGlzIGNvbXBsZXRlXG4iLCB0aGlzKTsKICAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPm1fc3FsaXRl
RGF0YWJhc2UudHJhbnNhY3Rpb25JblByb2dyZXNzKCkpOwogICAgIG1fbmV4dFN0ZXAgPSAwOwor
CisgICAgLy8gUmVsZWFzZSB0aGUgbG9jayBvbiB0aGlzIGRhdGFiYXNlCisgICAgbV9kYXRhYmFz
ZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5yZWxlYXNlTG9jayh0aGlzKTsKIH0KIAogdm9p
ZCBTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGluQ2FsbGJhY2sp
CkBAIC01MTYsNiArNTQ3LDggQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0
aW9uRQogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2soKQogeworICAgIEFTU0VSVChtX2xvY2tBY3F1aXJlZCk7CisKICAgICBtX2RhdGFi
YXNlLT5tX2RhdGFiYXNlQXV0aG9yaXplci0+ZGlzYWJsZSgpOwogICAgIGlmIChtX3NxbGl0ZVRy
YW5zYWN0aW9uKSB7CiAgICAgICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBSb2xsYmFjayB0
aGUgdHJhbnNhY3Rpb24uCkBAIC01NDAsNiArNTczLDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6
Y2xlYW51cEFmdGVyVHJhbnNhYwogICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRv
IGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCiAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgbV9lcnJv
ckNhbGxiYWNrID0gMDsKKworICAgIC8vIE5vdyByZWxlYXNlIHRoZSBsb2NrIG9uIHRoaXMgZGF0
YWJhc2UKKyAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPnJlbGVhc2VM
b2NrKHRoaXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0b3JhZ2UvU1FM
VHJhbnNhY3Rpb24uaAkocmV2aXNpb24gNDcxNjUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNzMsNiArNzMsNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBleGVjdXRlU1FMKGNvbnN0IFN0cmluZyYgc3FsU3RhdGVtZW50LCBjb25zdCBWZWN0b3I8
U1FMVmFsdWU+JiBhcmd1bWVudHMsIAogICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBjYWxsYmFja0Vycm9yLCBFeGNlcHRpb25Db2RlJiBlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICB2b2lkIGxvY2tBY3F1aXJlZCgpOwog
ICAgIGJvb2wgcGVyZm9ybU5leHRTdGVwKCk7CiAgICAgdm9pZCBwZXJmb3JtUGVuZGluZ0NhbGxi
YWNrKCk7CiAgICAgCkBAIC04OCw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
aGVja0FuZEhhbmRsZUNsb3NlZERhdGFiYXNlKCk7CiAgICAgCisgICAgdm9pZCBhY3F1aXJlTG9j
aygpOwogICAgIHZvaWQgb3BlblRyYW5zYWN0aW9uQW5kUHJlZmxpZ2h0KCk7CiAgICAgdm9pZCBk
ZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjaygpOwogICAgIHZvaWQgc2NoZWR1bGVUb1J1blN0YXRl
bWVudHMoKTsKQEAgLTEyMCw2ICsxMjIsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxTUUxFcnJv
cj4gbV90cmFuc2FjdGlvbkVycm9yOwogICAgIGJvb2wgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0
ZW1lbnQ7CiAgICAgYm9vbCBtX21vZGlmaWVkRGF0YWJhc2U7CisgICAgYm9vbCBtX2xvY2tBY3F1
aXJlZDsKICAgICAKICAgICBNdXRleCBtX3N0YXRlbWVudE11dGV4OwogICAgIERlcXVlPFJlZlB0
cjxTUUxTdGF0ZW1lbnQ+ID4gbV9zdGF0ZW1lbnRRdWV1ZTsKSW5kZXg6IFdlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvci5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0
aW9uQ29vcmRpbmF0b3IuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEYXRh
YmFzZS5oIgorI2luY2x1ZGUgIlNRTFRyYW5zYWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0RlcXVl
Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFN0cmluZyBnZXREYXRhYmFzZUlkZW50aWZp
ZXIoU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIERhdGFiYXNlKiBkYXRhYmFz
ZSA9IHRyYW5zYWN0aW9uLT5kYXRhYmFzZSgpOworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAg
cmV0dXJuIGRhdGFiYXNlLT5zdHJpbmdJZGVudGlmaWVyKCk7Cit9CisKK3ZvaWQgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6YWNxdWlyZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9u
KQoreworICAgIFN0cmluZyBkYklkZW50aWZpZXIgPSBnZXREYXRhYmFzZUlkZW50aWZpZXIodHJh
bnNhY3Rpb24pOworCisgICAgVHJhbnNhY3Rpb25zSGFzaE1hcDo6aXRlcmF0b3IgaXQgPSBtX3Bl
bmRpbmdUcmFuc2FjdGlvbnMuZmluZChkYklkZW50aWZpZXIpOworICAgIGlmIChpdCA9PSBtX3Bl
bmRpbmdUcmFuc2FjdGlvbnMuZW5kKCkpIHsKKyAgICAgICAgLy8gTm8gcGVuZGluZyB0cmFuc2Fj
dGlvbnMgZm9yIHRoaXMgREIKKyAgICAgICAgVHJhbnNhY3Rpb25zUXVldWUgcGVuZGluZ1RyYW5z
YWN0aW9uczsKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0aW9ucy5hcHBlbmQodHJhbnNhY3Rpb24p
OworICAgICAgICBtX3BlbmRpbmdUcmFuc2FjdGlvbnMuYWRkKGRiSWRlbnRpZmllciwgcGVuZGlu
Z1RyYW5zYWN0aW9ucyk7CisKKyAgICAgICAgLy8gU3RhcnQgdGhlIHRyYW5zYWN0aW9uCisgICAg
ICAgIHRyYW5zYWN0aW9uLT5sb2NrQWNxdWlyZWQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBBbm90aGVyIHRyYW5zYWN0aW9uIGlzIHJ1bm5pbmcgb24gdGhpcyBEQjsgcHV0IHRoaXMgb25l
IGluIHRoZSBxdWV1ZQorICAgICAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0
aW9ucyA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHBlbmRpbmdUcmFuc2FjdGlvbnMuYXBwZW5kKHRy
YW5zYWN0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgU1FMVHJhbnNhY3Rpb25Db29yZGluYXRvcjo6
cmVsZWFzZUxvY2soU1FMVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKQoreworICAgIGlmIChtX3Bl
bmRpbmdUcmFuc2FjdGlvbnMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgZGJJZGVudGlmaWVyID0gZ2V0RGF0YWJhc2VJZGVudGlmaWVyKHRyYW5zYWN0aW9uKTsKKwor
ICAgIFRyYW5zYWN0aW9uc0hhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nVHJhbnNhY3Rp
b25zLmZpbmQoZGJJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoaXQgIT0gbV9wZW5kaW5nVHJhbnNh
Y3Rpb25zLmVuZCgpKTsKKyAgICBUcmFuc2FjdGlvbnNRdWV1ZSYgcGVuZGluZ1RyYW5zYWN0aW9u
cyA9IGl0LT5zZWNvbmQ7CisgICAgQVNTRVJUKCFwZW5kaW5nVHJhbnNhY3Rpb25zLmlzRW1wdHko
KSk7CisKKyAgICAvLyAndHJhbnNhY3Rpb24nIHNob3VsZCBhbHdheXMgYmUgdGhlIGZpcnN0IHRy
YW5zYWN0aW9uIGluIHRoaXMgcXVldWUKKyAgICBBU1NFUlQocGVuZGluZ1RyYW5zYWN0aW9ucy5m
aXJzdCgpLmdldCgpID09IHRyYW5zYWN0aW9uKTsKKworICAgIC8vIFJlbW92ZSAndHJhbnNhY3Rp
b24nIGZyb20gdGhlIHF1ZXVlIG9mIHBlbmRpbmcgdHJhbnNhY3Rpb25zCisgICAgcGVuZGluZ1Ry
YW5zYWN0aW9ucy5yZW1vdmVGaXJzdCgpOworICAgIGlmIChwZW5kaW5nVHJhbnNhY3Rpb25zLmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBObyBtb3JlIHBlbmRpbmcgdHJhbnNhY3Rpb25zOyBkZWxl
dGUgZGJJZGVudGlmaWVyJ3MgcXVldWUKKyAgICAgICAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zLnJl
bW92ZShpdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBtb3JlIHBlbmRpbmcg
dHJhbnNhY3Rpb25zOyBzdGFydCB0aGUgbmV4dCBvbmUKKyAgICAgICAgcGVuZGluZ1RyYW5zYWN0
aW9ucy5maXJzdCgpLT5sb2NrQWNxdWlyZWQoKTsKKyAgICB9Cit9CisKK3ZvaWQgU1FMVHJhbnNh
Y3Rpb25Db29yZGluYXRvcjo6c2h1dGRvd24oKQoreworICAgIC8vIENsZWFuIHVwIGFsbCBwZW5k
aW5nIHRyYW5zYWN0aW9ucyBmb3IgYWxsIGRhdGFiYXNlcworICAgIG1fcGVuZGluZ1RyYW5zYWN0
aW9ucy5jbGVhcigpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbkNvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb25Db29yZGluYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKKyNkZWZpbmUgU1FMVHJhbnNhY3Rpb25Db29y
ZGluYXRvcl9oCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5o
IgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICBjbGFzcyBT
UUxUcmFuc2FjdGlvbjsKKworICAgIGNsYXNzIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdm9pZCBhY3F1aXJlTG9jayhTUUxUcmFuc2FjdGlvbiopOwor
ICAgICAgICB2b2lkIHJlbGVhc2VMb2NrKFNRTFRyYW5zYWN0aW9uKik7CisgICAgICAgIHZvaWQg
c2h1dGRvd24oKTsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIERlcXVlPFJlZlB0cjxT
UUxUcmFuc2FjdGlvbj4gPiBUcmFuc2FjdGlvbnNRdWV1ZTsKKyAgICAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgVHJhbnNhY3Rpb25zUXVldWU+IFRyYW5zYWN0aW9uc0hhc2hNYXA7CisgICAg
ICAgIFRyYW5zYWN0aW9uc0hhc2hNYXAgbV9wZW5kaW5nVHJhbnNhY3Rpb25zOworICAgIH07Cit9
CisKKyNlbmRpZiAvLyBTUUxUcmFuc2FjdGlvbkNvb3JkaW5hdG9yX2gKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDQ3MTY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMDktMDgtMTIgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBS
ZWdyZXNzaW9uIHRlc3QuIFRlc3RzIHRoYXQgdHdvIHRyYW5zYWN0aW9ucyB0aGF0IHJ1biBvbiB0
d28KKyAgICAgICAgZGlmZmVyZW50IGhhbmRsZXMgZm9yIHRoZSBzYW1lIERCIGRvIG5vdCBjYXVz
ZSBhIGRlYWRsb2NrLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
P2lkPTI3OTY2CisKKyAgICAgICAgKiBzdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1k
aWZmZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN0b3JhZ2Uv
bXVsdGlwbGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLmh0bWw6IEFkZGVkLgor
CiAyMDA5LTA4LTEyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvbXVsdGlw
bGUtdHJhbnNhY3Rpb25zLW9uLWRpZmZlcmVudC1oYW5kbGVzLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZm
ZXJlbnQtaGFuZGxlcy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9z
dG9yYWdlL211bHRpcGxlLXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorVGhpcyBpcyBhIHRlc3QgdG8gc2Vl
IGlmIHF1ZXVlaW5nIHVwIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZmZXJlbnQgaGFuZGxl
cyB0byB0aGUgc2FtZSBkYXRhYmFzZSByZXN1bHRzIGluIGEgZGVhZGxvY2suCitkYjEgcmVhZCBz
dGF0ZW1lbnQgc3VjY2VlZGVkCitkYjEgd3JpdGUgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIxIHRy
YW5zYWN0aW9uIHN1Y2NlZWRlZAorZGIyIHJlYWQgc3RhdGVtZW50IHN1Y2NlZWRlZAorZGIyIHdy
aXRlIHN0YXRlbWVudCBzdWNjZWVkZWQKK2RiMiB0cmFuc2FjdGlvbiBzdWNjZWVkZWQKKwpJbmRl
eDogTGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50
LWhhbmRsZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL211bHRpcGxl
LXRyYW5zYWN0aW9ucy1vbi1kaWZmZXJlbnQtaGFuZGxlcy5odG1sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvc3RvcmFnZS9tdWx0aXBsZS10cmFuc2FjdGlvbnMtb24tZGlmZmVyZW50LWhh
bmRsZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NiBAQAorPGh0bWw+Cis8aGVhZD4K
KzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmJvZHku
aW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAiPGJyPiI7Cit9CisKK3ZhciBjb21wbGV0ZSA9IDA7CisK
K2Z1bmN0aW9uIGNoZWNrQ29tcGxldGlvbigpCit7CisgICAgLy8gVGhlIHRlc3Qgc2hvdWxkIGVu
ZCBhZnRlciB0d28gdHJhbnNhY3Rpb25zCisgICAgaWYgKCsrY29tcGxldGUgPT0gMiAmJiB3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKK30KKworLy8gT3BlbnMgdGhlIGRhdGFiYXNlIHVzZWQgaW4gdGhpcyB0ZXN0
IGNhc2UKK2Z1bmN0aW9uIG9wZW5UZXN0RGF0YWJhc2UoKQoreworICAgIHJldHVybiBvcGVuRGF0
YWJhc2UoIk11bHRpcGxlVHJhbnNhY3Rpb25zT25EaWZmZXJlbnRIYW5kbGVzVGVzdCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAiMS4wIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0
IHRvIG1ha2Ugc3VyZSB0aGF0IHF1ZXVlaW5nIG11bHRpcGxlIHRyYW5zYWN0aW9ucyBvbiBkaWZm
ZXJlbnQgREIgaGFuZGxlcyBkb2VzIG5vdCByZXN1bHQgaW4gYSBkZWFkbG9jay4iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgMzI3NjgpOworfQorCitmdW5jdGlvbiBzdGF0ZW1lbnRTdWNjZXNz
Q2FsbGJhY2soZGJOYW1lLCBzdGF0ZW1lbnRUeXBlKQoreworICAgIGxvZyhkYk5hbWUgKyAiICIg
KyBzdGF0ZW1lbnRUeXBlICsgIiBzdGF0ZW1lbnQgc3VjY2VlZGVkIik7Cit9CisKK2Z1bmN0aW9u
IHN0YXRlbWVudEVycm9yQ2FsbGJhY2soZGJOYW1lLCBzdGF0ZW1lbnRUeXBlLCBlcnJvcikKK3sK
KyAgICBsb2coZGJOYW1lICsgIiAiICsgc3RhdGVtZW50VHlwZSArICIgc3RhdGVtZW50IGZhaWxl
ZDogIiArIGVycm9yLm1lc3NhZ2UpOworfQorCisvLyBSdW5zIGEgdHJhbnNhY3Rpb24gb24gdGhl
IGdpdmVuIGRhdGFiYXNlCitmdW5jdGlvbiBydW5UcmFuc2FjdGlvbihkYiwgZGJOYW1lLCB2YWwp
Cit7CisgICAgZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24odHgpIHsKKyAgICAgICAvLyBFeGVjdXRl
IGEgcmVhZC1vbmx5IHN0YXRlbWVudAorICAgICAgIHR4LmV4ZWN1dGVTcWwoIlNFTEVDVCBDT1VO
VCgqKSBGUk9NIFRlc3Q7IiwgW10sCisgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihyZXN1
bHQpIHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKGRiTmFtZSwgInJlYWQiKTsgfSwKKyAgICAg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHR4LCBlcnJvcikgeyBzdGF0ZW1lbnRFcnJvckNhbGxi
YWNrKGRiTmFtZSwgInJlYWQiLCBlcnJvcik7IH0pOworCisgICAgICAgLy8gRXhlY3V0ZSBhIHdy
aXRlIHN0YXRlbWVudCB0byBtYWtlIHN1cmUgU1FMaXRlIHRyaWVzIHRvIGFjcXVpcmUgYW4gZXhj
bHVzaXZlIGxvY2sgb24gdGhlIERCIGZpbGUKKyAgICAgICB0eC5leGVjdXRlU3FsKCJJTlNFUlQg
SU5UTyBUZXN0IFZBTFVFUyAoPyk7IiwgW3ZhbF0sCisgICAgICAgICAgICAgICAgICAgICBmdW5j
dGlvbihyZXN1bHQpIHsgc3RhdGVtZW50U3VjY2Vzc0NhbGxiYWNrKGRiTmFtZSwgIndyaXRlIik7
IH0sCisgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0eCwgZXJyb3IpIHsgc3RhdGVtZW50
RXJyb3JDYWxsYmFjayhkYk5hbWUsICJ3cml0ZSIsIGVycm9yKTsgfSk7CisgICAgICAgfSwgZnVu
Y3Rpb24oZXJyb3IpIHsKKyAgICAgICAgICAgLy8gVHJhbnNhY3Rpb24gZmFpbHVyZSBjYWxsYmFj
aworICAgICAgICAgICBsb2coZGJOYW1lICsgIiB0cmFuc2FjdGlvbiBmYWlsZWQ6ICIgKyBlcnJv
ci5tZXNzYWdlKTsKKyAgICAgICAgICAgY2hlY2tDb21wbGV0aW9uKCk7CisgICAgICAgfSwgZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgIC8vIFRyYW5zYWN0aW9uIHN1Y2Nlc3MgY2FsbGJhY2sKKyAg
ICAgICAgICAgbG9nKGRiTmFtZSArICIgdHJhbnNhY3Rpb24gc3VjY2VlZGVkIik7CisgICAgICAg
ICAgIGNoZWNrQ29tcGxldGlvbigpOworICAgICAgIH0pOworfQorCisvLyBXZSBuZWVkIHRvIGd1
YXJhbnRlZSB0aGF0IHRoZSBUZXN0IHRhYmxlIGV4aXN0cyBiZWZvcmUgd2UgcnVuIG91ciB0ZXN0
LgorLy8gVGhlcmVmb3JlLCB0aGUgdGVzdCBjb2RlIGlzIGluIHRoZSBzdWNjZXNzQ2FsbGJhY2sg
b2YgdGhlIHRyYW5zYWN0aW9uIHRoYXQgY3JlYXRlcyB0aGUgdGFibGUuCitmdW5jdGlvbiBydW5U
ZXN0KCkgeworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgdmFy
IGRiID0gb3BlblRlc3REYXRhYmFzZSgpOworICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlv
bih0eCkgeworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBUZXN0IHRhYmxlIGlmIGl0IGRvZXMg
bm90IGV4aXN0CisgICAgICAgICAgICB0eC5leGVjdXRlU3FsKCJDUkVBVEUgVEFCTEUgSUYgTk9U
IEVYSVNUUyBUZXN0IChGb28gaW50KTsiLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnVuY3Rpb24ocmVzdWx0KSB7fSwgZnVuY3Rpb24odHgsIGVycm9yKSB7fSk7CisgICAgICAgICAg
ICB9LCBmdW5jdGlvbihlcnJvcikgeworICAgICAgICAgICAgICAgIGxvZygiQ3JlYXRpbmcgdGhl
IFRlc3QgdGFibGUgZmFpbGVkOiAiICsgZXJyb3IubWVzc2FnZSk7CisgICAgICAgICAgICB9LCBm
dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgVGVzdCB0YWJsZSB3YXMgY3JlYXRl
ZCBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgICAgICB2YXIgZGIxID0gb3BlblRlc3REYXRhYmFz
ZSgpOworICAgICAgICAgICAgICAgIHZhciBkYjIgPSBvcGVuVGVzdERhdGFiYXNlKCk7CisgICAg
ICAgICAgICAgICAgaWYgKGRiMSA9PSBkYjIpCisgICAgICAgICAgICAgICAgICAgIGxvZygiZmFp
bHVyZTogZGIxID09IGRiMiIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICBydW5UcmFuc2FjdGlvbihkYjEsICJkYjEiLCAxKTsKKyAgICAgICAgICAgICAgICAg
ICAgcnVuVHJhbnNhY3Rpb24oZGIyLCAiZGIyIiwgMik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSk7CisgICAgfSBjYXRjaChlcnIpIHt9Cit9Cis8L3NjcmlwdD4KKzxoZWFkPgor
PGJvZHkgb25sb2FkPSJydW5UZXN0KCk7Ij4KK1RoaXMgaXMgYSB0ZXN0IHRvIHNlZSBpZiBxdWV1
ZWluZyB1cCBtdWx0aXBsZSB0cmFuc2FjdGlvbnMgb24gZGlmZmVyZW50IGhhbmRsZXMgdG8gdGhl
IHNhbWUgZGF0YWJhc2UgcmVzdWx0cyBpbiBhIGRlYWRsb2NrLjxicj4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>
<flag name="review"
          id="18903"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="18905"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>