<?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>124244</bug_id>
          
          <creation_ts>2013-11-12 16:10:36 -0800</creation_ts>
          <short_desc>Move basic IDBBackingStoreTransaction operations to IDBServerConnection</short_desc>
          <delta_ts>2013-11-12 19:57:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</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>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>alecflett</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>949919</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:10:36 -0800</bug_when>
    <thetext>Move basic IDBBackingStoreTransaction operations to IDBServerConnection

Important step towards completely abstracting away the BackingStoreTransaction from the frontend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949927</commentid>
    <comment_count>1</comment_count>
      <attachid>216739</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:27:23 -0800</bug_when>
    <thetext>Created attachment 216739
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949933</commentid>
    <comment_count>2</comment_count>
      <attachid>216739</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-11-12 16:33:11 -0800</bug_when>
    <thetext>Comment on attachment 216739
Patch v1 

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

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:70
&gt; +    m_database-&gt;serverConnection().openTransaction(id, objectStoreIds, mode, [self, this](bool success) {

No need to capture ‘this’ here, just call everything on self. (Also, I think you should call self “backend” or something that isn’t a reserved keyword).

&gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:238
&gt; +    m_database-&gt;serverConnection().commitTransaction(m_id, [self, this, committed, unused](bool success) mutable {

Ditto.

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:87
&gt; +    successCallback(true);

I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:92
&gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);

Where is this transaction removed from the map?

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:96
&gt; +    completionCallback();

I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:101
&gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);

Where is this transaction removed from the map?

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:104
&gt; +    successCallback(transaction-&gt;commit());

I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:109
&gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);

Where is this transaction removed from the map?

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:113
&gt; +    completionCallback();

I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:118
&gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);

Where is this transaction removed from the map?

&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:122
&gt; +    completionCallback();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949935</commentid>
    <comment_count>3</comment_count>
      <attachid>216739</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-12 16:36:10 -0800</bug_when>
    <thetext>Comment on attachment 216739
Patch v1 

Attachment 216739 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/22539795</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949943</commentid>
    <comment_count>4</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:43:06 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 216739 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=216739&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:70
&gt; &gt; +    m_database-&gt;serverConnection().openTransaction(id, objectStoreIds, mode, [self, this](bool success) {
&gt; 
&gt; No need to capture ‘this’ here, just call everything on self. (Also, I think you should call self “backend” or something that isn’t a reserved keyword).
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp:238
&gt; &gt; +    m_database-&gt;serverConnection().commitTransaction(m_id, [self, this, committed, unused](bool success) mutable {
&gt; 
&gt; Ditto.

Okay!

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:87
&gt; &gt; +    successCallback(true);
&gt; 
&gt; I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:96
&gt; &gt; +    completionCallback();
&gt; 
&gt; I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.
&gt; 

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:104
&gt; &gt; +    successCallback(transaction-&gt;commit());
&gt; 
&gt; I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.
&gt; 

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:113
&gt; &gt; +    completionCallback();
&gt; 
&gt; I think that it’s weird that all these immediately call the completion callback instead of doing it asynchronously.
&gt; 

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:122
&gt; &gt; +    completionCallback();
&gt; 
&gt; Ditto.

Per IRC convo, I&apos;ll add some callOnMainThread() action here to make the callbacks asynchronous.

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:92
&gt; &gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);
&gt; 
&gt; Where is this transaction removed from the map?

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:101
&gt; &gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);
&gt; 
&gt; Where is this transaction removed from the map?

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:109
&gt; &gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);
&gt; 
&gt; Where is this transaction removed from the map?

&gt; &gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:118
&gt; &gt; +    RefPtr&lt;IDBBackingStoreTransactionLevelDB&gt; transaction = m_backingStoreTransactions.get(transactionID);
&gt; 
&gt; Where is this transaction removed from the map?

In removeBackingStoreTransaction() which isn&apos;t implemented, and that&apos;s probably what the efl/gtk bots are complaining about.  *slaps forehead*  Fix coming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949949</commentid>
    <comment_count>5</comment_count>
      <attachid>216744</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:50:45 -0800</bug_when>
    <thetext>Created attachment 216744
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949952</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-11-12 16:53:07 -0800</bug_when>
    <thetext>Attachment 216744 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBBackingStoreInterface.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBDatabaseBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBServerConnection.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackend.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/IDBTransactionBackendOperations.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreCursorLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBBackingStoreTransactionLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBFactoryBackendLevelDB.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBLevelDBCoding.h&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp&apos;, u&apos;Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.h&apos;, u&apos;Source/WebCore/platform/DatabaseStrategy.cpp&apos;, u&apos;Source/WebCore/platform/leveldb/LevelDBComparator.h&apos;, u&apos;Source/WebCore/platform/leveldb/LevelDBDatabase.h&apos;, u&apos;Source/WebCore/platform/leveldb/LevelDBIterator.h&apos;, u&apos;Source/WebCore/platform/leveldb/LevelDBSlice.h&apos;, u&apos;Source/WebCore/platform/leveldb/LevelDBTransaction.h&apos;, u&apos;Source/WebCore/platform/leveldb/LevelDBWriteBatch.h&apos;]&quot; exit_code: 1
Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:83:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:88:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:106:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 3 in 26 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949954</commentid>
    <comment_count>7</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:56:17 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Attachment 216744 [details] did not pass style-queue:
&gt; 
&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:83:  More than one command on the same line  [whitespace/newline] [4]
&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:88:  More than one command on the same line  [whitespace/newline] [4]
&gt; Source/WebCore/Modules/indexeddb/leveldb/IDBServerConnectionLevelDB.cpp:106:  More than one command on the same line  [whitespace/newline] [4]
&gt; Total errors found: 3 in 26 files

Don&apos;t like this complaint... but fixed locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949955</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:56:47 -0800</bug_when>
    <thetext>Whoops, this patch has bogus testing-on-mac code changes.  ignore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949956</commentid>
    <comment_count>9</comment_count>
      <attachid>216745</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 16:58:03 -0800</bug_when>
    <thetext>Created attachment 216745
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949959</commentid>
    <comment_count>10</comment_count>
      <attachid>216745</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-11-12 17:03:47 -0800</bug_when>
    <thetext>Comment on attachment 216745
Patch v3

Attachment 216745 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/22369803</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949963</commentid>
    <comment_count>11</comment_count>
      <attachid>216747</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 17:17:43 -0800</bug_when>
    <thetext>Created attachment 216747
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>949991</commentid>
    <comment_count>12</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 17:57:46 -0800</bug_when>
    <thetext>I forgot to address the self/this feedback - Have done so locally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>950031</commentid>
    <comment_count>13</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-11-12 19:57:58 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/159177</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216739</attachid>
            <date>2013-11-12 16:27:23 -0800</date>
            <delta_ts>2013-11-12 16:50:45 -0800</delta_ts>
            <desc>Patch v1 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>46669</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjUwZmRmLi5mMjAyNWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjgg
QEAKIDIwMTMtMTEtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1vdmUgYmFzaWMgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gb3BlcmF0aW9ucyB0byBJ
REJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoOgorICAgICAgICAtIE1ha2VzIElEQkJhY2tpbmdTdG9yZSB0
aGUgb3duZXIgb2YgYW4gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uCisgICAgICAgIC0gQWRk
cyB0aGUgaW50ZWdlciB0cmFuc2FjdGlvbiBJRCB0byBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biBmb3IgcmVmZXJlbmNlLgorICAgICAgICAtIFJlbW92ZXMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
4oCZcyByZWxpYW5jZSBvbiBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiBieSBtb3ZpbmcKKyAg
ICAgICAgICBuZWNlc3NhcnkgbWV0aG9kcyB0byBJREJTZXJ2ZXJDb25uZWN0aW9uLgorICAgICAg
ICAtIFJlbmFtZXMgdGhlIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSBhY2Nlc3NvciB0bworICAgICAgICAgIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbiB0byBtYWtlIGl0IGNsZWFyIGl04oCZcyBvbiB0aGUgd2F5IG91dC4KKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpkZXByZWNhdGVk
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmQuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246
OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbjo6cGVyZm9ybSk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6
OklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6On5JREJCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbkxldmVsREIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCOjpyZXNldFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oOgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlblRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cmVzZXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cm9sbGJhY2tUcmFuc2FjdGlvbik6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
Qi5oOgorCisyMDEzLTExLTEyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwog
ICAgICAgICBJbnRyb2R1Y2UgSURCU2VydmVyQ29ubmVjdGlvbiAoYW5kIHN0YXJ0IG1vdmluZyB0
aGluZ3MgdG8gaXQpLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI0MTkzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKaW5kZXggMzcwMDIzMy4uMzdjODcz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KCkgeyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25JbnRlcmZhY2U+IGNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBlc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpID0gMDsKIAogICAgIC8vIE5ldy1zdHlsZSBhc3luY2hyb25vdXMgY2FsbGJhY2tz
CiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmLCBib29sIHN1Y2Nlc3MpPiBHZXRJREJEYXRhYmFzZU1ldGFkYXRhRnVuY3Rpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kLmNwcAppbmRleCA4NWQ4MDViLi5lZDE2YjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKQEAgLTI1NSw3
ICsyNTUsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U+IHN0b3JlID0gbV9zZXJ2ZXJDb25uZWN0aW9uLT5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJv
bm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29t
cGxleGl0eS4KICAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmll
cjsKLSAgICBib29sIG9rID0gc3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fbWV0YWRhdGEuaWQsIG9iamVjdFN0b3Jl
SWQsICpwcmltYXJ5S2V5LCByZWNvcmRJZGVudGlmaWVyKTsKKyAgICBib29sIG9rID0gc3RvcmUt
PmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtl
eSwgcmVjb3JkSWRlbnRpZmllcik7CiAgICAgaWYgKCFvaykgewogICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwogICAg
ICAgICByZXR1cm47CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6
OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5n
ZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZp
ZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJ
bmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKnN0b3JlLmdldCgpLCB0cmFuc2FjdGlv
bi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3Jl
SWQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCmluZGV4IDc5NWU3MDMuLmJlZTYzNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNkZWZpbmUgSURCU2VydmVyQ29ubmVjdGlvbl9o
CiAKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0z
Niw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTsKK2NsYXNzIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlOwog
CiAvLyBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbmdsZSBhc3luY2hyb25vdXMgbGF5ZXIg
YmV0d2VlbiB0aGUgd2ViLWZhY2luZyBmcm9udGVuZAogLy8gYW5kIHRoZSBJL08gcGVyZm9ybWlu
ZyBiYWNrZW5kIG9mIEluZGV4ZWREYXRhYmFzZS4KQEAgLTQ0LDkgKzQ3LDEwIEBAIGNsYXNzIElE
QlNlcnZlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXJDb25uZWN0aW9u
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCU2VydmVyQ29ubmVjdGlvbigpIHsgfQogCi0g
ICAgLy8gRklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9uIHByb3ZpZGVzIGEgc3luY2hy
b25vdXMgYWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2luZyBzdG9yZS4KKyAgICAvLyBG
SVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMgYSBzeW5jaHJvbm91cyBh
Y2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3JlIG9iamVjdHMuCiAgICAgLy8g
VGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgogICAgIHZpcnR1YWwg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlKCkgPSAwOwor
ICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIGRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpID0gMDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpID0gMDsKIApAQCAtNTcsNiArNjEsMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBHZXRJREJEYXRhYmFzZU1ldGFkYXRhRnVuY3Rpb24pID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBCb29s
Q2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKSA9IDA7CisKKyAgICAvLyBUcmFuc2FjdGlvbi1sZXZlbCBvcGVyYXRpb25zCisgICAg
dmlydHVhbCB2b2lkIG9wZW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVu
Y3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24o
aW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmNwcAppbmRleCA1M2JiYmVhLi5jZGY4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTUz
LDExICs1MywxMCBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpjcmVhdGUoSURCRGF0YWJhc2VCYWNrZQogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJh
Y2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxi
YWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiAgICAgOiBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3Jl
SWRzKQogICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKFVudXNlZCkKKyAgICAsIG1f
c3RhdGUoVW5vcGVuZWQpCiAgICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCiAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCiAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlQmFja2VuZCkKLSAg
ICAsIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Y3JlYXRlQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSkKICAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKQogICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogICAgICwg
bV9pZChpZCkKQEAgLTY2LDEyICs2NSwzNSBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRy
YW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZAogICAg
IHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogCiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKKworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNlbGYodGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2Vy
dmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlvbihpZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUs
IFtzZWxmLCB0aGlzXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZWxmLCB0aGlzXSgpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLT5hYm9ydCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBtX3N0YXRlID0gVW51c2VkOworICAgICAgICBpZiAoaGFz
UGVuZGluZ1Rhc2tzKCkpCisgICAgICAgICAgICBzdGFydCgpOworICAgIH0pOwogfQogCiBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKQogewogICAgIC8vIEl0
IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50
aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KICAgICBBU1NFUlQobV9zdGF0ZSA9
PSBGaW5pc2hlZCk7CisgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gc2hvdWxk
IGFsc28gYmUgZ29uZSBieSBub3cuCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zZXJ2ZXJDb25u
ZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKG1faWQpKTsKK30KKwor
SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkKK3sKKyAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2Rh
dGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKG1faWQpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CisgICAgcmV0
dXJuICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHR5cGUsIFBh
c3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3Bl
cmF0aW9uPiBhYm9ydFRhc2spCkBAIC04Nyw2ICsxMDksOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdHlwZSwg
UGFzcwogICAgIGlmIChhYm9ydFRhc2spCiAgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVu
ZChhYm9ydFRhc2spOwogCisgICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKICAgICAgICAgc3RhcnQoKTsKICAg
ICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkp
CkBAIC0xMTUsNyArMTQwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgbV90YXNrVGltZXIuc3RvcCgp
OwogCiAgICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5y
b2xsYmFja1RyYW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKIAogICAgIC8vIFJ1biB0aGUgYWJv
cnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgp
KSB7CkBAIC0xMjcsNyArMTUyLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgLy8gYXJlIGZpcmVkLCBh
cyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0
aGUgYmFja2luZyBzdG9yZQogICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVy
IGlzIGNyaXRpY2FsLgogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9uKCk7CisKKyAgICBtX2RhdGFiYXNlLT5zZXJ2
ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7CiAKICAgICAv
LyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRo
ZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCiAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBs
ZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCkBAIC0y
MDIsMzQgKzIyOCwzOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y29tbWl0KCkKICAg
ICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdo
aWxlIHBlcmZvcm1pbmcgdGhlCiAgICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZv
cmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCiAgICAgLy8gYWxpdmUg
d2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IHByb3RlY3QoKnRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNl
bGYodGhpcyk7CiAKICAgICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOwogICAgIG1f
c3RhdGUgPSBGaW5pc2hlZDsKIAotICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIGJvb2wgY29tbWl0dGVkID0gdW51
c2VkOwogCi0gICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMp
IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKLSAgICAvLyBhcmUgZmly
ZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFs
bG93IHRoZSBiYWNraW5nIHN0b3JlCi0gICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQg
b3JkZXIgaXMgY3JpdGljYWwuCi0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAgIG1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKKyAgICBtX2RhdGFiYXNlLT5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9pZCwgW3NlbGYsIHRoaXMsIGNv
bW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFibGUgeworICAgICAgICBjb21taXR0
ZWQgfD0gc3VjY2VzczsKIAotICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2Vk
IGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAv
LyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xv
c2luZyBjb25uZWN0aW9ucy4KLSAgICBpZiAoIXVudXNlZCkKLSAgICAgICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworICAgICAgICAvLyBCYWNr
aW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBi
ZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgICAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3Jp
cHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5n
IHN0b3JlCisgICAgICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNy
aXRpY2FsLgorICAgICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKLSAgICBpZiAoY29tbWl0dGVk
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwotICAgICAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwotICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLSAgICB9CisgICAgICAgIG1f
ZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uKG1faWQsIFtdKCkg
eyB9KTsKIAotICAgIG1fZGF0YWJhc2UgPSAwOworICAgICAgICAvLyBUcmFuc2FjdGlvbnMgbXVz
dCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90
aWZpZWQsIGFzCisgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tz
IG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgorICAgICAgICBpZiAoIXVudXNl
ZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlk
RmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
RmluaXNoZWQodGhpcyk7CisKKyAgICAgICAgaWYgKGNvbW1pdHRlZCkgeworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7CisgICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7CisgICAgICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fZGF0YWJhc2UgPSAwOworICAgIH0pOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiopCkBA
IC0yMzcsNyArMjY4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZp
cmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4qKQogICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0YXNrVGltZXJGaXJlZCIpOwogCiAgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24t
PmJlZ2luKCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5iZWdpblRy
YW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKICAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5oCmluZGV4IDIxMDcwZjYuLjNmNWVlYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUHJlZW1wdGl2
ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAgICAgdm9pZCBkaWRD
b21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsg
QVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJl
dHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsgfQorICAgIElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uSW50ZXJmYWNlJiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKTsK
IAogICAgIElEQkRhdGFiYXNlQmFja2VuZCYgZGF0YWJhc2UoKSBjb25zdCAgeyByZXR1cm4gKm1f
ZGF0YWJhc2U7IH0KIApAQCAtODksNyArODksOCBAQCBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKIAogICAgIGVudW0gU3RhdGUgewotICAg
ICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFVub3Bl
bmVkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KKyAgICAg
ICAgVW51c2VkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0
YXNrcyB5ZXQuCiAgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBi
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KICAgICAgICAgUnVubmlu
ZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlz
aGVkLgogICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgpA
QCAtMTE2LDggKzExNyw2IEBAIHByaXZhdGU6CiAgICAgVGFza1F1ZXVlIG1fcHJlZW1wdGl2ZVRh
c2tRdWV1ZTsKICAgICBEZXF1ZTxSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+PiBtX2Fi
b3J0VGFza1F1ZXVlOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50
ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOwotCiAgICAgLy8gRklYTUU6IGRlbGV0
ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KICAgICBUaW1lcjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdGFza1RpbWVyOwogICAgIGludCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAppbmRleCA5
NjZiNDZkLi4yOTU5ZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNw
cApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhYwogICAgIENhbGxPbkRl
c3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBMT0coU3Rv
cmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCktPmNyZWF0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmlkLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9vYmplY3RTdG9yZU1ldGFk
YXRhLmtleVBhdGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50KSkgeworICAg
IGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5u
YW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRh
LmF1dG9JbmNyZW1lbnQpKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0
b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwog
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwogICAgICAgICBy
ZXR1cm47CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBDYWxsT25E
ZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0
b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgp
LT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1l
dGFkYXRhLmlkLCBtX2luZGV4TWV0YWRhdGEubmFtZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgs
IG1faW5kZXhNZXRhZGF0YS51bmlxdWUsIG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5p
ZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRh
Lm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBt
X2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJv
cnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVh
dGUgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spCiAgICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNr
KTsKIAogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBi
b29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkKTsKKyAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhNZXRhZGF0YS5pZCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpOwogICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CkBAIC0xMTUsMTQg
KzExNSwxNCBAQCB2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAh
PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwogICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUg
UmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0
aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4
ZWREQjo6Q3Vyc29yS2V5T25seSkgewogICAgICAgICAgICAgICAgIC8vIEluZGV4IFZhbHVlIFJl
dHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElk
LCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgICAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVy
Q29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29y
KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJ
bmRleGVkREI6OkN1cnNvck5leHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAg
ICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1
cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEdldE9wZXJhdGlv
bjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAg
IGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAg
IC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCiAgICAgICAgIFZlY3RvcjxjaGFy
PiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFJlY29yZChtX3RyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgKmtleSwgdmFsdWUpOworICAgICAgICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3Jk
KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOwogICAgICAgICBpZiAoIW9r
KSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGluIGdldFJlY29yZC4iKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYxLDcg
QEAgdm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKICAgICB9CiAKICAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcg
b25seSB3aXRoIGluZGV4ZXMuCi0gICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlW
aWFJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAg
ICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KG1fdHJhbnNhY3Rpb24t
PmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDcgKzE3OCw3
IEBAIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCiAKICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZh
bCBPcGVyYXRpb24KICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPmdldFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBv
ayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnBy
aW1hcnlLZXksIHZhbHVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAKICAgICBSZWZQdHI8SURCUmVj
b3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKICAgICBpZiAobV9wdXRNb2RlID09IElE
QkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgewotICAgICAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3Jk
SWRlbnRpZmllcik7CisgICAgICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3JkSWRlbnRp
Zmllcik7CiAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICB9CiAK
ICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiBBZnRlciB0
aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLSAg
ICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlLmlkLCAqa2V5LCBtX3ZhbHVlLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICBiYWNr
aW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAg
aWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBwdXQv
YWRkLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgUHV0T3Bl
cmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2sp
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkg
ewogICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0u
Z2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCku
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLCBtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgICAgICBpbmRl
eFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKSwgbV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CiAgICAgfQogCiAgICAgaWYgKG1fb2Jq
ZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5k
OjpDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CkBA
IC0yOTMsMTMgKzI5MywxMyBAQCB2b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7CiAgICAgaWYgKG1f
aW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAgQVNTRVJU
KG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2spOwogICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6
Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Bl
bkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCks
IG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElk
LCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgfQogCiAgICAgaWYgKCFiYWNr
aW5nU3RvcmVDdXJzb3IpIHsKQEAgLTMyMiw5ICszMjIsOSBAQCB2b2lkIENvdW50T3BlcmF0aW9u
OjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29y
OwogCiAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCi0g
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3Jl
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1
cnNvck5leHQpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5PYmplY3RTdG9yZUtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgZWxzZQotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5l
eHQpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRl
eEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzQyLDEwICszNDIsMTAgQEAgdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgIENh
bGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBM
T0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0
KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1
cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgp
LCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsK
ICAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZVJlY29y
ZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CisgICAgICAgICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNh
Y3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CiAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBkZWxl
dGluZyBkYXRhIGluIHJhbmdlIikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAgQ2FsbE9uRGVzdHJ1
Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKIAogICAgIExPRyhTdG9yYWdl
QVBJLCAiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgp
LT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgeworICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCkpIHsKICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBjbGVhcmluZyBvYmplY3Qgc3RvcmUi
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkNhbGxiYWMKICAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0
aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiIpOwotICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3Jl
KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmlkKTsKKyAgICBib29sIG9r
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5p
ZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICghb2spIHsKICAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0
KGVycm9yKTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gYwogICAg
IC8vIEZJWE1FOiBEYXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1
dCB0aGlzIGNvZGUgZXhwZWN0ZWQgaW50NjRfdC4KICAgICBBU1NFUlQobV92ZXJzaW9uID4gKGlu
dDY0X3Qpb2xkVmVyc2lvbik7CiAgICAgZGF0YWJhc2Uuc2V0Q3VycmVudFZlcnNpb24obV92ZXJz
aW9uKTsKLSAgICBpZiAoIWRhdGFiYXNlLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCktPnVwZGF0ZUlEQkRhdGFiYXNlVmVyc2lvbihtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZl
cnNpb24pKSB7CisgICAgaWYgKCFkYXRhYmFzZS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24obV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRhdGFiYXNl
Lm1ldGFkYXRhKCkudmVyc2lvbikpIHsKICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1
cGRhdGluZyB2ZXJzaW9uLiIpOwogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7
CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwCmluZGV4IGI1ODhkNjkuLjczMWY4YjkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtMTQwMiw3ICsxNDAyLDggQEAgYm9vbCBJREJC
YWNraW5nU3RvcmVMZXZlbERCOjptYWtlSW5kZXhXcml0ZXJzKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYgdHJhbnNhY3Rpb24KIAogICAgICAgICBSZWZQdHI8SURCSW5kZXhXcml0ZXI+IGluZGV4V3Jp
dGVyID0gSURCSW5kZXhXcml0ZXI6OmNyZWF0ZShpbmRleCwga2V5cyk7CiAgICAgICAgIGJvb2wg
Y2FuQWRkS2V5cyA9IGZhbHNlOwotICAgICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBp
bmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCp0aGlzLCB0cmFuc2FjdGlvbi5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZS5pZCwgaW5kZXguaWQsIGNh
bkFkZEtleXMsICZwcmltYXJ5S2V5LCBlcnJvck1lc3NhZ2UpOworICAgICAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQoKSk7CisgICAg
ICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtl
eXMoKnRoaXMsICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQo
KSksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2FuQWRkS2V5cywgJnBy
aW1hcnlLZXksIGVycm9yTWVzc2FnZSk7CiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vz
cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFjYW5BZGRLZXlzKQpA
QCAtMTQxOSw3ICsxNDIwLDggQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHIKIHsKICAgICBjb25z
dCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhp
bXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCiAgICAgaW50NjRfdCBj
dXJyZW50TnVtYmVyOwotICAgIGJvb2wgb2sgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KHRyYW5zYWN0aW9uLmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGN1cnJlbnROdW1iZXIpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pZCgpKTsKKyAgICBib29sIG9rID0gZ2V0S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlcigqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uLmlkKCkpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBjdXJyZW50TnVtYmVy
KTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGdldEtleUdl
bmVyYXRvckN1cnJlbnROdW1iZXIiKTsKICAgICAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlSW52
YWxpZCgpOwpAQCAtMTQzNCw3ICsxNDM2LDkgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tp
bmdTdG9yZUxldmVsREI6OmdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHIKIGJv
b2wgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6dXBkYXRlS2V5R2VuZXJhdG9yKElEQlRyYW5zYWN0
aW9uQmFja2VuZCYgdHJhbnNhY3Rpb24sIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgYm9vbCBjaGVja0N1cnJlbnQpCiB7CiAgICAg
QVNTRVJUKGtleS50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKTsKLSAgICByZXR1cm4gbWF5
YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKHRyYW5zYWN0aW9uLmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGlu
dDY0X3Q+KGZsb29yKGtleS5udW1iZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50KTsKKyAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQoKSk7
CisKKyAgICByZXR1cm4gbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKCptX2Jh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSksIGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS5udW1iZXIoKSkp
ICsgMSwgY2hlY2tDdXJyZW50KTsKIH0KIAogY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJbXBs
IDogcHVibGljIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIgewpAQCAtMTkxMiw5ICsxOTE2
LDEwIEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpvcGVuSW5kZXhDdXJzCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNl
KCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2U+
IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkK
K3ZvaWQgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZXN0YWJsaXNoQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKQogewotICAgIHJldHVybiBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREI6OmNyZWF0ZSh0aGlzKTsKKyAgICBBU1NFUlQoIW1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSUQpKTsKKyAgICBtX2JhY2tp
bmdTdG9yZVRyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25MZXZlbERCOjpjcmVhdGUodHJhbnNhY3Rpb25JRCwgdGhpcykpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCmluZGV4
IGEwOTUyYTcuLjk5YzNlODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oCkBA
IC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIExldmVsREJDb21wYXJh
dG9yOwogY2xhc3MgTGV2ZWxEQkRhdGFiYXNlOwogY2xhc3MgTGV2ZWxEQlRyYW5zYWN0aW9uOwor
Y2xhc3MgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOwogY2xhc3MgSURCS2V5Owog
Y2xhc3MgSURCS2V5UmFuZ2U7CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKQEAgLTY3LDcgKzY4LDcg
QEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+
IG9wZW5Jbk1lbW9yeShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIExldmVsREJGYWN0b3J5Kik7
CiAgICAgV2Vha1B0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBjcmVhdGVXZWFrUHRyKCkgeyBy
ZXR1cm4gbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KIAotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZT4gY3JlYXRlQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXN0YWJsaXNoQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKTsKIAogICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gZ2V0RGF0YWJhc2VOYW1lcygpOwogCkBAIC0xMDksNiArMTEwLDggQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGludCBjb21wYXJlSW5kZXhLZXlzKGNvbnN0IExldmVsREJTbGlj
ZSYsIGNvbnN0IExldmVsREJTbGljZSYpOwogCisgICAgdm9pZCByZW1vdmVCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqKTsKKwogcHJvdGVj
dGVkOgogICAgIElEQkJhY2tpbmdTdG9yZUxldmVsREIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBQYXNzT3duUHRyPExldmVsREJEYXRhYmFzZT4sIFBhc3NPd25QdHI8TGV2ZWxEQkNvbXBhcmF0
b3I+KTsKIApAQCAtMTI4LDYgKzEzMSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPExldmVsREJE
YXRhYmFzZT4gbV9kYjsKICAgICBPd25QdHI8TGV2ZWxEQkNvbXBhcmF0b3I+IG1fY29tcGFyYXRv
cjsKICAgICBXZWFrUHRyRmFjdG9yeTxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBtX3dlYWtGYWN0
b3J5OworCisgICAgSGFzaE1hcDxpbnQ2NF90LCBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCPj4gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnM7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQi5jcHAKaW5kZXggNjgxNmNiMy4uYTdhNWY2NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNwcApAQCAtMzUsMTEg
KzM1LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCOjpJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIoSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlKiBiYWNraW5nU3RvcmUpCi0gICAgOiBtX2JhY2tpbmdTdG9yZShiYWNr
aW5nU3RvcmUpCitJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OklEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIElEQkJhY2tpbmdT
dG9yZUxldmVsREIqIGJhY2tpbmdTdG9yZSkKKyAgICA6IG1fdHJhbnNhY3Rpb25JRCh0cmFuc2Fj
dGlvbklEKQorICAgICwgbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogewogfQogCitJREJC
YWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6On5JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIoKQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9iYWNraW5n
U3RvcmUtPnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRoaXMpOworfQorCiB2b2lkIElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6YmVnaW4oKQogewogICAgIExPRyhTdG9y
YWdlQVBJLCAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpiZWdpbiIpOwpAQCAt
NjYsNiArNzMsMTQgQEAgdm9pZCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OnJv
bGxiYWNrKCkKICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiB9CiAKK3ZvaWQgSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpyZXNldFRyYW5zYWN0aW9uKCkKK3sKKyAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUpOworICAgIG1fYmFja2luZ1N0b3JlLT5yZW1vdmVCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbih0aGlzKTsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IDA7CisgICAgbV90cmFu
c2FjdGlvbiA9IDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25MZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oCmluZGV4IGFiMjg1OTcuLjUwN2Ri
ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVs
REIuaApAQCAtMzQsMzMgKzM0LDM0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOworY2xhc3MgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjsK
IAogY2xhc3MgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCIEZJTkFMIDogcHVibGlj
IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZT4gY3JlYXRl
KElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlKQorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4gY3JlYXRlKGludDY0X3Qg
dHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlTGV2ZWxEQiogYmFja2luZ1N0b3JlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREIoYmFja2luZ1N0b3JlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURC
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKHRyYW5zYWN0aW9uSUQsIGJhY2tpbmdTdG9y
ZSkpOwogICAgIH0KIAorICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2
ZWxEQigpOworCiAgICAgdmlydHVhbCB2b2lkIGJlZ2luKCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCBib29sIGNvbW1pdCgpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCByb2xsYmFjaygpIE9W
RVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0aW9uKCkgT1ZFUlJJREUKLSAg
ICB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlID0gMDsKLSAgICAgICAgbV90cmFuc2FjdGlvbiA9
IDA7Ci0gICAgfQorICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0aW9uKCkgT1ZFUlJJREU7
CiAKICAgICBzdGF0aWMgTGV2ZWxEQlRyYW5zYWN0aW9uKiBsZXZlbERCVHJhbnNhY3Rpb25Gcm9t
KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiB0cmFuc2FjdGlvbikKICAgICB7
CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREImPih0cmFuc2FjdGlvbikubV90cmFuc2FjdGlvbi5nZXQoKTsKICAgICB9CiAKKyAgICBp
bnQ2NF90IHRyYW5zYWN0aW9uSUQoKSB7IHJldHVybiBtX3RyYW5zYWN0aW9uSUQ7IH0KKwogcHJp
dmF0ZToKLSAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIoSURCQmFja2luZ1N0
b3JlSW50ZXJmYWNlKik7CisgICAgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKGlu
dDY0X3QgdHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlTGV2ZWxEQiopOwogCi0gICAgSURC
QmFja2luZ1N0b3JlSW50ZXJmYWNlKiBtX2JhY2tpbmdTdG9yZTsKKyAgICBpbnQ2NF90IG1fdHJh
bnNhY3Rpb25JRDsKKyAgICBJREJCYWNraW5nU3RvcmVMZXZlbERCKiBtX2JhY2tpbmdTdG9yZTsK
ICAgICBSZWZQdHI8TGV2ZWxEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAppbmRleCA2YmMxNDk2Li4y
N2ZkYTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZl
bGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcApA
QCAtMzAsNiArMzAsNyBAQAogI2lmIFVTRShMRVZFTERCKQogCiAjaW5jbHVkZSAiSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNzUsNiArNzYsNTMgQEAgdm9p
ZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6Y2xvc2UoKQogICAgIG1fY2xvc2VkID0gdHJ1
ZTsKIH0KIAordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlblRyYW5zYWN0aW9u
KGludDY0X3QgdHJhbnNhY3Rpb25JRCwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYsIEluZGV4ZWRE
Qjo6VHJhbnNhY3Rpb25Nb2RlLCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2sp
Cit7CisgICAgaWYgKCFtX2JhY2tpbmdTdG9yZSkgeworICAgICAgICBzdWNjZXNzQ2FsbGJhY2so
ZmFsc2UpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNraW5nU3RvcmUtPmVz
dGFibGlzaEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSUQpOworICAgIHN1Y2Nl
c3NDYWxsYmFjayh0cnVlKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6
YmVnaW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
cy5nZXQodHJhbnNhY3Rpb25JRCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKKworICAgIHRy
YW5zYWN0aW9uLT5iZWdpbigpOworICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOworfQorCit2b2lk
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjb21taXRUcmFuc2FjdGlvbihpbnQ2NF90IHRy
YW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAg
ICBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiB0cmFuc2FjdGlvbiA9
IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklEKTsKKyAgICBBU1NF
UlQodHJhbnNhY3Rpb24pOworCisgICAgc3VjY2Vzc0NhbGxiYWNrKHRyYW5zYWN0aW9uLT5jb21t
aXQoKSk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnJlc2V0VHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSUQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICB0cmFuc2FjdGlvbi0+
cmVzZXRUcmFuc2FjdGlvbigpOworICAgIGNvbXBsZXRpb25DYWxsYmFjaygpOworfQorCit2b2lk
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpyb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3Qg
dHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykK
K3sKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiB0cmFuc2Fj
dGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklEKTsKKyAg
ICBBU1NFUlQodHJhbnNhY3Rpb24pOworCisgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7Cisg
ICAgY29tcGxldGlvbkNhbGxiYWNrKCk7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCLmgKaW5kZXggOTgxOGJhZS4uYTQ0NjAxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVy
Q29ubmVjdGlvbkxldmVsREIuaApAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2U7CitjbGFzcyBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREI7CiAKIGNsYXNzIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
IEZJTkFMIDogcHVibGljIElEQlNlcnZlckNvbm5lY3Rpb24gewogcHVibGljOgpAQCAtNDQsOSAr
NDUsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+SURCU2VydmVyQ29ubmVjdGlvbkxldmVs
REIoKTsKIAotICAgIC8vIEZJWE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29ubmVjdGlvbiBwcm92aWRl
cyBhIHN5bmNocm9ub3VzIGFjY2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNzIGJhY2tpbmcgc3RvcmUu
CisgICAgLy8gRklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9uIHByb3ZpZGVzIGEgc3lu
Y2hyb25vdXMgYWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2luZyBzdG9yZSBvYmplY3Rz
LgogICAgIC8vIFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGJlIHJlbW92ZWQgc29vbi4KICAg
ICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSogZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpIE9WRVJSSURFOworICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRl
cmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0
aW9uSUQpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCBib29sIGlzQ2xvc2VkKCkgT1ZFUlJJREU7
CiAKQEAgLTU1LDEwICs1NywxOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZURh
dGFiYXNlKGNvbnN0IFN0cmluZyYgbmFtZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0Nh
bGxiYWNrKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKSBPVkVSUklERTsKIAor
ICAgIC8vIFRyYW5zYWN0aW9uLWxldmVsIG9wZXJhdGlvbnMKKyAgICB2aXJ0dWFsIHZvaWQgb3Bl
blRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgY29uc3QgSGFzaFNldDxpbnQ2NF90
PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlLCBCb29sQ2FsbGJh
Y2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBi
ZWdpblRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lk
KCk+IGNvbXBsZXRpb25DYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGNvbW1p
dFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVuY3Rpb24g
c3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0
aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByb2xsYmFja1RyYW5zYWN0
aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRp
b25DYWxsYmFjaykgT1ZFUlJJREU7CisKIHByaXZhdGU6CiAgICAgSURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREIoSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKik7CiAKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBIYXNoTWFwPGludDY0X3Qs
IFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+PiBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uczsKKwogICAgIGJvb2wgbV9jbG9zZWQ7CiB9OwogCg==
</data>
<flag name="commit-queue"
          id="239766"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216744</attachid>
            <date>2013-11-12 16:50:45 -0800</date>
            <delta_ts>2013-11-12 16:58:03 -0800</delta_ts>
            <desc>Patch v2 </desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>57463</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjUwZmRmLi5mMjAyNWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjgg
QEAKIDIwMTMtMTEtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1vdmUgYmFzaWMgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gb3BlcmF0aW9ucyB0byBJ
REJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoOgorICAgICAgICAtIE1ha2VzIElEQkJhY2tpbmdTdG9yZSB0
aGUgb3duZXIgb2YgYW4gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uCisgICAgICAgIC0gQWRk
cyB0aGUgaW50ZWdlciB0cmFuc2FjdGlvbiBJRCB0byBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biBmb3IgcmVmZXJlbmNlLgorICAgICAgICAtIFJlbW92ZXMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
4oCZcyByZWxpYW5jZSBvbiBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiBieSBtb3ZpbmcKKyAg
ICAgICAgICBuZWNlc3NhcnkgbWV0aG9kcyB0byBJREJTZXJ2ZXJDb25uZWN0aW9uLgorICAgICAg
ICAtIFJlbmFtZXMgdGhlIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSBhY2Nlc3NvciB0bworICAgICAgICAgIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbiB0byBtYWtlIGl0IGNsZWFyIGl04oCZcyBvbiB0aGUgd2F5IG91dC4KKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpkZXByZWNhdGVk
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmQuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246
OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbjo6cGVyZm9ybSk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6
OklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6On5JREJCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbkxldmVsREIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCOjpyZXNldFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oOgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlblRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cmVzZXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cm9sbGJhY2tUcmFuc2FjdGlvbik6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
Qi5oOgorCisyMDEzLTExLTEyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwog
ICAgICAgICBJbnRyb2R1Y2UgSURCU2VydmVyQ29ubmVjdGlvbiAoYW5kIHN0YXJ0IG1vdmluZyB0
aGluZ3MgdG8gaXQpLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI0MTkzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKaW5kZXggMzcwMDIzMy4uMzdjODcz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KCkgeyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25JbnRlcmZhY2U+IGNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBlc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpID0gMDsKIAogICAgIC8vIE5ldy1zdHlsZSBhc3luY2hyb25vdXMgY2FsbGJhY2tz
CiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmLCBib29sIHN1Y2Nlc3MpPiBHZXRJREJEYXRhYmFzZU1ldGFkYXRhRnVuY3Rpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kLmNwcAppbmRleCA4NWQ4MDViLi5lZDE2YjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKQEAgLTI1NSw3
ICsyNTUsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U+IHN0b3JlID0gbV9zZXJ2ZXJDb25uZWN0aW9uLT5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJv
bm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29t
cGxleGl0eS4KICAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmll
cjsKLSAgICBib29sIG9rID0gc3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fbWV0YWRhdGEuaWQsIG9iamVjdFN0b3Jl
SWQsICpwcmltYXJ5S2V5LCByZWNvcmRJZGVudGlmaWVyKTsKKyAgICBib29sIG9rID0gc3RvcmUt
PmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtl
eSwgcmVjb3JkSWRlbnRpZmllcik7CiAgICAgaWYgKCFvaykgewogICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwogICAg
ICAgICByZXR1cm47CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6
OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5n
ZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZp
ZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJ
bmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKnN0b3JlLmdldCgpLCB0cmFuc2FjdGlv
bi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3Jl
SWQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCmluZGV4IDc5NWU3MDMuLmJlZTYzNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNkZWZpbmUgSURCU2VydmVyQ29ubmVjdGlvbl9o
CiAKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0z
Niw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTsKK2NsYXNzIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlOwog
CiAvLyBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbmdsZSBhc3luY2hyb25vdXMgbGF5ZXIg
YmV0d2VlbiB0aGUgd2ViLWZhY2luZyBmcm9udGVuZAogLy8gYW5kIHRoZSBJL08gcGVyZm9ybWlu
ZyBiYWNrZW5kIG9mIEluZGV4ZWREYXRhYmFzZS4KQEAgLTQ0LDkgKzQ3LDEwIEBAIGNsYXNzIElE
QlNlcnZlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXJDb25uZWN0aW9u
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCU2VydmVyQ29ubmVjdGlvbigpIHsgfQogCi0g
ICAgLy8gRklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9uIHByb3ZpZGVzIGEgc3luY2hy
b25vdXMgYWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2luZyBzdG9yZS4KKyAgICAvLyBG
SVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMgYSBzeW5jaHJvbm91cyBh
Y2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3JlIG9iamVjdHMuCiAgICAgLy8g
VGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgogICAgIHZpcnR1YWwg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlKCkgPSAwOwor
ICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIGRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpID0gMDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpID0gMDsKIApAQCAtNTcsNiArNjEsMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBHZXRJREJEYXRhYmFzZU1ldGFkYXRhRnVuY3Rpb24pID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBCb29s
Q2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKSA9IDA7CisKKyAgICAvLyBUcmFuc2FjdGlvbi1sZXZlbCBvcGVyYXRpb25zCisgICAg
dmlydHVhbCB2b2lkIG9wZW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVu
Y3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24o
aW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmNwcAppbmRleCA1M2JiYmVhLi5jZGY4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTUz
LDExICs1MywxMCBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpjcmVhdGUoSURCRGF0YWJhc2VCYWNrZQogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJh
Y2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxi
YWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiAgICAgOiBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3Jl
SWRzKQogICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKFVudXNlZCkKKyAgICAsIG1f
c3RhdGUoVW5vcGVuZWQpCiAgICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCiAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCiAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlQmFja2VuZCkKLSAg
ICAsIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Y3JlYXRlQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSkKICAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKQogICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogICAgICwg
bV9pZChpZCkKQEAgLTY2LDEyICs2NSwzNSBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRy
YW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZAogICAg
IHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogCiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKKworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNlbGYodGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2Vy
dmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlvbihpZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUs
IFtzZWxmLCB0aGlzXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZWxmLCB0aGlzXSgpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLT5hYm9ydCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBtX3N0YXRlID0gVW51c2VkOworICAgICAgICBpZiAoaGFz
UGVuZGluZ1Rhc2tzKCkpCisgICAgICAgICAgICBzdGFydCgpOworICAgIH0pOwogfQogCiBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKQogewogICAgIC8vIEl0
IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50
aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KICAgICBBU1NFUlQobV9zdGF0ZSA9
PSBGaW5pc2hlZCk7CisgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gc2hvdWxk
IGFsc28gYmUgZ29uZSBieSBub3cuCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zZXJ2ZXJDb25u
ZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKG1faWQpKTsKK30KKwor
SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkKK3sKKyAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2Rh
dGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKG1faWQpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CisgICAgcmV0
dXJuICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHR5cGUsIFBh
c3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3Bl
cmF0aW9uPiBhYm9ydFRhc2spCkBAIC04Nyw2ICsxMDksOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdHlwZSwg
UGFzcwogICAgIGlmIChhYm9ydFRhc2spCiAgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVu
ZChhYm9ydFRhc2spOwogCisgICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKICAgICAgICAgc3RhcnQoKTsKICAg
ICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkp
CkBAIC0xMTUsNyArMTQwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgbV90YXNrVGltZXIuc3RvcCgp
OwogCiAgICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5y
b2xsYmFja1RyYW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKIAogICAgIC8vIFJ1biB0aGUgYWJv
cnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgp
KSB7CkBAIC0xMjcsNyArMTUyLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgLy8gYXJlIGZpcmVkLCBh
cyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0
aGUgYmFja2luZyBzdG9yZQogICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVy
IGlzIGNyaXRpY2FsLgogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9uKCk7CisKKyAgICBtX2RhdGFiYXNlLT5zZXJ2
ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7CiAKICAgICAv
LyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRo
ZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCiAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBs
ZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCkBAIC0y
MDIsMzQgKzIyOCwzOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y29tbWl0KCkKICAg
ICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdo
aWxlIHBlcmZvcm1pbmcgdGhlCiAgICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZv
cmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCiAgICAgLy8gYWxpdmUg
d2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IHByb3RlY3QoKnRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNl
bGYodGhpcyk7CiAKICAgICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOwogICAgIG1f
c3RhdGUgPSBGaW5pc2hlZDsKIAotICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIGJvb2wgY29tbWl0dGVkID0gdW51
c2VkOwogCi0gICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMp
IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKLSAgICAvLyBhcmUgZmly
ZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFs
bG93IHRoZSBiYWNraW5nIHN0b3JlCi0gICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQg
b3JkZXIgaXMgY3JpdGljYWwuCi0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAgIG1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKKyAgICBtX2RhdGFiYXNlLT5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9pZCwgW3NlbGYsIHRoaXMsIGNv
bW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFibGUgeworICAgICAgICBjb21taXR0
ZWQgfD0gc3VjY2VzczsKIAotICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2Vk
IGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAv
LyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xv
c2luZyBjb25uZWN0aW9ucy4KLSAgICBpZiAoIXVudXNlZCkKLSAgICAgICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworICAgICAgICAvLyBCYWNr
aW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBi
ZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgICAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3Jp
cHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5n
IHN0b3JlCisgICAgICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNy
aXRpY2FsLgorICAgICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKLSAgICBpZiAoY29tbWl0dGVk
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwotICAgICAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwotICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLSAgICB9CisgICAgICAgIG1f
ZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uKG1faWQsIFtdKCkg
eyB9KTsKIAotICAgIG1fZGF0YWJhc2UgPSAwOworICAgICAgICAvLyBUcmFuc2FjdGlvbnMgbXVz
dCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90
aWZpZWQsIGFzCisgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tz
IG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgorICAgICAgICBpZiAoIXVudXNl
ZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlk
RmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
RmluaXNoZWQodGhpcyk7CisKKyAgICAgICAgaWYgKGNvbW1pdHRlZCkgeworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7CisgICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7CisgICAgICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fZGF0YWJhc2UgPSAwOworICAgIH0pOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiopCkBA
IC0yMzcsNyArMjY4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZp
cmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4qKQogICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0YXNrVGltZXJGaXJlZCIpOwogCiAgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24t
PmJlZ2luKCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5iZWdpblRy
YW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKICAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5oCmluZGV4IDIxMDcwZjYuLjNmNWVlYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUHJlZW1wdGl2
ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAgICAgdm9pZCBkaWRD
b21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsg
QVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJl
dHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsgfQorICAgIElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uSW50ZXJmYWNlJiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKTsK
IAogICAgIElEQkRhdGFiYXNlQmFja2VuZCYgZGF0YWJhc2UoKSBjb25zdCAgeyByZXR1cm4gKm1f
ZGF0YWJhc2U7IH0KIApAQCAtODksNyArODksOCBAQCBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKIAogICAgIGVudW0gU3RhdGUgewotICAg
ICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFVub3Bl
bmVkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KKyAgICAg
ICAgVW51c2VkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0
YXNrcyB5ZXQuCiAgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBi
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KICAgICAgICAgUnVubmlu
ZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlz
aGVkLgogICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgpA
QCAtMTE2LDggKzExNyw2IEBAIHByaXZhdGU6CiAgICAgVGFza1F1ZXVlIG1fcHJlZW1wdGl2ZVRh
c2tRdWV1ZTsKICAgICBEZXF1ZTxSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+PiBtX2Fi
b3J0VGFza1F1ZXVlOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50
ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOwotCiAgICAgLy8gRklYTUU6IGRlbGV0
ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KICAgICBUaW1lcjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdGFza1RpbWVyOwogICAgIGludCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAppbmRleCA5
NjZiNDZkLi4yOTU5ZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNw
cApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhYwogICAgIENhbGxPbkRl
c3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBMT0coU3Rv
cmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCktPmNyZWF0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmlkLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9vYmplY3RTdG9yZU1ldGFk
YXRhLmtleVBhdGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50KSkgeworICAg
IGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5u
YW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRh
LmF1dG9JbmNyZW1lbnQpKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0
b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwog
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwogICAgICAgICBy
ZXR1cm47CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBDYWxsT25E
ZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0
b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgp
LT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1l
dGFkYXRhLmlkLCBtX2luZGV4TWV0YWRhdGEubmFtZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgs
IG1faW5kZXhNZXRhZGF0YS51bmlxdWUsIG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5p
ZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRh
Lm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBt
X2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJv
cnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVh
dGUgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spCiAgICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNr
KTsKIAogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBi
b29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkKTsKKyAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhNZXRhZGF0YS5pZCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpOwogICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CkBAIC0xMTUsMTQg
KzExNSwxNCBAQCB2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAh
PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwogICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUg
UmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0
aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4
ZWREQjo6Q3Vyc29yS2V5T25seSkgewogICAgICAgICAgICAgICAgIC8vIEluZGV4IFZhbHVlIFJl
dHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElk
LCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgICAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVy
Q29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29y
KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJ
bmRleGVkREI6OkN1cnNvck5leHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAg
ICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1
cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEdldE9wZXJhdGlv
bjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAg
IGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAg
IC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCiAgICAgICAgIFZlY3RvcjxjaGFy
PiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFJlY29yZChtX3RyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgKmtleSwgdmFsdWUpOworICAgICAgICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3Jk
KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOwogICAgICAgICBpZiAoIW9r
KSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGluIGdldFJlY29yZC4iKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYxLDcg
QEAgdm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKICAgICB9CiAKICAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcg
b25seSB3aXRoIGluZGV4ZXMuCi0gICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlW
aWFJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAg
ICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KG1fdHJhbnNhY3Rpb24t
PmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDcgKzE3OCw3
IEBAIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCiAKICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZh
bCBPcGVyYXRpb24KICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPmdldFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBv
ayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnBy
aW1hcnlLZXksIHZhbHVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAKICAgICBSZWZQdHI8SURCUmVj
b3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKICAgICBpZiAobV9wdXRNb2RlID09IElE
QkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgewotICAgICAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3Jk
SWRlbnRpZmllcik7CisgICAgICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3JkSWRlbnRp
Zmllcik7CiAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICB9CiAK
ICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiBBZnRlciB0
aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLSAg
ICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlLmlkLCAqa2V5LCBtX3ZhbHVlLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICBiYWNr
aW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAg
aWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBwdXQv
YWRkLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgUHV0T3Bl
cmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2sp
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkg
ewogICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0u
Z2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCku
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLCBtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgICAgICBpbmRl
eFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKSwgbV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CiAgICAgfQogCiAgICAgaWYgKG1fb2Jq
ZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5k
OjpDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CkBA
IC0yOTMsMTMgKzI5MywxMyBAQCB2b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7CiAgICAgaWYgKG1f
aW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAgQVNTRVJU
KG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2spOwogICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6
Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Bl
bkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCks
IG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElk
LCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgfQogCiAgICAgaWYgKCFiYWNr
aW5nU3RvcmVDdXJzb3IpIHsKQEAgLTMyMiw5ICszMjIsOSBAQCB2b2lkIENvdW50T3BlcmF0aW9u
OjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29y
OwogCiAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCi0g
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3Jl
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1
cnNvck5leHQpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5PYmplY3RTdG9yZUtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgZWxzZQotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5l
eHQpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRl
eEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzQyLDEwICszNDIsMTAgQEAgdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgIENh
bGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBM
T0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0
KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1
cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgp
LCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsK
ICAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZVJlY29y
ZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CisgICAgICAgICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNh
Y3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CiAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBkZWxl
dGluZyBkYXRhIGluIHJhbmdlIikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAgQ2FsbE9uRGVzdHJ1
Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKIAogICAgIExPRyhTdG9yYWdl
QVBJLCAiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgp
LT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgeworICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCkpIHsKICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBjbGVhcmluZyBvYmplY3Qgc3RvcmUi
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkNhbGxiYWMKICAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0
aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiIpOwotICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3Jl
KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmlkKTsKKyAgICBib29sIG9r
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5p
ZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICghb2spIHsKICAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0
KGVycm9yKTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gYwogICAg
IC8vIEZJWE1FOiBEYXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1
dCB0aGlzIGNvZGUgZXhwZWN0ZWQgaW50NjRfdC4KICAgICBBU1NFUlQobV92ZXJzaW9uID4gKGlu
dDY0X3Qpb2xkVmVyc2lvbik7CiAgICAgZGF0YWJhc2Uuc2V0Q3VycmVudFZlcnNpb24obV92ZXJz
aW9uKTsKLSAgICBpZiAoIWRhdGFiYXNlLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCktPnVwZGF0ZUlEQkRhdGFiYXNlVmVyc2lvbihtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZl
cnNpb24pKSB7CisgICAgaWYgKCFkYXRhYmFzZS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24obV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRhdGFiYXNl
Lm1ldGFkYXRhKCkudmVyc2lvbikpIHsKICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1
cGRhdGluZyB2ZXJzaW9uLiIpOwogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7
CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlQ3Vyc29y
TGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIuY3BwCmluZGV4IGIzYzVmNjEuLjNkM2RjNmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmNwcApAQCAtMjYs
NyArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklEQkJhY2tpbmdTdG9y
ZUN1cnNvckxldmVsREIuaCIKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0Uo
TEVWRUxEQikKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgIVVTRShMRVZFTERCKQog
CiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgogI2luY2x1ZGUgIkxldmVsREJU
cmFuc2FjdGlvbi5oIgpAQCAtMTk4LDUgKzE5OCw1IEBAIGJvb2wgSURCQmFja2luZ1N0b3JlQ3Vy
c29yTGV2ZWxEQjo6aXNQYXN0Qm91bmRzKCkgY29uc3QKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQor
I2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiAhVVNFKExFVkVMREIpCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmgKaW5kZXggOGE2ZTlhYS4u
M2M3ZGVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVDdXJzb3JMZXZlbERCLmgK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJMZXZlbERCSXRlcmF0b3IuaCIKIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotI2lmIFVTRShMRVZFTERCKQorI2lmICFVU0UoTEVWRUxE
QikKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04OCw2ICs4OCw2IEBAIHByb3RlY3RlZDoK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCisjZW5k
aWYgLy8gIVVTRShMRVZFTERCKQogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
I2VuZGlmIC8vIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQi5jcHAKaW5kZXggYjU4OGQ2OS4uMzJhNGE2MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVM
ZXZlbERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIgogCi0jaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKSAmJiAhVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiSGlzdG9ncmFtU3VwcG9ydC5oIgpAQCAtMTQwMiw3ICsxNDAyLDggQEAgYm9vbCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCOjptYWtlSW5kZXhXcml0ZXJzKElEQlRyYW5zYWN0aW9uQmFj
a2VuZCYgdHJhbnNhY3Rpb24KIAogICAgICAgICBSZWZQdHI8SURCSW5kZXhXcml0ZXI+IGluZGV4
V3JpdGVyID0gSURCSW5kZXhXcml0ZXI6OmNyZWF0ZShpbmRleCwga2V5cyk7CiAgICAgICAgIGJv
b2wgY2FuQWRkS2V5cyA9IGZhbHNlOwotICAgICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3Mg
PSBpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCp0aGlzLCB0cmFuc2FjdGlvbi5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZS5pZCwgaW5kZXguaWQs
IGNhbkFkZEtleXMsICZwcmltYXJ5S2V5LCBlcnJvck1lc3NhZ2UpOworICAgICAgICBBU1NFUlQo
bV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQoKSkpOwor
ICAgICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBpbmRleFdyaXRlci0+dmVyaWZ5SW5k
ZXhLZXlzKCp0aGlzLCAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9u
LmlkKCkpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZS5pZCwgaW5kZXguaWQsIGNhbkFkZEtleXMs
ICZwcmltYXJ5S2V5LCBlcnJvck1lc3NhZ2UpOwogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1
Y2Nlc3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghY2FuQWRkS2V5
cykKQEAgLTE0MTksNyArMTQyMCw4IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJCYWNraW5nU3Rv
cmVMZXZlbERCOjpnZW5lcmF0ZUtleShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyCiB7CiAgICAg
Y29uc3QgaW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8g
TWF4aW11bSBpbnRlZ2VyIHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgogICAgIGludDY0
X3QgY3VycmVudE51bWJlcjsKLSAgICBib29sIG9rID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51
bWJlcih0cmFuc2FjdGlvbi5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBv
YmplY3RTdG9yZUlkLCBjdXJyZW50TnVtYmVyKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQoKSkpOworICAgIGJvb2wgb2sgPSBn
ZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKCptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb24uaWQoKSksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGN1cnJlbnRO
dW1iZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0
S2V5R2VuZXJhdG9yQ3VycmVudE51bWJlciIpOwogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVh
dGVJbnZhbGlkKCk7CkBAIC0xNDM0LDcgKzE0MzYsOSBAQCBQYXNzUmVmUHRyPElEQktleT4gSURC
QmFja2luZ1N0b3JlTGV2ZWxEQjo6Z2VuZXJhdGVLZXkoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0
cgogYm9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjp1cGRhdGVLZXlHZW5lcmF0b3IoSURCVHJh
bnNhY3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBib29sIGNoZWNrQ3VycmVudCkKIHsK
ICAgICBBU1NFUlQoa2V5LnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpOwotICAgIHJldHVy
biBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24uYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgc3RhdGljX2Nh
c3Q8aW50NjRfdD4oZmxvb3Ioa2V5Lm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAg
IEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5p
ZCgpKSk7CisKKyAgICByZXR1cm4gbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KCptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSksIGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS5udW1i
ZXIoKSkpICsgMSwgY2hlY2tDdXJyZW50KTsKIH0KIAogY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJz
b3JJbXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIgewpAQCAtMTkxMiwx
MSArMTkxNiwxOCBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4g
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6b3BlbkluZGV4Q3VycwogICAgIHJldHVybiBjdXJzb3Iu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50
ZXJmYWNlPiBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpjcmVhdGVCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbigpCit2b2lkIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmVzdGFibGlzaEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkKK3sKKyAgICBBU1NFUlQoIW1fYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uSUQpKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5zZXQodHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCOjpjcmVhdGUodHJhbnNhY3Rpb25JRCwgdGhpcykpOworfQorCit2
b2lkIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiogdHJhbnNhY3Rpb24pCiB7Ci0gICAg
cmV0dXJuIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6Y3JlYXRlKHRoaXMpOwor
ICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlv
bi0+dHJhbnNhY3Rpb25JRCgpKSk7CisgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMucmVt
b3ZlKHRyYW5zYWN0aW9uLT50cmFuc2FjdGlvbklEKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVM
REIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmICFVU0UoTEVWRUxEQikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
QmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
bGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKaW5kZXggYTA5NTJhNy4uNjcyODQ5YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJC
YWNraW5nU3RvcmVMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNp
Zm5kZWYgSURCQmFja2luZ1N0b3JlTGV2ZWxEQl9oCiAjZGVmaW5lIElEQkJhY2tpbmdTdG9yZUxl
dmVsREJfaAogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiAhVVNFKExFVkVMREIpCiAKICNpbmNsdWRl
ICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKQEAgLTQ0
LDYgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7
CiBjbGFzcyBMZXZlbERCRGF0YWJhc2U7CiBjbGFzcyBMZXZlbERCVHJhbnNhY3Rpb247CitjbGFz
cyBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI7CiBjbGFzcyBJREJLZXk7CiBjbGFz
cyBJREJLZXlSYW5nZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAtNjcsNyArNjgsNyBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gb3Bl
bkluTWVtb3J5KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKICAg
ICBXZWFrUHRyPElEQkJhY2tpbmdTdG9yZUxldmVsREI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVy
biBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlPiBjcmVhdGVCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBlc3RhYmxpc2hCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpOwogCiAgICAgdmlydHVhbCBWZWN0b3I8
U3RyaW5nPiBnZXREYXRhYmFzZU5hbWVzKCk7CiAKQEAgLTEwOSw2ICsxMTAsOCBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiwg
Y29uc3QgTGV2ZWxEQlNsaWNlJik7CiAKKyAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiopOworCiBwcm90ZWN0ZWQ6
CiAgICAgSURCQmFja2luZ1N0b3JlTGV2ZWxEQihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBh
c3NPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFyYXRvcj4p
OwogCkBAIC0xMjgsMTAgKzEzMSwxMiBAQCBwcml2YXRlOgogICAgIE93blB0cjxMZXZlbERCRGF0
YWJhc2U+IG1fZGI7CiAgICAgT3duUHRyPExldmVsREJDb21wYXJhdG9yPiBtX2NvbXBhcmF0b3I7
CiAgICAgV2Vha1B0ckZhY3Rvcnk8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gbV93ZWFrRmFjdG9y
eTsKKworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQj4+IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVT
RShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiAhVVNFKExF
VkVMREIpCiAKICNlbmRpZiAvLyBJREJCYWNraW5nU3RvcmVMZXZlbERCX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNwcAppbmRleCA2ODE2
Y2IzLi41YjIyMjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmgiCiAKLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisjaWYgRU5BQkxFKElOREVY
RURfREFUQUJBU0UpICYmICFVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUgIkhpc3RvZ3JhbVN1cHBv
cnQuaCIKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVMZXZlbERCLmgiCkBAIC0zNSwxMSArMzUs
MTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREI6OklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3Rv
cmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdT
dG9yZSkKK0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6SURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3Jl
TGV2ZWxEQiogYmFja2luZ1N0b3JlKQorICAgIDogbV90cmFuc2FjdGlvbklEKHRyYW5zYWN0aW9u
SUQpCisgICAgLCBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiB7CiB9CiAKK0lEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6fklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2
ZWxEQigpCit7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9y
ZS0+cmVtb3ZlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24odGhpcyk7Cit9CisKIHZvaWQgSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpiZWdpbigpCiB7CiAgICAgTE9HKFN0b3JhZ2VB
UEksICJJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmJlZ2luIik7CkBAIC02Niw2
ICs3MywxNCBAQCB2b2lkIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6cm9sbGJh
Y2soKQogICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAordm9pZCBJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREI6OnJlc2V0VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVCht
X2JhY2tpbmdTdG9yZSk7CisgICAgbV9iYWNraW5nU3RvcmUtPnJlbW92ZUJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKHRoaXMpOworICAgIG1fYmFja2luZ1N0b3JlID0gMDsKKyAgICBtX3RyYW5zYWN0
aW9uID0gMDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKSAmJiAhVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2
ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaAppbmRleCBhYjI4NTk3Li44NTdmYzE5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmgKQEAg
LTMwLDQyICszMCw0MyBAQAogI2luY2x1ZGUgIkxldmVsREJUcmFuc2FjdGlvbi5oIgogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVMREIpCisjaWYgIVVTRShMRVZF
TERCKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIElEQkJhY2tpbmdTdG9yZUludGVy
ZmFjZTsKK2NsYXNzIElEQkJhY2tpbmdTdG9yZUxldmVsREI7CiAKIGNsYXNzIElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiBGSU5BTCA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkludGVyZmFjZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2U+IGNyZWF0ZShJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UqIGJhY2tpbmdTdG9yZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREI+IGNyZWF0ZShpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIElEQkJh
Y2tpbmdTdG9yZUxldmVsREIqIGJhY2tpbmdTdG9yZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKGJhY2tpbmdTdG9y
ZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQih0cmFuc2FjdGlvbklELCBiYWNraW5nU3RvcmUpKTsKICAgICB9CiAKKyAgICB2
aXJ0dWFsIH5JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIoKTsKKwogICAgIHZpcnR1
YWwgdm9pZCBiZWdpbigpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCBjb21taXQoKSBPVkVS
UklERTsKICAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2soKSBPVkVSUklERTsKLSAgICB2aXJ0dWFs
IHZvaWQgcmVzZXRUcmFuc2FjdGlvbigpIE9WRVJSSURFCi0gICAgewotICAgICAgICBtX2JhY2tp
bmdTdG9yZSA9IDA7Ci0gICAgICAgIG1fdHJhbnNhY3Rpb24gPSAwOwotICAgIH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXRUcmFuc2FjdGlvbigpIE9WRVJSSURFOwogCiAgICAgc3RhdGljIExldmVs
REJUcmFuc2FjdGlvbiogbGV2ZWxEQlRyYW5zYWN0aW9uRnJvbShJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkludGVyZmFjZSYgdHJhbnNhY3Rpb24pCiAgICAgewogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCJj4odHJhbnNhY3Rpb24p
Lm1fdHJhbnNhY3Rpb24uZ2V0KCk7CiAgICAgfQogCisgICAgaW50NjRfdCB0cmFuc2FjdGlvbklE
KCkgeyByZXR1cm4gbV90cmFuc2FjdGlvbklEOyB9CisKIHByaXZhdGU6Ci0gICAgSURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSopOworICAg
IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihpbnQ2NF90IHRyYW5zYWN0aW9uSUQs
IElEQkJhY2tpbmdTdG9yZUxldmVsREIqKTsKIAotICAgIElEQkJhY2tpbmdTdG9yZUludGVyZmFj
ZSogbV9iYWNraW5nU3RvcmU7CisgICAgaW50NjRfdCBtX3RyYW5zYWN0aW9uSUQ7CisgICAgSURC
QmFja2luZ1N0b3JlTGV2ZWxEQiogbV9iYWNraW5nU3RvcmU7CiAgICAgUmVmUHRyPExldmVsREJU
cmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIFVTRShMRVZFTERCKQorI2VuZGlmIC8vICFVU0UoTEVWRUxEQikKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICNlbmRpZiAvLyBJREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJGYWN0b3J5QmFja2VuZExldmVsREIu
Y3BwCmluZGV4IGVjMmFmNmMuLjFiOTcwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZlbERCLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQi5jcHAKQEAgLTQwLDcgKzQwLDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KSAmJiBVU0UoTEVWRUxEQikKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgIVVTRShM
RVZFTERCKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTIwOCw0ICsyMDgsNCBAQCBQYXNz
UmVmUHRyPElEQkN1cnNvckJhY2tlbmQ+IElEQkZhY3RvcnlCYWNrZW5kTGV2ZWxEQjo6Y3JlYXRl
Q3Vyc29yQmFja2VuZChJREJUcgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAv
LyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpICYmICFVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRMZXZl
bERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQi5oCmluZGV4IDEzMjAwYjcuLjBiNjA0MjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCRmFjdG9yeUJhY2tlbmRM
ZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJGYWN0b3J5QmFja2VuZExldmVsREIuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmbmRlZiBJREJG
YWN0b3J5QmFja2VuZExldmVsREJfaAogI2RlZmluZSBJREJGYWN0b3J5QmFja2VuZExldmVsREJf
aAogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiAhVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJJREJD
YWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUNhbGxiYWNrcy5oIgpAQCAtODYsNiAr
ODYsNiBAQCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxF
KElOREVYRURfREFUQUJBU0UpICYmICFVU0UoTEVWRUxEQikKIAogI2VuZGlmIC8vIElEQkZhY3Rv
cnlCYWNrZW5kTGV2ZWxEQl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJMZXZlbERCQ29kaW5nLmNwcAppbmRleCBhNGRjYjFl
Li4wMDk0ODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9s
ZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5jcHAKQEAgLTI2LDcgKzI2LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJREJMZXZlbERCQ29kaW5nLmgiCiAKLSNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisjaWYgRU5BQkxFKElO
REVYRURfREFUQUJBU0UpICYmICFVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUgIklEQktleS5oIgog
I2luY2x1ZGUgIklEQktleVBhdGguaCIKQEAgLTE4MDQsNCArMTgwNCw0IEBAIFBhc3NSZWZQdHI8
SURCS2V5PiBJbmRleERhdGFLZXk6OnByaW1hcnlLZXkoKSBjb25zdAogfSAvLyBuYW1lc3BhY2Ug
SURCTGV2ZWxEQkNvZGluZwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpICYmIFVTRShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKSAmJiAhVVNFKExFVkVMREIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkxldmVsREJDb2RpbmcuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCmlu
ZGV4IDlhYzM5YmYuLjJkODAwODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCTGV2ZWxEQkNvZGluZy5oCkBAIC0yNiw3ICsy
Niw3IEBACiAjaWZuZGVmIElEQkxldmVsREJDb2RpbmdfaAogI2RlZmluZSBJREJMZXZlbERCQ29k
aW5nX2gKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKSAmJiBVU0UoTEVWRUxEQikKKyNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkgJiYgIVVTRShMRVZFTERCKQogCiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTM2Miw2ICszNjIsNiBA
QCBwcml2YXRlOgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkgJiYgVVNFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVY
RURfREFUQUJBU0UpICYmICFVU0UoTEVWRUxEQikKIAogI2VuZGlmIC8vIElEQkxldmVsREJDb2Rp
bmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxk
Yi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAppbmRleCA2
YmMxNDk2Li4xZDY2NDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCLmNwcApAQCAtMjcsOSArMjcsMTEgQEAKICNpbmNsdWRlICJJREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQi5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0jaWYgVVNFKExFVkVM
REIpCisjaWYgIVVTRShMRVZFTERCKQogCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlSW50ZXJm
YWNlLmgiCisjaW5jbHVkZSAiSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03
NSw3ICs3Nyw1NSBAQCB2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjbG9zZSgpCiAg
ICAgbV9jbG9zZWQgPSB0cnVlOwogfQogCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpvcGVuVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBjb25zdCBIYXNoU2V0PGlu
dDY0X3Q+JiwgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9u
IHN1Y2Nlc3NDYWxsYmFjaykKK3sKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW3N1Y2Nlc3NDYWxsYmFja10oKSB7IHN1Y2Nlc3NDYWxsYmFjayhm
YWxzZSk7IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9iYWNraW5nU3RvcmUt
PmVzdGFibGlzaEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uSUQpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3N1Y2Nlc3NDYWxsYmFja10oKSB7IHN1Y2Nlc3NDYWxsYmFjayh0cnVl
KTsgfSk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmJlZ2luVHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5z
YWN0aW9uSUQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICB0cmFuc2FjdGlvbi0+
YmVnaW4oKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25DYWxsYmFjayk7Cit9CisK
K3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNvbW1pdFRyYW5zYWN0aW9uKGludDY0
X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKQor
eworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+IHRyYW5zYWN0
aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOworICAg
IEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICBib29sIHJlc3VsdCA9IHRyYW5zYWN0aW9uLT5j
b21taXQoKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJhY2ssIHJlc3VsdF0o
KSB7IHN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQpOyB9KTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25u
ZWN0aW9uTGV2ZWxEQjo6cmVzZXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdT
dG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JRCk7CisgICAgQVNTRVJUKHRyYW5zYWN0
aW9uKTsKKworICAgIHRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9uKCk7CisgICAgY2FsbE9u
TWFpblRocmVhZChjb21wbGV0aW9uQ2FsbGJhY2spOworfQorCit2b2lkIElEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCOjpyb2xsYmFja1RyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwg
c3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKK3sKKyAgICBSZWZQdHI8
SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiB0cmFuc2FjdGlvbiA9IG1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklEKTsKKyAgICBBU1NFUlQodHJhbnNh
Y3Rpb24pOworCisgICAgdHJhbnNhY3Rpb24tPnJvbGxiYWNrKCk7CisgICAgY2FsbE9uTWFpblRo
cmVhZChjb21wbGV0aW9uQ2FsbGJhY2spOworfQorCisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAotI2VuZGlmIC8vIFVTRShMRVZFTERCKQorI2VuZGlmIC8vICFVU0UoTEVWRUxEQikKICNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREIuaAppbmRleCA5ODE4YmFlLi4wMmRlMTA1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oCkBAIC0yOSwxMSArMjksMTIgQEAKICNpbmNsdWRlICJJ
REJTZXJ2ZXJDb25uZWN0aW9uLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNp
ZiBVU0UoTEVWRUxEQikKKyNpZiAhVVNFKExFVkVMREIpCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlOworY2xhc3MgSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCOwogCiBjbGFzcyBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQiBG
SU5BTCA6IHB1YmxpYyBJREJTZXJ2ZXJDb25uZWN0aW9uIHsKIHB1YmxpYzoKQEAgLTQ0LDkgKzQ1
LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
KCk7CiAKLSAgICAvLyBGSVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMg
YSBzeW5jaHJvbm91cyBhY2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3JlLgor
ICAgIC8vIEZJWE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29ubmVjdGlvbiBwcm92aWRlcyBhIHN5bmNo
cm9ub3VzIGFjY2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNzIGJhY2tpbmcgc3RvcmUgb2JqZWN0cy4K
ICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uCiAgICAg
dmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmUo
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJm
YWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlv
bklEKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpIE9WRVJSSURFOwog
CkBAIC01NSwxNSArNTcsMjQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRh
YmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxs
YmFjaykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgT1ZFUlJJREU7CiAKKyAg
ICAvLyBUcmFuc2FjdGlvbi1sZXZlbCBvcGVyYXRpb25zCisgICAgdmlydHVhbCB2b2lkIG9wZW5U
cmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4m
IG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgQm9vbENhbGxiYWNr
RnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVn
aW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRU
cmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1
Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rp
b24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlv
bkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlv
bihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9u
Q2FsbGJhY2spIE9WRVJSSURFOworCiBwcml2YXRlOgogICAgIElEQlNlcnZlckNvbm5lY3Rpb25M
ZXZlbERCKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSopOwogCiAgICAgUmVmUHRyPElEQkJhY2tp
bmdTdG9yZUludGVyZmFjZT4gbV9iYWNraW5nU3RvcmU7CisgICAgSGFzaE1hcDxpbnQ2NF90LCBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPj4gbV9iYWNraW5nU3RvcmVU
cmFuc2FjdGlvbnM7CisKICAgICBib29sIG1fY2xvc2VkOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgLy8gVVNFKExFVkVMREIpCisjZW5kaWYgLy8gIVVTRShMRVZFTERC
KQogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogI2VuZGlmIC8vIElEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0RhdGFiYXNlU3RyYXRlZ3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRGF0YWJhc2VT
dHJhdGVneS5jcHAKaW5kZXggZmI4MGU1OC4uMTA1OGZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vRGF0YWJhc2VTdHJhdGVneS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vRGF0YWJhc2VTdHJhdGVneS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJEYXRhYmFzZVNlcnZlci5oIgogI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
LmgiCiAKLSNpZiBVU0UoTEVWRUxEQikKKyNpZiAhVVNFKExFVkVMREIpCiAjaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRMZXZlbERCLmgiCiAjZW5kaWYKIApAQCAtNDYsNyArNDYsNyBAQCBBYnN0
cmFjdERhdGFiYXNlU2VydmVyKiBEYXRhYmFzZVN0cmF0ZWd5OjpnZXREYXRhYmFzZVNlcnZlcigp
CiBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBEYXRhYmFzZVN0cmF0ZWd5
OjpjcmVhdGVJREJGYWN0b3J5QmFja2VuZChjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
SWRlbnRpZmllcikKIHsKICAgICAvLyBGSVhNRTogTmVlZCBhIGJldHRlciBwbGF0Zm9ybSBhYnN0
cmFjdGlvbiBoZXJlLCBidXQgdGhpcyBzdG9wIGdhcCB3aWxsIHdvcmsgZm9yIG5vdy4KLSNpZiBV
U0UoTEVWRUxEQikKKyNpZiAhVVNFKExFVkVMREIpCiAgICAgcmV0dXJuIElEQkZhY3RvcnlCYWNr
ZW5kTGV2ZWxEQjo6Y3JlYXRlKGRhdGFiYXNlRGlyZWN0b3J5SWRlbnRpZmllcik7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTShkYXRhYmFzZURpcmVjdG9yeUlkZW50aWZpZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCQ29tcGFyYXRvci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCQ29tcGFyYXRvci5oCmluZGV4
IGQxZmQzZDMuLjhhY2JhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQkNvbXBhcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9s
ZXZlbGRiL0xldmVsREJDb21wYXJhdG9yLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTGV2
ZWxEQkNvbXBhcmF0b3JfaAogI2RlZmluZSBMZXZlbERCQ29tcGFyYXRvcl9oCiAKLSNpZiBVU0Uo
TEVWRUxEQikKKyNpZiAhVVNFKExFVkVMREIpCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIApAQCAtNDQsNiArNDQsNiBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmIC8vIFVTRShMRVZFTERCKQorI2VuZGlmIC8vICFVU0UoTEVWRUxEQikKIAog
I2VuZGlmIC8vIExldmVsREJDb21wYXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJEYXRhYmFzZS5oCmluZGV4IDExMjgzY2IuLjU1MGU3OWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQkRhdGFiYXNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCRGF0YWJhc2Uu
aApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBMZXZlbERCRGF0YWJhc2VfaAogI2RlZmluZSBM
ZXZlbERCRGF0YWJhc2VfaAogCi0jaWYgVVNFKExFVkVMREIpCisjaWYgIVVTRShMRVZFTERCKQog
CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xldmVsREJJdGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCSXRlcmF0b3IuaApp
bmRleCAxYTU1ZTFmLi44YjhiZjZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9sZXZlbGRiL0xldmVsREJJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2xldmVsZGIvTGV2ZWxEQkl0ZXJhdG9yLmgKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgTGV2
ZWxEQkl0ZXJhdG9yX2gKICNkZWZpbmUgTGV2ZWxEQkl0ZXJhdG9yX2gKIAotI2lmIFVTRShMRVZF
TERCKQorI2lmICFVU0UoTEVWRUxEQikKIAogI2luY2x1ZGUgIkxldmVsREJTbGljZS5oIgogCkBA
IC00Niw2ICs0Niw2IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gVVNFKExFVkVMREIpCisjZW5kaWYgLy8gIVVTRShMRVZFTERCKQogCiAjZW5kaWYgLy8g
TGV2ZWxEQkl0ZXJhdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xl
dmVsZGIvTGV2ZWxEQlNsaWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9sZXZlbGRiL0xl
dmVsREJTbGljZS5oCmluZGV4IDU4MzY5YTQuLjI2MjEzNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlNsaWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCU2xpY2UuaApAQCAtMjYsNyArMjYsNyBAQAogI2lm
bmRlZiBMZXZlbERCU2xpY2VfaAogI2RlZmluZSBMZXZlbERCU2xpY2VfaAogCi0jaWYgVVNFKExF
VkVMREIpCisjaWYgIVVTRShMRVZFTERCKQogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjMsNiArNjMsNiBAQCBwcml2YXRlOgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBVU0UoTEVWRUxEQikKKyNlbmRp
ZiAvLyAhVVNFKExFVkVMREIpCiAKICNlbmRpZiAvLyBMZXZlbERCU2xpY2VfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQlRyYW5zYWN0aW9uLmgKaW5k
ZXggMjZlYjY1Zi4uNDRhZTkxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bGV2ZWxkYi9MZXZlbERCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9sZXZlbGRiL0xldmVsREJUcmFuc2FjdGlvbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5l
IExldmVsREJUcmFuc2FjdGlvbl9oCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSNp
ZiBVU0UoTEVWRUxEQikKKyNpZiAhVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJMZXZlbERCQ29t
cGFyYXRvci5oIgogI2luY2x1ZGUgIkxldmVsREJEYXRhYmFzZS5oIgpAQCAtMTkwLDcgKzE5MCw3
IEBAIHByaXZhdGU6CiAKIH0KIAotI2VuZGlmIC8vIFVTRShMRVZFTERCKQorI2VuZGlmIC8vICFV
U0UoTEVWRUxEQikKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogI2VuZGlm
IC8vIExldmVsREJUcmFuc2FjdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9sZXZlbGRiL0xldmVsREJXcml0ZUJhdGNoLmgKaW5kZXggNzM1OWM0Yy4uZWY5MzliNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbGV2ZWxkYi9MZXZlbERCV3JpdGVCYXRj
aC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2xldmVsZGIvTGV2ZWxEQldyaXRlQmF0
Y2guaApAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBMZXZlbERCV3JpdGVCYXRjaF9oCiAjZGVm
aW5lIExldmVsREJXcml0ZUJhdGNoX2gKIAotI2lmIFVTRShMRVZFTERCKQorI2lmICFVU0UoTEVW
RUxEQikKIAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgpAQCAtNTksNiArNTksNiBAQCBwcml2YXRlOgogCiB9CiAKLSNlbmRpZiAvLyBVU0UoTEVW
RUxEQikKKyNlbmRpZiAvLyAhVVNFKExFVkVMREIpCiAKICNlbmRpZiAvLyBMZXZlbERCV3JpdGVC
YXRjaF9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216745</attachid>
            <date>2013-11-12 16:58:03 -0800</date>
            <delta_ts>2013-11-12 17:17:43 -0800</delta_ts>
            <desc>Patch v3</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>47229</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjUwZmRmLi5mMjAyNWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNjgg
QEAKIDIwMTMtMTEtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1vdmUgYmFzaWMgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gb3BlcmF0aW9ucyB0byBJ
REJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoOgorICAgICAgICAtIE1ha2VzIElEQkJhY2tpbmdTdG9yZSB0
aGUgb3duZXIgb2YgYW4gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uCisgICAgICAgIC0gQWRk
cyB0aGUgaW50ZWdlciB0cmFuc2FjdGlvbiBJRCB0byBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biBmb3IgcmVmZXJlbmNlLgorICAgICAgICAtIFJlbW92ZXMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
4oCZcyByZWxpYW5jZSBvbiBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiBieSBtb3ZpbmcKKyAg
ICAgICAgICBuZWNlc3NhcnkgbWV0aG9kcyB0byBJREJTZXJ2ZXJDb25uZWN0aW9uLgorICAgICAg
ICAtIFJlbmFtZXMgdGhlIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSBhY2Nlc3NvciB0bworICAgICAgICAgIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbiB0byBtYWtlIGl0IGNsZWFyIGl04oCZcyBvbiB0aGUgd2F5IG91dC4KKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpkZXByZWNhdGVk
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmQuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246
OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbjo6cGVyZm9ybSk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmg6CisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6
OklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6On5JREJCYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbkxldmVsREIpOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCOjpyZXNldFRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oOgorCisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6b3BlblRy
YW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCOjpjb21taXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cmVzZXRUcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6cm9sbGJhY2tUcmFuc2FjdGlvbik6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
Qi5oOgorCisyMDEzLTExLTEyICBCcmFkeSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKwog
ICAgICAgICBJbnRyb2R1Y2UgSURCU2VydmVyQ29ubmVjdGlvbiAoYW5kIHN0YXJ0IG1vdmluZyB0
aGluZ3MgdG8gaXQpLgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTI0MTkzCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKaW5kZXggMzcwMDIzMy4uMzdjODcz
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmgKQEAgLTUzLDcgKzUzLDcgQEAgY2xhc3MgSURCQmFj
a2luZ1N0b3JlSW50ZXJmYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlSW50
ZXJmYWNlPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlSW50ZXJmYWNl
KCkgeyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25JbnRlcmZhY2U+IGNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBlc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5z
YWN0aW9uSUQpID0gMDsKIAogICAgIC8vIE5ldy1zdHlsZSBhc3luY2hyb25vdXMgY2FsbGJhY2tz
CiAgICAgdHlwZWRlZiBzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmLCBib29sIHN1Y2Nlc3MpPiBHZXRJREJEYXRhYmFzZU1ldGFkYXRhRnVuY3Rpb247CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kLmNwcAppbmRleCA4NWQ4MDViLi5lZDE2YjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKQEAgLTI1NSw3
ICsyNTUsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKGludDY0X3Qg
dHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZQogICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmVJbnRlcmZhY2U+IHN0b3JlID0gbV9zZXJ2ZXJDb25uZWN0aW9uLT5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgbWV0aG9kIGNvdWxkIGJlIGFzeW5jaHJv
bm91cywgYnV0IHdlIG5lZWQgdG8gZXZhbHVhdGUgaWYgaXQncyB3b3J0aCB0aGUgZXh0cmEgY29t
cGxleGl0eS4KICAgICBSZWZQdHI8SURCUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmll
cjsKLSAgICBib29sIG9rID0gc3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fbWV0YWRhdGEuaWQsIG9iamVjdFN0b3Jl
SWQsICpwcmltYXJ5S2V5LCByZWNvcmRJZGVudGlmaWVyKTsKKyAgICBib29sIG9rID0gc3RvcmUt
PmtleUV4aXN0c0luT2JqZWN0U3RvcmUodHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX21ldGFkYXRhLmlkLCBvYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtl
eSwgcmVjb3JkSWRlbnRpZmllcik7CiAgICAgaWYgKCFvaykgewogICAgICAgICB0cmFuc2FjdGlv
bi0+YWJvcnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBzZXR0aW5nIGluZGV4IGtleXMuIikpOwogICAg
ICAgICByZXR1cm47CkBAIC0yODMsNyArMjgzLDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmQ6
OnNldEluZGV4S2V5cyhpbnQ2NF90IHRyYW5zYWN0aW9uSWQsIGludDY0X3Qgb2JqZWN0U3RvcmUK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5n
ZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZp
ZXIuZ2V0KCksICpzdG9yZS5nZXQoKSwgdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIGlkKCksIG9iamVjdFN0b3JlSWQpOworICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJ
bmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKnN0b3JlLmdldCgpLCB0cmFuc2FjdGlv
bi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGlkKCksIG9iamVjdFN0b3Jl
SWQpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCU2VydmVyQ29ubmVjdGlvbi5oCmluZGV4IDc5NWU3MDMuLmJlZTYzNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJTZXJ2ZXJDb25u
ZWN0aW9uLmgKQEAgLTI3LDcgKzI3LDkgQEAKICNkZWZpbmUgSURCU2VydmVyQ29ubmVjdGlvbl9o
CiAKICNpbmNsdWRlICJJREJNZXRhZGF0YS5oIgorI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0z
Niw2ICszOCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIElEQkJhY2tpbmdTdG9y
ZUludGVyZmFjZTsKK2NsYXNzIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlOwog
CiAvLyBUaGlzIGludGVyZmFjZSBwcm92aWRlcyBhIHNpbmdsZSBhc3luY2hyb25vdXMgbGF5ZXIg
YmV0d2VlbiB0aGUgd2ViLWZhY2luZyBmcm9udGVuZAogLy8gYW5kIHRoZSBJL08gcGVyZm9ybWlu
ZyBiYWNrZW5kIG9mIEluZGV4ZWREYXRhYmFzZS4KQEAgLTQ0LDkgKzQ3LDEwIEBAIGNsYXNzIElE
QlNlcnZlckNvbm5lY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXJDb25uZWN0aW9u
PiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCU2VydmVyQ29ubmVjdGlvbigpIHsgfQogCi0g
ICAgLy8gRklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9uIHByb3ZpZGVzIGEgc3luY2hy
b25vdXMgYWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2luZyBzdG9yZS4KKyAgICAvLyBG
SVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMgYSBzeW5jaHJvbm91cyBh
Y2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3JlIG9iamVjdHMuCiAgICAgLy8g
VGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgogICAgIHZpcnR1YWwg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlKCkgPSAwOwor
ICAgIHZpcnR1YWwgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIGRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpID0gMDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0Nsb3NlZCgpID0gMDsKIApAQCAtNTcsNiArNjEsMTMgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRPckVzdGFibGlzaElEQkRhdGFiYXNlTWV0YWRhdGEo
Y29uc3QgU3RyaW5nJiBuYW1lLCBHZXRJREJEYXRhYmFzZU1ldGFkYXRhRnVuY3Rpb24pID0gMDsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgU3RyaW5nJiBuYW1lLCBCb29s
Q2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xvc2UoKSA9IDA7CisKKyAgICAvLyBUcmFuc2FjdGlvbi1sZXZlbCBvcGVyYXRpb25zCisgICAg
dmlydHVhbCB2b2lkIG9wZW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0
IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5zYWN0aW9u
TW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGJlZ2luVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNvbW1pdFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVu
Y3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2V0VHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24o
aW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNh
bGxiYWNrKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
LmNwcAppbmRleCA1M2JiYmVhLi5jZGY4MWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKQEAgLTUz
LDExICs1MywxMCBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gSURCVHJhbnNh
Y3Rpb25CYWNrZW5kOjpjcmVhdGUoSURCRGF0YWJhc2VCYWNrZQogSURCVHJhbnNhY3Rpb25CYWNr
ZW5kOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQoSURCRGF0YWJhc2VCYWNrZW5kKiBkYXRhYmFzZUJh
Y2tlbmQsIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+IGNhbGxi
YWNrcywgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6
VHJhbnNhY3Rpb25Nb2RlIG1vZGUpCiAgICAgOiBtX29iamVjdFN0b3JlSWRzKG9iamVjdFN0b3Jl
SWRzKQogICAgICwgbV9tb2RlKG1vZGUpCi0gICAgLCBtX3N0YXRlKFVudXNlZCkKKyAgICAsIG1f
c3RhdGUoVW5vcGVuZWQpCiAgICAgLCBtX2NvbW1pdFBlbmRpbmcoZmFsc2UpCiAgICAgLCBtX2Nh
bGxiYWNrcyhjYWxsYmFja3MpCiAgICAgLCBtX2RhdGFiYXNlKGRhdGFiYXNlQmFja2VuZCkKLSAg
ICAsIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24obV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Y3JlYXRlQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSkKICAgICAsIG1fdGFza1RpbWVyKHRoaXMsICZJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKQogICAgICwgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cygwKQogICAgICwg
bV9pZChpZCkKQEAgLTY2LDEyICs2NSwzNSBAQCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRy
YW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFja2VuZAogICAg
IHJlbGF4QWRvcHRpb25SZXF1aXJlbWVudCgpOwogCiAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rp
b25Db29yZGluYXRvcigpLT5kaWRDcmVhdGVUcmFuc2FjdGlvbih0aGlzKTsKKworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNlbGYodGhpcyk7CisgICAgbV9kYXRhYmFzZS0+c2Vy
dmVyQ29ubmVjdGlvbigpLm9wZW5UcmFuc2FjdGlvbihpZCwgb2JqZWN0U3RvcmVJZHMsIG1vZGUs
IFtzZWxmLCB0aGlzXShib29sIHN1Y2Nlc3MpIHsKKyAgICAgICAgaWYgKCFzdWNjZXNzKSB7Cisg
ICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzZWxmLCB0aGlzXSgpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLT5hYm9ydCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBtX3N0YXRlID0gVW51c2VkOworICAgICAgICBpZiAoaGFz
UGVuZGluZ1Rhc2tzKCkpCisgICAgICAgICAgICBzdGFydCgpOworICAgIH0pOwogfQogCiBJREJU
cmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tlbmQoKQogewogICAgIC8vIEl0
IHNob3VsZG4ndCBiZSBwb3NzaWJsZSBmb3IgdGhpcyBvYmplY3QgdG8gZ2V0IGRlbGV0ZWQgdW50
aWwgaXQncyBlaXRoZXIgY29tcGxldGUgb3IgYWJvcnRlZC4KICAgICBBU1NFUlQobV9zdGF0ZSA9
PSBGaW5pc2hlZCk7CisgICAgLy8gVGhlIGJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gc2hvdWxk
IGFsc28gYmUgZ29uZSBieSBub3cuCisgICAgQVNTRVJUKCFtX2RhdGFiYXNlLT5zZXJ2ZXJDb25u
ZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKG1faWQpKTsKK30KKwor
SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UmIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZDo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCkKK3sKKyAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gPSBtX2Rh
dGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKG1faWQpOworICAgIEFTU0VSVChiYWNraW5nU3RvcmVUcmFuc2FjdGlvbik7CisgICAgcmV0
dXJuICpiYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsKIH0KIAogdm9pZCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmQ6OnNjaGVkdWxlVGFzayhJREJEYXRhYmFzZUJhY2tlbmQ6OlRhc2tUeXBlIHR5cGUsIFBh
c3NSZWZQdHI8SURCT3BlcmF0aW9uPiB0YXNrLCBQYXNzUmVmUHRyPElEQlN5bmNocm9ub3VzT3Bl
cmF0aW9uPiBhYm9ydFRhc2spCkBAIC04Nyw2ICsxMDksOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdHlwZSwg
UGFzcwogICAgIGlmIChhYm9ydFRhc2spCiAgICAgICAgIG1fYWJvcnRUYXNrUXVldWUucHJlcGVu
ZChhYm9ydFRhc2spOwogCisgICAgaWYgKG1fc3RhdGUgPT0gVW5vcGVuZWQpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGlmIChtX3N0YXRlID09IFVudXNlZCkKICAgICAgICAgc3RhcnQoKTsKICAg
ICBlbHNlIGlmIChtX3N0YXRlID09IFJ1bm5pbmcgJiYgIW1fdGFza1RpbWVyLmlzQWN0aXZlKCkp
CkBAIC0xMTUsNyArMTQwLDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0KFBh
c3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgbV90YXNrVGltZXIuc3RvcCgp
OwogCiAgICAgaWYgKHdhc1J1bm5pbmcpCi0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24tPnJvbGxiYWNrKCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5y
b2xsYmFja1RyYW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKIAogICAgIC8vIFJ1biB0aGUgYWJv
cnQgdGFza3MsIGlmIGFueS4KICAgICB3aGlsZSAoIW1fYWJvcnRUYXNrUXVldWUuaXNFbXB0eSgp
KSB7CkBAIC0xMjcsNyArMTUyLDggQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OmFib3J0
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IpCiAgICAgLy8gYXJlIGZpcmVkLCBh
cyB0aGUgc2NyaXB0IGNhbGxiYWNrcyBtYXkgcmVsZWFzZSByZWZlcmVuY2VzIGFuZCBhbGxvdyB0
aGUgYmFja2luZyBzdG9yZQogICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVy
IGlzIGNyaXRpY2FsLgogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKLSAgICBtX2JhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uLT5yZXNldFRyYW5zYWN0aW9uKCk7CisKKyAgICBtX2RhdGFiYXNlLT5zZXJ2
ZXJDb25uZWN0aW9uKCkucmVzZXRUcmFuc2FjdGlvbihtX2lkLCBbXSgpIHsgfSk7CiAKICAgICAv
LyBUcmFuc2FjdGlvbnMgbXVzdCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRo
ZSBmcm9udC1lbmQgaXMgbm90aWZpZWQsIGFzCiAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBs
ZXRpb24gdW5ibG9ja3Mgb3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCkBAIC0y
MDIsMzQgKzIyOCwzOSBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6Y29tbWl0KCkKICAg
ICAvLyBUaGUgbGFzdCByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QgbWF5IGJlIHJlbGVhc2VkIHdo
aWxlIHBlcmZvcm1pbmcgdGhlCiAgICAgLy8gY29tbWl0IHN0ZXBzIGJlbG93LiBXZSB0aGVyZWZv
cmUgdGFrZSBhIHNlbGYgcmVmZXJlbmNlIHRvIGtlZXAgb3Vyc2VsdmVzCiAgICAgLy8gYWxpdmUg
d2hpbGUgZXhlY3V0aW5nIHRoaXMgbWV0aG9kLgotICAgIFJlZjxJREJUcmFuc2FjdGlvbkJhY2tl
bmQ+IHByb3RlY3QoKnRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+IHNl
bGYodGhpcyk7CiAKICAgICBib29sIHVudXNlZCA9IG1fc3RhdGUgPT0gVW51c2VkOwogICAgIG1f
c3RhdGUgPSBGaW5pc2hlZDsKIAotICAgIGJvb2wgY29tbWl0dGVkID0gdW51c2VkIHx8IG1fYmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIGJvb2wgY29tbWl0dGVkID0gdW51
c2VkOwogCi0gICAgLy8gQmFja2luZyBzdG9yZSByZXNvdXJjZXMgKGhlbGQgdmlhIGN1cnNvcnMp
IG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIHNjcmlwdCBjYWxsYmFja3MKLSAgICAvLyBhcmUgZmly
ZWQsIGFzIHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFs
bG93IHRoZSBiYWNraW5nIHN0b3JlCi0gICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQg
b3JkZXIgaXMgY3JpdGljYWwuCi0gICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAgIG1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKKyAgICBtX2RhdGFiYXNlLT5z
ZXJ2ZXJDb25uZWN0aW9uKCkuY29tbWl0VHJhbnNhY3Rpb24obV9pZCwgW3NlbGYsIHRoaXMsIGNv
bW1pdHRlZCwgdW51c2VkXShib29sIHN1Y2Nlc3MpIG11dGFibGUgeworICAgICAgICBjb21taXR0
ZWQgfD0gc3VjY2VzczsKIAotICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2Vk
IGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKLSAgICAv
LyB0aGUgdHJhbnNhY3Rpb24gY29tcGxldGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xv
c2luZyBjb25uZWN0aW9ucy4KLSAgICBpZiAoIXVudXNlZCkKLSAgICAgICAgbV9kYXRhYmFzZS0+
dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRGaW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKLSAg
ICBtX2RhdGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOworICAgICAgICAvLyBCYWNr
aW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykgbXVzdCBiZSByZWxlYXNlZCBi
ZWZvcmUgc2NyaXB0IGNhbGxiYWNrcworICAgICAgICAvLyBhcmUgZmlyZWQsIGFzIHRoZSBzY3Jp
cHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRoZSBiYWNraW5n
IHN0b3JlCisgICAgICAgIC8vIGl0c2VsZiB0byBiZSByZWxlYXNlZCwgYW5kIG9yZGVyIGlzIGNy
aXRpY2FsLgorICAgICAgICBjbG9zZU9wZW5DdXJzb3JzKCk7CiAKLSAgICBpZiAoY29tbWl0dGVk
KSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkNvbXBsZXRlKGlkKCkpOwotICAgICAgICBtX2Rh
dGFiYXNlLT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKLSAgICB9
IGVsc2UgewotICAgICAgICBtX2NhbGxiYWNrcy0+b25BYm9ydChpZCgpLCBJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFs
IGVycm9yIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24uIikpOwotICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKLSAgICB9CisgICAgICAgIG1f
ZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uKG1faWQsIFtdKCkg
eyB9KTsKIAotICAgIG1fZGF0YWJhc2UgPSAwOworICAgICAgICAvLyBUcmFuc2FjdGlvbnMgbXVz
dCBhbHNvIGJlIG1hcmtlZCBhcyBjb21wbGV0ZWQgYmVmb3JlIHRoZSBmcm9udC1lbmQgaXMgbm90
aWZpZWQsIGFzCisgICAgICAgIC8vIHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tz
IG9wZXJhdGlvbnMgbGlrZSBjbG9zaW5nIGNvbm5lY3Rpb25zLgorICAgICAgICBpZiAoIXVudXNl
ZCkKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKS0+ZGlk
RmluaXNoVHJhbnNhY3Rpb24odGhpcyk7CisgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9u
RmluaXNoZWQodGhpcyk7CisKKyAgICAgICAgaWYgKGNvbW1pdHRlZCkgeworICAgICAgICAgICAg
bV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7CisgICAgICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkQW5kQ29tcGxldGVGaXJlZCh0aGlzKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7CisgICAgICAgICAgICBtX2RhdGFiYXNl
LT50cmFuc2FjdGlvbkZpbmlzaGVkQW5kQWJvcnRGaXJlZCh0aGlzKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fZGF0YWJhc2UgPSAwOworICAgIH0pOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9u
QmFja2VuZDo6dGFza1RpbWVyRmlyZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiopCkBA
IC0yMzcsNyArMjY4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZp
cmVkKFRpbWVyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4qKQogICAgIExPRyhTdG9yYWdlQVBJLCAi
SURCVHJhbnNhY3Rpb25CYWNrZW5kOjp0YXNrVGltZXJGaXJlZCIpOwogCiAgICAgaWYgKG1fc3Rh
dGUgPT0gU3RhcnRQZW5kaW5nKSB7Ci0gICAgICAgIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24t
PmJlZ2luKCk7CisgICAgICAgIG1fZGF0YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5iZWdpblRy
YW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKICAgICAgICAgbV9zdGF0ZSA9IFJ1bm5pbmc7CiAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZC5oCmluZGV4IDIxMDcwZjYuLjNmNWVlYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZC5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkUHJlZW1wdGl2
ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cysrOyB9CiAgICAgdm9pZCBkaWRD
b21wbGV0ZVByZWVtcHRpdmVFdmVudCgpICB7IG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMtLTsg
QVNTRVJUKG1fcGVuZGluZ1ByZWVtcHRpdmVFdmVudHMgPj0gMCk7IH0KLSAgICBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgYmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSB7IHJl
dHVybiAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbjsgfQorICAgIElEQkJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uSW50ZXJmYWNlJiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKTsK
IAogICAgIElEQkRhdGFiYXNlQmFja2VuZCYgZGF0YWJhc2UoKSBjb25zdCAgeyByZXR1cm4gKm1f
ZGF0YWJhc2U7IH0KIApAQCAtODksNyArODksOCBAQCBwcml2YXRlOgogICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqLCBpbnQ2NF90IGlkLCBQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPiwgY29uc3QgSGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25Nb2RlKTsKIAogICAgIGVudW0gU3RhdGUgewotICAg
ICAgICBVbnVzZWQsIC8vIENyZWF0ZWQsIGJ1dCBubyB0YXNrcyB5ZXQuCisgICAgICAgIFVub3Bl
bmVkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgY3JlYXRlZC4KKyAgICAg
ICAgVW51c2VkLCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIGNyZWF0ZWQsIGJ1dCBubyB0
YXNrcyB5ZXQuCiAgICAgICAgIFN0YXJ0UGVuZGluZywgLy8gRW5xdWV1ZWQgdGFza3MsIGJ1dCBi
YWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIG5vdCB5ZXQgc3RhcnRlZC4KICAgICAgICAgUnVubmlu
ZywgLy8gQmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzdGFydGVkIGJ1dCBub3QgeWV0IGZpbmlz
aGVkLgogICAgICAgICBGaW5pc2hlZCwgLy8gRWl0aGVyIGFib3J0ZWQgb3IgY29tbWl0dGVkLgpA
QCAtMTE2LDggKzExNyw2IEBAIHByaXZhdGU6CiAgICAgVGFza1F1ZXVlIG1fcHJlZW1wdGl2ZVRh
c2tRdWV1ZTsKICAgICBEZXF1ZTxSZWZQdHI8SURCU3luY2hyb25vdXNPcGVyYXRpb24+PiBtX2Fi
b3J0VGFza1F1ZXVlOwogCi0gICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50
ZXJmYWNlPiBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOwotCiAgICAgLy8gRklYTUU6IGRlbGV0
ZSB0aGUgdGltZXIgb25jZSB3ZSBoYXZlIHRocmVhZHMgaW5zdGVhZC4KICAgICBUaW1lcjxJREJU
cmFuc2FjdGlvbkJhY2tlbmQ+IG1fdGFza1RpbWVyOwogICAgIGludCBtX3BlbmRpbmdQcmVlbXB0
aXZlRXZlbnRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVHJhbnNhY3Rpb25CYWNrZW5kT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAppbmRleCA5
NjZiNDZkLi4yOTU5ZWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNw
cApAQCAtNTgsNyArNTgsNyBAQCB2b2lkIENyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJm
b3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhYwogICAgIENhbGxPbkRl
c3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBMT0coU3Rv
cmFnZUFQSSwgIkNyZWF0ZU9iamVjdFN0b3JlT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0
b3JlKCktPmNyZWF0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1l
dGFkYXRhLmlkLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZSwgbV9vYmplY3RTdG9yZU1ldGFk
YXRhLmtleVBhdGgsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5hdXRvSW5jcmVtZW50KSkgeworICAg
IGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5u
YW1lLCBtX29iamVjdFN0b3JlTWV0YWRhdGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRh
LmF1dG9JbmNyZW1lbnQpKSB7CiAgICAgICAgIFJlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJv
ciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJyb3IgY3JlYXRpbmcgb2JqZWN0IHN0
b3JlICclcycuIiwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5hbWUudXRmOCgpLmRhdGEoKSkpOwog
ICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvci5yZWxlYXNlKCkpOwogICAgICAgICBy
ZXR1cm47CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgQ3JlYXRlSW5kZXhPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBDYWxsT25E
ZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0
b3JhZ2VBUEksICJDcmVhdGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgp
LT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1l
dGFkYXRhLmlkLCBtX2luZGV4TWV0YWRhdGEubmFtZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgs
IG1faW5kZXhNZXRhZGF0YS51bmlxdWUsIG1faW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5p
ZCgpLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhNZXRhZGF0YS5pZCwgbV9pbmRleE1ldGFkYXRh
Lm5hbWUsIG1faW5kZXhNZXRhZGF0YS5rZXlQYXRoLCBtX2luZGV4TWV0YWRhdGEudW5pcXVlLCBt
X2luZGV4TWV0YWRhdGEubXVsdGlFbnRyeSkpIHsKICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJv
cnQoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciB3aGVuIHRyeWluZyB0byBjcmVh
dGUgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSkpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtODcsNyArODcsNyBAQCB2b2lkIERlbGV0ZUluZGV4
T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJh
Y2spCiAgICAgQ2FsbE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNr
KTsKIAogICAgIExPRyhTdG9yYWdlQVBJLCAiRGVsZXRlSW5kZXhPcGVyYXRpb24iKTsKLSAgICBi
b29sIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkKTsKKyAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5kZWxldGVJbmRleChtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3Jl
SWQsIG1faW5kZXhNZXRhZGF0YS5pZCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBSZWZQdHI8
SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVy
cm9yIGRlbGV0aW5nIGluZGV4ICclcycuIiwgbV9pbmRleE1ldGFkYXRhLm5hbWUudXRmOCgpLmRh
dGEoKSkpOwogICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9ydChlcnJvcik7CkBAIC0xMTUsMTQg
KzExNSwxNCBAQCB2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQo
KT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4
TWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3Vyc29yVHlwZSAh
PSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwogICAgICAgICAgICAgLy8gT2JqZWN0U3RvcmUg
UmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgICAgICBiYWNraW5nU3Rv
cmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0
aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBt
X29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4
ZWREQjo6Q3Vyc29yS2V5T25seSkgewogICAgICAgICAgICAgICAgIC8vIEluZGV4IFZhbHVlIFJl
dHJpZXZhbCBPcGVyYXRpb24KLSAgICAgICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBt
X3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElk
LCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOworICAgICAgICAgICAg
ICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVy
Q29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29y
KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJ
bmRleGVkREI6OkN1cnNvck5leHQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZhbCBPcGVyYXRpb24KLSAgICAg
ICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEN1
cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVk
REI6OkN1cnNvck5leHQpOworICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9p
bmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIEdldE9wZXJhdGlv
bjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAg
IGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAg
IC8vIE9iamVjdCBTdG9yZSBSZXRyaWV2YWwgT3BlcmF0aW9uCiAgICAgICAgIFZlY3RvcjxjaGFy
PiB2YWx1ZTsKLSAgICAgICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFJlY29yZChtX3RyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgKmtleSwgdmFsdWUpOworICAgICAgICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3Jk
KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKmtleSwgdmFsdWUpOwogICAgICAgICBpZiAoIW9r
KSB7CiAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpj
cmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkludGVybmFsIGVycm9y
IGluIGdldFJlY29yZC4iKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjEsNyArMTYxLDcg
QEAgdm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKICAgICB9CiAKICAgICAvLyBGcm9tIGhlcmUgd2UgYXJlIGRlYWxpbmcg
b25seSB3aXRoIGluZGV4ZXMuCi0gICAgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNl
cnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmdldFByaW1hcnlLZXlW
aWFJbmRleChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKKyAg
ICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KG1fdHJhbnNhY3Rpb24t
PmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqa2V5LCBwcmltYXJ5S2V5KTsKICAgICBpZiAoIW9rKSB7
CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0
UHJpbWFyeUtleVZpYUluZGV4LiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTc4LDcgKzE3OCw3
IEBAIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhY2spCiAKICAgICAvLyBJbmRleCBSZWZlcmVuY2VkIFZhbHVlIFJldHJpZXZh
bCBPcGVyYXRpb24KICAgICBWZWN0b3I8Y2hhcj4gdmFsdWU7Ci0gICAgb2sgPSBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPmdldFJlY29yZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBt
X2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnByaW1hcnlLZXksIHZhbHVlKTsKKyAgICBv
ayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgKnBy
aW1hcnlLZXksIHZhbHVlKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5r
bm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgaW4gZ2V0UmVjb3JkLiIpKTsKICAgICAgICAgcmV0
dXJuOwpAQCAtMjIxLDcgKzIyMSw3IEBAIHZvaWQgUHV0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6
ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAKICAgICBSZWZQdHI8SURCUmVj
b3JkSWRlbnRpZmllcj4gcmVjb3JkSWRlbnRpZmllcjsKICAgICBpZiAobV9wdXRNb2RlID09IElE
QkRhdGFiYXNlQmFja2VuZDo6QWRkT25seSkgewotICAgICAgICBib29sIG9rID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRy
YW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3Jk
SWRlbnRpZmllcik7CisgICAgICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCwgKmtleSwgcmVjb3JkSWRlbnRp
Zmllcik7CiAgICAgICAgIGlmICghb2spIHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVy
cm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCAiSW50ZXJuYWwgZXJyb3IgY2hlY2tpbmcga2V5IGV4aXN0ZW5jZS4iKSk7CiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0yNDYsNyArMjQ2LDcgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBl
cmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICB9CiAK
ICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiBBZnRlciB0
aGlzIHBvaW50LCByb2xsYmFjayB0aGUgdHJhbnNhY3Rpb24gaW4gY2FzZSBvZiBlcnJvci4KLSAg
ICBiYWNraW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2Fj
dGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0
b3JlLmlkLCAqa2V5LCBtX3ZhbHVlLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKKyAgICBiYWNr
aW5nU3RvcmVTdWNjZXNzID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0
aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5wdXRSZWNvcmQobV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZS5pZCwgKmtleSwgbV92YWx1ZSwgcmVjb3JkSWRlbnRpZmllci5nZXQoKSk7CiAgICAg
aWYgKCFiYWNraW5nU3RvcmVTdWNjZXNzKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCAiSW50ZXJuYWwgZXJyb3I6IGJhY2tpbmcgc3RvcmUgZXJyb3IgcGVyZm9ybWluZyBwdXQv
YWRkLiIpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgUHV0T3Bl
cmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2sp
CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4V3JpdGVycy5zaXplKCk7ICsraSkg
ewogICAgICAgICBJREJJbmRleFdyaXRlciogaW5kZXhXcml0ZXIgPSBpbmRleFdyaXRlcnNbaV0u
Z2V0KCk7Ci0gICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlm
aWVyLmdldCgpLCAqbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCku
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLCBtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmUuaWQpOworICAgICAgICBpbmRl
eFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmllci5nZXQoKSwgKm1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKSwgbV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCks
IG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CiAgICAgfQogCiAgICAgaWYgKG1fb2Jq
ZWN0U3RvcmUuYXV0b0luY3JlbWVudCAmJiBtX3B1dE1vZGUgIT0gSURCRGF0YWJhc2VCYWNrZW5k
OjpDdXJzb3JVcGRhdGUgJiYga2V5LT50eXBlKCkgPT0gSURCS2V5OjpOdW1iZXJUeXBlKSB7CkBA
IC0yOTMsMTMgKzI5MywxMyBAQCB2b2lkIE9wZW5DdXJzb3JPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7CiAgICAgaWYgKG1f
aW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAgQVNTRVJU
KG1fY3Vyc29yVHlwZSAhPSBJbmRleGVkREI6OkN1cnNvcktleU9ubHkpOwotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2Jq
ZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3Ry
YW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFz
ZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKICAg
ICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobV90YXNrVHlwZSA9PSBJREJEYXRhYmFzZUJhY2tl
bmQ6Ok5vcm1hbFRhc2spOwogICAgICAgICBpZiAobV9jdXJzb3JUeXBlID09IEluZGV4ZWREQjo6
Q3Vyc29yS2V5T25seSkKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5
UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNv
ciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Bl
bkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCks
IG1fZGlyZWN0aW9uKTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+b3BlbkluZGV4Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElk
LCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CiAgICAgfQogCiAgICAgaWYgKCFiYWNr
aW5nU3RvcmVDdXJzb3IpIHsKQEAgLTMyMiw5ICszMjIsOSBAQCB2b2lkIENvdW50T3BlcmF0aW9u
OjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAg
UmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29y
OwogCiAgICAgaWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpCi0g
ICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3Jl
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1
cnNvck5leHQpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5k
YXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9w
ZW5PYmplY3RTdG9yZUtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFu
Z2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgZWxzZQotICAgICAgICBiYWNr
aW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRleEtleUN1cnNvcihtX3RyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0
U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdlLmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5l
eHQpOworICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5JbmRl
eEtleUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKICAgICBpZiAoIWJhY2tpbmdTdG9yZUN1
cnNvcikgewogICAgICAgICBtX2NhbGxiYWNrcy0+b25TdWNjZXNzKGNvdW50KTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzQyLDEwICszNDIsMTAgQEAgdm9pZCBEZWxldGVSYW5nZU9wZXJhdGlvbjo6
cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgIENh
bGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBM
T0coU3RvcmFnZUFQSSwgIkRlbGV0ZVJhbmdlT3BlcmF0aW9uIik7Ci0gICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZUN1cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0
KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZUN1
cnNvckludGVyZmFjZT4gYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJh
c2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuT2Jq
ZWN0U3RvcmVDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgp
LCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgIGlmIChiYWNraW5nU3RvcmVDdXJzb3IpIHsK
ICAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZVJlY29y
ZChtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CisgICAgICAgICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlUmVjb3JkKG1fdHJhbnNh
Y3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQs
IG1fb2JqZWN0U3RvcmVJZCwgYmFja2luZ1N0b3JlQ3Vyc29yLT5yZWNvcmRJZGVudGlmaWVyKCkp
KSB7CiAgICAgICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBkZWxl
dGluZyBkYXRhIGluIHJhbmdlIikpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KQEAgLTM2MCw3ICszNjAsNyBAQCB2b2lkIENsZWFyT3BlcmF0aW9uOjpwZXJmb3JtKHN0
ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAgQ2FsbE9uRGVzdHJ1
Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKIAogICAgIExPRyhTdG9yYWdl
QVBJLCAiT2JqZWN0U3RvcmVDbGVhck9wZXJhdGlvbiIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgp
LT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgeworICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5jbGVhck9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCkpIHsKICAgICAg
ICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJFcnJvciBjbGVhcmluZyBvYmplY3Qgc3RvcmUi
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zNzIsNyArMzcyLDcgQEAgdm9pZCBEZWxl
dGVPYmplY3RTdG9yZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkNhbGxiYWMKICAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0
aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVPYmplY3RTdG9yZU9w
ZXJhdGlvbiIpOwotICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZl
ckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3Jl
KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24t
PmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmlkKTsKKyAgICBib29sIG9r
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVPYmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNh
dGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5p
ZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOwogICAgIGlmICghb2spIHsKICAgICAgICAg
UmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRl
KElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRl
cm5hbCBlcnJvciBkZWxldGluZyBvYmplY3Qgc3RvcmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0
KGVycm9yKTsKQEAgLTM5MSw3ICszOTEsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6VmVy
c2lvbkNoYW5nZU9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gYwogICAg
IC8vIEZJWE1FOiBEYXRhYmFzZSB2ZXJzaW9ucyBhcmUgbm93IG9mIHR5cGUgdWludDY0X3QsIGJ1
dCB0aGlzIGNvZGUgZXhwZWN0ZWQgaW50NjRfdC4KICAgICBBU1NFUlQobV92ZXJzaW9uID4gKGlu
dDY0X3Qpb2xkVmVyc2lvbik7CiAgICAgZGF0YWJhc2Uuc2V0Q3VycmVudFZlcnNpb24obV92ZXJz
aW9uKTsKLSAgICBpZiAoIWRhdGFiYXNlLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFj
a2luZ1N0b3JlKCktPnVwZGF0ZUlEQkRhdGFiYXNlVmVyc2lvbihtX3RyYW5zYWN0aW9uLT5iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBkYXRhYmFzZS5tZXRhZGF0YSgpLnZl
cnNpb24pKSB7CisgICAgaWYgKCFkYXRhYmFzZS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT51cGRhdGVJREJEYXRhYmFzZVZlcnNpb24obV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRhdGFiYXNl
Lm1ldGFkYXRhKCkudmVyc2lvbikpIHsKICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+
IGVycm9yID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2Ugd2hlbiB1
cGRhdGluZyB2ZXJzaW9uLiIpOwogICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihlcnJvcik7
CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2ZWxE
Qi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tp
bmdTdG9yZUxldmVsREIuY3BwCmluZGV4IGI1ODhkNjkuLjNlMjk4NWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlTGV2
ZWxEQi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVMZXZlbERCLmNwcApAQCAtMTQwMiw3ICsxNDAyLDggQEAgYm9vbCBJREJC
YWNraW5nU3RvcmVMZXZlbERCOjptYWtlSW5kZXhXcml0ZXJzKElEQlRyYW5zYWN0aW9uQmFja2Vu
ZCYgdHJhbnNhY3Rpb24KIAogICAgICAgICBSZWZQdHI8SURCSW5kZXhXcml0ZXI+IGluZGV4V3Jp
dGVyID0gSURCSW5kZXhXcml0ZXI6OmNyZWF0ZShpbmRleCwga2V5cyk7CiAgICAgICAgIGJvb2wg
Y2FuQWRkS2V5cyA9IGZhbHNlOwotICAgICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBp
bmRleFdyaXRlci0+dmVyaWZ5SW5kZXhLZXlzKCp0aGlzLCB0cmFuc2FjdGlvbi5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZS5pZCwgaW5kZXguaWQsIGNh
bkFkZEtleXMsICZwcmltYXJ5S2V5LCBlcnJvck1lc3NhZ2UpOworICAgICAgICBBU1NFUlQobV9i
YWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQoKSkpOworICAg
ICAgICBib29sIGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBpbmRleFdyaXRlci0+dmVyaWZ5SW5kZXhL
ZXlzKCp0aGlzLCAqbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uLmlk
KCkpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZS5pZCwgaW5kZXguaWQsIGNhbkFkZEtleXMsICZw
cmltYXJ5S2V5LCBlcnJvck1lc3NhZ2UpOwogICAgICAgICBpZiAoIWJhY2tpbmdTdG9yZVN1Y2Nl
c3MpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghY2FuQWRkS2V5cykK
QEAgLTE0MTksNyArMTQyMCw4IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJCYWNraW5nU3RvcmVM
ZXZlbERCOjpnZW5lcmF0ZUtleShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyCiB7CiAgICAgY29u
c3QgaW50NjRfdCBtYXhHZW5lcmF0b3JWYWx1ZSA9IDkwMDcxOTkyNTQ3NDA5OTJMTDsgLy8gTWF4
aW11bSBpbnRlZ2VyIHN0b3JhYmxlIGFzIEVDTUFTY3JpcHQgbnVtYmVyLgogICAgIGludDY0X3Qg
Y3VycmVudE51bWJlcjsKLSAgICBib29sIG9rID0gZ2V0S2V5R2VuZXJhdG9yQ3VycmVudE51bWJl
cih0cmFuc2FjdGlvbi5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmpl
Y3RTdG9yZUlkLCBjdXJyZW50TnVtYmVyKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb24uaWQoKSkpOworICAgIGJvb2wgb2sgPSBnZXRL
ZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKCptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQo
dHJhbnNhY3Rpb24uaWQoKSksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGN1cnJlbnROdW1i
ZXIpOwogICAgIGlmICghb2spIHsKICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZ2V0S2V5
R2VuZXJhdG9yQ3VycmVudE51bWJlciIpOwogICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVJ
bnZhbGlkKCk7CkBAIC0xNDM0LDcgKzE0MzYsOSBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQjo6Z2VuZXJhdGVLZXkoSURCVHJhbnNhY3Rpb25CYWNrZW5kJiB0cgog
Ym9vbCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjp1cGRhdGVLZXlHZW5lcmF0b3IoSURCVHJhbnNh
Y3Rpb25CYWNrZW5kJiB0cmFuc2FjdGlvbiwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBib29sIGNoZWNrQ3VycmVudCkKIHsKICAg
ICBBU1NFUlQoa2V5LnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpOwotICAgIHJldHVybiBt
YXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIodHJhbnNhY3Rpb24uYmFja2luZ1N0
b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgc3RhdGljX2Nhc3Q8
aW50NjRfdD4oZmxvb3Ioa2V5Lm51bWJlcigpKSkgKyAxLCBjaGVja0N1cnJlbnQpOworICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pZCgp
KSk7CisKKyAgICByZXR1cm4gbWF5YmVVcGRhdGVLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVyKCpt
X2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQoKSksIGRhdGFiYXNl
SWQsIG9iamVjdFN0b3JlSWQsIHN0YXRpY19jYXN0PGludDY0X3Q+KGZsb29yKGtleS5udW1iZXIo
KSkpICsgMSwgY2hlY2tDdXJyZW50KTsKIH0KIAogY2xhc3MgT2JqZWN0U3RvcmVLZXlDdXJzb3JJ
bXBsIDogcHVibGljIElEQkJhY2tpbmdTdG9yZUN1cnNvckxldmVsREIgewpAQCAtMTkxMiw5ICsx
OTE2LDE2IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpvcGVuSW5kZXhDdXJzCiAgICAgcmV0dXJuIGN1cnNvci5yZWxl
YXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZh
Y2U+IElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmNyZWF0ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KCkKK3ZvaWQgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZXN0YWJsaXNoQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKQoreworICAgIEFTU0VSVCghbV9iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnModHJhbnNhY3Rpb25JRCkpOworICAgIG1fYmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25zLnNldCh0cmFuc2FjdGlvbklELCBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREI6OmNyZWF0ZSh0cmFuc2FjdGlvbklELCB0aGlzKSk7Cit9CisKK3ZvaWQg
SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6cmVtb3ZlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oSURC
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKiB0cmFuc2FjdGlvbikKIHsKLSAgICByZXR1
cm4gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCOjpjcmVhdGUodGhpcyk7CisgICAg
QVNTRVJUKG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLT50
cmFuc2FjdGlvbklEKCkpKTsKKyAgICBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5yZW1vdmUo
dHJhbnNhY3Rpb24tPnRyYW5zYWN0aW9uSUQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIv
SURCQmFja2luZ1N0b3JlTGV2ZWxEQi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKaW5kZXggYTA5NTJhNy4uOTljM2U4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9J
REJCYWNraW5nU3RvcmVMZXZlbERCLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmgKQEAgLTQ0LDYgKzQ0LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgTGV2ZWxEQkNvbXBhcmF0b3I7CiBjbGFzcyBMZXZl
bERCRGF0YWJhc2U7CiBjbGFzcyBMZXZlbERCVHJhbnNhY3Rpb247CitjbGFzcyBJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkxldmVsREI7CiBjbGFzcyBJREJLZXk7CiBjbGFzcyBJREJLZXlSYW5n
ZTsKIGNsYXNzIFNlY3VyaXR5T3JpZ2luOwpAQCAtNjcsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gb3BlbkluTWVtb3J5KGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgTGV2ZWxEQkZhY3RvcnkqKTsKICAgICBXZWFrUHRyPElE
QkJhY2tpbmdTdG9yZUxldmVsREI+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0
b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlPiBjcmVhdGVCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpOworICAgIHZpcnR1YWwgdm9pZCBlc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihp
bnQ2NF90IHRyYW5zYWN0aW9uSUQpOwogCiAgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiBnZXRE
YXRhYmFzZU5hbWVzKCk7CiAKQEAgLTEwOSw2ICsxMTAsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0
aWMgaW50IGNvbXBhcmVJbmRleEtleXMoY29uc3QgTGV2ZWxEQlNsaWNlJiwgY29uc3QgTGV2ZWxE
QlNsaWNlJik7CiAKKyAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQkJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiopOworCiBwcm90ZWN0ZWQ6CiAgICAgSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2
ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFyYXRvcj4pOwogCkBAIC0xMjgs
NiArMTMxLDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwog
ICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9yOwogICAgIFdlYWtQdHJG
YWN0b3J5PElEQkJhY2tpbmdTdG9yZUxldmVsREI+IG1fd2Vha0ZhY3Rvcnk7CisKKyAgICBIYXNo
TWFwPGludDY0X3QsIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+PiBt
X2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNw
cAppbmRleCA2ODE2Y2IzLi5hN2E1ZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwCkBAIC0zNSwxMSArMzUsMTggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OklE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uq
IGJhY2tpbmdTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKK0lEQkJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlTGV2ZWxEQiogYmFj
a2luZ1N0b3JlKQorICAgIDogbV90cmFuc2FjdGlvbklEKHRyYW5zYWN0aW9uSUQpCisgICAgLCBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiB7CiB9CiAKK0lEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQjo6fklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQigpCit7Cisg
ICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVtb3ZlQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24odGhpcyk7Cit9CisKIHZvaWQgSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25MZXZlbERCOjpiZWdpbigpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmJlZ2luIik7CkBAIC02Niw2ICs3MywxNCBAQCB2
b2lkIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6cm9sbGJhY2soKQogICAgIG1f
dHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAordm9pZCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREI6OnJlc2V0VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7CisgICAgbV9iYWNraW5nU3RvcmUtPnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRo
aXMpOworICAgIG1fYmFja2luZ1N0b3JlID0gMDsKKyAgICBtX3RyYW5zYWN0aW9uID0gMDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCLmgKaW5kZXggYWIyODU5Ny4uNTA3ZGJkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oCkBAIC0zNCwzMyAr
MzQsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U7CitjbGFzcyBJREJCYWNraW5nU3RvcmVMZXZlbERCOwogCiBjbGFzcyBJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIgRklOQUwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25JbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlPiBjcmVhdGUoSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklELCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCKiBiYWNraW5nU3RvcmUpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihiYWNraW5n
U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIodHJhbnNhY3Rpb25JRCwgYmFja2luZ1N0b3JlKSk7CiAgICAgfQogCisg
ICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKCk7CisKICAgICB2
aXJ0dWFsIHZvaWQgYmVnaW4oKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgY29tbWl0KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9i
YWNraW5nU3RvcmUgPSAwOwotICAgICAgICBtX3RyYW5zYWN0aW9uID0gMDsKLSAgICB9CisgICAg
dmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oKSBPVkVSUklERTsKIAogICAgIHN0YXRpYyBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25JbnRlcmZhY2UmIHRyYW5zYWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiY+KHRyYW5zYWN0
aW9uKS5tX3RyYW5zYWN0aW9uLmdldCgpOwogICAgIH0KIAorICAgIGludDY0X3QgdHJhbnNhY3Rp
b25JRCgpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JRDsgfQorCiBwcml2YXRlOgotICAgIElEQkJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqKTsK
KyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIoaW50NjRfdCB0cmFuc2FjdGlv
bklELCBJREJCYWNraW5nU3RvcmVMZXZlbERCKik7CiAKLSAgICBJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UqIG1fYmFja2luZ1N0b3JlOworICAgIGludDY0X3QgbV90cmFuc2FjdGlvbklEOworICAg
IElEQkJhY2tpbmdTdG9yZUxldmVsREIqIG1fYmFja2luZ1N0b3JlOwogICAgIFJlZlB0cjxMZXZl
bERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREIuY3BwCmluZGV4IDZiYzE0OTYuLjdjYmJkN2YgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29u
bmVjdGlvbkxldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwCkBAIC0zMCw2ICszMCw4IEBA
CiAjaWYgVVNFKExFVkVMREIpCiAKICNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uu
aCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaCIKKyNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTc1LDYg
Kzc3LDYwIEBAIHZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNsb3NlKCkKICAgICBt
X2Nsb3NlZCA9IHRydWU7CiB9CiAKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6Om9w
ZW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIGNvbnN0IEhhc2hTZXQ8aW50NjRf
dD4mLCBJbmRleGVkREI6OlRyYW5zYWN0aW9uTW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3Vj
Y2Vzc0NhbGxiYWNrKQoreworICAgIGlmICghbV9iYWNraW5nU3RvcmUpIHsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbc3VjY2Vzc0NhbGxiYWNrXSgpIHsKKyAgICAgICAgICAgIHN1Y2Nlc3ND
YWxsYmFjayhmYWxzZSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9iYWNraW5nU3RvcmUtPmVzdGFibGlzaEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRyYW5z
YWN0aW9uSUQpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3N1Y2Nlc3NDYWxsYmFja10oKSB7Cisg
ICAgICAgIHN1Y2Nlc3NDYWxsYmFjayh0cnVlKTsKKyAgICB9KTsKK30KKwordm9pZCBJREJTZXJ2
ZXJDb25uZWN0aW9uTGV2ZWxEQjo6YmVnaW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9u
SUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2Jh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JRCk7CisgICAgQVNTRVJUKHRy
YW5zYWN0aW9uKTsKKworICAgIHRyYW5zYWN0aW9uLT5iZWdpbigpOworICAgIGNhbGxPbk1haW5U
aHJlYWQoY29tcGxldGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQjo6Y29tbWl0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBCb29sQ2Fs
bGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spCit7CisgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JRCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKKwor
ICAgIGJvb2wgcmVzdWx0ID0gdHJhbnNhY3Rpb24tPmNvbW1pdCgpOworICAgIGNhbGxPbk1haW5U
aHJlYWQoW3N1Y2Nlc3NDYWxsYmFjaywgcmVzdWx0XSgpIHsKKyAgICAgICAgc3VjY2Vzc0NhbGxi
YWNrKHJlc3VsdCk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVs
REI6OnJlc2V0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9u
PHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2Fj
dGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAg
ICB0cmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlvbigpOworICAgIGNhbGxPbk1haW5UaHJlYWQo
Y29tcGxldGlvbkNhbGxiYWNrKTsKK30KKwordm9pZCBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
Qjo6cm9sbGJhY2tUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rp
b248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCit7CisgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4gdHJhbnNhY3Rpb24gPSBtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JRCk7CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uKTsKKwor
ICAgIHRyYW5zYWN0aW9uLT5yb2xsYmFjaygpOworICAgIGNhbGxPbk1haW5UaHJlYWQoY29tcGxl
dGlvbkNhbGxiYWNrKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAv
LyBVU0UoTEVWRUxEQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaApp
bmRleCA5ODE4YmFlLi5hNDQ2MDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9u
TGV2ZWxEQi5oCkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IElEQkJhY2tpbmdTdG9yZUludGVyZmFjZTsKK2NsYXNzIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQjsKIAogY2xhc3MgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIgRklOQUwgOiBw
dWJsaWMgSURCU2VydmVyQ29ubmVjdGlvbiB7CiBwdWJsaWM6CkBAIC00NCw5ICs0NSwxMCBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIH5JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQigpOwogCi0g
ICAgLy8gRklYTUU6IEZvciBub3csIHNlcnZlciBjb25uZWN0aW9uIHByb3ZpZGVzIGEgc3luY2hy
b25vdXMgYWNjZXNzb3IgdG8gdGhlIGluLXByb2Nlc3MgYmFja2luZyBzdG9yZS4KKyAgICAvLyBG
SVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMgYSBzeW5jaHJvbm91cyBh
Y2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3JlIG9iamVjdHMuCiAgICAgLy8g
VGhpcyBpcyB0ZW1wb3JhcnkgYW5kIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgogICAgIHZpcnR1YWwg
SURCQmFja2luZ1N0b3JlSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlKCkgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogZGVw
cmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkgT1ZF
UlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDbG9zZWQoKSBPVkVSUklERTsKIApAQCAtNTUs
MTAgKzU3LDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29u
c3QgU3RyaW5nJiBuYW1lLCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpIE9WRVJSSURFOwogCisgICAgLy8gVHJh
bnNhY3Rpb24tbGV2ZWwgb3BlcmF0aW9ucworICAgIHZpcnR1YWwgdm9pZCBvcGVuVHJhbnNhY3Rp
b24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RT
dG9yZUlkcywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9u
IHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGJlZ2luVHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0VHJhbnNhY3Rp
b24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2Fs
bGJhY2spIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCByZXNldFRyYW5zYWN0aW9uKGludDY0
X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrVHJhbnNhY3Rpb24oaW50NjRf
dCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNr
KSBPVkVSUklERTsKKwogcHJpdmF0ZToKICAgICBJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQihJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqKTsKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOworICAgIEhhc2hNYXA8aW50NjRfdCwgUmVmUHRyPElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQj4+IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25zOworCiAgICAgYm9vbCBtX2Nsb3NlZDsKIH07CiAK
</data>
<flag name="commit-queue"
          id="239774"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>216747</attachid>
            <date>2013-11-12 17:17:43 -0800</date>
            <delta_ts>2013-11-12 18:26:59 -0800</delta_ts>
            <desc>Patch v4</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>49195</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwYjUwZmRmLi5mNTllMjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzUg
QEAKIDIwMTMtMTEtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCisgICAg
ICAgIE1vdmUgYmFzaWMgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24gb3BlcmF0aW9ucyB0byBJ
REJTZXJ2ZXJDb25uZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjQyNDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGlzIHBhdGNoOgorICAgICAgICAtIE1ha2VzIElEQkJhY2tpbmdTdG9yZSB0
aGUgb3duZXIgb2YgYW4gSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24uCisgICAgICAgIC0gQWRk
cyB0aGUgaW50ZWdlciB0cmFuc2FjdGlvbiBJRCB0byBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
biBmb3IgcmVmZXJlbmNlLgorICAgICAgICAtIFJlbW92ZXMgSURCVHJhbnNhY3Rpb25CYWNrZW5k
4oCZcyByZWxpYW5jZSBvbiBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbiBieSBtb3ZpbmcKKyAg
ICAgICAgICBuZWNlc3NhcnkgbWV0aG9kcyB0byBJREJTZXJ2ZXJDb25uZWN0aW9uLgorICAgICAg
ICAtIFJlbmFtZXMgdGhlIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSBhY2Nlc3NvciB0bworICAgICAgICAgIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbiB0byBtYWtlIGl0IGNsZWFyIGl04oCZcyBvbiB0aGUgd2F5IG91dC4KKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oOgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6c2V0SW5kZXhLZXlzKToKKworICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5lY3Rpb24uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6On5JREJUcmFuc2FjdGlvbkJhY2tl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kOjpkZXByZWNhdGVk
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjpzY2hlZHVsZVRhc2spOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kOjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OmNvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRh
c2tUaW1lckZpcmVkKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bkJhY2tlbmQuaDoKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlT2JqZWN0U3Rv
cmVPcGVyYXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6Q3JlYXRlSW5kZXhPcGVy
YXRpb246OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlSW5kZXhPcGVyYXRpb246
OnBlcmZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6R2V0T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAg
ICAgICAgKFdlYkNvcmU6OlB1dE9wZXJhdGlvbjo6cGVyZm9ybSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuQ3Vyc29yT3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50
T3BlcmF0aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVJhbmdlT3BlcmF0
aW9uOjpwZXJmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNsZWFyT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3Jt
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZDo6VmVyc2lvbkNoYW5nZU9w
ZXJhdGlvbjo6cGVyZm9ybSk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRi
L0lEQkJhY2tpbmdTdG9yZUxldmVsREIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2lu
Z1N0b3JlTGV2ZWxEQjo6bWFrZUluZGV4V3JpdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmVMZXZlbERCOjpnZW5lcmF0ZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpJREJC
YWNraW5nU3RvcmVMZXZlbERCOjp1cGRhdGVLZXlHZW5lcmF0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZXN0YWJsaXNoQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6ZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdT
dG9yZUxldmVsREI6OnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaDoKKworICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b25MZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0
aW9uTGV2ZWxEQjo6SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6fklEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbkxldmVsREI6OnJlc2V0VHJhbnNhY3Rpb24pOgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmg6
CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rp
b25MZXZlbERCLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQik6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQjo6ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuVHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6
OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyQ29ubmVjdGlv
bkxldmVsREI6OmNvbW1pdFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
ckNvbm5lY3Rpb25MZXZlbERCOjpyZXNldFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpyb2xsYmFja1RyYW5zYWN0aW9uKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
Lmg6CisKKzIwMTMtMTEtMTIgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCiAg
ICAgICAgIEludHJvZHVjZSBJREJTZXJ2ZXJDb25uZWN0aW9uIChhbmQgc3RhcnQgbW92aW5nIHRo
aW5ncyB0byBpdCkuCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMjQxOTMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQmFja2luZ1N0b3JlSW50ZXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaAppbmRleCAzNzAwMjMzLi4zN2M4NzNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJCYWNraW5n
U3RvcmVJbnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UuaApAQCAtNTMsNyArNTMsNyBAQCBjbGFzcyBJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2U+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uo
KSB7IH0KIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkludGVyZmFjZT4gY3JlYXRlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGVzdGFibGlzaEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNh
Y3Rpb25JRCkgPSAwOwogCiAgICAgLy8gTmV3LXN0eWxlIGFzeW5jaHJvbm91cyBjYWxsYmFja3MK
ICAgICB0eXBlZGVmIHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0
YSYsIGJvb2wgc3VjY2Vzcyk+IEdldElEQkRhdGFiYXNlTWV0YWRhdGFGdW5jdGlvbjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmQuY3BwCmluZGV4IDg1ZDgwNWIuLmVkMTZiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kLmNwcApAQCAtMjU1LDcg
KzI1NSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpzZXRJbmRleEtleXMoaW50NjRfdCB0
cmFuc2FjdGlvbklkLCBpbnQ2NF90IG9iamVjdFN0b3JlCiAgICAgUmVmUHRyPElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZT4gc3RvcmUgPSBtX3NlcnZlckNvbm5lY3Rpb24tPmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKTsKICAgICAvLyBGSVhNRTogVGhpcyBtZXRob2QgY291bGQgYmUgYXN5bmNocm9u
b3VzLCBidXQgd2UgbmVlZCB0byBldmFsdWF0ZSBpZiBpdCdzIHdvcnRoIHRoZSBleHRyYSBjb21w
bGV4aXR5LgogICAgIFJlZlB0cjxJREJSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVy
OwotICAgIGJvb2wgb2sgPSBzdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlv
bi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9tZXRhZGF0YS5pZCwgb2JqZWN0U3RvcmVJ
ZCwgKnByaW1hcnlLZXksIHJlY29yZElkZW50aWZpZXIpOworICAgIGJvb2wgb2sgPSBzdG9yZS0+
a2V5RXhpc3RzSW5PYmplY3RTdG9yZSh0cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fbWV0YWRhdGEuaWQsIG9iamVjdFN0b3JlSWQsICpwcmltYXJ5S2V5
LCByZWNvcmRJZGVudGlmaWVyKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkludGVybmFsIGVycm9yIHNldHRpbmcgaW5kZXgga2V5cy4iKSk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZDo6
c2V0SW5kZXhLZXlzKGludDY0X3QgdHJhbnNhY3Rpb25JZCwgaW50NjRfdCBvYmplY3RTdG9yZQog
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRleFdyaXRlcnMuc2l6ZSgpOyArK2kpIHsK
ICAgICAgICAgSURCSW5kZXhXcml0ZXIqIGluZGV4V3JpdGVyID0gaW5kZXhXcml0ZXJzW2ldLmdl
dCgpOwotICAgICAgICBpbmRleFdyaXRlci0+d3JpdGVJbmRleEtleXMocmVjb3JkSWRlbnRpZmll
ci5nZXQoKSwgKnN0b3JlLmdldCgpLCB0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgaWQoKSwgb2JqZWN0U3RvcmVJZCk7CisgICAgICAgIGluZGV4V3JpdGVyLT53cml0ZUlu
ZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqc3RvcmUuZ2V0KCksIHRyYW5zYWN0aW9u
LT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgaWQoKSwgb2JqZWN0U3RvcmVJ
ZCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJTZXJ2ZXJDb25uZWN0aW9uLmgKaW5kZXggNzk1ZTcwMy4uYmVlNjM3MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCU2VydmVyQ29ubmVjdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlNlcnZlckNvbm5l
Y3Rpb24uaApAQCAtMjcsNyArMjcsOSBAQAogI2RlZmluZSBJREJTZXJ2ZXJDb25uZWN0aW9uX2gK
IAogI2luY2x1ZGUgIklEQk1ldGFkYXRhLmgiCisjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAjaW5j
bHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTM2
LDYgKzM4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlOworY2xhc3MgSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2U7CiAK
IC8vIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgc2luZ2xlIGFzeW5jaHJvbm91cyBsYXllciBi
ZXR3ZWVuIHRoZSB3ZWItZmFjaW5nIGZyb250ZW5kCiAvLyBhbmQgdGhlIEkvTyBwZXJmb3JtaW5n
IGJhY2tlbmQgb2YgSW5kZXhlZERhdGFiYXNlLgpAQCAtNDQsOSArNDcsMTAgQEAgY2xhc3MgSURC
U2VydmVyQ29ubmVjdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcnZlckNvbm5lY3Rpb24+
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJTZXJ2ZXJDb25uZWN0aW9uKCkgeyB9CiAKLSAg
ICAvLyBGSVhNRTogRm9yIG5vdywgc2VydmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMgYSBzeW5jaHJv
bm91cyBhY2Nlc3NvciB0byB0aGUgaW4tcHJvY2VzcyBiYWNraW5nIHN0b3JlLgorICAgIC8vIEZJ
WE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29ubmVjdGlvbiBwcm92aWRlcyBhIHN5bmNocm9ub3VzIGFj
Y2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNzIGJhY2tpbmcgc3RvcmUgb2JqZWN0cy4KICAgICAvLyBU
aGlzIGlzIHRlbXBvcmFyeSBhbmQgd2lsbCBiZSByZW1vdmVkIHNvb24uCiAgICAgdmlydHVhbCBJ
REJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKSA9IDA7Cisg
ICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSogZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCkgPSAwOwogCiAg
ICAgdmlydHVhbCBib29sIGlzQ2xvc2VkKCkgPSAwOwogCkBAIC01Nyw2ICs2MSwxMyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGdldE9yRXN0YWJsaXNoSURCRGF0YWJhc2VNZXRhZGF0YShj
b25zdCBTdHJpbmcmIG5hbWUsIEdldElEQkRhdGFiYXNlTWV0YWRhdGFGdW5jdGlvbikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIEJvb2xD
YWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBj
bG9zZSgpID0gMDsKKworICAgIC8vIFRyYW5zYWN0aW9uLWxldmVsIG9wZXJhdGlvbnMKKyAgICB2
aXJ0dWFsIHZvaWQgb3BlblRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgY29uc3Qg
SGFzaFNldDxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIEluZGV4ZWREQjo6VHJhbnNhY3Rpb25N
b2RlLCBCb29sQ2FsbGJhY2tGdW5jdGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgYmVnaW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
Y29tbWl0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBCb29sQ2FsbGJhY2tGdW5j
dGlvbiBzdWNjZXNzQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXRUcmFuc2Fj
dGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0
aW9uQ2FsbGJhY2spID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbihp
bnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2Fs
bGJhY2spID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmQu
Y3BwCmluZGV4IDUzYmJiZWEuLmNkZjgxZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmNwcApAQCAtNTMs
MTEgKzUzLDEwIEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiBJREJUcmFuc2Fj
dGlvbkJhY2tlbmQ6OmNyZWF0ZShJREJEYXRhYmFzZUJhY2tlCiBJREJUcmFuc2FjdGlvbkJhY2tl
bmQ6OklEQlRyYW5zYWN0aW9uQmFja2VuZChJREJEYXRhYmFzZUJhY2tlbmQqIGRhdGFiYXNlQmFj
a2VuZCwgaW50NjRfdCBpZCwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gY2FsbGJh
Y2tzLCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgSW5kZXhlZERCOjpU
cmFuc2FjdGlvbk1vZGUgbW9kZSkKICAgICA6IG1fb2JqZWN0U3RvcmVJZHMob2JqZWN0U3RvcmVJ
ZHMpCiAgICAgLCBtX21vZGUobW9kZSkKLSAgICAsIG1fc3RhdGUoVW51c2VkKQorICAgICwgbV9z
dGF0ZShVbm9wZW5lZCkKICAgICAsIG1fY29tbWl0UGVuZGluZyhmYWxzZSkKICAgICAsIG1fY2Fs
bGJhY2tzKGNhbGxiYWNrcykKICAgICAsIG1fZGF0YWJhc2UoZGF0YWJhc2VCYWNrZW5kKQotICAg
ICwgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbihtX2RhdGFiYXNlLT5zZXJ2ZXJDb25uZWN0aW9u
KCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5jcmVhdGVCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpKQogICAgICwgbV90YXNrVGltZXIodGhpcywgJklEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFz
a1RpbWVyRmlyZWQpCiAgICAgLCBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKDApCiAgICAgLCBt
X2lkKGlkKQpAQCAtNjYsMTIgKzY1LDM1IEBAIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZCogZGF0YWJhc2VCYWNrZW5kCiAgICAg
cmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CiAKICAgICBtX2RhdGFiYXNlLT50cmFuc2FjdGlv
bkNvb3JkaW5hdG9yKCktPmRpZENyZWF0ZVRyYW5zYWN0aW9uKHRoaXMpOworCisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZD4gc2VsZih0aGlzKTsKKyAgICBtX2RhdGFiYXNlLT5zZXJ2
ZXJDb25uZWN0aW9uKCkub3BlblRyYW5zYWN0aW9uKGlkLCBvYmplY3RTdG9yZUlkcywgbW9kZSwg
W3NlbGYsIHRoaXNdKGJvb2wgc3VjY2VzcykgeworICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAg
ICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3NlbGYsIHRoaXNdKCkgeworICAgICAgICAgICAg
ICAgIHRoaXMtPmFib3J0KCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIG1fc3RhdGUgPSBVbnVzZWQ7CisgICAgICAgIGlmIChoYXNQ
ZW5kaW5nVGFza3MoKSkKKyAgICAgICAgICAgIHN0YXJ0KCk7CisgICAgfSk7CiB9CiAKIElEQlRy
YW5zYWN0aW9uQmFja2VuZDo6fklEQlRyYW5zYWN0aW9uQmFja2VuZCgpCiB7CiAgICAgLy8gSXQg
c2hvdWxkbid0IGJlIHBvc3NpYmxlIGZvciB0aGlzIG9iamVjdCB0byBnZXQgZGVsZXRlZCB1bnRp
bCBpdCdzIGVpdGhlciBjb21wbGV0ZSBvciBhYm9ydGVkLgogICAgIEFTU0VSVChtX3N0YXRlID09
IEZpbmlzaGVkKTsKKyAgICAvLyBUaGUgYmFja2luZyBzdG9yZSB0cmFuc2FjdGlvbiBzaG91bGQg
YWxzbyBiZSBnb25lIGJ5IG5vdy4KKyAgICBBU1NFUlQoIW1fZGF0YWJhc2UtPnNlcnZlckNvbm5l
Y3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24obV9pZCkpOworfQorCitJ
REJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFjZSYgSURCVHJhbnNhY3Rpb25CYWNrZW5k
OjpkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKQoreworICAgIElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlKiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbiA9IG1fZGF0
YWJhc2UtPnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24obV9pZCk7CisgICAgQVNTRVJUKGJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKTsKKyAgICByZXR1
cm4gKmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOwogfQogCiB2b2lkIElEQlRyYW5zYWN0aW9uQmFj
a2VuZDo6c2NoZWR1bGVUYXNrKElEQkRhdGFiYXNlQmFja2VuZDo6VGFza1R5cGUgdHlwZSwgUGFz
c1JlZlB0cjxJREJPcGVyYXRpb24+IHRhc2ssIFBhc3NSZWZQdHI8SURCU3luY2hyb25vdXNPcGVy
YXRpb24+IGFib3J0VGFzaykKQEAgLTg3LDYgKzEwOSw5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjpzY2hlZHVsZVRhc2soSURCRGF0YWJhc2VCYWNrZW5kOjpUYXNrVHlwZSB0eXBlLCBQ
YXNzCiAgICAgaWYgKGFib3J0VGFzaykKICAgICAgICAgbV9hYm9ydFRhc2tRdWV1ZS5wcmVwZW5k
KGFib3J0VGFzayk7CiAKKyAgICBpZiAobV9zdGF0ZSA9PSBVbm9wZW5lZCkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgaWYgKG1fc3RhdGUgPT0gVW51c2VkKQogICAgICAgICBzdGFydCgpOwogICAg
IGVsc2UgaWYgKG1fc3RhdGUgPT0gUnVubmluZyAmJiAhbV90YXNrVGltZXIuaXNBY3RpdmUoKSkK
QEAgLTExNSw3ICsxNDAsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQoUGFz
c1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKICAgICBtX3Rhc2tUaW1lci5zdG9wKCk7
CiAKICAgICBpZiAod2FzUnVubmluZykKLSAgICAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJv
bGxiYWNrVHJhbnNhY3Rpb24obV9pZCwgW10oKSB7IH0pOwogCiAgICAgLy8gUnVuIHRoZSBhYm9y
dCB0YXNrcywgaWYgYW55LgogICAgIHdoaWxlICghbV9hYm9ydFRhc2tRdWV1ZS5pc0VtcHR5KCkp
IHsKQEAgLTEyNyw3ICsxNTIsOCBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6YWJvcnQo
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUVycm9yPiBlcnJvcikKICAgICAvLyBhcmUgZmlyZWQsIGFz
IHRoZSBzY3JpcHQgY2FsbGJhY2tzIG1heSByZWxlYXNlIHJlZmVyZW5jZXMgYW5kIGFsbG93IHRo
ZSBiYWNraW5nIHN0b3JlCiAgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIg
aXMgY3JpdGljYWwuCiAgICAgY2xvc2VPcGVuQ3Vyc29ycygpOwotICAgIG1fYmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb24tPnJlc2V0VHJhbnNhY3Rpb24oKTsKKworICAgIG1fZGF0YWJhc2UtPnNlcnZl
ckNvbm5lY3Rpb24oKS5yZXNldFRyYW5zYWN0aW9uKG1faWQsIFtdKCkgeyB9KTsKIAogICAgIC8v
IFRyYW5zYWN0aW9ucyBtdXN0IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhl
IGZyb250LWVuZCBpcyBub3RpZmllZCwgYXMKICAgICAvLyB0aGUgdHJhbnNhY3Rpb24gY29tcGxl
dGlvbiB1bmJsb2NrcyBvcGVyYXRpb25zIGxpa2UgY2xvc2luZyBjb25uZWN0aW9ucy4KQEAgLTIw
MiwzNCArMjI4LDM5IEBAIHZvaWQgSURCVHJhbnNhY3Rpb25CYWNrZW5kOjpjb21taXQoKQogICAg
IC8vIFRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGlzIG9iamVjdCBtYXkgYmUgcmVsZWFzZWQgd2hp
bGUgcGVyZm9ybWluZyB0aGUKICAgICAvLyBjb21taXQgc3RlcHMgYmVsb3cuIFdlIHRoZXJlZm9y
ZSB0YWtlIGEgc2VsZiByZWZlcmVuY2UgdG8ga2VlcCBvdXJzZWx2ZXMKICAgICAvLyBhbGl2ZSB3
aGlsZSBleGVjdXRpbmcgdGhpcyBtZXRob2QuCi0gICAgUmVmPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZD4gcHJvdGVjdCgqdGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZD4gc2Vs
Zih0aGlzKTsKIAogICAgIGJvb2wgdW51c2VkID0gbV9zdGF0ZSA9PSBVbnVzZWQ7CiAgICAgbV9z
dGF0ZSA9IEZpbmlzaGVkOwogCi0gICAgYm9vbCBjb21taXR0ZWQgPSB1bnVzZWQgfHwgbV9iYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbi0+Y29tbWl0KCk7CisgICAgYm9vbCBjb21taXR0ZWQgPSB1bnVz
ZWQ7CiAKLSAgICAvLyBCYWNraW5nIHN0b3JlIHJlc291cmNlcyAoaGVsZCB2aWEgY3Vyc29ycykg
bXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgc2NyaXB0IGNhbGxiYWNrcwotICAgIC8vIGFyZSBmaXJl
ZCwgYXMgdGhlIHNjcmlwdCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxs
b3cgdGhlIGJhY2tpbmcgc3RvcmUKLSAgICAvLyBpdHNlbGYgdG8gYmUgcmVsZWFzZWQsIGFuZCBv
cmRlciBpcyBjcml0aWNhbC4KLSAgICBjbG9zZU9wZW5DdXJzb3JzKCk7Ci0gICAgbV9iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbi0+cmVzZXRUcmFuc2FjdGlvbigpOworICAgIG1fZGF0YWJhc2UtPnNl
cnZlckNvbm5lY3Rpb24oKS5jb21taXRUcmFuc2FjdGlvbihtX2lkLCBbc2VsZiwgdGhpcywgY29t
bWl0dGVkLCB1bnVzZWRdKGJvb2wgc3VjY2VzcykgbXV0YWJsZSB7CisgICAgICAgIGNvbW1pdHRl
ZCB8PSBzdWNjZXNzOwogCi0gICAgLy8gVHJhbnNhY3Rpb25zIG11c3QgYWxzbyBiZSBtYXJrZWQg
YXMgY29tcGxldGVkIGJlZm9yZSB0aGUgZnJvbnQtZW5kIGlzIG5vdGlmaWVkLCBhcwotICAgIC8v
IHRoZSB0cmFuc2FjdGlvbiBjb21wbGV0aW9uIHVuYmxvY2tzIG9wZXJhdGlvbnMgbGlrZSBjbG9z
aW5nIGNvbm5lY3Rpb25zLgotICAgIGlmICghdW51c2VkKQotICAgICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkNvb3JkaW5hdG9yKCktPmRpZEZpbmlzaFRyYW5zYWN0aW9uKHRoaXMpOwotICAg
IG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQodGhpcyk7CisgICAgICAgIC8vIEJhY2tp
bmcgc3RvcmUgcmVzb3VyY2VzIChoZWxkIHZpYSBjdXJzb3JzKSBtdXN0IGJlIHJlbGVhc2VkIGJl
Zm9yZSBzY3JpcHQgY2FsbGJhY2tzCisgICAgICAgIC8vIGFyZSBmaXJlZCwgYXMgdGhlIHNjcmlw
dCBjYWxsYmFja3MgbWF5IHJlbGVhc2UgcmVmZXJlbmNlcyBhbmQgYWxsb3cgdGhlIGJhY2tpbmcg
c3RvcmUKKyAgICAgICAgLy8gaXRzZWxmIHRvIGJlIHJlbGVhc2VkLCBhbmQgb3JkZXIgaXMgY3Jp
dGljYWwuCisgICAgICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKIAotICAgIGlmIChjb21taXR0ZWQp
IHsKLSAgICAgICAgbV9jYWxsYmFja3MtPm9uQ29tcGxldGUoaWQoKSk7Ci0gICAgICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKHRoaXMpOwotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIG1fY2FsbGJhY2tzLT5vbkFib3J0KGlkKCksIElEQkRhdGFiYXNlRXJy
b3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwg
ZXJyb3IgY29tbWl0dGluZyB0cmFuc2FjdGlvbi4iKSk7Ci0gICAgICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOwotICAgIH0KKyAgICAgICAgbV9k
YXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLnJlc2V0VHJhbnNhY3Rpb24obV9pZCwgW10oKSB7
IH0pOwogCi0gICAgbV9kYXRhYmFzZSA9IDA7CisgICAgICAgIC8vIFRyYW5zYWN0aW9ucyBtdXN0
IGFsc28gYmUgbWFya2VkIGFzIGNvbXBsZXRlZCBiZWZvcmUgdGhlIGZyb250LWVuZCBpcyBub3Rp
ZmllZCwgYXMKKyAgICAgICAgLy8gdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gdW5ibG9ja3Mg
b3BlcmF0aW9ucyBsaWtlIGNsb3NpbmcgY29ubmVjdGlvbnMuCisgICAgICAgIGlmICghdW51c2Vk
KQorICAgICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25Db29yZGluYXRvcigpLT5kaWRG
aW5pc2hUcmFuc2FjdGlvbih0aGlzKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25G
aW5pc2hlZCh0aGlzKTsKKworICAgICAgICBpZiAoY29tbWl0dGVkKSB7CisgICAgICAgICAgICBt
X2NhbGxiYWNrcy0+b25Db21wbGV0ZShpZCgpKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2UtPnRy
YW5zYWN0aW9uRmluaXNoZWRBbmRDb21wbGV0ZUZpcmVkKHRoaXMpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uQWJvcnQoaWQoKSwgSURCRGF0YWJhc2VFcnJv
cjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBl
cnJvciBjb21taXR0aW5nIHRyYW5zYWN0aW9uLiIpKTsKKyAgICAgICAgICAgIG1fZGF0YWJhc2Ut
PnRyYW5zYWN0aW9uRmluaXNoZWRBbmRBYm9ydEZpcmVkKHRoaXMpOworICAgICAgICB9CisKKyAg
ICAgICAgbV9kYXRhYmFzZSA9IDA7CisgICAgfSk7CiB9CiAKIHZvaWQgSURCVHJhbnNhY3Rpb25C
YWNrZW5kOjp0YXNrVGltZXJGaXJlZChUaW1lcjxJREJUcmFuc2FjdGlvbkJhY2tlbmQ+KikKQEAg
LTIzNyw3ICsyNjgsNyBAQCB2b2lkIElEQlRyYW5zYWN0aW9uQmFja2VuZDo6dGFza1RpbWVyRmly
ZWQoVGltZXI8SURCVHJhbnNhY3Rpb25CYWNrZW5kPiopCiAgICAgTE9HKFN0b3JhZ2VBUEksICJJ
REJUcmFuc2FjdGlvbkJhY2tlbmQ6OnRhc2tUaW1lckZpcmVkIik7CiAKICAgICBpZiAobV9zdGF0
ZSA9PSBTdGFydFBlbmRpbmcpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbi0+
YmVnaW4oKTsKKyAgICAgICAgbV9kYXRhYmFzZS0+c2VydmVyQ29ubmVjdGlvbigpLmJlZ2luVHJh
bnNhY3Rpb24obV9pZCwgW10oKSB7IH0pOwogICAgICAgICBtX3N0YXRlID0gUnVubmluZzsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRy
YW5zYWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
VHJhbnNhY3Rpb25CYWNrZW5kLmgKaW5kZXggMjEwNzBmNi4uM2Y1ZWViNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNr
ZW5kLmgKQEAgLTY0LDcgKzY0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRQcmVlbXB0aXZl
RXZlbnQoKSAgeyBtX3BlbmRpbmdQcmVlbXB0aXZlRXZlbnRzKys7IH0KICAgICB2b2lkIGRpZENv
bXBsZXRlUHJlZW1wdGl2ZUV2ZW50KCkgIHsgbV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cy0tOyBB
U1NFUlQobV9wZW5kaW5nUHJlZW1wdGl2ZUV2ZW50cyA+PSAwKTsgfQotICAgIElEQkJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlJiBiYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpIHsgcmV0
dXJuICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uOyB9CisgICAgSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25JbnRlcmZhY2UmIGRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpOwog
CiAgICAgSURCRGF0YWJhc2VCYWNrZW5kJiBkYXRhYmFzZSgpIGNvbnN0ICB7IHJldHVybiAqbV9k
YXRhYmFzZTsgfQogCkBAIC04OSw3ICs4OSw4IEBAIHByaXZhdGU6CiAgICAgSURCVHJhbnNhY3Rp
b25CYWNrZW5kKElEQkRhdGFiYXNlQmFja2VuZCosIGludDY0X3QgaWQsIFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+LCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiBvYmplY3RTdG9yZUlk
cywgSW5kZXhlZERCOjpUcmFuc2FjdGlvbk1vZGUpOwogCiAgICAgZW51bSBTdGF0ZSB7Ci0gICAg
ICAgIFVudXNlZCwgLy8gQ3JlYXRlZCwgYnV0IG5vIHRhc2tzIHlldC4KKyAgICAgICAgVW5vcGVu
ZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBjcmVhdGVkLgorICAgICAg
ICBVbnVzZWQsIC8vIEJhY2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gY3JlYXRlZCwgYnV0IG5vIHRh
c2tzIHlldC4KICAgICAgICAgU3RhcnRQZW5kaW5nLCAvLyBFbnF1ZXVlZCB0YXNrcywgYnV0IGJh
Y2tpbmcgc3RvcmUgdHJhbnNhY3Rpb24gbm90IHlldCBzdGFydGVkLgogICAgICAgICBSdW5uaW5n
LCAvLyBCYWNraW5nIHN0b3JlIHRyYW5zYWN0aW9uIHN0YXJ0ZWQgYnV0IG5vdCB5ZXQgZmluaXNo
ZWQuCiAgICAgICAgIEZpbmlzaGVkLCAvLyBFaXRoZXIgYWJvcnRlZCBvciBjb21taXR0ZWQuCkBA
IC0xMTYsOCArMTE3LDYgQEAgcHJpdmF0ZToKICAgICBUYXNrUXVldWUgbV9wcmVlbXB0aXZlVGFz
a1F1ZXVlOwogICAgIERlcXVlPFJlZlB0cjxJREJTeW5jaHJvbm91c09wZXJhdGlvbj4+IG1fYWJv
cnRUYXNrUXVldWU7CiAKLSAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRl
cmZhY2U+IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb247Ci0KICAgICAvLyBGSVhNRTogZGVsZXRl
IHRoZSB0aW1lciBvbmNlIHdlIGhhdmUgdGhyZWFkcyBpbnN0ZWFkLgogICAgIFRpbWVyPElEQlRy
YW5zYWN0aW9uQmFja2VuZD4gbV90YXNrVGltZXI7CiAgICAgaW50IG1fcGVuZGluZ1ByZWVtcHRp
dmVFdmVudHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJUcmFuc2FjdGlvbkJhY2tlbmRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCmluZGV4IDk2
NmI0NmQuLjI5NTllZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZE9wZXJhdGlvbnMuY3Bw
CkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb246OnBlcmZv
cm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjCiAgICAgQ2FsbE9uRGVz
dHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKIAogICAgIExPRyhTdG9y
YWdlQVBJLCAiQ3JlYXRlT2JqZWN0U3RvcmVPcGVyYXRpb24iKTsKLSAgICBpZiAoIW1fdHJhbnNh
Y3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmUoKS0+Y3JlYXRlT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlTWV0
YWRhdGEuaWQsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5uYW1lLCBtX29iamVjdFN0b3JlTWV0YWRh
dGEua2V5UGF0aCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQpKSB7CisgICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNh
dGVkQmFja2luZ1N0b3JlKCktPmNyZWF0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRlcHJl
Y2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgp
LmlkKCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCwgbV9vYmplY3RTdG9yZU1ldGFkYXRhLm5h
bWUsIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoLCBtX29iamVjdFN0b3JlTWV0YWRhdGEu
YXV0b0luY3JlbWVudCkpIHsKICAgICAgICAgUmVmUHRyPElEQkRhdGFiYXNlRXJyb3I+IGVycm9y
ID0gSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIFN0cmluZzo6Zm9ybWF0KCJJbnRlcm5hbCBlcnJvciBjcmVhdGluZyBvYmplY3Qgc3Rv
cmUgJyVzJy4iLCBtX29iamVjdFN0b3JlTWV0YWRhdGEubmFtZS51dGY4KCkuZGF0YSgpKSk7CiAg
ICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yLnJlbGVhc2UoKSk7CiAgICAgICAgIHJl
dHVybjsKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBDcmVhdGVJbmRleE9wZXJhdGlvbjo6cGVyZm9y
bShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgIENhbGxPbkRl
c3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRpb25DYWxsYmFjayk7CiAKICAgICBMT0coU3Rv
cmFnZUFQSSwgIkNyZWF0ZUluZGV4T3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCkt
PmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4TWV0
YWRhdGEuaWQsIG1faW5kZXhNZXRhZGF0YS5uYW1lLCBtX2luZGV4TWV0YWRhdGEua2V5UGF0aCwg
bV9pbmRleE1ldGFkYXRhLnVuaXF1ZSwgbV9pbmRleE1ldGFkYXRhLm11bHRpRW50cnkpKSB7Cisg
ICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlKCktPmNyZWF0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlk
KCksIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleE1ldGFkYXRhLmlkLCBtX2luZGV4TWV0YWRhdGEu
bmFtZSwgbV9pbmRleE1ldGFkYXRhLmtleVBhdGgsIG1faW5kZXhNZXRhZGF0YS51bmlxdWUsIG1f
aW5kZXhNZXRhZGF0YS5tdWx0aUVudHJ5KSkgewogICAgICAgICBtX3RyYW5zYWN0aW9uLT5hYm9y
dChJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVybmFsIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGNyZWF0
ZSBpbmRleCAnJXMnLiIsIG1faW5kZXhNZXRhZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgRGVsZXRlSW5kZXhP
cGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFj
aykKICAgICBDYWxsT25EZXN0cnVjdCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2sp
OwogCiAgICAgTE9HKFN0b3JhZ2VBUEksICJEZWxldGVJbmRleE9wZXJhdGlvbiIpOwotICAgIGJv
b2wgb2sgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXBy
ZWNhdGVkQmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCksIG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuaWQoKSwgbV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4TWV0YWRhdGEuaWQpOworICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPmRlbGV0ZUluZGV4KG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlkKCksIG1fb2JqZWN0U3RvcmVJ
ZCwgbV9pbmRleE1ldGFkYXRhLmlkKTsKICAgICBpZiAoIW9rKSB7CiAgICAgICAgIFJlZlB0cjxJ
REJEYXRhYmFzZUVycm9yPiBlcnJvciA9IElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBTdHJpbmc6OmZvcm1hdCgiSW50ZXJuYWwgZXJy
b3IgZGVsZXRpbmcgaW5kZXggJyVzJy4iLCBtX2luZGV4TWV0YWRhdGEubmFtZS51dGY4KCkuZGF0
YSgpKSk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb24tPmFib3J0KGVycm9yKTsKQEAgLTExNSwxNCAr
MTE1LDE0IEBAIHZvaWQgR2V0T3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgp
PiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAgICAgIGlmIChtX2luZGV4SWQgPT0gSURCSW5kZXhN
ZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAgICAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9
IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSk7CiAgICAgICAgICAgICAvLyBPYmplY3RTdG9yZSBS
ZXRyaWV2YWwgT3BlcmF0aW9uCi0gICAgICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3Ry
YW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2lu
Z1N0b3JlKCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICAgICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJhbnNhY3Rp
b24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1f
b2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhl
ZERCOjpDdXJzb3JLZXlPbmx5KSB7CiAgICAgICAgICAgICAgICAgLy8gSW5kZXggVmFsdWUgUmV0
cmlldmFsIE9wZXJhdGlvbgotICAgICAgICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1f
dHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CisgICAgICAgICAgICAg
ICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJD
b25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3Io
bV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIElu
ZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFsIE9wZXJhdGlvbgotICAgICAg
ICAgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4Q3Vy
c29yKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJ
ZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWRE
Qjo6Q3Vyc29yTmV4dCk7CisgICAgICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90
cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZSgpLT5vcGVuSW5kZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2lu
ZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KIApAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQgR2V0T3BlcmF0aW9u
OjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAg
aWYgKG1faW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAg
Ly8gT2JqZWN0IFN0b3JlIFJldHJpZXZhbCBPcGVyYXRpb24KICAgICAgICAgVmVjdG9yPGNoYXI+
IHZhbHVlOwotICAgICAgICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29u
bmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rp
b24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCAqa2V5LCB2YWx1ZSk7CisgICAgICAgIG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2Uo
KS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQo
bV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0
YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqa2V5LCB2YWx1ZSk7CiAgICAgICAgIGlmICghb2sp
IHsKICAgICAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNy
ZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCAiSW50ZXJuYWwgZXJyb3Ig
aW4gZ2V0UmVjb3JkLiIpKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MSw3ICsxNjEsNyBA
QCB2b2lkIEdldE9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxl
dGlvbkNhbGxiYWNrKQogICAgIH0KIAogICAgIC8vIEZyb20gaGVyZSB3ZSBhcmUgZGVhbGluZyBv
bmx5IHdpdGggaW5kZXhlcy4KLSAgICBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2Vy
dmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+Z2V0UHJpbWFyeUtleVZp
YUluZGV4KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJh
c2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQsICprZXksIHByaW1hcnlLZXkpOworICAg
IG9rID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZSgpLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgobV90cmFuc2FjdGlvbi0+
ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZUlkLCBtX2luZGV4SWQsICprZXksIHByaW1hcnlLZXkpOwogICAgIGlmICghb2spIHsK
ICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRQ
cmltYXJ5S2V5VmlhSW5kZXguIikpOwogICAgICAgICByZXR1cm47CkBAIC0xNzgsNyArMTc4LDcg
QEAgdm9pZCBHZXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKIAogICAgIC8vIEluZGV4IFJlZmVyZW5jZWQgVmFsdWUgUmV0cmlldmFs
IE9wZXJhdGlvbgogICAgIFZlY3RvcjxjaGFyPiB2YWx1ZTsKLSAgICBvayA9IG1fdHJhbnNhY3Rp
b24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUo
KS0+Z2V0UmVjb3JkKG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1f
ZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJpbWFyeUtleSwgdmFsdWUpOworICAgIG9r
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5nZXRSZWNvcmQobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCAqcHJp
bWFyeUtleSwgdmFsdWUpOwogICAgIGlmICghb2spIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9u
RXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsICJJbnRlcm5hbCBlcnJvciBpbiBnZXRSZWNvcmQuIikpOwogICAgICAgICByZXR1
cm47CkBAIC0yMjEsNyArMjIxLDcgQEAgdm9pZCBQdXRPcGVyYXRpb246OnBlcmZvcm0oc3RkOjpm
dW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKIAogICAgIFJlZlB0cjxJREJSZWNv
cmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyOwogICAgIGlmIChtX3B1dE1vZGUgPT0gSURC
RGF0YWJhc2VCYWNrZW5kOjpBZGRPbmx5KSB7Ci0gICAgICAgIGJvb2wgb2sgPSBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPmtleUV4aXN0c0luT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJh
bnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCByZWNvcmRJ
ZGVudGlmaWVyKTsKKyAgICAgICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+a2V5RXhpc3RzSW5P
YmplY3RTdG9yZShtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rp
b24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkLCAqa2V5LCByZWNvcmRJZGVudGlm
aWVyKTsKICAgICAgICAgaWYgKCFvaykgewogICAgICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsICJJbnRlcm5hbCBlcnJvciBjaGVja2luZyBrZXkgZXhpc3RlbmNlLiIpKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTI0Niw3ICsyNDYsNyBAQCB2b2lkIFB1dE9wZXJhdGlvbjo6cGVy
Zm9ybShzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgIH0KIAog
ICAgIC8vIEJlZm9yZSB0aGlzIHBvaW50LCBkb24ndCBkbyBhbnkgbXV0YXRpb24uIEFmdGVyIHRo
aXMgcG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgotICAg
IGJhY2tpbmdTdG9yZVN1Y2Nlc3MgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNv
bm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPnB1dFJlY29yZChtX3RyYW5zYWN0
aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3Rv
cmUuaWQsICprZXksIG1fdmFsdWUsIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOworICAgIGJhY2tp
bmdTdG9yZVN1Y2Nlc3MgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rp
b24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPnB1dFJlY29yZChtX3RyYW5zYWN0aW9uLT5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVj
dFN0b3JlLmlkLCAqa2V5LCBtX3ZhbHVlLCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAgICBp
ZiAoIWJhY2tpbmdTdG9yZVN1Y2Nlc3MpIHsKICAgICAgICAgbV9jYWxsYmFja3MtPm9uRXJyb3Io
SURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJy
b3IsICJJbnRlcm5hbCBlcnJvcjogYmFja2luZyBzdG9yZSBlcnJvciBwZXJmb3JtaW5nIHB1dC9h
ZGQuIikpOwogICAgICAgICByZXR1cm47CkBAIC0yNTQsNyArMjU0LDcgQEAgdm9pZCBQdXRPcGVy
YXRpb246OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykK
IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhXcml0ZXJzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIElEQkluZGV4V3JpdGVyKiBpbmRleFdyaXRlciA9IGluZGV4V3JpdGVyc1tpXS5n
ZXQoKTsKLSAgICAgICAgaW5kZXhXcml0ZXItPndyaXRlSW5kZXhLZXlzKHJlY29yZElkZW50aWZp
ZXIuZ2V0KCksICptX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlKCksIG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZS5pZCk7CisgICAgICAgIGluZGV4
V3JpdGVyLT53cml0ZUluZGV4S2V5cyhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCAqbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLCBtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwg
bV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlLmlkKTsKICAgICB9CiAKICAgICBpZiAobV9vYmpl
Y3RTdG9yZS5hdXRvSW5jcmVtZW50ICYmIG1fcHV0TW9kZSAhPSBJREJEYXRhYmFzZUJhY2tlbmQ6
OkN1cnNvclVwZGF0ZSAmJiBrZXktPnR5cGUoKSA9PSBJREJLZXk6Ok51bWJlclR5cGUpIHsKQEAg
LTI5MywxMyArMjkzLDEzIEBAIHZvaWQgT3BlbkN1cnNvck9wZXJhdGlvbjo6cGVyZm9ybShzdGQ6
OmZ1bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQogICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IGJhY2tpbmdTdG9yZUN1cnNvcjsKICAgICBpZiAobV9p
bmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICBBU1NFUlQo
bV9jdXJzb3JUeXBlICE9IEluZGV4ZWREQjo6Q3Vyc29yS2V5T25seSk7Ci0gICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJh
bnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmpl
Y3RTdG9yZUlkLCBtX2tleVJhbmdlLmdldCgpLCBtX2RpcmVjdGlvbik7CisgICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG1fdHJh
bnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNl
SWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChtX3Rhc2tUeXBlID09IElEQkRhdGFiYXNlQmFja2Vu
ZDo6Tm9ybWFsVGFzayk7CiAgICAgICAgIGlmIChtX2N1cnNvclR5cGUgPT0gSW5kZXhlZERCOjpD
dXJzb3JLZXlPbmx5KQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlS
YW5nZS5nZXQoKSwgbV9kaXJlY3Rpb24pOworICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRl
ZEJhY2tpbmdTdG9yZSgpLT5vcGVuSW5kZXhLZXlDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVj
YXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9y
ZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0
YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVu
SW5kZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9k
YXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgbV9rZXlSYW5nZS5nZXQoKSwg
bV9kaXJlY3Rpb24pOworICAgICAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2Fj
dGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZSgpLT5vcGVuSW5kZXhDdXJzb3IobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkLCBtX2luZGV4SWQs
IG1fa2V5UmFuZ2UuZ2V0KCksIG1fZGlyZWN0aW9uKTsKICAgICB9CiAKICAgICBpZiAoIWJhY2tp
bmdTdG9yZUN1cnNvcikgewpAQCAtMzIyLDkgKzMyMiw5IEBAIHZvaWQgQ291bnRPcGVyYXRpb246
OnBlcmZvcm0oc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3I7
CiAKICAgICBpZiAobV9pbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkKLSAg
ICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2
ZXJDb25uZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5vcGVuT2JqZWN0U3RvcmVL
ZXlDdXJzb3IobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV9kYXRh
YmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vy
c29yTmV4dCk7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRh
dGFiYXNlKCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3Bl
bk9iamVjdFN0b3JlS2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5n
ZS5nZXQoKSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKICAgICBlbHNlCi0gICAgICAgIGJhY2tp
bmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVyQ29ubmVjdGlv
bigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4S2V5Q3Vyc29yKG1fdHJhbnNh
Y3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RT
dG9yZUlkLCBtX2luZGV4SWQsIG1fa2V5UmFuZ2UuZ2V0KCksIEluZGV4ZWREQjo6Q3Vyc29yTmV4
dCk7CisgICAgICAgIGJhY2tpbmdTdG9yZUN1cnNvciA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNl
KCkuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+b3BlbkluZGV4
S2V5Q3Vyc29yKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCBtX2tleVJhbmdl
LmdldCgpLCBJbmRleGVkREI6OkN1cnNvck5leHQpOwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vy
c29yKSB7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vblN1Y2Nlc3MoY291bnQpOwogICAgICAgICBy
ZXR1cm47CkBAIC0zNDIsMTAgKzM0MiwxMCBAQCB2b2lkIERlbGV0ZVJhbmdlT3BlcmF0aW9uOjpw
ZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spCiAgICAgQ2Fs
bE9uRGVzdHJ1Y3QgY2FsbE9uRGVzdHJ1Y3QoY29tcGxldGlvbkNhbGxiYWNrKTsKIAogICAgIExP
RyhTdG9yYWdlQVBJLCAiRGVsZXRlUmFuZ2VPcGVyYXRpb24iKTsKLSAgICBSZWZQdHI8SURCQmFj
a2luZ1N0b3JlQ3Vyc29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPm9wZW5PYmplY3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbigpLCBtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9rZXlSYW5nZS5nZXQo
KSwgSW5kZXhlZERCOjpDdXJzb3JOZXh0KTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlQ3Vy
c29ySW50ZXJmYWNlPiBiYWNraW5nU3RvcmVDdXJzb3IgPSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFz
ZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCktPm9wZW5PYmpl
Y3RTdG9yZUN1cnNvcihtX3RyYW5zYWN0aW9uLT5kZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oKSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1fa2V5UmFuZ2UuZ2V0KCks
IEluZGV4ZWREQjo6Q3Vyc29yTmV4dCk7CiAgICAgaWYgKGJhY2tpbmdTdG9yZUN1cnNvcikgewog
ICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCku
c2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlUmVjb3Jk
KG1fdHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSkp
IHsKKyAgICAgICAgICAgIGlmICghbV90cmFuc2FjdGlvbi0+ZGF0YWJhc2UoKS5zZXJ2ZXJDb25u
ZWN0aW9uKCkuZGVwcmVjYXRlZEJhY2tpbmdTdG9yZSgpLT5kZWxldGVSZWNvcmQobV90cmFuc2Fj
dGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwg
bV9vYmplY3RTdG9yZUlkLCBiYWNraW5nU3RvcmVDdXJzb3ItPnJlY29yZElkZW50aWZpZXIoKSkp
IHsKICAgICAgICAgICAgICAgICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9y
OjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGRlbGV0
aW5nIGRhdGEgaW4gcmFuZ2UiKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgQ2xlYXJPcGVyYXRpb246OnBlcmZvcm0oc3Rk
OjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBsZXRpb25DYWxsYmFjaykKICAgICBDYWxsT25EZXN0cnVj
dCBjYWxsT25EZXN0cnVjdChjb21wbGV0aW9uQ2FsbGJhY2spOwogCiAgICAgTE9HKFN0b3JhZ2VB
UEksICJPYmplY3RTdG9yZUNsZWFyT3BlcmF0aW9uIik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9u
LT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3JlKCkt
PmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgbV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQpKSB7CisgICAgaWYgKCFtX3RyYW5zYWN0
aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVkQmFja2luZ1N0b3Jl
KCktPmNsZWFyT2JqZWN0U3RvcmUobV90cmFuc2FjdGlvbi0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUlkKSkgewogICAgICAg
ICBtX2NhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgIkVycm9yIGNsZWFyaW5nIG9iamVjdCBzdG9yZSIp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTM3Miw3ICszNzIsNyBAQCB2b2lkIERlbGV0
ZU9iamVjdFN0b3JlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21w
bGV0aW9uQ2FsbGJhYwogICAgIENhbGxPbkRlc3RydWN0IGNhbGxPbkRlc3RydWN0KGNvbXBsZXRp
b25DYWxsYmFjayk7CiAKICAgICBMT0coU3RvcmFnZUFQSSwgIkRlbGV0ZU9iamVjdFN0b3JlT3Bl
cmF0aW9uIik7Ci0gICAgYm9vbCBvayA9IG1fdHJhbnNhY3Rpb24tPmRhdGFiYXNlKCkuc2VydmVy
Q29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKS0+ZGVsZXRlT2JqZWN0U3RvcmUo
bV90cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgbV90cmFuc2FjdGlvbi0+
ZGF0YWJhc2UoKS5pZCgpLCBtX29iamVjdFN0b3JlTWV0YWRhdGEuaWQpOworICAgIGJvb2wgb2sg
PSBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVk
QmFja2luZ1N0b3JlKCktPmRlbGV0ZU9iamVjdFN0b3JlKG1fdHJhbnNhY3Rpb24tPmRlcHJlY2F0
ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBtX3RyYW5zYWN0aW9uLT5kYXRhYmFzZSgpLmlk
KCksIG1fb2JqZWN0U3RvcmVNZXRhZGF0YS5pZCk7CiAgICAgaWYgKCFvaykgewogICAgICAgICBS
ZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4gZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUo
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgU3RyaW5nOjpmb3JtYXQoIkludGVy
bmFsIGVycm9yIGRlbGV0aW5nIG9iamVjdCBzdG9yZSAnJXMnLiIsIG1fb2JqZWN0U3RvcmVNZXRh
ZGF0YS5uYW1lLnV0ZjgoKS5kYXRhKCkpKTsKICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQo
ZXJyb3IpOwpAQCAtMzkxLDcgKzM5MSw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kOjpWZXJz
aW9uQ2hhbmdlT3BlcmF0aW9uOjpwZXJmb3JtKHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjCiAgICAg
Ly8gRklYTUU6IERhdGFiYXNlIHZlcnNpb25zIGFyZSBub3cgb2YgdHlwZSB1aW50NjRfdCwgYnV0
IHRoaXMgY29kZSBleHBlY3RlZCBpbnQ2NF90LgogICAgIEFTU0VSVChtX3ZlcnNpb24gPiAoaW50
NjRfdClvbGRWZXJzaW9uKTsKICAgICBkYXRhYmFzZS5zZXRDdXJyZW50VmVyc2lvbihtX3ZlcnNp
b24pOwotICAgIGlmICghZGF0YWJhc2Uuc2VydmVyQ29ubmVjdGlvbigpLmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKS0+dXBkYXRlSURCRGF0YWJhc2VWZXJzaW9uKG1fdHJhbnNhY3Rpb24tPmJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIGRhdGFiYXNlLm1ldGFkYXRhKCkudmVy
c2lvbikpIHsKKyAgICBpZiAoIWRhdGFiYXNlLnNlcnZlckNvbm5lY3Rpb24oKS5kZXByZWNhdGVk
QmFja2luZ1N0b3JlKCktPnVwZGF0ZUlEQkRhdGFiYXNlVmVyc2lvbihtX3RyYW5zYWN0aW9uLT5k
ZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oKSwgZGF0YWJhc2VJZCwgZGF0YWJhc2Uu
bWV0YWRhdGEoKS52ZXJzaW9uKSkgewogICAgICAgICBSZWZQdHI8SURCRGF0YWJhc2VFcnJvcj4g
ZXJyb3IgPSBJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVu
a25vd25FcnJvciwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZSB3aGVuIHVw
ZGF0aW5nIHZlcnNpb24uIik7CiAgICAgICAgIG1fY2FsbGJhY2tzLT5vbkVycm9yKGVycm9yKTsK
ICAgICAgICAgbV90cmFuc2FjdGlvbi0+YWJvcnQoZXJyb3IpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERC
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2lu
Z1N0b3JlTGV2ZWxEQi5jcHAKaW5kZXggYjU4OGQ2OS4uNzJjOTQwNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZl
bERCLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QkJhY2tpbmdTdG9yZUxldmVsREIuY3BwCkBAIC0xNDAyLDcgKzE0MDIsOCBAQCBib29sIElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6Om1ha2VJbmRleFdyaXRlcnMoSURCVHJhbnNhY3Rpb25CYWNrZW5k
JiB0cmFuc2FjdGlvbgogCiAgICAgICAgIFJlZlB0cjxJREJJbmRleFdyaXRlcj4gaW5kZXhXcml0
ZXIgPSBJREJJbmRleFdyaXRlcjo6Y3JlYXRlKGluZGV4LCBrZXlzKTsKICAgICAgICAgYm9vbCBj
YW5BZGRLZXlzID0gZmFsc2U7Ci0gICAgICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGlu
ZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtleXMoKnRoaXMsIHRyYW5zYWN0aW9uLmJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2Fu
QWRkS2V5cywgJnByaW1hcnlLZXksIGVycm9yTWVzc2FnZSk7CisgICAgICAgIEFTU0VSVChtX2Jh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pZCgpKSk7CisgICAg
ICAgIGJvb2wgYmFja2luZ1N0b3JlU3VjY2VzcyA9IGluZGV4V3JpdGVyLT52ZXJpZnlJbmRleEtl
eXMoKnRoaXMsICptX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb24uaWQo
KSksIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlLmlkLCBpbmRleC5pZCwgY2FuQWRkS2V5cywgJnBy
aW1hcnlLZXksIGVycm9yTWVzc2FnZSk7CiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlU3VjY2Vz
cykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCFjYW5BZGRLZXlzKQpA
QCAtMTQxOSw3ICsxNDIwLDggQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQkJhY2tpbmdTdG9yZUxl
dmVsREI6OmdlbmVyYXRlS2V5KElEQlRyYW5zYWN0aW9uQmFja2VuZCYgdHIKIHsKICAgICBjb25z
dCBpbnQ2NF90IG1heEdlbmVyYXRvclZhbHVlID0gOTAwNzE5OTI1NDc0MDk5MkxMOyAvLyBNYXhp
bXVtIGludGVnZXIgc3RvcmFibGUgYXMgRUNNQVNjcmlwdCBudW1iZXIuCiAgICAgaW50NjRfdCBj
dXJyZW50TnVtYmVyOwotICAgIGJvb2wgb2sgPSBnZXRLZXlHZW5lcmF0b3JDdXJyZW50TnVtYmVy
KHRyYW5zYWN0aW9uLmJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKCksIGRhdGFiYXNlSWQsIG9iamVj
dFN0b3JlSWQsIGN1cnJlbnROdW1iZXIpOworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9yZVRyYW5z
YWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbi5pZCgpKSk7CisgICAgYm9vbCBvayA9IGdldEtl
eUdlbmVyYXRvckN1cnJlbnROdW1iZXIoKm1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0
cmFuc2FjdGlvbi5pZCgpKSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgY3VycmVudE51bWJl
cik7CiAgICAgaWYgKCFvaykgewogICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBnZXRLZXlH
ZW5lcmF0b3JDdXJyZW50TnVtYmVyIik7CiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZUlu
dmFsaWQoKTsKQEAgLTE0MzQsNyArMTQzNiw5IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJCYWNr
aW5nU3RvcmVMZXZlbERCOjpnZW5lcmF0ZUtleShJREJUcmFuc2FjdGlvbkJhY2tlbmQmIHRyCiBi
b29sIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OnVwZGF0ZUtleUdlbmVyYXRvcihJREJUcmFuc2Fj
dGlvbkJhY2tlbmQmIHRyYW5zYWN0aW9uLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGJvb2wgY2hlY2tDdXJyZW50KQogewogICAg
IEFTU0VSVChrZXkudHlwZSgpID09IElEQktleTo6TnVtYmVyVHlwZSk7Ci0gICAgcmV0dXJuIG1h
eWJlVXBkYXRlS2V5R2VuZXJhdG9yQ3VycmVudE51bWJlcih0cmFuc2FjdGlvbi5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBzdGF0aWNfY2FzdDxp
bnQ2NF90PihmbG9vcihrZXkubnVtYmVyKCkpKSArIDEsIGNoZWNrQ3VycmVudCk7CisgICAgQVNT
RVJUKG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmNvbnRhaW5zKHRyYW5zYWN0aW9uLmlkKCkp
KTsKKworICAgIHJldHVybiBtYXliZVVwZGF0ZUtleUdlbmVyYXRvckN1cnJlbnROdW1iZXIoKm1f
YmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbi5pZCgpKSwgZGF0YWJhc2VJ
ZCwgb2JqZWN0U3RvcmVJZCwgc3RhdGljX2Nhc3Q8aW50NjRfdD4oZmxvb3Ioa2V5Lm51bWJlcigp
KSkgKyAxLCBjaGVja0N1cnJlbnQpOwogfQogCiBjbGFzcyBPYmplY3RTdG9yZUtleUN1cnNvcklt
cGwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlQ3Vyc29yTGV2ZWxEQiB7CkBAIC0xOTEyLDkgKzE5
MTYsMjEgQEAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVDdXJzb3JJbnRlcmZhY2U+IElEQkJh
Y2tpbmdTdG9yZUxldmVsREI6Om9wZW5JbmRleEN1cnMKICAgICByZXR1cm4gY3Vyc29yLnJlbGVh
c2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkludGVyZmFj
ZT4gSURCQmFja2luZ1N0b3JlTGV2ZWxEQjo6Y3JlYXRlQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KQordm9pZCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjplc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCit7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdT
dG9yZVRyYW5zYWN0aW9ucy5jb250YWlucyh0cmFuc2FjdGlvbklEKSk7CisgICAgbV9iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbnMuc2V0KHRyYW5zYWN0aW9uSUQsIElEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQjo6Y3JlYXRlKHRyYW5zYWN0aW9uSUQsIHRoaXMpKTsKK30KKworSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIElEQkJhY2tpbmdTdG9yZUxldmVsREI6OmRl
cHJlY2F0ZWRCYWNraW5nU3RvcmVUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQpCit7
CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFuc2FjdGlvbklE
KTsKK30KKwordm9pZCBJREJCYWNraW5nU3RvcmVMZXZlbERCOjpyZW1vdmVCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbihJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIqIHRyYW5zYWN0aW9u
KQogewotICAgIHJldHVybiBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmNyZWF0
ZSh0aGlzKTsKKyAgICBBU1NFUlQobV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuY29udGFpbnMo
dHJhbnNhY3Rpb24tPnRyYW5zYWN0aW9uSUQoKSkpOworICAgIG1fYmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb25zLnJlbW92ZSh0cmFuc2FjdGlvbi0+dHJhbnNhY3Rpb25JRCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVMZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaAppbmRleCBh
MDk1MmE3Li41ZTJmYjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZUxldmVsREIuaApAQCAt
NDQsNiArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBMZXZlbERCQ29tcGFyYXRv
cjsKIGNsYXNzIExldmVsREJEYXRhYmFzZTsKIGNsYXNzIExldmVsREJUcmFuc2FjdGlvbjsKK2Ns
YXNzIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjsKIGNsYXNzIElEQktleTsKIGNs
YXNzIElEQktleVJhbmdlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CkBAIC02Nyw3ICs2OCw3IEBA
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBv
cGVuSW5NZW1vcnkoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBMZXZlbERCRmFjdG9yeSopOwog
ICAgIFdlYWtQdHI8SURCQmFja2luZ1N0b3JlTGV2ZWxEQj4gY3JlYXRlV2Vha1B0cigpIHsgcmV0
dXJuIG1fd2Vha0ZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CiAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2U+IGNyZWF0ZUJhY2tpbmdT
dG9yZVRyYW5zYWN0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIGVzdGFibGlzaEJhY2tpbmdTdG9y
ZVRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCk7CiAKICAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IGdldERhdGFiYXNlTmFtZXMoKTsKIApAQCAtMTA5LDYgKzExMCw5IEBAIHB1Ymxp
YzoKIAogICAgIHN0YXRpYyBpbnQgY29tcGFyZUluZGV4S2V5cyhjb25zdCBMZXZlbERCU2xpY2Um
LCBjb25zdCBMZXZlbERCU2xpY2UmKTsKIAorICAgIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9u
SW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFu
c2FjdGlvbklEKTsKKyAgICB2b2lkIHJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKElEQkJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiopOworCiBwcm90ZWN0ZWQ6CiAgICAgSURCQmFj
a2luZ1N0b3JlTGV2ZWxEQihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFBhc3NPd25QdHI8TGV2
ZWxEQkRhdGFiYXNlPiwgUGFzc093blB0cjxMZXZlbERCQ29tcGFyYXRvcj4pOwogCkBAIC0xMjgs
NiArMTMyLDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8TGV2ZWxEQkRhdGFiYXNlPiBtX2RiOwog
ICAgIE93blB0cjxMZXZlbERCQ29tcGFyYXRvcj4gbV9jb21wYXJhdG9yOwogICAgIFdlYWtQdHJG
YWN0b3J5PElEQkJhY2tpbmdTdG9yZUxldmVsREI+IG1fd2Vha0ZhY3Rvcnk7CisKKyAgICBIYXNo
TWFwPGludDY0X3QsIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI+PiBt
X2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURC
QmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCLmNw
cAppbmRleCA2ODE2Y2IzLi5hN2E1ZjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuY3BwCkBAIC0zNSwxMSArMzUsMTggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OklE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uq
IGJhY2tpbmdTdG9yZSkKLSAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKK0lEQkJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgSURCQmFja2luZ1N0b3JlTGV2ZWxEQiogYmFj
a2luZ1N0b3JlKQorICAgIDogbV90cmFuc2FjdGlvbklEKHRyYW5zYWN0aW9uSUQpCisgICAgLCBt
X2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCiB7CiB9CiAKK0lEQkJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uTGV2ZWxEQjo6fklEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQigpCit7Cisg
ICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+cmVtb3ZlQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb24odGhpcyk7Cit9CisKIHZvaWQgSURCQmFja2luZ1N0b3JlVHJh
bnNhY3Rpb25MZXZlbERCOjpiZWdpbigpCiB7CiAgICAgTE9HKFN0b3JhZ2VBUEksICJJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREI6OmJlZ2luIik7CkBAIC02Niw2ICs3MywxNCBAQCB2
b2lkIElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjo6cm9sbGJhY2soKQogICAgIG1f
dHJhbnNhY3Rpb24uY2xlYXIoKTsKIH0KIAordm9pZCBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREI6OnJlc2V0VHJhbnNhY3Rpb24oKQoreworICAgIEFTU0VSVChtX2JhY2tpbmdTdG9y
ZSk7CisgICAgbV9iYWNraW5nU3RvcmUtPnJlbW92ZUJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRo
aXMpOworICAgIG1fYmFja2luZ1N0b3JlID0gMDsKKyAgICBtX3RyYW5zYWN0aW9uID0gMDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpICYmIFVTRShMRVZFTERCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25MZXZlbERCLmgKaW5kZXggYWIyODU5Ny4uNTA3ZGJkYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2ZWxkYi9JREJCYWNraW5nU3RvcmVU
cmFuc2FjdGlvbkxldmVsREIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9sZXZlbGRiL0lEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQi5oCkBAIC0zNCwzMyAr
MzQsMzQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJREJCYWNraW5nU3RvcmVJ
bnRlcmZhY2U7CitjbGFzcyBJREJCYWNraW5nU3RvcmVMZXZlbERCOwogCiBjbGFzcyBJREJCYWNr
aW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIgRklOQUwgOiBwdWJsaWMgSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25JbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlPiBjcmVhdGUoSURCQmFja2luZ1N0b3Jl
SW50ZXJmYWNlKiBiYWNraW5nU3RvcmUpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCPiBjcmVhdGUoaW50NjRfdCB0cmFuc2FjdGlvbklELCBJ
REJCYWNraW5nU3RvcmVMZXZlbERCKiBiYWNraW5nU3RvcmUpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihiYWNraW5n
U3RvcmUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJCYWNraW5nU3RvcmVUcmFu
c2FjdGlvbkxldmVsREIodHJhbnNhY3Rpb25JRCwgYmFja2luZ1N0b3JlKSk7CiAgICAgfQogCisg
ICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25MZXZlbERCKCk7CisKICAgICB2
aXJ0dWFsIHZvaWQgYmVnaW4oKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIGJvb2wgY29tbWl0KCkg
T1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHJvbGxiYWNrKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oKSBPVkVSUklERQotICAgIHsKLSAgICAgICAgbV9i
YWNraW5nU3RvcmUgPSAwOwotICAgICAgICBtX3RyYW5zYWN0aW9uID0gMDsKLSAgICB9CisgICAg
dmlydHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oKSBPVkVSUklERTsKIAogICAgIHN0YXRpYyBM
ZXZlbERCVHJhbnNhY3Rpb24qIGxldmVsREJUcmFuc2FjdGlvbkZyb20oSURCQmFja2luZ1N0b3Jl
VHJhbnNhY3Rpb25JbnRlcmZhY2UmIHRyYW5zYWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PElEQkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQiY+KHRyYW5zYWN0
aW9uKS5tX3RyYW5zYWN0aW9uLmdldCgpOwogICAgIH0KIAorICAgIGludDY0X3QgdHJhbnNhY3Rp
b25JRCgpIHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JRDsgfQorCiBwcml2YXRlOgotICAgIElEQkJh
Y2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqKTsK
KyAgICBJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVsREIoaW50NjRfdCB0cmFuc2FjdGlv
bklELCBJREJCYWNraW5nU3RvcmVMZXZlbERCKik7CiAKLSAgICBJREJCYWNraW5nU3RvcmVJbnRl
cmZhY2UqIG1fYmFja2luZ1N0b3JlOworICAgIGludDY0X3QgbV90cmFuc2FjdGlvbklEOworICAg
IElEQkJhY2tpbmdTdG9yZUxldmVsREIqIG1fYmFja2luZ1N0b3JlOwogICAgIFJlZlB0cjxMZXZl
bERCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZl
bERCLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2Vy
dmVyQ29ubmVjdGlvbkxldmVsREIuY3BwCmluZGV4IDZiYzE0OTYuLjI5M2U4NmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29u
bmVjdGlvbkxldmVsREIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuY3BwCkBAIC0yOSwxMSArMjksMTMg
QEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICNpZiBVU0UoTEVWRUxEQikKIAotI2lu
Y2x1ZGUgIklEQkJhY2tpbmdTdG9yZUludGVyZmFjZS5oIgorI2luY2x1ZGUgIklEQkJhY2tpbmdT
dG9yZUxldmVsREIuaCIKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxldmVs
REIuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUlEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxE
QihJREJCYWNraW5nU3RvcmVJbnRlcmZhY2UqIGJhY2tpbmdTdG9yZSkKK0lEQlNlcnZlckNvbm5l
Y3Rpb25MZXZlbERCOjpJREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQihJREJCYWNraW5nU3RvcmVM
ZXZlbERCKiBiYWNraW5nU3RvcmUpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUp
CiAgICAgLCBtX2Nsb3NlZChmYWxzZSkKIHsKQEAgLTQ4LDYgKzUwLDE0IEBAIElEQkJhY2tpbmdT
dG9yZUludGVyZmFjZSogSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmRlcHJlY2F0ZWRCYWNr
aW5nU3RvcmUoKQogICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS5nZXQoKTsKIH0KIAorSURCQmFj
a2luZ1N0b3JlVHJhbnNhY3Rpb25JbnRlcmZhY2UqIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERC
OjpkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklE
KQoreworICAgIGlmICghbV9iYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBtX2JhY2tpbmdTdG9yZS0+ZGVwcmVjYXRlZEJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uKHRy
YW5zYWN0aW9uSUQpOworfQorCisKIGJvb2wgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6Omlz
Q2xvc2VkKCkKIHsKICAgICByZXR1cm4gbV9jbG9zZWQ7CkBAIC03NSw2ICs4NSw2MCBAQCB2b2lk
IElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpjbG9zZSgpCiAgICAgbV9jbG9zZWQgPSB0cnVl
OwogfQogCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpvcGVuVHJhbnNhY3Rpb24o
aW50NjRfdCB0cmFuc2FjdGlvbklELCBjb25zdCBIYXNoU2V0PGludDY0X3Q+JiwgSW5kZXhlZERC
OjpUcmFuc2FjdGlvbk1vZGUsIEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykK
K3sKKyAgICBpZiAoIW1fYmFja2luZ1N0b3JlKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
W3N1Y2Nlc3NDYWxsYmFja10oKSB7CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soZmFsc2Up
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYmFja2luZ1N0
b3JlLT5lc3RhYmxpc2hCYWNraW5nU3RvcmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvbklEKTsKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJhY2tdKCkgeworICAgICAgICBzdWNjZXNz
Q2FsbGJhY2sodHJ1ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxl
dmVsREI6OmJlZ2luVHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0
aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKQoreworICAgIFJlZlB0cjxJREJCYWNraW5n
U3RvcmVUcmFuc2FjdGlvbkxldmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFu
c2FjdGlvbnMuZ2V0KHRyYW5zYWN0aW9uSUQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisK
KyAgICB0cmFuc2FjdGlvbi0+YmVnaW4oKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRp
b25DYWxsYmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OmNvbW1p
dFRyYW5zYWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgQm9vbENhbGxiYWNrRnVuY3Rpb24g
c3VjY2Vzc0NhbGxiYWNrKQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSUQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICBib29sIHJlc3Vs
dCA9IHRyYW5zYWN0aW9uLT5jb21taXQoKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNz
Q2FsbGJhY2ssIHJlc3VsdF0oKSB7CisgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayhyZXN1bHQpOwor
ICAgIH0pOworfQorCit2b2lkIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCOjpyZXNldFRyYW5z
YWN0aW9uKGludDY0X3QgdHJhbnNhY3Rpb25JRCwgc3RkOjpmdW5jdGlvbjx2b2lkKCk+IGNvbXBs
ZXRpb25DYWxsYmFjaykKK3sKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlVHJhbnNhY3Rpb25M
ZXZlbERCPiB0cmFuc2FjdGlvbiA9IG1fYmFja2luZ1N0b3JlVHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklEKTsKKyAgICBBU1NFUlQodHJhbnNhY3Rpb24pOworCisgICAgdHJhbnNhY3Rpb24t
PnJlc2V0VHJhbnNhY3Rpb24oKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25DYWxs
YmFjayk7Cit9CisKK3ZvaWQgSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREI6OnJvbGxiYWNrVHJh
bnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1bmN0aW9uPHZvaWQoKT4gY29t
cGxldGlvbkNhbGxiYWNrKQoreworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlv
bkxldmVsREI+IHRyYW5zYWN0aW9uID0gbV9iYWNraW5nU3RvcmVUcmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSUQpOworICAgIEFTU0VSVCh0cmFuc2FjdGlvbik7CisKKyAgICB0cmFuc2FjdGlv
bi0+cm9sbGJhY2soKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKGNvbXBsZXRpb25DYWxsYmFjayk7
Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKExFVkVMREIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9sZXZlbGRiL0lE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9sZXZlbGRiL0lEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCLmgKaW5kZXggOTgxOGJhZS4u
ZGYwZGZlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvbGV2
ZWxkYi9JREJTZXJ2ZXJDb25uZWN0aW9uTGV2ZWxEQi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL2xldmVsZGIvSURCU2VydmVyQ29ubmVjdGlvbkxldmVsREIuaApAQCAt
MzMsMjAgKzMzLDIyIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSURCQmFja2lu
Z1N0b3JlSW50ZXJmYWNlOworY2xhc3MgSURCQmFja2luZ1N0b3JlTGV2ZWxEQjsKK2NsYXNzIElE
QkJhY2tpbmdTdG9yZVRyYW5zYWN0aW9uTGV2ZWxEQjsKIAogY2xhc3MgSURCU2VydmVyQ29ubmVj
dGlvbkxldmVsREIgRklOQUwgOiBwdWJsaWMgSURCU2VydmVyQ29ubmVjdGlvbiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCU2VydmVyQ29ubmVjdGlvbj4gY3JlYXRlKElEQkJh
Y2tpbmdTdG9yZUludGVyZmFjZSogYmFja2luZ1N0b3JlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQlNlcnZlckNvbm5lY3Rpb24+IGNyZWF0ZShJREJCYWNraW5nU3RvcmVMZXZlbERCKiBiYWNr
aW5nU3RvcmUpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQlNlcnZlckNv
bm5lY3Rpb25MZXZlbERCKGJhY2tpbmdTdG9yZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfklE
QlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKCk7CiAKLSAgICAvLyBGSVhNRTogRm9yIG5vdywgc2Vy
dmVyIGNvbm5lY3Rpb24gcHJvdmlkZXMgYSBzeW5jaHJvbm91cyBhY2Nlc3NvciB0byB0aGUgaW4t
cHJvY2VzcyBiYWNraW5nIHN0b3JlLgorICAgIC8vIEZJWE1FOiBGb3Igbm93LCBzZXJ2ZXIgY29u
bmVjdGlvbiBwcm92aWRlcyBhIHN5bmNocm9ub3VzIGFjY2Vzc29yIHRvIHRoZSBpbi1wcm9jZXNz
IGJhY2tpbmcgc3RvcmUgb2JqZWN0cy4KICAgICAvLyBUaGlzIGlzIHRlbXBvcmFyeSBhbmQgd2ls
bCBiZSByZW1vdmVkIHNvb24uCiAgICAgdmlydHVhbCBJREJCYWNraW5nU3RvcmVJbnRlcmZhY2Uq
IGRlcHJlY2F0ZWRCYWNraW5nU3RvcmUoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIElEQkJhY2tp
bmdTdG9yZVRyYW5zYWN0aW9uSW50ZXJmYWNlKiBkZXByZWNhdGVkQmFja2luZ1N0b3JlVHJhbnNh
Y3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklEKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9v
bCBpc0Nsb3NlZCgpIE9WRVJSSURFOwogCkBAIC01NSwxMCArNTcsMTkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBTdHJpbmcmIG5hbWUsIEJvb2xDYWxs
YmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lk
IGNsb3NlKCkgT1ZFUlJJREU7CiAKKyAgICAvLyBUcmFuc2FjdGlvbi1sZXZlbCBvcGVyYXRpb25z
CisgICAgdmlydHVhbCB2b2lkIG9wZW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQs
IGNvbnN0IEhhc2hTZXQ8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCBJbmRleGVkREI6OlRyYW5z
YWN0aW9uTW9kZSwgQm9vbENhbGxiYWNrRnVuY3Rpb24gc3VjY2Vzc0NhbGxiYWNrKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5UcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9u
SUQsIHN0ZDo6ZnVuY3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOwor
ICAgIHZpcnR1YWwgdm9pZCBjb21taXRUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQs
IEJvb2xDYWxsYmFja0Z1bmN0aW9uIHN1Y2Nlc3NDYWxsYmFjaykgT1ZFUlJJREU7CisgICAgdmly
dHVhbCB2b2lkIHJlc2V0VHJhbnNhY3Rpb24oaW50NjRfdCB0cmFuc2FjdGlvbklELCBzdGQ6OmZ1
bmN0aW9uPHZvaWQoKT4gY29tcGxldGlvbkNhbGxiYWNrKSBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IHZvaWQgcm9sbGJhY2tUcmFuc2FjdGlvbihpbnQ2NF90IHRyYW5zYWN0aW9uSUQsIHN0ZDo6ZnVu
Y3Rpb248dm9pZCgpPiBjb21wbGV0aW9uQ2FsbGJhY2spIE9WRVJSSURFOworCiBwcml2YXRlOgot
ICAgIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUludGVyZmFjZSop
OworICAgIElEQlNlcnZlckNvbm5lY3Rpb25MZXZlbERCKElEQkJhY2tpbmdTdG9yZUxldmVsREIq
KTsKKworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmVMZXZlbERCPiBtX2JhY2tpbmdTdG9yZTsK
KyAgICBIYXNoTWFwPGludDY0X3QsIFJlZlB0cjxJREJCYWNraW5nU3RvcmVUcmFuc2FjdGlvbkxl
dmVsREI+PiBtX2JhY2tpbmdTdG9yZVRyYW5zYWN0aW9uczsKIAotICAgIFJlZlB0cjxJREJCYWNr
aW5nU3RvcmVJbnRlcmZhY2U+IG1fYmFja2luZ1N0b3JlOwogICAgIGJvb2wgbV9jbG9zZWQ7CiB9
OwogCg==
</data>
<flag name="review"
          id="239776"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>