<?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>57827</bug_id>
          
          <creation_ts>2011-04-05 04:33:48 -0700</creation_ts>
          <short_desc>IndexedDB: Introduce skeleton for LevelDB backend</short_desc>
          <delta_ts>2011-04-11 08:57:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>andreip</cc>
    
    <cc>dgrogan</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>379443</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-05 04:33:48 -0700</bug_when>
    <thetext>IndexedDB: Introduce skeleton for LevelDB backend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379449</commentid>
    <comment_count>1</comment_count>
      <attachid>88202</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-05 04:54:40 -0700</bug_when>
    <thetext>Created attachment 88202
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379450</commentid>
    <comment_count>2</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-05 04:57:16 -0700</bug_when>
    <thetext>This adds an empty implementation of the LevelDB backend, and makes all necessary changes to the interfaces around it.

It&apos;s basically https://bugs.webkit.org/show_bug.cgi?id=57372 with the guts ripped out; I think it will be easier to land in pieces like this.

Andrei: can you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379626</commentid>
    <comment_count>3</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-05 09:20:34 -0700</bug_when>
    <thetext>&gt; Source/WebCore/storage/IDBBackingStore.h:56
&gt; +    class ObjectStoreRecordHandle : public RefCounted&lt;IDBBackingStore&gt; {

&quot;Handle&quot; seems like the wrong concept for this: this isn&apos;t a handle to a resource or something like that, it&apos;s just a row identifier. Maybe just call it RecordIdentifier? Also, why is this deriving from RefCounted&lt;IDBBackingStore&gt;?

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:428
&gt; +    SQLiteRecordHandle(int64_t id) : m_id(id) {}

space between { } ?

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:-473
&gt; -    ASSERT_UNUSED(ok, ok);

Umm, why delete all this? Now your method doesn&apos;t do anything anymore.

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:523
&gt; +        RefPtr&lt;SQLiteRecordHandle&gt; recordHandle = adoptRef(new SQLiteRecordHandle(objectStoreDataId));

I don&apos;t think you should do this? Why not add a create() factory method to SQLiteRecordHandle?

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:595
&gt; +    SQLiteStatement query(m_db, &quot;DELETE FROM IndexData WHERE objectStoreDataId = ? AND indexId = ?&quot;);

This change seems unrelated? Was there a problem here before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379693</commentid>
    <comment_count>4</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-05 10:04:18 -0700</bug_when>
    <thetext>Thank you very much for the feedback.

(In reply to comment #3)
&gt; &gt; Source/WebCore/storage/IDBBackingStore.h:56
&gt; &gt; +    class ObjectStoreRecordHandle : public RefCounted&lt;IDBBackingStore&gt; {
&gt; 
&gt; &quot;Handle&quot; seems like the wrong concept for this: this isn&apos;t a handle to a resource or something like that, it&apos;s just a row identifier. Maybe just call it RecordIdentifier?
Sounds good. Done.

&gt; Also, why is this deriving from RefCounted&lt;IDBBackingStore&gt;?
Oops, that&apos;s not intentional :) Fixed.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:428
&gt; &gt; +    SQLiteRecordHandle(int64_t id) : m_id(id) {}
&gt; 
&gt; space between { } ?
Done.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:-473
&gt; &gt; -    ASSERT_UNUSED(ok, ok);
&gt; 
&gt; Umm, why delete all this? Now your method doesn&apos;t do anything anymore.
The method still deletes the object store data, it just doesn&apos;t delete any index data.

Index data is deleted in deleteIndexDataForRecord(), which I&apos;ve added a call to in IDBObjectStoreBackendImpl::deleteFunction.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:523
&gt; &gt; +        RefPtr&lt;SQLiteRecordHandle&gt; recordHandle = adoptRef(new SQLiteRecordHandle(objectStoreDataId));
&gt; 
&gt; I don&apos;t think you should do this? Why not add a create() factory method to SQLiteRecordHandle?
You&apos;re right. Done.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:595
&gt; &gt; +    SQLiteStatement query(m_db, &quot;DELETE FROM IndexData WHERE objectStoreDataId = ? AND indexId = ?&quot;);
&gt; 
&gt; This change seems unrelated? Was there a problem here before?

The semantics of the function is changing from deleting all index data for a particular record (which is not practical in the LevelDB backend) to deleting index data for a record from a specific index.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>379694</commentid>
    <comment_count>5</comment_count>
      <attachid>88265</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-05 10:04:56 -0700</bug_when>
    <thetext>Created attachment 88265
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380410</commentid>
    <comment_count>6</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-06 08:42:04 -0700</bug_when>
    <thetext>Thanks Hans. One more comment:

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:33
&gt; +#include &lt;leveldb/db.h&gt;

Just checking: can we actually do this here? Looking at SQLite, we have a wrapper that lives in platform/sql. In general, code that depends on various third-party libraries should probably live in platform?

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.h:36
&gt; +class DB;

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>380441</commentid>
    <comment_count>7</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-06 09:03:08 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Thanks Hans. One more comment:
&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:33
&gt; &gt; +#include &lt;leveldb/db.h&gt;
&gt; 
&gt; Just checking: can we actually do this here? Looking at SQLite, we have a wrapper that lives in platform/sql. In general, code that depends on various third-party libraries should probably live in platform?

There seems to be examples of both wrapped and non-wrapped libraries.

I was looking at libxml, which is used in e.g. Source/WebCore/dom/XMLDocumentParser.h, where the library is included and used directly.

I can see a point in wrapping the library to make the interface more WebKit-like if it were to be used widely within the code, but since it&apos;s just us using it at the moment, and it&apos;s localized to these two files, I would prefer to use the library directly.

We can always wrap it later if we decide that&apos;s better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381321</commentid>
    <comment_count>8</comment_count>
    <who name="Andrei Popescu">andreip</who>
    <bug_when>2011-04-07 07:26:38 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382262</commentid>
    <comment_count>9</comment_count>
      <attachid>88265</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-08 08:56:00 -0700</bug_when>
    <thetext>Comment on attachment 88265
Patch

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

&gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2
&gt; +# Copyright (C) 2011 Google Inc. All rights reserved.

Probably no need to update the year here.

&gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:73
&gt; +void IDBFactoryBackendImpl::open(const String&amp; name, PassRefPtr&lt;IDBCallbacks&gt; callbacks, PassRefPtr&lt;SecurityOrigin&gt; securityOrigin, Frame*, const String&amp; dataDir, int64_t maximumSize, BackingStoreType backingStoreType)

look into having BackingStoreType in RuntimeEnabledFlags instead?

&gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:177
&gt; +PassRefPtr&lt;IDBBackingStore::Cursor&gt; IDBLevelDBBackingStore::openIndexKeyCursor(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKeyRange* range, IDBCursor::Direction direction)

we&apos;ll probably get warnings about un-used parameters on some compilers

&gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:232
&gt; +    RefPtr&lt;IDBBackingStore::ObjectStoreRecordIdentifier&gt; recordIdentifier;

instead of passing reference to RefPtr, just pass in the raw pointer and write to it. We&apos;ll need to have an &quot;invalid&quot; state for ObjectStoreRecordIdentifier.

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:462
&gt; +void IDBSQLiteBackingStore::clearObjectStore(int64_t databaseId, int64_t objectStoreId)

warnings? ignore parameters that we ignore

&gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:525
&gt; +        if (!callback.callback(*recordIdentifier, value))

Pass const ptr to RecordIdentifier rather than reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382360</commentid>
    <comment_count>10</comment_count>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2011-04-08 10:34:08 -0700</bug_when>
    <thetext>Whose comments are these?

(In reply to comment #9)
&gt; (From update of attachment 88265 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88265&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2
&gt; &gt; +# Copyright (C) 2011 Google Inc. All rights reserved.
&gt; 
&gt; Probably no need to update the year here.
&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:73
&gt; &gt; +void IDBFactoryBackendImpl::open(const String&amp; name, PassRefPtr&lt;IDBCallbacks&gt; callbacks, PassRefPtr&lt;SecurityOrigin&gt; securityOrigin, Frame*, const String&amp; dataDir, int64_t maximumSize, BackingStoreType backingStoreType)
&gt; 
&gt; look into having BackingStoreType in RuntimeEnabledFlags instead?
&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:177
&gt; &gt; +PassRefPtr&lt;IDBBackingStore::Cursor&gt; IDBLevelDBBackingStore::openIndexKeyCursor(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKeyRange* range, IDBCursor::Direction direction)
&gt; 
&gt; we&apos;ll probably get warnings about un-used parameters on some compilers
&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:232
&gt; &gt; +    RefPtr&lt;IDBBackingStore::ObjectStoreRecordIdentifier&gt; recordIdentifier;
&gt; 
&gt; instead of passing reference to RefPtr, just pass in the raw pointer and write to it. We&apos;ll need to have an &quot;invalid&quot; state for ObjectStoreRecordIdentifier.
&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:462
&gt; &gt; +void IDBSQLiteBackingStore::clearObjectStore(int64_t databaseId, int64_t objectStoreId)
&gt; 
&gt; warnings? ignore parameters that we ignore
&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:525
&gt; &gt; +        if (!callback.callback(*recordIdentifier, value))
&gt; 
&gt; Pass const ptr to RecordIdentifier rather than reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383062</commentid>
    <comment_count>11</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-11 01:04:47 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Whose comments are these?

They&apos;re Steve Block&apos;s piped through me. Sorry for the confusion :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383110</commentid>
    <comment_count>12</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-11 05:03:23 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 88265 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88265&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/WebCore.gyp/WebCore.gyp:2
&gt; &gt; +# Copyright (C) 2011 Google Inc. All rights reserved.
&gt; 
&gt; Probably no need to update the year here.
Reverted.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBFactoryBackendImpl.cpp:73
&gt; &gt; +void IDBFactoryBackendImpl::open(const String&amp; name, PassRefPtr&lt;IDBCallbacks&gt; callbacks, PassRefPtr&lt;SecurityOrigin&gt; securityOrigin, Frame*, const String&amp; dataDir, int64_t maximumSize, BackingStoreType backingStoreType)
&gt; 
&gt; look into having BackingStoreType in RuntimeEnabledFlags instead?

Hmm, I&apos;d rather not do that in this patch. It would require a two-sided patch, so if we want to do it, I think it&apos;s better with a separate patch.

Also, we haven&apos;t quite figured out how we want to test using the different back-ends from DumpRenderTree. Maybe being able to choose back-end like this, rather than just setting the RuntimeEnabledFlags, will help.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBLevelDBBackingStore.cpp:177
&gt; &gt; +PassRefPtr&lt;IDBBackingStore::Cursor&gt; IDBLevelDBBackingStore::openIndexKeyCursor(int64_t databaseId, int64_t objectStoreId, int64_t indexId, const IDBKeyRange* range, IDBCursor::Direction direction)
&gt; 
&gt; we&apos;ll probably get warnings about un-used parameters on some compilers
Done. I&apos;ve just stripped the parameter names.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBObjectStoreBackendImpl.cpp:232
&gt; &gt; +    RefPtr&lt;IDBBackingStore::ObjectStoreRecordIdentifier&gt; recordIdentifier;
&gt; 
&gt; instead of passing reference to RefPtr, just pass in the raw pointer and write to it. We&apos;ll need to have an &quot;invalid&quot; state for ObjectStoreRecordIdentifier.
Done.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:462
&gt; &gt; +void IDBSQLiteBackingStore::clearObjectStore(int64_t databaseId, int64_t objectStoreId)
&gt; 
&gt; warnings? ignore parameters that we ignore
Done.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBSQLiteBackingStore.cpp:525
&gt; &gt; +        if (!callback.callback(*recordIdentifier, value))
&gt; 
&gt; Pass const ptr to RecordIdentifier rather than reference.
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383111</commentid>
    <comment_count>13</comment_count>
      <attachid>88991</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-11 05:03:55 -0700</bug_when>
    <thetext>Created attachment 88991
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383154</commentid>
    <comment_count>14</comment_count>
      <attachid>88991</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-04-11 07:19:41 -0700</bug_when>
    <thetext>Comment on attachment 88991
Patch

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

Please file a bug to track looking into the use of RuntimeEnabledFeatures for the backend type, to avoid passing the type param right through the call stack.

&gt; Source/WebCore/storage/IDBBackingStore.h:61
&gt; +    virtual PassRefPtr&lt;ObjectStoreRecordIdentifier&gt; invalidRecordIdentifier() = 0;

I think this method should probably be named &apos;createInvalidRecordIdentifier&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383188</commentid>
    <comment_count>15</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-11 08:52:12 -0700</bug_when>
    <thetext>Thanks for the review, Steve.

(In reply to comment #14)
&gt; (From update of attachment 88991 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=88991&amp;action=review
&gt; 
&gt; Please file a bug to track looking into the use of RuntimeEnabledFeatures for the backend type, to avoid passing the type param right through the call stack.
Filed Bug 58237.

&gt; 
&gt; &gt; Source/WebCore/storage/IDBBackingStore.h:61
&gt; &gt; +    virtual PassRefPtr&lt;ObjectStoreRecordIdentifier&gt; invalidRecordIdentifier() = 0;
&gt; 
&gt; I think this method should probably be named &apos;createInvalidRecordIdentifier&apos;
Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383192</commentid>
    <comment_count>16</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2011-04-11 08:57:11 -0700</bug_when>
    <thetext>Committed r83443: &lt;http://trac.webkit.org/changeset/83443&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88202</attachid>
            <date>2011-04-05 04:54:40 -0700</date>
            <delta_ts>2011-04-05 10:04:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57827-20110405125437.patch</filename>
            <type>text/plain</type>
            <size>83466</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZDgzNTI2NzBjZmE2NmMzYjg1OThjMGM1MmVkNmE1NTQ3MGNhNDc1Li4y
NzhiYzU1ODE1M2ZjOTA5ZTJiY2Y0NDc2YTQwMTQ1Yjc5NGVlNmI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTEzIEBACisyMDExLTA0LTA1ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5k
ZXhlZERCOiBJbnRyb2R1Y2Ugc2tlbGV0b24gZm9yIExldmVsREIgYmFja2VuZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4MjcKKworICAgICAgICBO
byBuZXcgdGVzdHM6IG5vIG5ldyBmdW5jdGlvbmFsaXR5ICh5ZXQpLgorCisgICAgICAgICogV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICAgICBBZGQgZGVwZW5kZW5jeSBvbiBsZXZl
bGRiIHdoZW4gRU5BQkxFX0xFVkVMREI9MSBpbiBmZWF0dXJlX2RlZmluZXMuCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAgICAgQWRkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBzdG9y
YWdlL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZEhhbmRsZTo6fk9iamVjdFN0b3JlUmVjb3JkSGFuZGxlKToKKyAg
ICAgICAgICAgIEludHJvZHVjZSBhYnN0cmFjdCB0eXBlIE9iamVjdFN0b3JlUmVjb3JkSGFuZGxl
LiBUaGUgU1FMaXRlCisgICAgICAgICAgICBiYWNrZW5kIHVzZXMgaW50ZWdlcnMgdG8gcmVmZXIg
dG8gYSBzcGVjaWZpYyByb3cgaW4gYSB0YWJsZSwgYnV0CisgICAgICAgICAgICB0aGUgTGV2ZWxE
QiBiYWNrZW5kIHdpbGwgdXNlIHNvbWV0aGluZyBlbHNlLgorICAgICAgICAqIHN0b3JhZ2UvSURC
RGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0
b3Jlcyk6CisgICAgICAgICAgICBDaGFuZ2UgZnVuY3Rpb25zIHRvIHBhc3MgYWxvbmcgdGhlIGRh
dGFiYXNlIGlkIGZvciBvcGVyYXRpb25zIHRoYXQKKyAgICAgICAgICAgIGNvbmNlcm4gb2JqZWN0
IHN0b3Jlcy4gV2Ugd2FudCB0byBiZSBhYmxlIHRvIGdyb3VwIG9iamVjdCBzdG9yZXMKKyAgICAg
ICAgICAgIGlkcyBwZXIgZGF0YWJhc2UuCisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFj
a2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpv
cGVuKToKKyAgICAgICAgICAgIERlY2lkZSB3aGljaCBiYWNrZW5kIHRvIHVzZSBiYXNlZCBvbiB0
aGUgYmFja2luZ1N0b3JlVHlwZQorICAgICAgICAgICAgcGFyYW1ldGVyLgorICAgICAgICAqIHN0
b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRl
eEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKToKKyAgICAgICAgKiBzdG9yYWdl
L0lEQkluZGV4QmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2Vu
ZEltcGw6OmNyZWF0ZSk6CisgICAgICAgICAgICBQYXNzIGRhdGFiYXNlIGFuZCBvYmplY3Qgc3Rv
cmUgaWQgdG8gYmFja2VuZCBmdW5jdGlvbnMgY29uY2VybmluZworICAgICAgICAgICAgaW5kZXhl
cy4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklE
QkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9y
ZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRP
YmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVj
dFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldEluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
cHV0SW5kZXhEYXRhRm9yUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3Rv
cmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Bl
bkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERC
QmFja2luZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAgICAgQWRkIGFuIGVtcHR5IGltcGxlbWVu
dGF0aW9uIG9mIHRoZSBMZXZlbERCIGJhY2tlbmQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgICAgIEtlZXAgdHJhY2sgb2YgZGF0YWJh
c2UgaWQsIHVzZSB0aGUgbmV3IFJlY29yZEhhbmRsZS4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJu
YWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZUluZGV4KToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4SW50ZXJuYWwp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5k
ZXhJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpvcGVuQ3Vyc29ySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6bG9hZEluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2VuQXV0b0luY3JlbWVudEtleSk6CisgICAgICAgICogc3RvcmFnZS9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZGF0YWJhc2VJZCk6CisgICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVC
YWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpvcGVuKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y3JlYXRl
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpk
ZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U1FMaXRlQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJl
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpm
b3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpnZXRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tp
bmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5n
U3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxp
dGVCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RT
dG9yZUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9w
ZW5JbmRleEtleUN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3Rv
cmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgICogc3RvcmFnZS9JREJTUUxpdGVCYWNraW5n
U3RvcmUuaDoKKwogMjAxMS0wNC0wNSAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKaW5kZXggZTdiMWViYTZjMzQ3ZjFhOTlkY2MxNDlhMTgyN2Q5
ZDcyYzc2YWYzZi4uYjQ4YmEyNmY4YjljMjIzOTZhNjQ2NGM1ODM3MDAzMjMxNmVjYmU1MSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTEsNSArMSw1IEBACiAjCi0j
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTExODQsNiArMTE4NCwxNCBAQAogICAgICAg
ICAgICAgXSwKICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWyciRU5BQkxFX0xF
VkVMREI9MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdkZXBlbmRlbmNpZXMn
OiBbCisgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9sZXZlbGRi
L2xldmVsZGIuZ3lwOmxldmVsZGInLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ2V4cG9ydF9k
ZXBlbmRlbnRfc2V0dGluZ3MnOiBbCisgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90
aGlyZF9wYXJ0eS9sZXZlbGRiL2xldmVsZGIuZ3lwOmxldmVsZGInLAorICAgICAgICAgIF0sCisg
ICAgICAgIH1dLAogICAgICAgXSwKICAgICB9LAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBi
NTE1NjkyNDM1YWM5YWUxZWRiZTdmZjQ3ZGE3Njc2MTM1MWIyN2NkLi5iNDliNDYyMjY5YWVjNWU5
ODUxYzZkZmRlNTM3OTRjMWFjNGFjY2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01NDU1LDYgKzU0
NTUsOCBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAog
ICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwJywKICAgICAgICAgICAgICdzdG9y
YWdlL0lEQktleVJhbmdlLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZS5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZS5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJh
Y2tpbmdTdG9yZS5oCmluZGV4IDI5NTIzYTJmYjVjOTZiNzE3ZTM0NDY1NjgwMjhjNjhkNjU5MzFl
NDAuLjEwZmNmODUxOTZhOTA1NmVhMmFmYzk3NmEyMDJkYTFlODkxOGM3NjggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtNTAsMzAgKzUwLDM1IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxp
ZFJvd0lkKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3Qg
ZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZv
dW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZv
dW5kQXV0b0luY3JlbWVudEZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1
dG9JbmNyZW1lbnQsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RT
dG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVj
b3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1
YWwgYm9vbCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGludDY0X3QmIHJvd0lkLCBib29sIGludmFs
aWRSb3dJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3Qg
b2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJl
Y29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpID0g
MDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IG9i
amVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9y
ZShpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGludDY0X3QmIGZvdW5kT2Jq
ZWN0U3RvcmVEYXRhSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKworICAgIGNsYXNzIE9iamVjdFN0b3Jl
UmVjb3JkSGFuZGxlIDogcHVibGljIFJlZkNvdW50ZWQ8SURCQmFja2luZ1N0b3JlPiB7CisgICAg
cHVibGljOgorICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZEhhbmRsZSgpIHt9IAor
ICAgIH07CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUs
IFJlZlB0cjxPYmplY3RTdG9yZVJlY29yZEhhbmRsZT4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVj
b3JkSGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIG5leHRBdXRvSW5jcmVtZW50TnVt
YmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIFJlZlB0cjxPYmplY3RTdG9yZVJl
Y29yZEhhbmRsZT4mIGZvdW5kUmVjb3JkSGFuZGxlKSA9IDA7CiAKICAgICBjbGFzcyBPYmplY3RT
dG9yZVJlY29yZENhbGxiYWNrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgICB2aXJ0dWFsIGJvb2wg
Y2FsbGJhY2soaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkg
PSAwOworICAgICAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IE9iamVjdFN0b3JlUmVj
b3JkSGFuZGxlJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAwOwogICAgICAgICAgdmlydHVhbCB+
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjaygpIHt9OwogICAgIH07Ci0gICAgdmlydHVhbCBib29s
IGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0
b3JlUmVjb3JkQ2FsbGJhY2smKSA9IDA7CisgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2Jq
ZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRl
eGVzKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCkgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGluZGV4SWQpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCkgPSAw
OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFBy
aW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKLSAg
ICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2
NF90JiBpbmRleElkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYs
IGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSGFuZGxlJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBk
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRIYW5kbGUm
KSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5JikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlW
aWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0
c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogCiAgICAgY2xhc3MgQ3Vyc29yIDogcHVi
bGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7CiAgICAgcHVibGljOgpAQCAtODEsMTQgKzg2LDE0IEBA
IHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBpbnQ2NF90
IG9iamVjdFN0b3JlRGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2Jq
ZWN0U3RvcmVSZWNvcmRIYW5kbGU+IG9iamVjdFN0b3JlUmVjb3JkSGFuZGxlKCkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwg
fkN1cnNvcigpIHt9OwogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJh
bmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24p
ID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3Io
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlS
YW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CiAKICAgICBjbGFzcyBUcmFuc2FjdGlv
biA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zYWN0aW9uPiB7CiAgICAgcHVibGljOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
OTRlMzA1YjFiYzAzMjkwYWFjMjcwNWVlZTA0M2MxOTMxMWM3OWVlMi4uOGZlOTcxYTI3YzkxMTI0
NzU5Y2ZmMzIwM2RlOGRjZDg1NDVmNjg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxET01T
dHJpbmdMaXN0PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29u
c3QKICAgICByZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiAgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
YXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5t
b2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtMTA2LDcgKzEw
Niw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiAgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbmFt
ZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRl
KG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2lkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50
KTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKIAogICAgIFJlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CkBAIC0xMjUsNyArMTI1
LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVy
bmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLAogewogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZDsKIAotICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9y
ZShvYmplY3RTdG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9y
ZS0+YXV0b0luY3JlbWVudCgpLCBkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmVJZCkpIHsKKyAg
ICBpZiAoIWRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0YWJh
c2UtPmlkKCksIG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9i
amVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CiAgICAgICAgIHRy
YW5zYWN0aW9uLT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU4LDcgKzE1
OCw3IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5k
SW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewotICAgIGRhdGFiYXNlLT5t
X2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmlkKCkpOworICAg
IGRhdGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlk
KCksIG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNr
RXZlbnRzKCk7CiB9CiAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OmxvYWRPYmplY3RTdG9yZXMoKQogICAgIEFTU0VSVChhdXRvSW5jcmVtZW50RmxhZ3Mu
c2l6ZSgpID09IGlkcy5zaXplKCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMu
c2l6ZSgpOyBpKyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lc1tpXSwgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBpZHNbaV0s
IG5hbWVzW2ldLCBrZXlQYXRoc1tpXSwgYXV0b0luY3JlbWVudEZsYWdzW2ldKSk7CisgICAgICAg
IG1fb2JqZWN0U3RvcmVzLnNldChuYW1lc1tpXSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBtX2lkLCBpZHNbaV0sIG5hbWVzW2ldLCBrZXlQ
YXRoc1tpXSwgYXV0b0luY3JlbWVudEZsYWdzW2ldKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ2MWU5MzBi
YzE3NjA0YjkzOTU1MWZmZGNiZGE0NThmNDczY2ZlMTcuLjQ3NjhiM2UxMGY5NzI2YjliZWIxYWQz
YTk1NzE4YTg1NDE2ZWU3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
RmFjdG9yeUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZh
Y3RvcnlCYWNrZW5kSW1wbC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSURCU1FMaXRlQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rp
b25Db29yZGluYXRvci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC02OSw3ICs3
MCw3IEBAIHZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJCYWNraW5nU3RvcmUo
Y29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyCiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVt
b3ZlKHVuaXF1ZUlkZW50aWZpZXIpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6
b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNv
bnN0IFN0cmluZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlw
ZSkKK3ZvaWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9y
aWdpbj4gc2VjdXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2
NF90IG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCiB7CiAg
ICAgU3RyaW5nIGZpbGVJZGVudGlmaWVyID0gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRp
ZmllcigpOwogICAgIFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gZmlsZUlkZW50aWZpZXIgKyAi
QCIgKyBuYW1lOwpAQCAtODYsNyArODcsMTIgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6
Om9wZW4oY29uc3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAg
ICBpZiAoaXQyICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQogICAgICAgICBiYWNraW5nU3Rv
cmUgPSBpdDItPnNlY29uZDsKICAgICBlbHNlIHsKLSAgICAgICAgYmFja2luZ1N0b3JlID0gSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBt
YXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworICAgICAgICBpZiAoYmFja2luZ1N0
b3JlVHlwZSA9PSBEZWZhdWx0QmFja2luZ1N0b3JlKQorICAgICAgICAgICAgYmFja2luZ1N0b3Jl
ID0gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRh
RGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2lmIEVOQUJMRShMRVZF
TERCKQorICAgICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5n
U3RvcmUpCisgICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlk
ZW50aWZpZXIsIHRoaXMpOworI2VuZGlmCiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAg
ICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAg
ICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURC
SW5kZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFj
a2VuZEltcGwuY3BwCmluZGV4IDYyZTUzNjRiZWY4MjJkYjk4Y2MwZGU1NTQwMDVlZTMzZDIwMWY1
ZTQuLjM4Zjk1ZjFhMTJhZGEwMDYwYTdmMTNkNGIzYmQzYzdjNjgzZDBmZTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw4ICs0MCwxMCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFj
a2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgaWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgYm9vbCB1bmlxdWUpCitJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJ
bXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNv
bnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlQmFja2VuZCwgaW50NjRf
dCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKKyAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICwgbV9vYmplY3RT
dG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQogICAgICwgbV9pZChpZCkKICAgICAsIG1f
bmFtZShuYW1lKQogICAgICwgbV9zdG9yZU5hbWUoc3RvcmVOYW1lKQpAQCAtNTAsOCArNTIsMTAg
QEAgSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdAogewogfQogCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJ
REJJbmRleEJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlKQorSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1w
bChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0
aCwgYm9vbCB1bmlxdWUpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAg
LCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9i
amVjdFN0b3JlQmFja2VuZCkKICAgICAsIG1faWQoSW52YWxpZElkKQogICAgICwgbV9uYW1lKG5h
bWUpCiAgICAgLCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCkBAIC03MiwxMCArNzYsMTAgQEAgdm9p
ZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHIKIAogICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkgewogICAgIGNh
c2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6Ci0gICAgICAgIGJh
Y2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vy
c29yKGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2lu
Z1N0b3JlQ3Vyc29yID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3Io
aW5kZXgtPm1fZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBp
bmRleC0+aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJh
Y2tpbmdTdG9yZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29y
KGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2luZ1N0
b3JlQ3Vyc29yID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoaW5kZXgt
Pm1fZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+
aWQoKSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3I6CiAgICAgY2FzZSBJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZToKQEAgLTEyMCwxNCAr
MTI0LDE0IEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kCiB7CiAgICAgLy8gRklYTUU6IFNwbGl0
IGdldEludGVybmFsIGludG8gdHdvIGZ1bmN0aW9ucywgZ2V0dGluZyByaWQgb2ZmIHxnZXRPYmpl
Y3R8LgogICAgIGlmIChnZXRPYmplY3QpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgt
Pm1fYmFja2luZ1N0b3JlLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+aWQoKSwgKmtleSk7Cisg
ICAgICAgIFN0cmluZyB2YWx1ZSA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0Vmlh
SW5kZXgoaW5kZXgtPm1fZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5p
ZCgpLCBpbmRleC0+aWQoKSwgKmtleSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewog
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBp
biB0aGUgaW5kZXguIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdp
cmUodmFsdWUpKTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1
bHQgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+
aWQoKSwgKmtleSk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5t
X2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5tX2RhdGFiYXNlSWQs
IGluZGV4LT5tX29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwog
ICAgICAgICBpZiAoIWtleVJlc3VsdCkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5kZXguIikpOwogICAgICAgICAgICAg
cmV0dXJuOwpAQCAtMTU5LDcgKzE2Myw3IEBAIGJvb2wgSURCSW5kZXhCYWNrZW5kSW1wbDo6YWRk
aW5nS2V5QWxsb3dlZChJREJLZXkqIGtleSkKICAgICBpZiAoIW1fdW5pcXVlKQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiAhbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luSW5k
ZXgobV9pZCwgKmtleSk7CisgICAgcmV0dXJuICFtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5J
bmRleChtX2RhdGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2lkLCAqa2V5
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQkluZGV4QmFja2VuZEltcGwuaAppbmRleCBlMmEwNmI4ZTA1NjQ5Mzk2OGFjNmM2MjM4NjU2
ZjZhNWNlZjZkNjBkLi4yZDQyYTA4YTE4ZTMyMmU1ZDg0YjI4ZTI5YTVkN2ZjYjIzNmI0YTExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwxMyArNDAs
MTMgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCSW5kZXhCYWNr
ZW5kSW1wbCA6IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5n
U3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJJbmRleEJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgaWQsIG5hbWUsIHN0b3JlTmFtZSwga2V5
UGF0aCwgdW5pcXVlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNr
ZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQs
IG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlKSk7CiAgICAgfQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3Rv
cmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCog
b2JqZWN0U3RvcmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3Rv
cmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwg
bmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmVCYWNrZW5kLCBuYW1lLCBzdG9yZU5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOwogICAg
IH0KICAgICB2aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbXBsKCk7CiAKQEAgLTcyLDggKzcyLDgg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXk+LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKLSAgICBJREJJbmRleEJhY2tlbmRJbXBsKElE
QkJhY2tpbmdTdG9yZSosIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOwotICAg
IElEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVu
aXF1ZSk7CisgICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90
IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKTsKKyAgICBJREJJbmRleEJhY2tlbmRJbXBsKElEQkJh
Y2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOwogCiAgICAgc3RhdGljIHZvaWQgb3Bl
bkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQg
ZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPik7CiAgICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5Piwg
Ym9vbCBnZXRPYmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CkBAIC04Miw2ICs4Miw4
IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9y
ZTsKIAorICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwqIG1fb2JqZWN0U3RvcmVCYWNrZW5kOwogICAgIGludDY0X3QgbV9pZDsKICAg
ICBTdHJpbmcgbV9uYW1lOwogICAgIFN0cmluZyBtX3N0b3JlTmFtZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc0
MGZkNjk1N2E0MTkzMDkxMTAwMDM2MWU2ZTIxODc0YjFhYTE4ODEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0w
LDAgKzEsMTk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YK
KyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkxl
dmVsREJCYWNraW5nU3RvcmUuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lm
IEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisj
aW5jbHVkZSA8bGV2ZWxkYi9kYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkxldmVs
REJCYWNraW5nU3RvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmUoU3RyaW5nIGlkZW50aWZpZXIs
IElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgbGV2ZWxkYjo6REIqIGRiKQorICAgIDog
bV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKKyAgICAs
IG1fZGIoZGIpCit7CisgICAgbV9mYWN0b3J5LT5hZGRJREJCYWNraW5nU3RvcmUoaWRlbnRpZmll
ciwgdGhpcyk7Cit9CisKK0lEQkxldmVsREJCYWNraW5nU3RvcmU6On5JREJMZXZlbERCQmFja2lu
Z1N0b3JlKCkKK3sKKyAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkJhY2tpbmdTdG9yZShtX2lkZW50
aWZpZXIpOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3BlbihTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgcGF0aEJhc2UsIGludDY0X3QgbWF4aW11bVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZUlkZW50
aWZpZXIsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCogZmFjdG9yeSkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIFN0cmluZyYgZm91bmRWZXJzaW9uLCBpbnQ2NF90JiBmb3VuZElkKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnNldElEQkRh
dGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24s
IGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJh
c2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0
b0luY3JlbWVudEZsYWdzKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTog
SW1wbGVtZW50LgorfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RT
dG9yZUlkKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50
LgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpk
ZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KK30K
KworU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtl
eSkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAg
ICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWZQdHI8T2JqZWN0
U3RvcmVSZWNvcmRIYW5kbGU+JiByZWNvcmRIYW5kbGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSGFuZGxlJiByZWNvcmRIYW5kbGUpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK2Rv
dWJsZSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gMDsKK30KKworYm9v
bCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUmVm
UHRyPE9iamVjdFN0b3JlUmVjb3JkSGFuZGxlPiYgZm91bmRSZWNvcmRIYW5kbGUpCit7CisgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmZvckVhY2hPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0
U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJv
b2w+JiBmb3VuZFVuaXF1ZUZsYWdzKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBG
SVhNRTogSW1wbGVtZW50LgorfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmNyZWF0
ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRf
dCYgaW5kZXhJZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6
IEltcGxlbWVudC4KK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRJbmRleERh
dGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SGFuZGxlJiByZWNvcmRIYW5kbGUpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9y
ZVJlY29yZEhhbmRsZSYgcmVjb3JkSGFuZGxlKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYg
a2V5KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50Lgor
ICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBy
ZXR1cm4gMDsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbklu
ZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGlu
ZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVj
dFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikK
K3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBy
ZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdl
KiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiAwOworfQorCitQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6
OkRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNh
Y3Rpb24oKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50
LgorICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjczY2Y4MTlkMWRkMzEwNGZlMzg1OGU2YjQ5NTg4N2UwYTc4ODE1MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5o
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkxldmVsREJCYWNraW5nU3RvcmVf
aAorI2RlZmluZSBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKKworI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorI2lmIEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCQmFja2luZ1N0
b3JlLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgbGV2ZWxkYiB7Citj
bGFzcyBEQjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJMZXZlbERCQmFj
a2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3Qg
U3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxl
SWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB+SURCTGV2
ZWxEQkJhY2tpbmdTdG9yZSgpOworCisgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0
X3QmIGZvdW5kSWQpOworICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwg
Ym9vbCBpbnZhbGlkUm93SWQpOworCisgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3Jlcyhp
bnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJv
b2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncyk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9i
amVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmpl
Y3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgU3RyaW5nIGdl
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlZlB0cjxPYmplY3RTdG9yZVJlY29yZEhhbmRsZT4m
KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBPYmplY3RTdG9yZVJlY29yZEhhbmRsZSYpOworICAgIHZpcnR1YWwgZG91YmxlIG5leHRBdXRv
SW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
KTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiwgUmVmUHRyPE9iamVj
dFN0b3JlUmVjb3JkSGFuZGxlPiYgZm91bmRSZWNvcmRIYW5kbGUpOworCisgICAgdmlydHVhbCBi
b29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpOworCisgICAgdmlydHVh
bCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVz
LCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1
ZUZsYWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCk7CisgICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBp
bmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZEhhbmRsZSYpOwor
ICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0
U3RvcmVSZWNvcmRIYW5kbGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RWaWFJbmRl
eChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQ
cmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
LCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNh
Y3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7CisKK3ByaXZhdGU6CisgICAgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZShTdHJpbmcgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiwgbGV2
ZWxkYjo6REIqKTsKKworICAgIFN0cmluZyBtX2lkZW50aWZpZXI7CisgICAgUmVmUHRyPElEQkZh
Y3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93blB0cjxsZXZlbGRiOjpEQj4gbV9k
YjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCisjZW5kaWYgLy8gRU5BQkxFKExF
VkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisKKyNlbmRpZiAvLyBJ
REJMZXZlbERCQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IDA0MzNlZDc1NzhhMmNkY2I2YzQ4
NmM5NWY4MTIyMWM2ZGYyOWRjYjkuLjI1OTFjNzc5NGMxNzIxMmE4MmUwMzMxODYzZGY1NmRiYzIy
ZTg5MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC01MCw4ICs1MCw5IEBAIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6On5J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCkKIHsKIH0KIAotSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAgICA6IG1fYmFja2luZ1N0b3JlKGJh
Y2tpbmdTdG9yZSkKKyAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICwgbV9pZChp
ZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQYXRoKGtleVBhdGgpCkBAIC02MSw4
ICs2Miw5IEBAIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvCiAgICAgbG9hZEluZGV4ZXMoKTsKIH0K
IAotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJ
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAgICA6IG1fYmFja2luZ1N0b3JlKGJh
Y2tpbmdTdG9yZSkKKyAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQogICAgICwgbV9pZChJ
bnZhbGlkSWQpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fa2V5UGF0aChrZXlQYXRoKQpA
QCAtOTAsNyArOTIsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldChQYXNz
UmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElEQkNhbAogCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewot
ICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2Jq
ZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksICprZXkpOworICAgIFN0cmluZyB3aXJl
RGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQo
b2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXkpOwogICAg
IGlmICh3aXJlRGF0YS5pc051bGwoKSkgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhT
ZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogICAgICAgICByZXR1cm47
CkBAIC0yMjcsOCArMjI5LDggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICAgICAgaW5k
ZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsKICAgICB9CiAKLSAgICBpbnQ2NF90IGRhdGFS
b3dJZCA9IEludmFsaWRJZDsKLSAgICBib29sIGlzRXhpc3RpbmdWYWx1ZSA9IG9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+aWQo
KSwgKmtleSwgZGF0YVJvd0lkKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RT
dG9yZVJlY29yZEhhbmRsZT4gcmVjb3JkSGFuZGxlOworICAgIGJvb2wgaXNFeGlzdGluZ1ZhbHVl
ID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9i
amVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRI
YW5kbGUpOwogCiAgICAgaWYgKHB1dE1vZGUgPT0gQWRkT25seSAmJiBpc0V4aXN0aW5nVmFsdWUp
IHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMg
aW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7CkBAIC0yMzcsMTQgKzIzOSw3IEBAIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8CiAKICAgICAvLyBCZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11
dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2ludCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNh
c2Ugb2YgZXJyb3IuCiAKLSAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0
T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50b1dpcmVT
dHJpbmcoKSwgZGF0YVJvd0lkLCBkYXRhUm93SWQgPT0gSW52YWxpZElkKSkgewotICAgICAgICAv
LyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZl
IGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCi0gICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsK
LSAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXhEYXRhRm9y
UmVjb3JkKGRhdGFSb3dJZCkpIHsKKyAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9y
ZS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50b1dpcmVTdHJpbmcoKSwgcmVjb3JkSGFuZGxlKSkg
ewogICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBk
b2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCiAgICAg
ICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJh
c2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3JpdGluZyBkYXRhIHRvIHN0YWJsZSBz
dG9yYWdlLiIpKTsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CkBAIC0yNTUsNyArMjUw
LDE1IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAgICAgZm9yIChJbmRleE1hcDo6aXRlcmF0
b3IgaXQgPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3Jl
LT5tX2luZGV4ZXMuZW5kKCk7ICsraXQsICsraSkgewogICAgICAgICBpZiAoIWl0LT5zZWNvbmQt
Pmhhc1ZhbGlkSWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5kZXggb2JqZWN0
IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0YWJhc2UgeWV0
LgotICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0SW5kZXhEYXRh
Rm9yUmVjb3JkKGl0LT5zZWNvbmQtPmlkKCksICppbmRleEtleXNbaV0sIGRhdGFSb3dJZCkpIHsK
KworICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXhE
YXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgp
LCBpdC0+c2Vjb25kLT5pZCgpLCAqcmVjb3JkSGFuZGxlKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBl
cnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgorICAgICAgICAgICAgY2FsbGJhY2tz
LT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikpOwor
ICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0
SW5kZXhEYXRhRm9yUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
LT5pZCgpLCBpdC0+c2Vjb25kLT5pZCgpLCAqaW5kZXhLZXlzW2ldLCAqcmVjb3JkSGFuZGxlKSkg
ewogICAgICAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRp
b24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgog
ICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8g
c3RhYmxlIHN0b3JhZ2UuIikpOwogICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CkBA
IC0yODMsMTMgKzI4NiwyMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZQogCiB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tz
KQogewotICAgIGludDY0X3QgaWQ7Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3Rv
cmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmlkKCksICprZXksIGlkKSkg
eworICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSGFuZGxlPiBy
ZWNvcmRIYW5kbGU7CisgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmtleUV4
aXN0c0luT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
PmlkKCksICprZXksIHJlY29yZEhhbmRsZSkpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksIGlkKTsKKyAgICBmb3IgKElu
ZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoIWl0
LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5k
ZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0
YWJhc2UgeWV0LgorCisgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5k
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksICpyZWNvcmRIYW5kbGUpKQorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgb2JqZWN0U3RvcmUtPm1fYmFj
a2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9yZS0+bV9kYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgKnJlY29yZEhhbmRsZSk7CiAgICAgY2FsbGJhY2tzLT5v
blN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpudWxsVmFsdWUoKSk7CiB9CiAKQEAgLTMw
OSwyNiArMzIwLDI4IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCCiAKIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKLSAgICBvYmplY3RTdG9yZS0+bV9iYWNr
aW5nU3RvcmUtPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmlkKCkpOworICAgIG9iamVj
dFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZShvYmplY3RTdG9yZS0+bV9k
YXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3Mo
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKIH0KIAogbmFtZXNwYWNl
IHsKIGNsYXNzIFBvcHVsYXRlSW5kZXhDYWxsYmFjayA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmU6
Ok9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2sgewogcHVibGljOgotICAgIFBvcHVsYXRlSW5kZXhD
YWxsYmFjayhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgY29uc3QgU3RyaW5nJiBpbmRl
eEtleVBhdGgsIGludDY0X3QgaW5kZXhJZCkKKyAgICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2soSURC
QmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGNvbnN0IFN0cmluZyYgaW5kZXhLZXlQYXRoLCBp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
KQogICAgICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKICAgICAgICAgLCBtX2lu
ZGV4S2V5UGF0aChpbmRleEtleVBhdGgpCisgICAgICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNl
SWQpCisgICAgICAgICwgbV9vYmplY3RTdG9yZUlkKG9iamVjdFN0b3JlSWQpCiAgICAgICAgICwg
bV9pbmRleElkKGluZGV4SWQpCiAgICAgewogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBjYWxs
YmFjayhpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkLCBjb25zdCBTdHJpbmcmIHZhbHVlKQorICAg
IHZpcnR1YWwgYm9vbCBjYWxsYmFjayhjb25zdCBJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3Jl
UmVjb3JkSGFuZGxlJiByZWNvcmRIYW5kbGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgewog
ICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBvYmplY3RWYWx1ZSA9IFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUpOwogICAgICAgICBSZWZQdHI8
SURCS2V5PiBpbmRleEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgob2JqZWN0VmFsdWUuZ2V0KCks
IG1faW5kZXhLZXlQYXRoKTsKIAotICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnB1dEluZGV4
RGF0YUZvclJlY29yZChtX2luZGV4SWQsICppbmRleEtleSwgb2JqZWN0U3RvcmVEYXRhSWQpKQor
ICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnB1dEluZGV4RGF0YUZvclJlY29yZChtX2RhdGFi
YXNlSWQsIG1fb2JqZWN0U3RvcmVJZCwgbV9pbmRleElkLCAqaW5kZXhLZXksIHJlY29yZEhhbmRs
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC0zMzcsMTQgKzM1MCwxNiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIElEQkJhY2tpbmdTdG9y
ZSYgbV9iYWNraW5nU3RvcmU7CiAgICAgY29uc3QgU3RyaW5nJiBtX2luZGV4S2V5UGF0aDsKKyAg
ICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKKyAgICBpbnQ2NF90IG1fb2JqZWN0U3RvcmVJZDsKICAg
ICBpbnQ2NF90IG1faW5kZXhJZDsKIH07CiB9CiAKLXN0YXRpYyBib29sIHBvcHVsYXRlSW5kZXgo
SURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBTdHJpbmcmIGluZGV4S2V5UGF0aCkKK3N0YXRpYyBib29sIHBv
cHVsYXRlSW5kZXgoSURCQmFja2luZ1N0b3JlJiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmlu
ZyYgaW5kZXhLZXlQYXRoKQogewotICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhi
YWNraW5nU3RvcmUsIGluZGV4S2V5UGF0aCwgaW5kZXhJZCk7Ci0gICAgaWYgKCFiYWNraW5nU3Rv
cmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrKSkKKyAg
ICBQb3B1bGF0ZUluZGV4Q2FsbGJhY2sgY2FsbGJhY2soYmFja2luZ1N0b3JlLCBpbmRleEtleVBh
dGgsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQpOworICAgIGlmICghYmFja2lu
Z1N0b3JlLmZvckVhY2hPYmplY3RTdG9yZVJlY29yZChkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlk
LCBjYWxsYmFjaykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTM2MCw3ICszNzUsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29ucwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBJ
REJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG5hbWUsIG1f
bmFtZSwga2V5UGF0aCwgdW5pcXVlKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCks
IG1fZGF0YWJhc2VJZCwgdGhpcywgbmFtZSwgbV9uYW1lLCBrZXlQYXRoLCB1bmlxdWUpOwogICAg
IEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUpOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKQEAgLTM3OCwxNCArMzkzLDE0IEBA
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGVJbmRleChjb25zCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmNyZWF0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlPiB0cmFuc2FjdGlvbikKIHsKICAgICBpbnQ2NF90IGlkOwotICAgIGlmICghb2JqZWN0
U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleChvYmplY3RTdG9yZS0+bV9pZCwgaW5k
ZXgtPm5hbWUoKSwgaW5kZXgtPmtleVBhdGgoKSwgaW5kZXgtPnVuaXF1ZSgpLCBpZCkpIHsKKyAg
ICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlSW5kZXgob2JqZWN0U3Rv
cmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5uYW1lKCksIGluZGV4
LT5rZXlQYXRoKCksIGluZGV4LT51bmlxdWUoKSwgaWQpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaW5kZXgtPnNldElkKGlk
KTsKIAotICAgIGlmICghcG9wdWxhdGVJbmRleCgqb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LCBvYmplY3RTdG9yZS0+bV9pZCwgaWQsIGluZGV4LT5rZXlQYXRoKCkpKSB7CisgICAgaWYgKCFw
b3B1bGF0ZUluZGV4KCpvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlLT5t
X2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5tX2lkLCBpZCwgaW5kZXgtPmtleVBhdGgoKSkpIHsK
ICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC00MjgsNyArNDQzLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmEKIAogdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7Ci0gICAgb2JqZWN0U3Rv
cmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChpbmRleC0+aWQoKSk7CisgICAgb2JqZWN0
U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleChvYmplY3RTdG9yZS0+bV9kYXRhYmFz
ZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCkpOwogICAgIHRyYW5zYWN0aW9uLT5k
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIApAQCAtNDQ2LDcgKzQ2MSw3IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBQYXNzCiB7CiAgICAgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uID0g
c3RhdGljX2Nhc3Q8SURCQ3Vyc29yOjpEaXJlY3Rpb24+KHRtcERpcmVjdGlvbik7CiAKLSAgICBS
ZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVj
dFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3Jl
LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICBSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpDdXJzb3I+IGJhY2tpbmdTdG9yZUN1cnNvciA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZS0+b3Blbk9iamVjdFN0b3JlQ3Vyc29yKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9i
amVjdFN0b3JlLT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICBpZiAoIWJhY2tp
bmdTdG9yZUN1cnNvcikgewogICAgICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVk
U2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDYyLDE0ICs0
NzcsMTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpsb2FkSW5kZXhlcygpCiAg
ICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CiAgICAgVmVjdG9yPFN0cmluZz4ga2V5UGF0aHM7CiAg
ICAgVmVjdG9yPGJvb2w+IHVuaXF1ZUZsYWdzOwotICAgIG1fYmFja2luZ1N0b3JlLT5nZXRJbmRl
eGVzKG1faWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCB1bmlxdWVGbGFncyk7CisgICAgbV9iYWNr
aW5nU3RvcmUtPmdldEluZGV4ZXMobV9kYXRhYmFzZUlkLCBtX2lkLCBpZHMsIG5hbWVzLCBrZXlQ
YXRocywgdW5pcXVlRmxhZ3MpOwogCiAgICAgQVNTRVJUKG5hbWVzLnNpemUoKSA9PSBpZHMuc2l6
ZSgpKTsKICAgICBBU1NFUlQoa2V5UGF0aHMuc2l6ZSgpID09IGlkcy5zaXplKCkpOwogICAgIEFT
U0VSVCh1bmlxdWVGbGFncy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CiAKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGlkcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9pbmRleGVzLnNldChuYW1l
c1tpXSwgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBp
ZHNbaV0sIG5hbWVzW2ldLCBtX25hbWUsIGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSkpOwor
ICAgICAgICBtX2luZGV4ZXMuc2V0KG5hbWVzW2ldLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVh
dGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1fZGF0YWJhc2VJZCwgdGhpcywgaWRzW2ldLCBuYW1l
c1tpXSwgbV9uYW1lLCBrZXlQYXRoc1tpXSwgdW5pcXVlRmxhZ3NbaV0pKTsKIH0KIAogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZW1vdmVJbmRleEZyb21NYXAoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgpCkBAIC00OTAsNyAr
NTA1LDcgQEAgUGFzc1JlZlB0cjxJREJLZXk+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
bkF1dG9JbmNyZW1lbnRLZXkoKQogICAgIGlmIChtX2F1dG9JbmNyZW1lbnROdW1iZXIgPiAwKQog
ICAgICAgICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdW1iZXIobV9hdXRvSW5jcmVtZW50TnVtYmVy
KyspOwogCi0gICAgbV9hdXRvSW5jcmVtZW50TnVtYmVyID0gc3RhdGljX2Nhc3Q8aW50PihtX2Jh
Y2tpbmdTdG9yZS0+bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaWQoKSkpOworICAgIG1fYXV0b0lu
Y3JlbWVudE51bWJlciA9IHN0YXRpY19jYXN0PGludD4obV9iYWNraW5nU3RvcmUtPm5leHRBdXRv
SW5jcmVtZW50TnVtYmVyKG1fZGF0YWJhc2VJZCwgaWQoKSkpOwogICAgIHJldHVybiBJREJLZXk6
OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggNDQ3
OWQxZTBkNzRiZjA2ODA5MjQ3ZDhmMmQ1ZmNiNmI2Nzc2YjZlMC4uNmJmOTVjZDFmMWU3YTVmODk3
Y2NjNWFlMzU4NWM0MDI0YmVkMDEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDIsMTMgKzQyLDEzIEBAIGNsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CiAKIGNsYXNzIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwgOiBwdWJs
aWMgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0
b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gY3JlYXRlKElEQkJhY2tpbmdTdG9yZSogYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoYmFj
a2luZ1N0b3JlLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoYmFja2luZ1N0b3Jl
LCBkYXRhYmFzZUlkLCBpZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwogICAgIH0K
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gY3JlYXRlKElEQkJhY2tpbmdTdG9yZSogYmFj
a2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBu
YW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG5h
bWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbCgpOwogCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1faWQ7CiAgICAgfQogICAgIHZvaWQgc2V0SWQoaW50NjRfdCBpZCkgeyBtX2lk
ID0gaWQ7IH0KKyAgICBpbnQ2NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFi
YXNlSWQ7IH0KIAogICAgIHZpcnR1YWwgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25h
bWU7IH0KICAgICB2aXJ0dWFsIFN0cmluZyBrZXlQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9rZXlQ
YXRoOyB9CkBAIC03Nyw4ICs3OCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0
aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAogcHJpdmF0ZToKLSAgICBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwotICAgIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBi
b29sIGF1dG9JbmNyZW1lbnQpOworICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFj
a2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsKIAogICAgIHZvaWQgbG9hZElu
ZGV4ZXMoKTsKICAgICBQYXNzUmVmUHRyPElEQktleT4gZ2VuQXV0b0luY3JlbWVudEtleSgpOwpA
QCAtOTksNiArMTAwLDcgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOwogCisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CiAgICAgaW50NjRf
dCBtX2lkOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fa2V5UGF0aDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAppbmRleCBl
NDNiN2EzNjA2OTUxZTNkMmNhNjUzMGU0NmMxZjlhMmRmMmY1MWNkLi45ZWYwYzI0MGYzMmMzZmU4
ZThiOGNhMWUxNTQxYWM3Zjg5OWE3MTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCkBAIC0xNzMsNyArMTczLDcgQEAgUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbihTZWN1cml0eU9y
aWdpbiogc2VjdXJpdHkKICAgICBpZiAoIXBhdGhCYXNlLmlzRW1wdHkoKSkgewogICAgICAgICBp
ZiAoIW1ha2VBbGxEaXJlY3RvcmllcyhwYXRoQmFzZSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBJcyB0aGVyZSBhbnkgb3RoZXIgdGhpbmcgd2UgY291bGQgcG9zc2libHkgZG8gdG8gcmVjb3Zl
ciBhdCB0aGlzIHBvaW50PyBJZiBzbywgZG8gaXQgcmF0aGVyIHRoYW4ganVzdCBlcnJvcmluZyBv
dXQuCi0gICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZWQgdG8gY3JlYXRlIExvY2FsU3RvcmFn
ZSBkYXRhYmFzZSBwYXRoICVzIiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byBjcmVhdGUgSW5kZXhlZCBEQiBkYXRhYmFzZSBwYXRoICVz
IiwgcGF0aEJhc2UudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQogICAgICAgICBwYXRoID0gcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGhCYXNlLCBz
ZWN1cml0eU9yaWdpbi0+ZGF0YWJhc2VJZGVudGlmaWVyKCkgKyAiLmluZGV4ZWRkYiIpOwpAQCAt
MjYzLDcgKzI2Myw3IEBAIHZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9y
ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mCiAgICAgfQogfQogCi1ib29s
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpCitib29sIElEQlNRTGl0
ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50
LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50
IHF1ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZXMgKG5hbWUsIGtleVBhdGgsIGRv
QXV0b0luY3JlbWVudCwgZGF0YWJhc2VJZCkgVkFMVUVTICg/LCA/LCA/LCA/KSIpOwogICAgIGlm
IChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCkBAIC0yOTEsNyArMjkxLDcgQEAgc3Rh
dGljIHZvaWQgZG9EZWxldGUoU1FMaXRlRGF0YWJhc2UmIGRiLCBjb25zdCBjaGFyKiBzcWwsIGlu
dDY0X3QgaWQpCiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVy
cm9yIGhhbmRsaW5nLgogfQogCi12b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKQordm9pZCBJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkKQogewogICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMg
V0hFUkUgaWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7CiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVU
RSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0
b3JlSWQpOwpAQCAtMzczLDcgKzM3Myw3IEBAIHN0YXRpYyBTdHJpbmcgdXBwZXJDdXJzb3JXaGVy
ZUZyYWdtZW50KGNvbnN0IElEQktleSYga2V5LCBTdHJpbmcgY29tcGFyaXNvbk9wZXJhCiAgICAg
cmV0dXJuICIiOwogfQogCi1TdHJpbmcgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQorU3Ry
aW5nIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5KQogewog
ICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNUIGtleVN0cmluZywga2V5RGF0
ZSwga2V5TnVtYmVyLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPyBBTkQgIiArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSkpOwogICAgIGJvb2wgb2sgPSBx
dWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CkBAIC00MjIsNTggKzQyMiw2MyBAQCBzdGF0
aWMgdm9pZCBiaW5kS2V5VG9RdWVyeVdpdGhOdWxscyhTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBp
bnQgYmFzZUNvbHVtbiwgY29ucwogICAgIH0KIH0KIAotYm9vbCBJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIGludDY0X3QmIHJvd0lkLCBib29sIGludmFs
aWRSb3dJZCkKK25hbWVzcGFjZSB7CitjbGFzcyBTUUxpdGVSZWNvcmRIYW5kbGUgOiBwdWJsaWMg
SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZEhhbmRsZSB7CitwdWJsaWM6CisgICAg
U1FMaXRlUmVjb3JkSGFuZGxlKGludDY0X3QgaWQpIDogbV9pZChpZCkge30KKyAgICBpbnQ2NF90
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1faWQ7
Cit9OworfQorCitib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRIYW5k
bGU+JiByZWNvcmRIYW5kbGUpCiB7Ci0gICAgU3RyaW5nIHNxbCA9ICFpbnZhbGlkUm93SWQgPyAi
VVBEQVRFIE9iamVjdFN0b3JlRGF0YSBTRVQga2V5U3RyaW5nID0gPywga2V5RGF0ZSA9ID8sIGtl
eU51bWJlciA9ID8sIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhIChrZXlTdHJpbmcsIGtl
eURhdGUsIGtleU51bWJlciwgdmFsdWUsIG9iamVjdFN0b3JlSWQpIFZBTFVFUyAoPywgPywgPywg
PywgPykiOworICAgIFNRTGl0ZVJlY29yZEhhbmRsZSogc3FsaXRlUmVjb3JkSGFuZGxlID0gc3Rh
dGljX2Nhc3Q8U1FMaXRlUmVjb3JkSGFuZGxlKj4ocmVjb3JkSGFuZGxlLmdldCgpKTsKKworICAg
IFN0cmluZyBzcWwgPSBzcWxpdGVSZWNvcmRIYW5kbGUgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0
YSBTRVQga2V5U3RyaW5nID0gPywga2V5RGF0ZSA9ID8sIGtleU51bWJlciA9ID8sIHZhbHVlID0g
PyBXSEVSRSBpZCA9ID8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJ
TlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVy
LCB2YWx1ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CiAgICAgU1FM
aXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAh
PSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYmluZEtleVRvUXVl
cnlXaXRoTnVsbHMocXVlcnksIDEsIGtleSk7CiAgICAgcXVlcnkuYmluZEJsb2IoNCwgdmFsdWUp
OwotICAgIGlmICghaW52YWxpZFJvd0lkKQotICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgcm93
SWQpOworICAgIGlmIChzcWxpdGVSZWNvcmRIYW5kbGUpCisgICAgICAgIHF1ZXJ5LmJpbmRJbnQ2
NCg1LCBzcWxpdGVSZWNvcmRIYW5kbGUtPmlkKCkpOwogICAgIGVsc2UKICAgICAgICAgcXVlcnku
YmluZEludDY0KDUsIG9iamVjdFN0b3JlSWQpOwogCiAgICAgaWYgKHF1ZXJ5LnN0ZXAoKSAhPSBT
UUxSZXN1bHREb25lKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoaW52YWxpZFJv
d0lkKQotICAgICAgICByb3dJZCA9IG1fZGIubGFzdEluc2VydFJvd0lEKCk7CisgICAgaWYgKCFz
cWxpdGVSZWNvcmRIYW5kbGUpCisgICAgICAgIHJlY29yZEhhbmRsZSA9IGFkb3B0UmVmKG5ldyBT
UUxpdGVSZWNvcmRIYW5kbGUobV9kYi5sYXN0SW5zZXJ0Um93SUQoKSkpOwogCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3Jl
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjbGVh
ck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQog
ewogICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0
U3RvcmVEYXRhSWQgSU4gKFNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPykiLCBvYmplY3RTdG9yZUlkKTsKICAgICBkb0RlbGV0ZShtX2RiLCAiREVM
RVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0
U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKQordm9pZCBJREJT
UUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZEhhbmRs
ZSYgcmVjb3JkSGFuZGxlKQogeworICAgIGNvbnN0IFNRTGl0ZVJlY29yZEhhbmRsZSYgc3FsaXRl
UmVjb3JkSGFuZGxlID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSGFuZGxlJj4ocmVj
b3JkSGFuZGxlKTsKKwogICAgIFNRTGl0ZVN0YXRlbWVudCBvc1F1ZXJ5KG1fZGIsICJERUxFVEUg
RlJPTSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/Iik7CiAgICAgYm9vbCBvayA9IG9zUXVl
cnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsg
Ly8gRklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAotICAgIG9zUXVlcnkuYmluZEludDY0
KDEsIG9iamVjdFN0b3JlRGF0YUlkKTsKKyAgICBvc1F1ZXJ5LmJpbmRJbnQ2NCgxLCBzcWxpdGVS
ZWNvcmRIYW5kbGUuaWQoKSk7CiAKICAgICBvayA9IG9zUXVlcnkuc3RlcCgpID09IFNRTFJlc3Vs
dERvbmU7CiAgICAgQVNTRVJUX1VOVVNFRChvaywgb2spOwotCi0gICAgU1FMaXRlU3RhdGVtZW50
IGluZGV4UXVlcnkobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9y
ZURhdGFJZCA9ID8iKTsKLSAgICBvayA9IGluZGV4UXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3Vs
dE9rOwotICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklYTUU6IEJldHRlciBlcnJvciBo
YW5kbGluZz8KLQotICAgIGluZGV4UXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlRGF0YUlk
KTsKLQotICAgIG9rID0gaW5kZXhRdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKLSAgICBB
U1NFUlRfVU5VU0VEKG9rLCBvayk7CiB9CiAKLWRvdWJsZSBJREJTUUxpdGVCYWNraW5nU3RvcmU6
Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK2RvdWJsZSBJ
REJTUUxpdGVCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBx
dWVyeShtX2RiLCAiU0VMRUNUIG1heChrZXlOdW1iZXIpICsgMSBGUk9NIE9iamVjdFN0b3JlRGF0
YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyBBTkQga2V5U3RyaW5nIElTIE5VTEwgQU5EIGtleURh
dGUgSVMgTlVMTCIpOwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0
T2s7CkBAIC00ODcsNyArNDkyLDcgQEAgZG91YmxlIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6bmV4
dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIHJldHVybiBx
dWVyeS5nZXRDb2x1bW5Eb3VibGUoMCk7CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3Jl
OjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5JiBrZXksIGludDY0X3QmIGZvdW5kT2JqZWN0U3RvcmVEYXRhSWQpCitib29sIElEQlNRTGl0
ZUJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIFJlZlB0cjxPYmplY3RT
dG9yZVJlY29yZEhhbmRsZT4mIGZvdW5kUmVjb3JkSGFuZGxlKQogewogICAgIFN0cmluZyBzcWwg
PSBTdHJpbmcoIlNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPyBBTkQgIikgKyB3aGVyZVN5bnRheEZvcktleShrZXkpOwogICAgIFNRTGl0ZVN0YXRl
bWVudCBxdWVyeShtX2RiLCBzcWwpOwpAQCAtNTAwLDExICs1MDUsMTEgQEAgYm9vbCBJREJTUUxp
dGVCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdAogICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3VuZE9iamVjdFN0b3JlRGF0YUlkID0gcXVlcnkuZ2V0
Q29sdW1uSW50NjQoMCk7CisgICAgZm91bmRSZWNvcmRIYW5kbGUgPSBhZG9wdFJlZihuZXcgU1FM
aXRlUmVjb3JkSGFuZGxlKHF1ZXJ5LmdldENvbHVtbkludDY0KDApKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJiBj
YWxsYmFjaykKK2Jvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpmb3JFYWNoT2JqZWN0U3RvcmVS
ZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0
b3JlUmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVy
eShtX2RiLCAiU0VMRUNUIGlkLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPyIpOwogICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2sp
CkBAIC01MTUsMTQgKzUyMCwxNSBAQCBib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Zm9yRWFj
aE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZQogICAgIHdoaWxl
IChxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CiAgICAgICAgIGludDY0X3Qgb2JqZWN0
U3RvcmVEYXRhSWQgPSBxdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgU3RyaW5nIHZh
bHVlID0gcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpOwotICAgICAgICBpZiAoIWNhbGxi
YWNrLmNhbGxiYWNrKG9iamVjdFN0b3JlRGF0YUlkLCB2YWx1ZSkpCisgICAgICAgIFJlZlB0cjxT
UUxpdGVSZWNvcmRIYW5kbGU+IHJlY29yZEhhbmRsZSA9IGFkb3B0UmVmKG5ldyBTUUxpdGVSZWNv
cmRIYW5kbGUob2JqZWN0U3RvcmVEYXRhSWQpKTsKKyAgICAgICAgaWYgKCFjYWxsYmFjay5jYWxs
YmFjaygqcmVjb3JkSGFuZGxlLCB2YWx1ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpnZXRJbmRleGVzKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3Vu
ZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtl
eVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MpCit2b2lkIElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5k
TmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5k
VW5pcXVlRmxhZ3MpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1Qg
aWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlIEZST00gSW5kZXhlcyBXSEVSRSBvYmplY3RTdG9y
ZUlkID0gPyIpOwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7
CkBAIC01NDMsNyArNTQ5LDcgQEAgdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldEluZGV4
ZXMoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGYKICAgICB9CiB9CiAK
LWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlz
VW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKQorYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNy
ZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50
NjRfdCYgaW5kZXhJZCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIklOU0VS
VCBJTlRPIEluZGV4ZXMgKG9iamVjdFN0b3JlSWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlKSBW
QUxVRVMgKD8sID8sID8sID8pIik7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1
bHRPaykKQEAgLTU2MSwzNiArNTY3LDQxIEBAIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpj
cmVhdGVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVJbmRl
eChpbnQ2NF90IGluZGV4SWQpCit2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCkKIHsKICAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhlcyBXSEVSRSBp
ZCA9ID8iLCBpbmRleElkKTsKICAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhE
YXRhIFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXhJZCk7CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmIGtleSwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCkKK2Jvb2wgSURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNv
bnN0IE9iamVjdFN0b3JlUmVjb3JkSGFuZGxlJiByZWNvcmRIYW5kbGUpCiB7CisgICAgY29uc3Qg
U1FMaXRlUmVjb3JkSGFuZGxlJiBzcWxpdGVSZWNvcmRIYW5kbGUgPSBzdGF0aWNfY2FzdDxjb25z
dCBTUUxpdGVSZWNvcmRIYW5kbGUmPihyZWNvcmRIYW5kbGUpOworCiAgICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBJbmRleERhdGEgKGtleVN0cmluZywga2V5RGF0
ZSwga2V5TnVtYmVyLCBpbmRleElkLCBvYmplY3RTdG9yZURhdGFJZCkgVkFMVUVTICg/LCA/LCA/
LCA/LCA/KSIpOwogICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKHF1ZXJ5LCAx
LCBrZXkpOwogICAgIHF1ZXJ5LmJpbmRJbnQ2NCg0LCBpbmRleElkKTsKLSAgICBxdWVyeS5iaW5k
SW50NjQoNSwgb2JqZWN0U3RvcmVEYXRhSWQpOworICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBzcWxp
dGVSZWNvcmRIYW5kbGUuaWQoKSk7CiAKICAgICByZXR1cm4gcXVlcnkuc3RlcCgpID09IFNRTFJl
c3VsdERvbmU7CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERh
dGFGb3JSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCkKK2Jvb2wgSURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVS
ZWNvcmRIYW5kbGUmIHJlY29yZEhhbmRsZSkKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnko
bV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURhdGFJZCA9ID8i
KTsKKyAgICBjb25zdCBTUUxpdGVSZWNvcmRIYW5kbGUmIHNxbGl0ZVJlY29yZEhhbmRsZSA9IHN0
YXRpY19jYXN0PGNvbnN0IFNRTGl0ZVJlY29yZEhhbmRsZSY+KHJlY29yZEhhbmRsZSk7CisKKyAg
ICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVS
RSBvYmplY3RTdG9yZURhdGFJZCA9ID8gQU5EIGluZGV4SWQgPSA/Iik7CiAgICAgaWYgKHF1ZXJ5
LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
cXVlcnkuYmluZEludDY0KDEsIG9iamVjdFN0b3JlRGF0YUlkKTsKKyAgICBxdWVyeS5iaW5kSW50
NjQoMSwgc3FsaXRlUmVjb3JkSGFuZGxlLmlkKCkpOworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgyLCBp
bmRleElkKTsKICAgICByZXR1cm4gcXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7CiB9CiAK
LVN0cmluZyBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCitTdHJpbmcgSURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKICAgICBTdHJpbmcg
c3FsID0gU3RyaW5nKCJTRUxFQ1QgIikKICAgICAgICAgICAgICAgICAgKyAiT2JqZWN0U3RvcmVE
YXRhLnZhbHVlICIKQEAgLTYyOSw3ICs2NDAsNyBAQCBzdGF0aWMgUGFzc1JlZlB0cjxJREJLZXk+
IGtleUZyb21RdWVyeShTUUxpdGVTdGF0ZW1lbnQmIHF1ZXJ5LCBpbnQgYmFzZUNvbHVtbikKICAg
ICByZXR1cm4gSURCS2V5OjpjcmVhdGVOdWxsKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCS2V5PiBJ
REJTUUxpdGVCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYga2V5KQorUGFzc1JlZlB0cjxJREJLZXk+IElEQlNRTGl0ZUJhY2tp
bmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogewog
ICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQogICAgICAgICAgICAgICAgICArICJP
YmplY3RTdG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5RGF0ZSwgT2JqZWN0
U3RvcmVEYXRhLmtleU51bWJlciAiCkBAIC02NTEsNyArNjYyLDcgQEAgUGFzc1JlZlB0cjxJREJL
ZXk+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3Qg
aW5kZXhJZCwKICAgICByZXR1cm4gZm91bmRLZXkucmVsZWFzZSgpOwogfQogCi1ib29sIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYga2V5KQorYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CiAgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VM
RUNUIGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IEFORCAiKSArIHdoZXJlU3lu
dGF4Rm9yS2V5KGtleSk7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsIHNxbCk7CkBA
IC02ODIsNyArNjkzLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0KICAgICB2aXJ0dWFs
IFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRh
SWQoKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0
U3RvcmVSZWNvcmRIYW5kbGU+IG9iamVjdFN0b3JlUmVjb3JkSGFuZGxlKCkgPSAwOwogICAgIHZp
cnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBsb2Fk
Q3VycmVudFJvdygpID0gMDsKQEAgLTc0MSw3ICs3NTIsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBD
dXJzb3JJbXBsQ29tbW9uLgogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyByZXR1cm4gbV9j
dXJyZW50VmFsdWU7IH0KLSAgICB2aXJ0dWFsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQoKSB7
IHJldHVybiBtX2N1cnJlbnRJZDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNraW5n
U3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSGFuZGxlPiBvYmplY3RTdG9yZVJlY29yZEhhbmRsZSgp
IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxpdGVSZWNvcmRIYW5kbGUobV9jdXJyZW50SWQpKTsg
fQogICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCk7CiAgICAg
dmlydHVhbCBib29sIGN1cnJlbnRSb3dFeGlzdHMoKTsKQEAgLTc3OSw3ICs3OTAsNyBAQCBwdWJs
aWM6CiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJL
ZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5OyB9CiAgICAgdmly
dHVhbCBTdHJpbmcgdmFsdWUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gU3RyaW5n
KCk7IH0KLSAgICB2aXJ0dWFsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQoKSB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJCYWNr
aW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSGFuZGxlPiBvYmplY3RTdG9yZVJlY29yZEhhbmRs
ZSgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQ2
NF90IGluZGV4RGF0YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbG9hZEN1cnJlbnRSb3coKTsKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygp
OwpAQCAtODE3LDcgKzgyOCw3IEBAIHB1YmxpYzoKICAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3Vy
cmVudFByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1f
Y3VycmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKCkg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZEhhbmRsZT4gb2JqZWN0U3RvcmVS
ZWNvcmRIYW5kbGUoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQogICAgIHZp
cnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9CiAgICAg
dmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCk7CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRS
b3dFeGlzdHMoKTsKQEAgLTg0OSw3ICs4NjAsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6Y3Vy
cmVudFJvd0V4aXN0cygpCiAKIH0gLy8gbmFtZXNwYWNlCiAKLVBhc3NSZWZQdHI8SURCQmFja2lu
Z1N0b3JlOjpDdXJzb3I+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vy
c29yKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJD
dXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2Uq
IHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgYm9vbCBsb3dl
ckJvdW5kID0gcmFuZ2UgJiYgcmFuZ2UtPmxvd2VyKCk7CiAgICAgYm9vbCB1cHBlckJvdW5kID0g
cmFuZ2UgJiYgcmFuZ2UtPnVwcGVyKCk7CkBAIC04ODYsNyArODk3LDcgQEAgUGFzc1JlZlB0cjxJ
REJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0
U3RvcmVDdXJzb3IKICAgICByZXR1cm4gY3Vyc29yLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5k
ZXhLZXlDdXJzb3IoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpDdXJzb3I+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQog
ewogICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBJbmRleERhdGEuaWQsIEluZGV4RGF0
YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVyLCAiKQog
ICAgICAgICAgICAgICAgICArICgiT2JqZWN0U3RvcmVEYXRhLmtleVN0cmluZywgT2JqZWN0U3Rv
cmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3JlRGF0YS5rZXlOdW1iZXIgIikKQEAgLTkyNiw3ICs5
MzcsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpbgogICAgIHJldHVybiBjdXJzb3IucmVsZWFz
ZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVC
YWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktl
eVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0
cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5k
ZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24pCiB7CiAgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUIEluZGV4RGF0
YS5pZCwgSW5kZXhEYXRhLmtleVN0cmluZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4RGF0YS5r
ZXlOdW1iZXIsICIpCiAgICAgICAgICAgICAgICAgICsgKCJPYmplY3RTdG9yZURhdGEudmFsdWUs
IE9iamVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0YS5rZXlEYXRlLCBPYmpl
Y3RTdG9yZURhdGEua2V5TnVtYmVyICIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJT
UUxpdGVCYWNraW5nU3RvcmUuaAppbmRleCBmZTBjNmMxNzUxNmRlOWU0MGZhOTc4N2IxY2U1ZjBl
NjMyMGI1OWI3Li4wNjU0ODk1N2FkY2U2NWJlZmQwOTc1NjY2MzE5NTUwMGYxM2FlZWIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgKQEAgLTQx
LDI5ICs0MSwyOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0
YURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3Qm
IHJvd0lkLCBib29sIGludmFsaWRSb3dJZCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0
U3RvcmVzKGludDY0X3QgZGF0YWJhc2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kQXV0b0luY3JlbWVudEZsYWdzKTsKLSAgICB2aXJ0dWFsIGJvb2wg
Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90JiBhc3Np
Z25lZE9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShp
bnQ2NF90IG9iamVjdFN0b3JlSWQpOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3Jl
UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7Ci0gICAgdmlydHVh
bCBib29sIHB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxp
ZFJvd0lkKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IG9iamVj
dFN0b3JlSWQpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpOwotICAgIHZpcnR1
YWwgZG91YmxlIG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBpbnQ2NF90JiBmb3VuZE9iamVjdFN0b3JlRGF0YUlkKTsK
LQotICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJik7Ci0KLSAgICB2aXJ0dWFsIHZv
aWQgZ2V0SW5kZXhlcyhpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91
bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRL
ZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzKTsKLSAgICB2aXJ0dWFsIGJv
b2wgY3JlYXRlSW5kZXgoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgaW5kZXhJZCk7Ci0gICAgdmly
dHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpOwotICAgIHZpcnR1YWwgYm9vbCBkZWxl
dGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCk7Ci0gICAgdmly
dHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5k
ZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wga2V5
RXhpc3RzSW5JbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVh
bCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRf
dCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZp
cnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlZlB0cjxPYmplY3RTdG9y
ZVJlY29yZEhhbmRsZT4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZEhhbmRsZSYpOworICAgIHZpcnR1YWwg
ZG91YmxlIG5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9y
ZShpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5
JiwgUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSGFuZGxlPiYgZm91bmRSZWNvcmRIYW5kbGUpOwor
CisgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYp
OworCisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJv
b2w+JiBmb3VuZFVuaXF1ZUZsYWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5kZXgoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisgICAgdmlydHVhbCBib29sIHB1
dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RTdG9yZVJl
Y29yZEhhbmRsZSYpOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRIYW5kbGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAg
dmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5J
bmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9u
KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CiAKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMTVlOGM0YzVhNmU1ZWEzZmJkZTMzNjBlOThlMjU3MjVkNTQyMTQw
Zi4uNzI1MWYzZjRhYzc5ZWZmZmUzYjgxMzVmMDEwYmJlOGM5M2E0N2JjOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxOCBAQAogMjAxMS0wNC0wNSAgSGFucyBXZW5uYm9y
ZyAgPGhhbnNAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEluZGV4ZWREQjogSW50cm9kdWNlIHNrZWxldG9uIGZvciBMZXZlbERC
IGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTU3ODI3CisKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAgICAgICAgQWRkIEVOQUJM
RV9MRVZFTERCPTAuCisgICAgICAgICogcHVibGljL1dlYklEQkZhY3RvcnkuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViSURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgICAgICBSZW1vdmUgcHJlLXJv
bGwgb3BlbigpIGZ1bmN0aW9uLgorCisyMDExLTA0LTA1ICBIYW5zIFdlbm5ib3JnICA8aGFuc0Bj
aHJvbWl1bS5vcmc+CisKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aAogCiAgICAgICAg
IENsZWFuIHVwIEluZGV4ZWREQiBXZWJLaXQgQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVz
Lmd5cGkKaW5kZXggNzM1NGViOGU4YzE5OWM0ODg2ZGNiMjdiYWQwNTBiODk0ZDA1ZmEzNC4uY2M3
MjAwYTA4OWY3OWEzZjJkMzJlMDdkZTRmN2Y0ZTJmOTNiZTVjYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vZmVhdHVyZXMuZ3lwaQpAQCAtMSw1ICsxLDUgQEAKICMKLSMgQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAxMSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogIyAKICMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTY1LDYgKzY1LDcgQEAKICAgICAgICAgJ0VOQUJMRV9JTlBVVF9TUEVFQ0g9
MScsCiAgICAgICAgICdFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xJywKICAgICAgICAgJ0VO
QUJMRV9KU0NfTVVMVElQTEVfVEhSRUFEUz0wJywKKyAgICAgICAgJ0VOQUJMRV9MRVZFTERCPTAn
LAogICAgICAgICAnRU5BQkxFX0xJTktfUFJFRkVUQ0g9MScsCiAgICAgICAgICdFTkFCTEVfTUFU
SE1MPTAnLAogICAgICAgICAnRU5BQkxFX01FRElBX1NUQVRJU1RJQ1M9MScsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgKaW5kZXggMjk0MTRlODA1ZGFh
YzdmMzc1OWNmYWE3YzgzY2JlNWY5MzIwY2EwMC4uOTc1ODhkNThjMmNmNWMzZGQyMTE5NGYzOTkw
ZWI1NDc4MzFkOTJjZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViSURCRmFjdG9yeS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklE
QkZhY3RvcnkuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC01NywxMSArNTcsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIC8vIFRoZSBXZWJL
aXQgaW1wbGVtZW50YXRpb24gb2Ygb3BlbiBpZ25vcmVzIHRoZSBXZWJGcmFtZSogcGFyYW1ldGVy
LgotICAgIC8vIEZJWE1FOiBBc3NlcnQgbm90IHJlYWNoZWQgd2hlbiBDaHJvbWl1bSBzaWRlIGlz
IHVwZGF0ZWQuCi0gICAgdmlydHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBX
ZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdp
biwgV2ViRnJhbWUqIGZyYW1lLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxv
bmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBvcGVuKG5hbWUsIGNhbGxi
YWNrcywgb3JpZ2luLCBmcmFtZSwgZGF0YURpciwgbWF4aW11bVNpemUpOyB9Ci0KLSAgICAvLyBG
SVhNRTogUmVtb3ZlIHRoaXMgd2hlbiBDaHJvbWl1bSBzaWRlIGlzIHVwZGF0ZWQuCi0gICAgdmly
dHVhbCB2b2lkIG9wZW4oY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqIGNh
bGxiYWNrcywgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIG9yaWdpbiwgV2ViRnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6
ZSkgeyBvcGVuKG5hbWUsIGNhbGxiYWNrcywgb3JpZ2luLCBmcmFtZSwgZGF0YURpciwgbWF4aW11
bVNpemUsIERlZmF1bHRCYWNraW5nU3RvcmUpOyB9CisgICAgdmlydHVhbCB2b2lkIG9wZW4oY29u
c3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9y
aWdpbiYsIFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyLCB1bnNpZ25lZCBsb25n
IGxvbmcgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUpIHsgV0VCS0lUX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRGF0YWJhc2UoY29uc3QgV2Vi
U3RyaW5nJiBuYW1lLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYs
IFdlYkZyYW1lKiwgY29uc3QgV2ViU3RyaW5nJiBkYXRhRGlyKSB7IFdFQktJVF9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsgfQogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88265</attachid>
            <date>2011-04-05 10:04:56 -0700</date>
            <delta_ts>2011-04-11 05:03:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57827-20110405180454.patch</filename>
            <type>text/plain</type>
            <size>83993</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZDgzNTI2NzBjZmE2NmMzYjg1OThjMGM1MmVkNmE1NTQ3MGNhNDc1Li5k
YjdiNjMyMzAwNjkwZGUyN2IyNTM1OWUyMjE5NWExN2QwMzE1NGM0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTEzIEBACisyMDExLTA0LTA1ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5k
ZXhlZERCOiBJbnRyb2R1Y2Ugc2tlbGV0b24gZm9yIExldmVsREIgYmFja2VuZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc4MjcKKworICAgICAgICBO
byBuZXcgdGVzdHM6IG5vIG5ldyBmdW5jdGlvbmFsaXR5ICh5ZXQpLgorCisgICAgICAgICogV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAgICAgICBBZGQgZGVwZW5kZW5jeSBvbiBsZXZl
bGRiIHdoZW4gRU5BQkxFX0xFVkVMREI9MSBpbiBmZWF0dXJlX2RlZmluZXMuCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAgICAgQWRkIG5ldyBmaWxlcy4KKyAgICAgICAgKiBzdG9y
YWdlL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI6On5PYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIpOgorICAgICAgICAgICAgSW50cm9kdWNlIGFic3RyYWN0IHR5cGUgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyLiBUaGUgU1FMaXRlCisgICAgICAgICAgICBiYWNrZW5kIHVzZXMgaW50ZWdl
cnMgdG8gcmVmZXIgdG8gYSBzcGVjaWZpYyByb3cgaW4gYSB0YWJsZSwgYnV0CisgICAgICAgICAg
ICB0aGUgTGV2ZWxEQiBiYWNrZW5kIHdpbGwgdXNlIHNvbWV0aGluZyBlbHNlLgorICAgICAgICAq
IHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0
b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
bG9hZE9iamVjdFN0b3Jlcyk6CisgICAgICAgICAgICBDaGFuZ2UgZnVuY3Rpb25zIHRvIHBhc3Mg
YWxvbmcgdGhlIGRhdGFiYXNlIGlkIGZvciBvcGVyYXRpb25zIHRoYXQKKyAgICAgICAgICAgIGNv
bmNlcm4gb2JqZWN0IHN0b3Jlcy4gV2Ugd2FudCB0byBiZSBhYmxlIHRvIGdyb3VwIG9iamVjdCBz
dG9yZXMKKyAgICAgICAgICAgIGlkcyBwZXIgZGF0YWJhc2UuCisgICAgICAgICogc3RvcmFnZS9J
REJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJh
Y2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgICAgIERlY2lkZSB3aGljaCBiYWNrZW5kIHRvIHVz
ZSBiYXNlZCBvbiB0aGUgYmFja2luZ1N0b3JlVHlwZQorICAgICAgICAgICAgcGFyYW1ldGVyLgor
ICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKToKKyAgICAg
ICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSk6CisgICAgICAgICAgICBQYXNzIGRhdGFiYXNlIGFu
ZCBvYmplY3Qgc3RvcmUgaWQgdG8gYmFja2VuZCBmdW5jdGlvbnMgY29uY2VybmluZworICAgICAg
ICAgICAgaW5kZXhlcy4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJhc2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpzZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpn
ZXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2lu
Z1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0lu
T2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJC
YWNraW5nU3RvcmU6OmdldEluZGV4ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5Vmlh
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhp
c3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcik6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbik6CisgICAgICAgICogc3RvcmFn
ZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAgICAgQWRkIGFuIGVt
cHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBMZXZlbERCIGJhY2tlbmQuCisgICAgICAgICogc3Rv
cmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgICAgIEtlZXAgdHJh
Y2sgb2YgZGF0YWJhc2UgaWQsIHVzZSB0aGUgbmV3IFJlY29yZElkZW50aWZpZXIuCisgICAgICAg
IChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNsZWFySW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6cG9wdWxhdGVJbmRl
eCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVh
dGVJbmRleEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvckludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdlbkF1dG9JbmNyZW1lbnRLZXkpOgorICAg
ICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oOgorICAgICAgICAoV2Vi
Q29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRhdGFiYXNlSWQpOgorICAgICAgICAqIHN0
b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNR
TGl0ZUJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0
ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OnB1dE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3Jl
UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6bmV4dEF1
dG9JbmNyZW1lbnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0
b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0
ZUJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldFByaW1h
cnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6
OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0
b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRl
QmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3IpOgorICAgICAgICAqIHN0b3JhZ2Uv
SURCU1FMaXRlQmFja2luZ1N0b3JlLmg6CisKIDIwMTEtMDQtMDUgIEphbWVzIFNpbW9uc2VuICA8
c2ltb25qYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGgu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cCBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCmluZGV4IGU3YjFlYmE2YzM0N2Yx
YTk5ZGNjMTQ5YTE4MjdkOWQ3MmM3NmFmM2YuLmI0OGJhMjZmOGI5YzIyMzk2YTY0NjRjNTgzNzAw
MzIzMTZlY2JlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwL1dlYkNvcmUuZ3lwCkBAIC0x
LDUgKzEsNSBAQAogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0xMTg0LDYgKzEx
ODQsMTQgQEAKICAgICAgICAgICAgIF0sCiAgICAgICAgICAgfSwKICAgICAgICAgfV0sCisgICAg
ICAgIFsnIkVOQUJMRV9MRVZFTERCPTEiIGluIGZlYXR1cmVfZGVmaW5lcycsIHsKKyAgICAgICAg
ICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhp
cmRfcGFydHkvbGV2ZWxkYi9sZXZlbGRiLmd5cDpsZXZlbGRiJywKKyAgICAgICAgICBdLAorICAg
ICAgICAgICdleHBvcnRfZGVwZW5kZW50X3NldHRpbmdzJzogWworICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvbGV2ZWxkYi9sZXZlbGRiLmd5cDpsZXZlbGRiJywK
KyAgICAgICAgICBdLAorICAgICAgICB9XSwKICAgICAgIF0sCiAgICAgfSwKICAgICB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKaW5kZXggYjUxNTY5MjQzNWFjOWFlMWVkYmU3ZmY0N2RhNzY3NjEzNTFiMjdjZC4u
YjQ5YjQ2MjI2OWFlYzVlOTg1MWM2ZGZkZTUzNzk0YzFhYzRhY2NmYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNTQ1NSw2ICs1NDU1LDggQEAKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVBhdGhC
YWNrZW5kSW1wbC5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQktleVJhbmdlLmNwcCcsCiAg
ICAgICAgICAgICAnc3RvcmFnZS9JREJLZXlSYW5nZS5oJywKKyAgICAgICAgICAgICdzdG9yYWdl
L0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwJywKKyAgICAgICAgICAgICdzdG9yYWdlL0lEQkxl
dmVsREJCYWNraW5nU3RvcmUuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9y
ZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCT2JqZWN0U3RvcmUuaCcsCiAgICAgICAg
ICAgICAnc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaAppbmRleCAyOTUyM2EyZmI1Yzk2YjcxN2UzNDQ2
NTY4MDI4YzY4ZDY1OTMxZTQwLi4yOGJhM2RhZmI0NWQ4NjE4NTlmYmJhYjY4NDQ5Nzg0ZDU0ZDNi
ZjE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKQEAgLTUwLDMw
ICs1MCwzNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNldElEQkRhdGFiYXNlTWV0YURh
dGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZlcnNpb24sIGludDY0X3QmIHJv
d0lkLCBib29sIGludmFsaWRSb3dJZCkgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGdldE9iamVj
dFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywg
VmVjdG9yPGJvb2w+JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncykgPSAwOwotICAgIHZpcnR1YWwg
Ym9vbCBjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qm
IGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIFN0cmluZyBn
ZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYp
ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBpbnQ2NF90JiBy
b3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmpl
Y3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVs
ZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlRGF0YUlkKSA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgbmV4dEF1dG9JbmNyZW1lbnRO
dW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGtleUV4
aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBp
bnQ2NF90JiBmb3VuZE9iamVjdFN0b3JlRGF0YUlkKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWdu
ZWRPYmplY3RTdG9yZUlkKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKSA9IDA7CisKKyAgICBj
bGFzcyBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxPYmpl
Y3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwg
fk9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHt9CisgICAgfTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVmUHRyPE9iamVjdFN0b3JlUmVj
b3JkSWRlbnRpZmllcj4mKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciYpID0g
MDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBr
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiYgZm91bmRSZWNvcmRJZGVudGlmaWVyKSA9IDA7CiAKICAgICBjbGFzcyBPYmplY3RTdG9yZVJl
Y29yZENhbGxiYWNrIHsKICAgICBwdWJsaWM6Ci0gICAgICAgICB2aXJ0dWFsIGJvb2wgY2FsbGJh
Y2soaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgPSAwOwor
ICAgICAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllciYsIGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKICAgICAgICAgIHZpcnR1YWwgfk9i
amVjdFN0b3JlUmVjb3JkQ2FsbGJhY2soKSB7fTsKICAgICB9OwotICAgIHZpcnR1YWwgYm9vbCBm
b3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9y
ZVJlY29yZENhbGxiYWNrJikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVj
dFN0b3JlUmVjb3JkQ2FsbGJhY2smKSA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhl
cyhpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0
ZUluZGV4KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpID0gMDsKLSAg
ICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkKSA9IDA7Ci0gICAgdmly
dHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElE
QktleSYsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpID0gMDsK
LSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNv
bnN0IElEQktleSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmlt
YXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAg
dmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzKSA9IDA7CisgICAgdmlydHVhbCBib29sIGNyZWF0
ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRf
dCYgaW5kZXhJZCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXImKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXImKSA9IDA7CisgICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1h
cnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGtl
eUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZWlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwogCiAgICAgY2xhc3MgQ3Vyc29y
IDogcHVibGljIFJlZkNvdW50ZWQ8Q3Vyc29yPiB7CiAgICAgcHVibGljOgpAQCAtODEsMTQgKzg2
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4ga2V5KCkg
PSAwOwogICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgPSAw
OwogICAgICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBp
bnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKCkgPSAwOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpID0gMDsKICAg
ICAgICAgdmlydHVhbCB+Q3Vyc29yKCkge307CiAgICAgfTsKIAotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGludDY0X3QgaW5kZXhJZCwg
Y29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJz
b3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5J
bmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9u
KSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKIAogICAgIGNs
YXNzIFRyYW5zYWN0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8VHJhbnNhY3Rpb24+IHsKICAgICBw
dWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJ
bXBsLmNwcAppbmRleCA5NGUzMDViMWJjMDMyOTBhYWMyNzA1ZWVlMDQzYzE5MzExYzc5ZWUyLi44
ZmU5NzFhMjdjOTExMjQ3NTljZmYzMjAzZGU4ZGNkODU0NWY2ODZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtOTcsNyArOTcsNyBAQCBQ
YXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9iamVjdFN0
b3JlTmFtZXMoKSBjb25zdAogICAgIHJldHVybiBvYmplY3RTdG9yZU5hbWVzLnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+ICBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQodHJh
bnNhY3Rpb25QdHItPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwog
CkBAIC0xMDYsNyArMTA2LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+ICBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3QKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9i
amVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0
b3JlLmdldCgpLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKKyAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1faWQsIG5hbWUsIGtleVBhdGgs
IGF1dG9JbmNyZW1lbnQpOwogICAgIEFTU0VSVChvYmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUp
OwogCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsK
QEAgLTEyNSw3ICsxMjUsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9i
amVjdFN0b3JlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosCiB7CiAgICAgaW50NjRf
dCBvYmplY3RTdG9yZUlkOwogCi0gICAgaWYgKCFkYXRhYmFzZS0+bV9iYWNraW5nU3RvcmUtPmNy
ZWF0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRo
KCksIG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCksIGRhdGFiYXNlLT5pZCgpLCBvYmplY3RT
dG9yZUlkKSkgeworICAgIGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmpl
Y3RTdG9yZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPm5hbWUoKSwgb2JqZWN0U3RvcmUt
PmtleVBhdGgoKSwgb2JqZWN0U3RvcmUtPmF1dG9JbmNyZW1lbnQoKSwgb2JqZWN0U3RvcmVJZCkp
IHsKICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xNTgsNyArMTU4LDcgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW8KIAogdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
LCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24pCiB7Ci0g
ICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9y
ZS0+aWQoKSk7CisgICAgZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9y
ZShkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIHRyYW5zYWN0aW9uLT5k
aWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKIH0KIApAQCAtMjUwLDcgKzI1MCw3IEBAIHZvaWQgSURC
RGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3JlcygpCiAgICAgQVNTRVJUKGF1dG9J
bmNyZW1lbnRGbGFncy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CiAKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGlkcy5zaXplKCk7IGkrKykKLSAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG5h
bWVzW2ldLCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUu
Z2V0KCksIGlkc1tpXSwgbmFtZXNbaV0sIGtleVBhdGhzW2ldLCBhdXRvSW5jcmVtZW50RmxhZ3Nb
aV0pKTsKKyAgICAgICAgbV9vYmplY3RTdG9yZXMuc2V0KG5hbWVzW2ldLCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIG1faWQsIGlkc1tpXSwg
bmFtZXNbaV0sIGtleVBhdGhzW2ldLCBhdXRvSW5jcmVtZW50RmxhZ3NbaV0pKTsKIH0KIAogdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXAoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0
YWJhc2UsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNrZW5kSW1wbC5jcHAK
aW5kZXggNDYxZTkzMGJjMTc2MDRiOTM5NTUxZmZkY2JkYTQ1OGY0NzNjZmUxNy4uNDc2OGIzZTEw
Zjk3MjZiOWJlYjFhZDNhOTU3MThhODU0MTZlZTcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvSURCRmFjdG9yeUJhY2tlbmRJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAi
RE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEltcGwuaCIKICNp
bmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgorI2luY2x1ZGUgIklEQkxldmVsREJCYWNr
aW5nU3RvcmUuaCIKICNpbmNsdWRlICJJREJTUUxpdGVCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJJREJUcmFuc2FjdGlvbkNvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKQEAgLTY5LDcgKzcwLDcgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6OnJlbW92ZUlE
QkJhY2tpbmdTdG9yZShjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50aWZpZXIKICAgICBtX2JhY2tp
bmdTdG9yZU1hcC5yZW1vdmUodW5pcXVlSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgSURCRmFjdG9y
eUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlPcmln
aW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGltdW1TaXplLCBC
YWNraW5nU3RvcmVUeXBlKQordm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbiwgRnJhbWUqLCBjb25zdCBTdHJpbmcm
IGRhdGFEaXIsIGludDY0X3QgbWF4aW11bVNpemUsIEJhY2tpbmdTdG9yZVR5cGUgYmFja2luZ1N0
b3JlVHlwZSkKIHsKICAgICBTdHJpbmcgZmlsZUlkZW50aWZpZXIgPSBzZWN1cml0eU9yaWdpbi0+
ZGF0YWJhc2VJZGVudGlmaWVyKCk7CiAgICAgU3RyaW5nIHVuaXF1ZUlkZW50aWZpZXIgPSBmaWxl
SWRlbnRpZmllciArICJAIiArIG5hbWU7CkBAIC04Niw3ICs4NywxMiBAQCB2b2lkIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbDo6b3Blbihjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYQogICAgIGlmIChpdDIgIT0gbV9iYWNraW5nU3RvcmVNYXAuZW5kKCkpCiAgICAg
ICAgIGJhY2tpbmdTdG9yZSA9IGl0Mi0+c2Vjb25kOwogICAgIGVsc2UgewotICAgICAgICBiYWNr
aW5nU3RvcmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0
KCksIGRhdGFEaXIsIG1heGltdW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisgICAgICAg
IGlmIChiYWNraW5nU3RvcmVUeXBlID09IERlZmF1bHRCYWNraW5nU3RvcmUpCisgICAgICAgICAg
ICBiYWNraW5nU3RvcmUgPSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmln
aW4uZ2V0KCksIGRhdGFEaXIsIG1heGltdW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7Cisj
aWYgRU5BQkxFKExFVkVMREIpCisgICAgICAgIGVsc2UgaWYgKGJhY2tpbmdTdG9yZVR5cGUgPT0g
TGV2ZWxEQkJhY2tpbmdTdG9yZSkKKyAgICAgICAgICAgIGJhY2tpbmdTdG9yZSA9IElEQkxldmVs
REJCYWNraW5nU3RvcmU6Om9wZW4oc2VjdXJpdHlPcmlnaW4uZ2V0KCksIGRhdGFEaXIsIG1heGlt
dW1TaXplLCBmaWxlSWRlbnRpZmllciwgdGhpcyk7CisjZW5kaWYKICAgICAgICAgaWYgKCFiYWNr
aW5nU3RvcmUpIHsKICAgICAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiSW50ZXJuYWwg
ZXJyb3IuIikpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKaW5kZXggNjJlNTM2NGJlZjgyMmRiOThjYzBkZTU1
NDAwNWVlMzNkMjAxZjVlNC4uMzhmOTVmMWExMmFkYTAwNjBhN2YxM2Q0YjNiZDNjN2M2ODNkMGZl
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuY3Bw
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQw
LDggKzQwLDEwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSURCSW5kZXhCYWNrZW5kSW1w
bDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50
NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKK0lEQkluZGV4QmFja2VuZEltcGw6OklE
QkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3Qg
ZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3RvcmVC
YWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3Rv
cmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQogICAgIDogbV9iYWNr
aW5nU3RvcmUoYmFja2luZ1N0b3JlKQorICAgICwgbV9kYXRhYmFzZUlkKGRhdGFiYXNlSWQpCisg
ICAgLCBtX29iamVjdFN0b3JlQmFja2VuZChvYmplY3RTdG9yZUJhY2tlbmQpCiAgICAgLCBtX2lk
KGlkKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCkBA
IC01MCw4ICs1MiwxMCBAQCBJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBs
KElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90CiB7CiB9CiAKLUlEQkluZGV4
QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5n
U3RvcmUsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0
IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpCitJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJ
bmRleEJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlQmFj
a2VuZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tp
bmdTdG9yZSkKKyAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICwgbV9vYmplY3RT
dG9yZUJhY2tlbmQob2JqZWN0U3RvcmVCYWNrZW5kKQogICAgICwgbV9pZChJbnZhbGlkSWQpCiAg
ICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fc3RvcmVOYW1lKHN0b3JlTmFtZSkKQEAgLTcyLDEw
ICs3NiwxMCBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cgogCiAgICAgc3dpdGNoIChjdXJzb3JU
eXBlKSB7CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNv
cjoKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5v
cGVuSW5kZXhLZXlDdXJzb3IoaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwor
ICAgICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5J
bmRleEtleUN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJh
Y2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNv
cjoKLSAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29yID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5v
cGVuSW5kZXhDdXJzb3IoaW5kZXgtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAg
ICAgICBiYWNraW5nU3RvcmVDdXJzb3IgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPm9wZW5JbmRl
eEN1cnNvcihpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RTdG9yZUJhY2tlbmQt
PmlkKCksIGluZGV4LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNv
cjoKICAgICBjYXNlIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkludmFsaWRDdXJzb3JUeXBl
OgpAQCAtMTIwLDE0ICsxMjQsMTQgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmQKIHsKICAgICAv
LyBGSVhNRTogU3BsaXQgZ2V0SW50ZXJuYWwgaW50byB0d28gZnVuY3Rpb25zLCBnZXR0aW5nIHJp
ZCBvZmYgfGdldE9iamVjdHwuCiAgICAgaWYgKGdldE9iamVjdCkgewotICAgICAgICBTdHJpbmcg
dmFsdWUgPSBpbmRleC0+bV9iYWNraW5nU3RvcmUtPmdldE9iamVjdFZpYUluZGV4KGluZGV4LT5p
ZCgpLCAqa2V5KTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2luZ1N0b3Jl
LT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+bV9kYXRhYmFzZUlkLCBpbmRleC0+bV9vYmplY3RT
dG9yZUJhY2tlbmQtPmlkKCksIGluZGV4LT5pZCgpLCAqa2V5KTsKICAgICAgICAgaWYgKHZhbHVl
LmlzTnVsbCgpKSB7CiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VF
cnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRv
ZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleC4iKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVl
OjpjcmVhdGVGcm9tV2lyZSh2YWx1ZSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxJ
REJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+Z2V0UHJpbWFyeUtleVZp
YUluZGV4KGluZGV4LT5pZCgpLCAqa2V5KTsKKyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UmVz
dWx0ID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5nZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW5kZXgt
Pm1fZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+
aWQoKSwgKmtleSk7CiAgICAgICAgIGlmICgha2V5UmVzdWx0KSB7CiAgICAgICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRoZSBpbmRleC4iKSk7
CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTksNyArMTYzLDcgQEAgYm9vbCBJREJJbmRleEJh
Y2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKElEQktleSoga2V5KQogICAgIGlmICghbV91bmlx
dWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmV0dXJuICFtX2JhY2tpbmdTdG9yZS0+
a2V5RXhpc3RzSW5JbmRleChtX2lkLCAqa2V5KTsKKyAgICByZXR1cm4gIW1fYmFja2luZ1N0b3Jl
LT5rZXlFeGlzdHNJbkluZGV4KG1fZGF0YWJhc2VJZCwgbV9vYmplY3RTdG9yZUJhY2tlbmQtPmlk
KCksIG1faWQsICprZXkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5oCmluZGV4IGUyYTA2YjhlMDU2NDkz
OTY4YWM2YzYyMzg2NTZmNmE1Y2VmNmQ2MGQuLjJkNDJhMDhhMThlMzIyZTVkODRiMjhlMjlhNWQ3
ZmNiMjM2YjRhMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhC
YWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5k
SW1wbC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQwLDEzICs0MCwxMyBAQCBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiBjbGFz
cyBJREJJbmRleEJhY2tlbmRJbXBsIDogcHVibGljIElEQkluZGV4QmFja2VuZEludGVyZmFjZSB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gY3Jl
YXRlKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgs
IGJvb2wgdW5pcXVlKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+
IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlk
LCBjb25zdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGlu
dDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBpZCwgbmFtZSwg
c3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJJbmRleEJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmVCYWNrZW5kLCBpZCwgbmFtZSwgc3RvcmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUpKTsKICAgICB9
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gY3JlYXRlKElEQkJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwo
YmFja2luZ1N0b3JlLCBuYW1lLCBzdG9yZU5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IElEQkluZGV4QmFja2VuZEltcGwoYmFja2luZ1N0b3JlLCBk
YXRhYmFzZUlkLCBvYmplY3RTdG9yZUJhY2tlbmQsIG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0aCwg
dW5pcXVlKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfklEQkluZGV4QmFja2VuZEltcGwoKTsKIApA
QCAtNzIsOCArNzIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGdldEtleShQYXNzUmVm
UHRyPElEQktleT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgotICAgIElEQkluZGV4
QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29s
IHVuaXF1ZSk7Ci0gICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIGJvb2wgdW5pcXVlKTsKKyAgICBJREJJbmRleEJhY2tlbmRJbXBsKElEQkJhY2tpbmdT
dG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bCosIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOworICAgIElEQkluZGV4QmFj
a2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSk7CiAKICAgICBz
dGF0aWMgdm9pZCBvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkN1cnNv
clR5cGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICBzdGF0aWMgdm9pZCBnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBib29sIGdldE9iamVjdCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+KTsK
QEAgLTgyLDYgKzgyLDggQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU+
IG1fYmFja2luZ1N0b3JlOwogCisgICAgaW50NjRfdCBtX2RhdGFiYXNlSWQ7CisgICAgY29uc3Qg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogbV9vYmplY3RTdG9yZUJhY2tlbmQ7CiAgICAgaW50
NjRfdCBtX2lkOwogICAgIFN0cmluZyBtX25hbWU7CiAgICAgU3RyaW5nIG1fc3RvcmVOYW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3Jl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOTFhNWY2NWE3MzQ3MTcwYjhmNjdiMjdhNzUwY2Y0ZjQ0NWY1OGQ3YgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZS5jcHAKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIgorCisjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCisjaWYgRU5BQkxFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFj
a2VuZEltcGwuaCIKKyNpbmNsdWRlIDxsZXZlbGRiL2RiLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZShTdHJp
bmcgaWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5LCBsZXZlbGRiOjpE
QiogZGIpCisgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fZmFjdG9yeShm
YWN0b3J5KQorICAgICwgbV9kYihkYikKK3sKKyAgICBtX2ZhY3RvcnktPmFkZElEQkJhY2tpbmdT
dG9yZShpZGVudGlmaWVyLCB0aGlzKTsKK30KKworSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklE
QkxldmVsREJCYWNraW5nU3RvcmUoKQoreworICAgIG1fZmFjdG9yeS0+cmVtb3ZlSURCQmFja2lu
Z1N0b3JlKG1faWRlbnRpZmllcik7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBJ
REJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdp
biwgY29uc3QgU3RyaW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3Ry
aW5nJiBmaWxlSWRlbnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKiBmYWN0b3J5KQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVy
biAwOworfQorCitib29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmV4dHJhY3RJREJEYXRhYmFz
ZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0
X3QmIGZvdW5kSWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBs
ZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6c2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0
cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZXMo
aW50NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3Ry
aW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxi
b29sPiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBh
c3NpZ25lZE9iamVjdFN0b3JlSWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIElEQkxldmVsREJC
YWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTog
SW1wbGVtZW50LgorfQorCitTdHJpbmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0
U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYga2V5KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTog
SW1wbGVtZW50LgorICAgIHJldHVybiBTdHJpbmcoKTsKK30KKworYm9vbCBJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IFJlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+JiByZWNvcmRJZGVudGlmaWVyKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCit2b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElk
ZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK2RvdWJsZSBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpr
ZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
Zmllcj4mIGZvdW5kUmVjb3JkSWRlbnRpZmllcikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgSURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0
YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNr
JiBjYWxsYmFjaykKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
VmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZl
Y3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxh
Z3MpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKQoreworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKQor
eworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiti
b29sIElEQkxldmVsREJCYWNraW5nU3RvcmU6OnB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25z
dCBJREJLZXkmIGtleSwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJ
ZGVudGlmaWVyKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVt
ZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3Jl
OjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyJiByZWNvcmRJZGVudGlmaWVyKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworU3RyaW5nIElEQkxl
dmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAg
IHJldHVybiBTdHJpbmcoKTsKK30KKworUGFzc1JlZlB0cjxJREJLZXk+IElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1
cm4gMDsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleSYga2V5KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBG
SVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxJREJC
YWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0
b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25z
dCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sK
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1
cm4gMDsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxE
QkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiBy
YW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiAwOworfQorCitQYXNz
UmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpv
cGVuSW5kZXhDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRp
cmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1F
OiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlOjpUcmFuc2FjdGlvbj4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlVHJhbnNhY3Rp
b24oKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50Lgor
ICAgIHJldHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoTEVWRUxEQikKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNzBkNDUzNmFiNmYxMzNmZGM1OGY1Y2Q3YjlhZjEyZWM2N2RmM2U1OQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oCkBA
IC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIElEQkxldmVsREJCYWNraW5nU3RvcmVfaAor
I2RlZmluZSBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKKworI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQorI2lmIEVOQUJMRShMRVZFTERCKQorCisjaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgbGV2ZWxkYiB7CitjbGFz
cyBEQjsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJMZXZlbERCQmFja2lu
Z1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3Ry
aW5nJiBwYXRoQmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRl
bnRpZmllciwgSURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB+SURCTGV2ZWxE
QkJhY2tpbmdTdG9yZSgpOworCisgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1l
dGFEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3Qm
IGZvdW5kSWQpOworICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9v
bCBpbnZhbGlkUm93SWQpOworCisgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2
NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+
JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+
JiBmb3VuZEF1dG9JbmNyZW1lbnRGbGFncyk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RT
dG9yZUlkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgU3RyaW5nIGdldE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3RvcmVSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIFJlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+
Jik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyJik7CisgICAgdmlydHVhbCBkb3VibGUgbmV4
dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQpOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGludDY0X3Qg
ZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBSZWZQdHI8
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiYgZm91bmRSZWNvcmRJZGVudGlmaWVyKTsKKwor
ICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsK
KworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5n
PiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29s
PiYgZm91bmRVbmlxdWVGbGFncyk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4KGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCk7
CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworICAgIHZpcnR1YWwgYm9vbCBwdXRJ
bmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNv
cmRJZGVudGlmaWVyJik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29y
ZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRl
eElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXImKTsKKyAgICB2aXJ0dWFsIFN0
cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7
CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50
NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdl
KiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGly
ZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3Io
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7CisKK3ByaXZh
dGU6CisgICAgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZShTdHJpbmcgaWRlbnRpZmllciwgSURCRmFj
dG9yeUJhY2tlbmRJbXBsKiwgbGV2ZWxkYjo6REIqKTsKKworICAgIFN0cmluZyBtX2lkZW50aWZp
ZXI7CisgICAgUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW1wbD4gbV9mYWN0b3J5OworICAgIE93
blB0cjxsZXZlbGRiOjpEQj4gbV9kYjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
CisjZW5kaWYgLy8gRU5BQkxFKExFVkVMREIpCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCisKKyNlbmRpZiAvLyBJREJMZXZlbERCQmFja2luZ1N0b3JlX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4
IDA0MzNlZDc1NzhhMmNkY2I2YzQ4NmM5NWY4MTIyMWM2ZGYyOWRjYjkuLjM2YWUwNTUxM2EyNDhm
Y2NhNzZjZDllMTkyODRiNzdmMDlmYjAwNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01MCw4ICs1MCw5IEBAIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6On5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCkKIHsKIH0KIAot
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJC
YWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKK0lEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3Jl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBpZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAg
ICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAsIG1fZGF0YWJhc2VJZChkYXRh
YmFzZUlkKQogICAgICwgbV9pZChpZCkKICAgICAsIG1fbmFtZShuYW1lKQogICAgICwgbV9rZXlQ
YXRoKGtleVBhdGgpCkBAIC02MSw4ICs2Miw5IEBAIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvCiAg
ICAgbG9hZEluZGV4ZXMoKTsKIH0KIAotSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkK
K0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURC
QmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAg
ICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkKKyAgICAsIG1fZGF0YWJhc2VJZChkYXRh
YmFzZUlkKQogICAgICwgbV9pZChJbnZhbGlkSWQpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAs
IG1fa2V5UGF0aChrZXlQYXRoKQpAQCAtOTAsNyArOTIsNyBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHRyPElE
QkNhbAogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogewotICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5t
X2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksICpr
ZXkpOworICAgIFN0cmluZyB3aXJlRGF0YSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+
Z2V0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3Rv
cmUtPmlkKCksICprZXkpOwogICAgIGlmICh3aXJlRGF0YS5pc051bGwoKSkgewogICAgICAgICBj
YWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVl
KCkpOwogICAgICAgICByZXR1cm47CkBAIC0yMjcsOCArMjI5LDggQEAgdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjwKICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXkucmVsZWFzZSgpKTsKICAgICB9
CiAKLSAgICBpbnQ2NF90IGRhdGFSb3dJZCA9IEludmFsaWRJZDsKLSAgICBib29sIGlzRXhpc3Rp
bmdWYWx1ZSA9IG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RT
dG9yZShvYmplY3RTdG9yZS0+aWQoKSwgKmtleSwgZGF0YVJvd0lkKTsKKyAgICBSZWZQdHI8SURC
QmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZp
ZXI7CisgICAgYm9vbCBpc0V4aXN0aW5nVmFsdWUgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3Rv
cmUtPmtleUV4aXN0c0luT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCksICprZXksIHJlY29yZElkZW50aWZpZXIpOwogCiAgICAgaWYgKHB1dE1v
ZGUgPT0gQWRkT25seSAmJiBpc0V4aXN0aW5nVmFsdWUpIHsKICAgICAgICAgY2FsbGJhY2tzLT5v
bkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09O
U1RSQUlOVF9FUlIsICJLZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG9iamVjdCBzdG9yZS4iKSk7
CkBAIC0yMzcsMTQgKzIzOSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8CiAKICAgICAvLyBC
ZWZvcmUgdGhpcyBwb2ludCwgZG9uJ3QgZG8gYW55IG11dGF0aW9uLiAgQWZ0ZXIgdGhpcyBwb2lu
dCwgcm9sbGJhY2sgdGhlIHRyYW5zYWN0aW9uIGluIGNhc2Ugb2YgZXJyb3IuCiAKLSAgICBpZiAo
IW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0
U3RvcmUtPmlkKCksICprZXksIHZhbHVlLT50b1dpcmVTdHJpbmcoKSwgZGF0YVJvd0lkLCBkYXRh
Um93SWQgPT0gSW52YWxpZElkKSkgewotICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0
YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVk
IHRvIEkvTyBlcnJvcnMuCi0gICAgICAgIGNhbGxiYWNrcy0+b25FcnJvcihJREJEYXRhYmFzZUVy
cm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OlVOS05PV05fRVJSLCAiRXJyb3Igd3Jp
dGluZyBkYXRhIHRvIHN0YWJsZSBzdG9yYWdlLiIpKTsKLSAgICAgICAgdHJhbnNhY3Rpb24tPmFi
b3J0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW9iamVjdFN0b3JlLT5t
X2JhY2tpbmdTdG9yZS0+ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGRhdGFSb3dJZCkpIHsKKyAg
ICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+cHV0T2JqZWN0U3RvcmVSZWNvcmQo
b2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICprZXksIHZhbHVl
LT50b1dpcmVTdHJpbmcoKSwgcmVjb3JkSWRlbnRpZmllcikpIHsKICAgICAgICAgLy8gRklYTUU6
IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJv
ciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICBjYWxsYmFja3MtPm9uRXJy
b3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dO
X0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAg
IHRyYW5zYWN0aW9uLT5hYm9ydCgpOwpAQCAtMjU1LDcgKzI1MCwxNSBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPAogICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmUt
Pm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgpOyAr
K2l0LCArK2kpIHsKICAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5oYXNWYWxpZElkKCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsgLy8gVGhlIGluZGV4IG9iamVjdCBoYXMgYmVlbiBjcmVhdGVkLCBi
dXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGRhdGFiYXNlIHlldC4KLSAgICAgICAgaWYgKCFvYmpl
Y3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1dEluZGV4RGF0YUZvclJlY29yZChpdC0+c2Vjb25k
LT5pZCgpLCAqaW5kZXhLZXlzW2ldLCBkYXRhUm93SWQpKSB7CisKKyAgICAgICAgaWYgKCFvYmpl
Y3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RT
dG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwg
KnJlY29yZElkZW50aWZpZXIpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQg
RGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNh
dGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0
YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVy
cm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CisgICAgICAgICAgICB0cmFu
c2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JSZWNv
cmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNv
bmQtPmlkKCksICppbmRleEtleXNbaV0sICpyZWNvcmRJZGVudGlmaWVyKSkgewogICAgICAgICAg
ICAgLy8gRklYTUU6IFRoZSBJbmRleGVkIERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3Qg
aGF2ZSBhbiBlcnJvciBjb2RlIGRlZGljYXRlZCB0byBJL08gZXJyb3JzLgogICAgICAgICAgICAg
Y2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3Jh
Z2UuIikpOwogICAgICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CkBAIC0yODMsMTMgKzI4
NiwyMSBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBh
c3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFBhc3NSZQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIGlu
dDY0X3QgaWQ7Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmtleUV4aXN0
c0luT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmlkKCksICprZXksIGlkKSkgeworICAgIFJlZlB0
cjxJREJCYWNraW5nU3RvcmU6Ok9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gcmVjb3JkSWRl
bnRpZmllcjsKKyAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3Rz
SW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQo
KSwgKmtleSwgcmVjb3JkSWRlbnRpZmllcikpIHsKICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9y
KElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5E
X0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb2JqZWN0IHN0b3JlLiIpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+ZGVs
ZXRlT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPmlkKCksIGlkKTsKKyAgICBmb3IgKElu
ZGV4TWFwOjppdGVyYXRvciBpdCA9IG9iamVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQg
IT0gb2JqZWN0U3RvcmUtPm1faW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoIWl0
LT5zZWNvbmQtPmhhc1ZhbGlkSWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBUaGUgaW5k
ZXggb2JqZWN0IGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgZGF0
YWJhc2UgeWV0LgorCisgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5k
ZWxldGVJbmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0
U3RvcmUtPmlkKCksIGl0LT5zZWNvbmQtPmlkKCksICpyZWNvcmRJZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIG9iamVjdFN0b3JlLT5t
X2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0
YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksICpyZWNvcmRJZGVudGlmaWVyKTsKICAgICBjYWxs
YmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0K
IApAQCAtMzA5LDI2ICszMjAsMjggQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpj
bGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREIKIAogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQogewotICAgIG9iamVjdFN0b3Jl
LT5tX2JhY2tpbmdTdG9yZS0+Y2xlYXJPYmplY3RTdG9yZShvYmplY3RTdG9yZS0+aWQoKSk7Cisg
ICAgb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKG9iamVjdFN0
b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpKTsKICAgICBjYWxsYmFja3MtPm9u
U3VjY2VzcyhTZXJpYWxpemVkU2NyaXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCiBu
YW1lc3BhY2UgewogY2xhc3MgUG9wdWxhdGVJbmRleENhbGxiYWNrIDogcHVibGljIElEQkJhY2tp
bmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgUG9wdWxh
dGVJbmRleENhbGxiYWNrKElEQkJhY2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBjb25zdCBTdHJp
bmcmIGluZGV4S2V5UGF0aCwgaW50NjRfdCBpbmRleElkKQorICAgIFBvcHVsYXRlSW5kZXhDYWxs
YmFjayhJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgY29uc3QgU3RyaW5nJiBpbmRleEtl
eVBhdGgsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90
IGluZGV4SWQpCiAgICAgICAgIDogbV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAg
ICAsIG1faW5kZXhLZXlQYXRoKGluZGV4S2V5UGF0aCkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQo
ZGF0YWJhc2VJZCkKKyAgICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKICAg
ICAgICAgLCBtX2luZGV4SWQoaW5kZXhJZCkKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCBi
b29sIGNhbGxiYWNrKGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCisgICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyJiByZWNvcmRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcm
IHZhbHVlKQogICAgIHsKICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2Jq
ZWN0VmFsdWUgPSBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKTsK
ICAgICAgICAgUmVmUHRyPElEQktleT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9i
amVjdFZhbHVlLmdldCgpLCBtX2luZGV4S2V5UGF0aCk7CiAKLSAgICAgICAgaWYgKCFtX2JhY2tp
bmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQobV9pbmRleElkLCAqaW5kZXhLZXksIG9iamVj
dFN0b3JlRGF0YUlkKSkKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFG
b3JSZWNvcmQobV9kYXRhYmFzZUlkLCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgKmluZGV4
S2V5LCByZWNvcmRJZGVudGlmaWVyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMzNywxNCArMzUwLDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBTdHJpbmcm
IG1faW5kZXhLZXlQYXRoOworICAgIGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGludDY0X3Qg
bV9vYmplY3RTdG9yZUlkOwogICAgIGludDY0X3QgbV9pbmRleElkOwogfTsKIH0KIAotc3RhdGlj
IGJvb2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgaW5kZXhLZXlQ
YXRoKQorc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdT
dG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgU3RyaW5nJiBpbmRleEtleVBhdGgpCiB7Ci0gICAgUG9wdWxhdGVJbmRl
eENhbGxiYWNrIGNhbGxiYWNrKGJhY2tpbmdTdG9yZSwgaW5kZXhLZXlQYXRoLCBpbmRleElkKTsK
LSAgICBpZiAoIWJhY2tpbmdTdG9yZS5mb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3Rv
cmVJZCwgY2FsbGJhY2spKQorICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNr
aW5nU3RvcmUsIGluZGV4S2V5UGF0aCwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCk7CisgICAgaWYgKCFiYWNraW5nU3RvcmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGRhdGFi
YXNlSWQsIG9iamVjdFN0b3JlSWQsIGNhbGxiYWNrKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzYwLDcgKzM3NSw3IEBAIFBhc3NSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRl
eChjb25zCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdT
dG9yZS5nZXQoKSwgbmFtZSwgbV9uYW1lLCBrZXlQYXRoLCB1bmlxdWUpOworICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSht
X2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBuYW1lLCBtX25hbWUsIGtl
eVBhdGgsIHVuaXF1ZSk7CiAgICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7CiAKICAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwpA
QCAtMzc4LDE0ICszOTMsMTQgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9y
ZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3Qg
aWQ7Ci0gICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KG9i
amVjdFN0b3JlLT5tX2lkLCBpbmRleC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+
dW5pcXVlKCksIGlkKSkgeworICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5j
cmVhdGVJbmRleChvYmplY3RTdG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwg
aW5kZXgtPm5hbWUoKSwgaW5kZXgtPmtleVBhdGgoKSwgaW5kZXgtPnVuaXF1ZSgpLCBpZCkpIHsK
ICAgICAgICAgdHJhbnNhY3Rpb24tPmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpbmRleC0+c2V0SWQoaWQpOwogCi0gICAgaWYgKCFwb3B1bGF0ZUluZGV4KCpvYmplY3RT
dG9yZS0+bV9iYWNraW5nU3RvcmUsIG9iamVjdFN0b3JlLT5tX2lkLCBpZCwgaW5kZXgtPmtleVBh
dGgoKSkpIHsKKyAgICBpZiAoIXBvcHVsYXRlSW5kZXgoKm9iamVjdFN0b3JlLT5tX2JhY2tpbmdT
dG9yZSwgb2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPm1faWQsIGlkLCBp
bmRleC0+a2V5UGF0aCgpKSkgewogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTQyOCw3ICs0NDMsNyBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rp
b25CYQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5k
ZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
bikKIHsKLSAgICBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KGluZGV4
LT5pZCgpKTsKKyAgICBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KG9i
amVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7
CiAgICAgdHJhbnNhY3Rpb24tPmRpZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC00NDYs
NyArNDYxLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3MKIHsKICAgICBJREJDdXJzb3I6OkRp
cmVjdGlvbiBkaXJlY3Rpb24gPSBzdGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odG1w
RGlyZWN0aW9uKTsKIAotICAgIFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2lu
Z1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3Rv
cmVDdXJzb3Iob2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAg
IFJlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2Jq
ZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3Rv
cmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rp
b24pOwogICAgIGlmICghYmFja2luZ1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+
b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogICAgICAgICBy
ZXR1cm47CkBAIC00NjIsMTQgKzQ3NywxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmxvYWRJbmRleGVzKCkKICAgICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICBWZWN0b3I8
U3RyaW5nPiBrZXlQYXRoczsKICAgICBWZWN0b3I8Ym9vbD4gdW5pcXVlRmxhZ3M7Ci0gICAgbV9i
YWNraW5nU3RvcmUtPmdldEluZGV4ZXMobV9pZCwgaWRzLCBuYW1lcywga2V5UGF0aHMsIHVuaXF1
ZUZsYWdzKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1f
aWQsIGlkcywgbmFtZXMsIGtleVBhdGhzLCB1bmlxdWVGbGFncyk7CiAKICAgICBBU1NFUlQobmFt
ZXMuc2l6ZSgpID09IGlkcy5zaXplKCkpOwogICAgIEFTU0VSVChrZXlQYXRocy5zaXplKCkgPT0g
aWRzLnNpemUoKSk7CiAgICAgQVNTRVJUKHVuaXF1ZUZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgp
KTsKIAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQotICAgICAg
ICBtX2luZGV4ZXMuc2V0KG5hbWVzW2ldLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9i
YWNraW5nU3RvcmUuZ2V0KCksIGlkc1tpXSwgbmFtZXNbaV0sIG1fbmFtZSwga2V5UGF0aHNbaV0s
IHVuaXF1ZUZsYWdzW2ldKSk7CisgICAgICAgIG1faW5kZXhlcy5zZXQobmFtZXNbaV0sIElEQklu
ZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlk
LCB0aGlzLCBpZHNbaV0sIG5hbWVzW2ldLCBtX25hbWUsIGtleVBhdGhzW2ldLCB1bmlxdWVGbGFn
c1tpXSkpOwogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4
RnJvbU1hcChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCkKQEAgLTQ5MCw3ICs1MDUsNyBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2VuQXV0b0luY3JlbWVudEtleSgpCiAgICAgaWYgKG1fYXV0b0lu
Y3JlbWVudE51bWJlciA+IDApCiAgICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlciht
X2F1dG9JbmNyZW1lbnROdW1iZXIrKyk7CiAKLSAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBz
dGF0aWNfY2FzdDxpbnQ+KG1fYmFja2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihp
ZCgpKSk7CisgICAgbV9hdXRvSW5jcmVtZW50TnVtYmVyID0gc3RhdGljX2Nhc3Q8aW50PihtX2Jh
Y2tpbmdTdG9yZS0+bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIobV9kYXRhYmFzZUlkLCBpZCgpKSk7
CiAgICAgcmV0dXJuIElEQktleTo6Y3JlYXRlTnVtYmVyKG1fYXV0b0luY3JlbWVudE51bWJlcisr
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuaAppbmRleCA0NDc5ZDFlMGQ3NGJmMDY4MDkyNDdkOGYyZDVmY2I2YjY3NzZiNmUw
Li42YmY5NWNkMWYxZTdhNWY4OTdjY2M1YWUzNTg1YzQwMjRiZWQwMTNhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMyArNDIs
MTMgQEAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbCA6IHB1YmxpYyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2Ugewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBpZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0
b0luY3JlbWVudCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5j
cmVtZW50KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbChiYWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRv
SW5jcmVtZW50KSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbChiYWNraW5nU3RvcmUsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdT
dG9yZSwgZGF0YWJhc2VJZCwgbmFtZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwogICAgIH0K
ICAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKCk7CiAKQEAgLTU5LDYgKzU5
LDcgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pZDsKICAgICB9CiAgICAgdm9pZCBzZXRJ
ZChpbnQ2NF90IGlkKSB7IG1faWQgPSBpZDsgfQorICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YWJhc2VJZDsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSBj
b25zdCB7IHJldHVybiBtX2tleVBhdGg7IH0KQEAgLTc3LDggKzc4LDggQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1
bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgot
ICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBp
ZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0lu
Y3JlbWVudCk7Ci0gICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5j
cmVtZW50KTsKKyAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSos
IGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQp
OwogCiAgICAgdm9pZCBsb2FkSW5kZXhlcygpOwogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5B
dXRvSW5jcmVtZW50S2V5KCk7CkBAIC05OSw2ICsxMDAsNyBAQCBwcml2YXRlOgogCiAgICAgUmVm
UHRyPElEQkJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAKKyAgICBpbnQ2NF90IG1fZGF0
YWJhc2VJZDsKICAgICBpbnQ2NF90IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJp
bmcgbV9rZXlQYXRoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxp
dGVCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNr
aW5nU3RvcmUuY3BwCmluZGV4IGU0M2I3YTM2MDY5NTFlM2QyY2E2NTMwZTQ2YzFmOWEyZGYyZjUx
Y2QuLmQzMzBkZDIwOWMxZjdmZmEzMDNkNmFlMGJiZGY3MTk2NzIwZDg4NTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKQEAgLTE3Myw3
ICsxNzMsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCU1FMaXRlQmFja2luZ1N0
b3JlOjpvcGVuKFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eQogICAgIGlmICghcGF0aEJhc2UuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGlmICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewog
ICAgICAgICAgICAgLy8gRklYTUU6IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3ZSBjb3VsZCBw
b3NzaWJseSBkbyB0byByZWNvdmVyIGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBpdCByYXRoZXIg
dGhhbiBqdXN0IGVycm9yaW5nIG91dC4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0
byBjcmVhdGUgTG9jYWxTdG9yYWdlIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVk
IERCIGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQocGF0aEJhc2UsIHNlY3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSAr
ICIuaW5kZXhlZGRiIik7CkBAIC0yNjMsNyArMjYzLDcgQEAgdm9pZCBJREJTUUxpdGVCYWNraW5n
U3RvcmU6OmdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90
PiYKICAgICB9CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3Rv
cmVJZCkKK2Jvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
LCBib29sIGF1dG9JbmNyZW1lbnQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKIHsK
ICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIE9iamVjdFN0b3Jl
cyAobmFtZSwga2V5UGF0aCwgZG9BdXRvSW5jcmVtZW50LCBkYXRhYmFzZUlkKSBWQUxVRVMgKD8s
ID8sID8sID8pIik7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAg
LTI5MSw3ICsyOTEsNyBAQCBzdGF0aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFzZSYgZGIs
IGNvbnN0IGNoYXIqIHNxbCwgaW50NjRfdCBpZCkKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7
IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcuCiB9CiAKLXZvaWQgSURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit2b2lk
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVU
RSBGUk9NIE9iamVjdFN0b3JlcyBXSEVSRSBpZCA9ID8iLCBvYmplY3RTdG9yZUlkKTsKICAgICBk
b0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0
b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7CkBAIC0zNzMsNyArMzczLDcgQEAgc3RhdGljIFN0
cmluZyB1cHBlckN1cnNvcldoZXJlRnJhZ21lbnQoY29uc3QgSURCS2V5JiBrZXksIFN0cmluZyBj
b21wYXJpc29uT3BlcmEKICAgICByZXR1cm4gIiI7CiB9CiAKLVN0cmluZyBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiBrZXkpCitTdHJpbmcgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29u
c3QgSURCS2V5JiBrZXkpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxF
Q1Qga2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVE
YXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCAiICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5
KSk7CiAgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKQEAgLTQy
Miw1OCArNDIyLDY0IEBAIHN0YXRpYyB2b2lkIGJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKFNRTGl0
ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uLCBjb25zCiAgICAgfQogfQogCi1ib29s
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgaW50NjRf
dCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKQorbmFtZXNwYWNlIHsKK2NsYXNzIFNRTGl0ZVJl
Y29yZElkZW50aWZpZXIgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTGl0ZVJlY29y
ZElkZW50aWZpZXI+IGNyZWF0ZShpbnQ2NF90IGlkKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1FM
aXRlUmVjb3JkSWRlbnRpZmllcihpZCkpOyB9CisgICAgaW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faWQ7IH0KK3ByaXZhdGU6CisgICAgU1FMaXRlUmVjb3JkSWRlbnRpZmllcihpbnQ2NF90
IGlkKSA6IG1faWQoaWQpIHsgfQorICAgIGludDY0X3QgbV9pZDsKK307Cit9CisKK2Jvb2wgSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIFJlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+JiByZWNvcmRJZGVu
dGlmaWVyKQogewotICAgIFN0cmluZyBzcWwgPSAhaW52YWxpZFJvd0lkID8gIlVQREFURSBPYmpl
Y3RTdG9yZURhdGEgU0VUIGtleVN0cmluZyA9ID8sIGtleURhdGUgPSA/LCBrZXlOdW1iZXIgPSA/
LCB2YWx1ZSA9ID8gV0hFUkUgaWQgPSA/IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDogIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlRGF0YSAoa2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlO
dW1iZXIsIHZhbHVlLCBvYmplY3RTdG9yZUlkKSBWQUxVRVMgKD8sID8sID8sID8sID8pIjsKKyAg
ICBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBzcWxpdGVSZWNvcmRJZGVudGlmaWVyID0gc3RhdGlj
X2Nhc3Q8U1FMaXRlUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIuZ2V0KCkpOwor
CisgICAgU3RyaW5nIHNxbCA9IHNxbGl0ZVJlY29yZElkZW50aWZpZXIgPyAiVVBEQVRFIE9iamVj
dFN0b3JlRGF0YSBTRVQga2V5U3RyaW5nID0gPywga2V5RGF0ZSA9ID8sIGtleU51bWJlciA9ID8s
IHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOiAiSU5TRVJUIElOVE8gT2JqZWN0U3RvcmVEYXRhIChrZXlTdHJpbmcsIGtleURh
dGUsIGtleU51bWJlciwgdmFsdWUsIG9iamVjdFN0b3JlSWQpIFZBTFVFUyAoPywgPywgPywgPywg
PykiOwogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBzcWwpOwogICAgIGlmIChxdWVy
eS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOwogICAgIHF1ZXJ5LmJpbmRC
bG9iKDQsIHZhbHVlKTsKLSAgICBpZiAoIWludmFsaWRSb3dJZCkKLSAgICAgICAgcXVlcnkuYmlu
ZEludDY0KDUsIHJvd0lkKTsKKyAgICBpZiAoc3FsaXRlUmVjb3JkSWRlbnRpZmllcikKKyAgICAg
ICAgcXVlcnkuYmluZEludDY0KDUsIHNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlkKCkpOwogICAg
IGVsc2UKICAgICAgICAgcXVlcnkuYmluZEludDY0KDUsIG9iamVjdFN0b3JlSWQpOwogCiAgICAg
aWYgKHF1ZXJ5LnN0ZXAoKSAhPSBTUUxSZXN1bHREb25lKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoaW52YWxpZFJvd0lkKQotICAgICAgICByb3dJZCA9IG1fZGIubGFzdEluc2Vy
dFJvd0lEKCk7CisgICAgaWYgKCFzcWxpdGVSZWNvcmRJZGVudGlmaWVyKQorICAgICAgICByZWNv
cmRJZGVudGlmaWVyID0gU1FMaXRlUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKG1fZGIubGFzdElu
c2VydFJvd0lEKCkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKK3ZvaWQg
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0b3JlKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUg
RlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVEYXRhSWQgSU4gKFNFTEVDVCBpZCBGUk9N
IE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPykiLCBvYmplY3RTdG9yZUlk
KTsKICAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJF
IG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7CiB9CiAKLXZvaWQgSURCU1FMaXRl
QmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90LCBpbnQ2NF90IG9i
amVjdFN0b3JlRGF0YUlkKQordm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVj
dFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBj
b25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXImIHJlY29yZElkZW50aWZpZXIpCiB7Cisg
ICAgY29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllciYgc3FsaXRlUmVjb3JkSWRlbnRpZmllciA9
IHN0YXRpY19jYXN0PGNvbnN0IFNRTGl0ZVJlY29yZElkZW50aWZpZXImPihyZWNvcmRJZGVudGlm
aWVyKTsKKwogICAgIFNRTGl0ZVN0YXRlbWVudCBvc1F1ZXJ5KG1fZGIsICJERUxFVEUgRlJPTSBP
YmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/Iik7CiAgICAgYm9vbCBvayA9IG9zUXVlcnkucHJl
cGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8gRklY
TUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAotICAgIG9zUXVlcnkuYmluZEludDY0KDEsIG9i
amVjdFN0b3JlRGF0YUlkKTsKKyAgICBvc1F1ZXJ5LmJpbmRJbnQ2NCgxLCBzcWxpdGVSZWNvcmRJ
ZGVudGlmaWVyLmlkKCkpOwogCiAgICAgb2sgPSBvc1F1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRE
b25lOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKLQotICAgIFNRTGl0ZVN0YXRlbWVudCBp
bmRleFF1ZXJ5KG1fZGIsICJERUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVE
YXRhSWQgPSA/Iik7Ci0gICAgb2sgPSBpbmRleFF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRP
azsKLSAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJyb3IgaGFu
ZGxpbmc/Ci0KLSAgICBpbmRleFF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZURhdGFJZCk7
Ci0KLSAgICBvayA9IGluZGV4UXVlcnkuc3RlcCgpID09IFNRTFJlc3VsdERvbmU7Ci0gICAgQVNT
RVJUX1VOVVNFRChvaywgb2spOwogfQogCi1kb3VibGUgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpu
ZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IG9iamVjdFN0b3JlSWQpCitkb3VibGUgSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVl
cnkobV9kYiwgIlNFTEVDVCBtYXgoa2V5TnVtYmVyKSArIDEgRlJPTSBPYmplY3RTdG9yZURhdGEg
V0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8gQU5EIGtleVN0cmluZyBJUyBOVUxMIEFORCBrZXlEYXRl
IElTIE5VTEwiKTsKICAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9r
OwpAQCAtNDg3LDcgKzQ5Myw3IEBAIGRvdWJsZSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om5leHRB
dXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICByZXR1cm4gcXVl
cnkuZ2V0Q29sdW1uRG91YmxlKDApOwogfQogCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYga2V5LCBpbnQ2NF90JiBmb3VuZE9iamVjdFN0b3JlRGF0YUlkKQorYm9vbCBJREJTUUxpdGVC
YWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5LCBSZWZQdHI8T2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyPiYgZm91bmRSZWNvcmRJZGVudGlmaWVyKQogewogICAgIFN0cmlu
ZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBpZCBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmpl
Y3RTdG9yZUlkID0gPyBBTkQgIikgKyB3aGVyZVN5bnRheEZvcktleShrZXkpOwogICAgIFNRTGl0
ZVN0YXRlbWVudCBxdWVyeShtX2RiLCBzcWwpOwpAQCAtNTAwLDExICs1MDYsMTEgQEAgYm9vbCBJ
REJTUUxpdGVCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdAogICAgIGlmIChxdWVyeS5zdGVwKCkgIT0gU1FMUmVzdWx0Um93KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3VuZE9iamVjdFN0b3JlRGF0YUlkID0gcXVl
cnkuZ2V0Q29sdW1uSW50NjQoMCk7CisgICAgZm91bmRSZWNvcmRJZGVudGlmaWVyID0gU1FMaXRl
UmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKHF1ZXJ5LmdldENvbHVtbkludDY0KDApKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2Fs
bGJhY2smIGNhbGxiYWNrKQorYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
T2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYgY2FsbGJhY2spCiB7CiAgICAgU1FMaXRlU3RhdGVt
ZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1QgaWQsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRhIFdI
RVJFIG9iamVjdFN0b3JlSWQgPSA/Iik7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxS
ZXN1bHRPaykKQEAgLTUxNSwxNCArNTIxLDE1IEBAIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3Jl
Ojpmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplCiAg
ICAgd2hpbGUgKHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHRSb3cpIHsKICAgICAgICAgaW50NjRf
dCBvYmplY3RTdG9yZURhdGFJZCA9IHF1ZXJ5LmdldENvbHVtbkludDY0KDApOwogICAgICAgICBT
dHJpbmcgdmFsdWUgPSBxdWVyeS5nZXRDb2x1bW5CbG9iQXNTdHJpbmcoMSk7Ci0gICAgICAgIGlm
ICghY2FsbGJhY2suY2FsbGJhY2sob2JqZWN0U3RvcmVEYXRhSWQsIHZhbHVlKSkKKyAgICAgICAg
UmVmUHRyPFNRTGl0ZVJlY29yZElkZW50aWZpZXI+IHJlY29yZElkZW50aWZpZXIgPSBTUUxpdGVS
ZWNvcmRJZGVudGlmaWVyOjpjcmVhdGUob2JqZWN0U3RvcmVEYXRhSWQpOworICAgICAgICBpZiAo
IWNhbGxiYWNrLmNhbGxiYWNrKCpyZWNvcmRJZGVudGlmaWVyLCB2YWx1ZSkpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURC
U1FMaXRlQmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVj
dG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3Mp
Cit2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1
ZXJ5KG1fZGIsICJTRUxFQ1QgaWQsIG5hbWUsIGtleVBhdGgsIGlzVW5pcXVlIEZST00gSW5kZXhl
cyBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIpOwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJl
KCkgPT0gU1FMUmVzdWx0T2s7CkBAIC01NDMsNyArNTUwLDcgQEAgdm9pZCBJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmdldEluZGV4ZXMoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRf
dD4mIGYKICAgICB9CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRl
eChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKQorYm9vbCBJREJTUUxp
dGVCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIEluZGV4ZXMgKG9iamVjdFN0b3JlSWQsIG5hbWUsIGtl
eVBhdGgsIGlzVW5pcXVlKSBWQUxVRVMgKD8sID8sID8sID8pIik7CiAgICAgaWYgKHF1ZXJ5LnBy
ZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTU2MSwzNiArNTY4LDQxIEBAIGJvb2wgSURCU1FM
aXRlQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0
IFN0cmluZyYgbmFtCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCU1FMaXRlQmFja2lu
Z1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90IGluZGV4SWQpCit2b2lkIElEQlNRTGl0ZUJhY2tp
bmdTdG9yZTo6ZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCkKIHsKICAgICBkb0RlbGV0ZShtX2RiLCAiREVMRVRFIEZS
T00gSW5kZXhlcyBXSEVSRSBpZCA9ID8iLCBpbmRleElkKTsKICAgICBkb0RlbGV0ZShtX2RiLCAi
REVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IiwgaW5kZXhJZCk7CiB9CiAK
LWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCkK
K2Jvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRf
dCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29u
c3QgSURCS2V5JiBrZXksIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciYgcmVjb3Jk
SWRlbnRpZmllcikKIHsKKyAgICBjb25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyJiBzcWxpdGVS
ZWNvcmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmll
ciY+KHJlY29yZElkZW50aWZpZXIpOworCiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIs
ICJJTlNFUlQgSU5UTyBJbmRleERhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBp
bmRleElkLCBvYmplY3RTdG9yZURhdGFJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSIpOwogICAg
IGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOwogICAgIHF1
ZXJ5LmJpbmRJbnQ2NCg0LCBpbmRleElkKTsKLSAgICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0
U3RvcmVEYXRhSWQpOworICAgIHF1ZXJ5LmJpbmRJbnQ2NCg1LCBzcWxpdGVSZWNvcmRJZGVudGlm
aWVyLmlkKCkpOwogCiAgICAgcmV0dXJuIHF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwog
fQogCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3Jk
KGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpCitib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6
ZGVsZXRlSW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciYgcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICBTUUxpdGVTdGF0ZW1lbnQgcXVlcnkobV9k
YiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURhdGFJZCA9ID8iKTsK
KyAgICBjb25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyJiBzcWxpdGVSZWNvcmRJZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllciY+KHJlY29yZElkZW50
aWZpZXIpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJERUxFVEUgRlJPTSBJ
bmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVEYXRhSWQgPSA/IEFORCBpbmRleElkID0gPyIpOwog
ICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZURhdGFJZCk7CisgICAg
cXVlcnkuYmluZEludDY0KDEsIHNxbGl0ZVJlY29yZElkZW50aWZpZXIuaWQoKSk7CisgICAgcXVl
cnkuYmluZEludDY0KDIsIGluZGV4SWQpOwogICAgIHJldHVybiBxdWVyeS5zdGVwKCkgPT0gU1FM
UmVzdWx0RG9uZTsKIH0KIAotU3RyaW5nIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0
VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJT
UUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5
KQogewogICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQogICAgICAgICAgICAgICAg
ICArICJPYmplY3RTdG9yZURhdGEudmFsdWUgIgpAQCAtNjI5LDcgKzY0MSw3IEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQktleT4ga2V5RnJvbVF1ZXJ5KFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGlu
dCBiYXNlQ29sdW1uKQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bGwoKTsKIH0KIAotUGFz
c1JlZlB0cjxJREJLZXk+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUlu
ZGV4KGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCitQYXNzUmVmUHRyPElEQktl
eT4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JiBrZXkpCiB7CiAgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNUICIpCiAgICAg
ICAgICAgICAgICAgICsgIk9iamVjdFN0b3JlRGF0YS5rZXlTdHJpbmcsIE9iamVjdFN0b3JlRGF0
YS5rZXlEYXRlLCBPYmplY3RTdG9yZURhdGEua2V5TnVtYmVyICIKQEAgLTY1MSw3ICs2NjMsNyBA
QCBQYXNzUmVmUHRyPElEQktleT4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5
VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLAogICAgIHJldHVybiBmb3VuZEtleS5yZWxlYXNlKCk7
CiB9CiAKLWJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCitib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9y
ZTo6a2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3Rv
cmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKICAgICBTdHJpbmcg
c3FsID0gU3RyaW5nKCJTRUxFQ1QgaWQgRlJPTSBJbmRleERhdGEgV0hFUkUgaW5kZXhJZCA9ID8g
QU5EICIpICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5KTsKICAgICBTUUxpdGVTdGF0ZW1lbnQgcXVl
cnkobV9kYiwgc3FsKTsKQEAgLTY4Miw3ICs2OTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5KCkgeyByZXR1cm4gbV9jdXJyZW50S2V5OyB9CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtl
eTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgPSAwOwotICAgIHZpcnR1YWwgaW50NjRf
dCBvYmplY3RTdG9yZURhdGFJZCgpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFj
a2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllcigpID0gMDsKICAgICB2aXJ0dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7
CiAKICAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3coKSA9IDA7CkBAIC03NDEsNyArNzUz
LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbi4KICAgICB2aXJ0dWFsIFN0
cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0gICAgdmlydHVhbCBpbnQ2
NF90IG9iamVjdFN0b3JlRGF0YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgcmV0dXJuIFNRTGl0ZVJlY29yZElk
ZW50aWZpZXI6OmNyZWF0ZShtX2N1cnJlbnRJZCk7IH0KICAgICB2aXJ0dWFsIGludDY0X3QgaW5k
ZXhEYXRhSWQoKSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQogICAgIHZpcnR1
YWwgdm9pZCBsb2FkQ3VycmVudFJvdygpOwogICAgIHZpcnR1YWwgYm9vbCBjdXJyZW50Um93RXhp
c3RzKCk7CkBAIC03NzksNyArNzkxLDcgQEAgcHVibGljOgogICAgIC8vIEN1cnNvckltcGxDb21t
b24KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBwcmltYXJ5S2V5KCkgeyByZXR1cm4g
bV9jdXJyZW50UHJpbWFyeUtleTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIHZhbHVlKCkgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFN0cmluZygpOyB9Ci0gICAgdmlydHVhbCBpbnQ2NF90
IG9iamVjdFN0b3JlRGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29y
ZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkg
eyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KICAgICB2aXJ0dWFsIHZvaWQgbG9hZEN1cnJlbnRSb3co
KTsKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygpOwpAQCAtODE3LDcgKzgyOSw3
IEBAIHB1YmxpYzoKICAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3VycmVudFByaW1hcnlLZXk7IH0K
ICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgcmV0dXJuIG1fY3VycmVudFZhbHVlOyB9Ci0g
ICAgdmlydHVhbCBpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
OjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+IG9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
cigpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBpbnQ2
NF90IGluZGV4RGF0YUlkKCkgeyByZXR1cm4gbV9jdXJyZW50SWQ7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbG9hZEN1cnJlbnRSb3coKTsKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygp
OwpAQCAtODQ5LDcgKzg2MSw3IEBAIGJvb2wgSW5kZXhDdXJzb3JJbXBsOjpjdXJyZW50Um93RXhp
c3RzKCkKIAogfSAvLyBuYW1lc3BhY2UKIAotUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1
cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGly
ZWN0aW9uIGRpcmVjdGlvbikKK1Bhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElE
QkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBib29sIGxvd2VyQm91bmQgPSBy
YW5nZSAmJiByYW5nZS0+bG93ZXIoKTsKICAgICBib29sIHVwcGVyQm91bmQgPSByYW5nZSAmJiBy
YW5nZS0+dXBwZXIoKTsKQEAgLTg4Niw3ICs4OTgsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNv
cgogICAgIHJldHVybiBjdXJzb3IucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNv
cihpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpE
aXJlY3Rpb24gZGlyZWN0aW9uKQorUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4g
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgU3Ry
aW5nIHNxbCA9IFN0cmluZygiU0VMRUNUIEluZGV4RGF0YS5pZCwgSW5kZXhEYXRhLmtleVN0cmlu
ZywgSW5kZXhEYXRhLmtleURhdGUsIEluZGV4RGF0YS5rZXlOdW1iZXIsICIpCiAgICAgICAgICAg
ICAgICAgICsgKCJPYmplY3RTdG9yZURhdGEua2V5U3RyaW5nLCBPYmplY3RTdG9yZURhdGEua2V5
RGF0ZSwgT2JqZWN0U3RvcmVEYXRhLmtleU51bWJlciAiKQpAQCAtOTI2LDcgKzkzOCw3IEBAIFBh
c3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6
b3BlbkluZGV4S2V5Q3Vyc29yKGluCiAgICAgcmV0dXJuIGN1cnNvci5yZWxlYXNlKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQlNRTGl0ZUJhY2tpbmdTdG9y
ZTo6b3BlbkluZGV4Q3Vyc29yKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJh
bmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihp
bnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElk
LCBjb25zdCBJREJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlv
bikKIHsKICAgICBTdHJpbmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgSW5kZXhEYXRhLmlkLCBJbmRl
eERhdGEua2V5U3RyaW5nLCBJbmRleERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwg
IikKICAgICAgICAgICAgICAgICAgKyAoIk9iamVjdFN0b3JlRGF0YS52YWx1ZSwgT2JqZWN0U3Rv
cmVEYXRhLmtleVN0cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3JlRGF0
YS5rZXlOdW1iZXIgIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FM
aXRlQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tp
bmdTdG9yZS5oCmluZGV4IGZlMGM2YzE3NTE2ZGU5ZTQwZmE5Nzg3YjFjZTVmMGU2MzIwYjU5Yjcu
LjlkYzFhODU1ZWEwYjhjMzA2ZDMyN2MzYTRjNmUyOGJmY2JmZWFmODAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaApAQCAtNDEsMjkgKzQxLDI5
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJv
b2wgaW52YWxpZFJvd0lkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50
NjRfdCBkYXRhYmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5n
PiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29s
PiYgZm91bmRBdXRvSW5jcmVtZW50RmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmpl
Y3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBh
dXRvSW5jcmVtZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0
U3RvcmVJZCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwot
ICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCk7Ci0gICAgdmlydHVhbCBkb3VibGUg
bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0
dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNv
bnN0IElEQktleSYsIGludDY0X3QmIGZvdW5kT2JqZWN0U3RvcmVEYXRhSWQpOwotCi0gICAgdmly
dHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJhY2smKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRl
eGVzKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVj
dG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBW
ZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJ
bmRleChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFsIGJvb2wg
cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgaW50
NjRfdCBvYmplY3RTdG9yZURhdGFJZCk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0
YUZvclJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKTsKLSAgICB2aXJ0dWFsIFN0cmlu
ZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90
IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbklu
ZGV4KGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBpbmRleElkLCBj
b25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25l
ZE9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBwdXRPYmplY3RTdG9y
ZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcj4mKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXImKTsKKyAgICB2aXJ0dWFsIGRv
dWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0U3RvcmUo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYs
IFJlZlB0cjxPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI+JiBmb3VuZFJlY29yZElkZW50aWZp
ZXIpOworCisgICAgdmlydHVhbCBib29sIGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxs
YmFjayYpOworCisgICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3Rv
cjxTdHJpbmc+JiBmb3VuZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVj
dG9yPGJvb2w+JiBmb3VuZFVuaXF1ZUZsYWdzKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlSW5k
ZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBp
bmRleElkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlk
LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCk7CisgICAgdmlydHVhbCBi
b29sIHB1dEluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBjb25zdCBPYmplY3RT
dG9yZVJlY29yZElkZW50aWZpZXImKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGVsZXRlSW5kZXhEYXRh
Rm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciYpOworICAgIHZp
cnR1YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRf
dCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXkmKTsKKyAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5JbmRleChpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXkmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5PYmplY3RTdG9yZUN1
cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURC
S2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEN1cnNvcj4gb3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vy
c29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRl
eEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKIAog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxUcmFuc2FjdGlvbj4gY3JlYXRlVHJhbnNhY3Rpb24oKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxNWU4YzRjNWE2ZTVlYTNmYmRlMzM2MGU5
OGUyNTcyNWQ1NDIxNDBmLi43MjUxZjNmNGFjNzllZmZmZTNiODEzNWYwMTBiYmU4YzkzYTQ3YmM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE4IEBACiAyMDExLTA0LTA1
ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCOiBJbnRyb2R1Y2Ugc2tlbGV0
b24gZm9yIExldmVsREIgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTc4MjcKKworICAgICAgICAqIGZlYXR1cmVzLmd5cGk6CisgICAgICAg
ICAgICBBZGQgRU5BQkxFX0xFVkVMREI9MC4KKyAgICAgICAgKiBwdWJsaWMvV2ViSURCRmFjdG9y
eS5oOgorICAgICAgICAoV2ViS2l0OjpXZWJJREJGYWN0b3J5OjpvcGVuKToKKyAgICAgICAgICAg
IFJlbW92ZSBwcmUtcm9sbCBvcGVuKCkgZnVuY3Rpb24uCisKKzIwMTEtMDQtMDUgIEhhbnMgV2Vu
bmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJh
cnRoCiAKICAgICAgICAgQ2xlYW4gdXAgSW5kZXhlZERCIFdlYktpdCBBUEkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vZmVhdHVyZXMuZ3lwaQppbmRleCA3MzU0ZWI4ZThjMTk5YzQ4ODZkY2IyN2JhZDA1MGI4
OTRkMDVmYTM0Li5jYzcyMDBhMDg5Zjc5YTNmMmQzMmUwN2RlNGY3ZjRlMmY5M2JlNWNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCkBAIC0xLDUgKzEsNSBAQAogIwotIyBDb3B5
cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIAogIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtNjUsNiArNjUsNyBAQAogICAgICAgICAnRU5BQkxF
X0lOUFVUX1NQRUVDSD0xJywKICAgICAgICAgJ0VOQUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSPTEn
LAogICAgICAgICAnRU5BQkxFX0pTQ19NVUxUSVBMRV9USFJFQURTPTAnLAorICAgICAgICAnRU5B
QkxFX0xFVkVMREI9MCcsCiAgICAgICAgICdFTkFCTEVfTElOS19QUkVGRVRDSD0xJywKICAgICAg
ICAgJ0VOQUJMRV9NQVRITUw9MCcsCiAgICAgICAgICdFTkFCTEVfTUVESUFfU1RBVElTVElDUz0x
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3Rv
cnkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaAppbmRl
eCAyOTQxNGU4MDVkYWFjN2YzNzU5Y2ZhYTdjODNjYmU1ZjkzMjBjYTAwLi45NzU4OGQ1OGMyY2Y1
YzNkZDIxMTk0ZjM5OTBlYjU0NzgzMWQ5MmNkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDExICs1Nyw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAg
ICAgLy8gVGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbiBvZiBvcGVuIGlnbm9yZXMgdGhlIFdlYkZy
YW1lKiBwYXJhbWV0ZXIuCi0gICAgLy8gRklYTUU6IEFzc2VydCBub3QgcmVhY2hlZCB3aGVuIENo
cm9taXVtIHNpZGUgaXMgdXBkYXRlZC4KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJT
dHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0
eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgZGF0YURp
ciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IG9w
ZW4obmFtZSwgY2FsbGJhY2tzLCBvcmlnaW4sIGZyYW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSk7
IH0KLQotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyB3aGVuIENocm9taXVtIHNpZGUgaXMgdXBk
YXRlZC4KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBs
b25nIG1heGltdW1TaXplKSB7IG9wZW4obmFtZSwgY2FsbGJhY2tzLCBvcmlnaW4sIGZyYW1lLCBk
YXRhRGlyLCBtYXhpbXVtU2l6ZSwgRGVmYXVsdEJhY2tpbmdTdG9yZSk7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIs
IHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJL
SVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRh
YmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNl
Y3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIpIHsgV0VC
S0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88991</attachid>
            <date>2011-04-11 05:03:55 -0700</date>
            <delta_ts>2011-04-11 07:19:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57827-20110411130353.patch</filename>
            <type>text/plain</type>
            <size>83564</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODMxNDgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNDE4YTM0MTRjNzA5NDIx
ZTc0OTRiYTAzYzZkNDFkMDVmZDA0YmY1Li42MjczZDE5MDNjOWM0Mzg5MTMyNGFmZDg5YjVjNDA3
M2NiNWU2YWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTEzIEBACisyMDExLTA0LTA1ICBIYW5z
IFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgSW5kZXhlZERCOiBJbnRyb2R1Y2Ugc2tlbGV0b24gZm9y
IExldmVsREIgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTc4MjcKKworICAgICAgICBObyBuZXcgdGVzdHM6IG5vIG5ldyBmdW5jdGlvbmFs
aXR5ICh5ZXQpLgorCisgICAgICAgICogV2ViQ29yZS5neXAvV2ViQ29yZS5neXA6CisgICAgICAg
ICAgICBBZGQgZGVwZW5kZW5jeSBvbiBsZXZlbGRiIHdoZW4gRU5BQkxFX0xFVkVMREI9MSBpbiBm
ZWF0dXJlX2RlZmluZXMuCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAgICAgQWRk
IG5ldyBmaWxlcy4KKyAgICAgICAgKiBzdG9yYWdlL0lEQkJhY2tpbmdTdG9yZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SURCQmFja2luZ1N0b3JlOjpPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXI6
On5PYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIpOgorICAgICAgICAgICAgSW50cm9kdWNlIGFi
c3RyYWN0IHR5cGUgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyLiBUaGUgU1FMaXRlCisgICAg
ICAgICAgICBiYWNrZW5kIHVzZXMgaW50ZWdlcnMgdG8gcmVmZXIgdG8gYSBzcGVjaWZpYyByb3cg
aW4gYSB0YWJsZSwgYnV0CisgICAgICAgICAgICB0aGUgTGV2ZWxEQiBiYWNrZW5kIHdpbGwgdXNl
IHNvbWV0aGluZyBlbHNlLgorICAgICAgICAqIHN0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVP
YmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
QmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6bG9hZE9iamVjdFN0b3Jlcyk6CisgICAgICAgICAg
ICBDaGFuZ2UgZnVuY3Rpb25zIHRvIHBhc3MgYWxvbmcgdGhlIGRhdGFiYXNlIGlkIGZvciBvcGVy
YXRpb25zIHRoYXQKKyAgICAgICAgICAgIGNvbmNlcm4gb2JqZWN0IHN0b3Jlcy4gV2Ugd2FudCB0
byBiZSBhYmxlIHRvIGdyb3VwIG9iamVjdCBzdG9yZXMKKyAgICAgICAgICAgIGlkcyBwZXIgZGF0
YWJhc2UuCisgICAgICAgICogc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKToKKyAgICAgICAgICAg
IERlY2lkZSB3aGljaCBiYWNrZW5kIHRvIHVzZSBiYXNlZCBvbiB0aGUgYmFja2luZ1N0b3JlVHlw
ZQorICAgICAgICAgICAgcGFyYW1ldGVyLgorICAgICAgICAqIHN0b3JhZ2UvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJ
bmRleEJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6
Om9wZW5DdXJzb3JJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJ
bXBsOjpnZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBs
OjphZGRpbmdLZXlBbGxvd2VkKToKKyAgICAgICAgKiBzdG9yYWdlL0lEQkluZGV4QmFja2VuZElt
cGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZSk6Cisg
ICAgICAgICAgICBQYXNzIGRhdGFiYXNlIGFuZCBvYmplY3Qgc3RvcmUgaWQgdG8gYmFja2VuZCBm
dW5jdGlvbnMgY29uY2VybmluZworICAgICAgICAgICAgaW5kZXhlcy4KKyAgICAgICAgKiBzdG9y
YWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OklEQkxldmVsREJCYWNraW5nU3RvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6fklEQkxldmVsREJCYWNraW5nU3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3Blbik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpleHRyYWN0SURCRGF0YWJh
c2VNZXRhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpz
ZXRJREJEYXRhYmFzZU1ldGFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmdldE9iamVjdFN0b3Jlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJM
ZXZlbERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpnZXRPYmplY3RTdG9yZVJlY29yZCk6CisgICAgICAg
IChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpwdXRPYmplY3RTdG9yZVJlY29yZCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjbGVhck9iamVjdFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZU9i
amVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVs
REJCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKToKKyAg
ICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldEluZGV4ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVj
b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUlu
ZGV4RGF0YUZvclJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0
b3JlOjpnZXRPYmplY3RWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFj
a2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
TGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNv
cik6CisgICAgICAgIChXZWJDb3JlOjpJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFu
c2FjdGlvbik6CisgICAgICAgICogc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmg6IEFk
ZGVkLgorICAgICAgICAgICAgQWRkIGFuIGVtcHR5IGltcGxlbWVudGF0aW9uIG9mIHRoZSBMZXZl
bERCIGJhY2tlbmQuCisgICAgICAgICogc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
LmNwcDoKKyAgICAgICAgICAgIEtlZXAgdHJhY2sgb2YgZGF0YWJhc2UgaWQsIHVzZSB0aGUgbmV3
IFJlY29yZElkZW50aWZpZXIuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6cG9wdWxhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleEludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6b3BlbkN1cnNvcklu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omxv
YWRJbmRleGVzKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdlbkF1dG9JbmNyZW1lbnRLZXkpOgorICAgICAgICAqIHN0b3JhZ2UvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmRhdGFiYXNlSWQpOgorICAgICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Blbik6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3Rv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RT
dG9yZVJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OnB1
dE9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdT
dG9yZTo6Y2xlYXJPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNr
aW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbk9iamVjdFN0b3JlKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9iamVjdFN0
b3JlUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0
SW5kZXhlcyk6CisgICAgICAgIChXZWJDb3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNyZWF0
ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRl
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpwdXRJbmRl
eERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3Jl
OjpkZWxldGVJbmRleERhdGFGb3JSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRl
QmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
UUxpdGVCYWNraW5nU3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTUUxpdGVCYWNraW5nU3RvcmU6OmtleUV4aXN0c0luSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuT2JqZWN0U3RvcmVDdXJzb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhLZXlDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhD
dXJzb3IpOgorICAgICAgICAqIHN0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmg6CisKIDIw
MTEtMDQtMDcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKaW5kZXggZTdiMWViYTZjMzQ3ZjFhOTlkY2MxNDlhMTgyN2Q5ZDcyYzc2YWYzZi4uNWVk
MTAxNTgwMzI5NzgyZWFjY2QzMDc4M2Q5NzM0ZGUyNzUzZmFiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTExODQsNiArMTE4NCwxNCBAQAogICAgICAgICAgICAg
XSwKICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWyciRU5BQkxFX0xFVkVMREI9
MSIgaW4gZmVhdHVyZV9kZWZpbmVzJywgeworICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisg
ICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9sZXZlbGRiL2xldmVs
ZGIuZ3lwOmxldmVsZGInLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ2V4cG9ydF9kZXBlbmRl
bnRfc2V0dGluZ3MnOiBbCisgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9w
YXJ0eS9sZXZlbGRiL2xldmVsZGIuZ3lwOmxldmVsZGInLAorICAgICAgICAgIF0sCisgICAgICAg
IH1dLAogICAgICAgXSwKICAgICB9LAogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBlOWY3ZjJh
ZmNkYjgxY2JmOGNkZWFiMjBjYWFjNzAyNzQwNTVlMTRhLi4wNDAzN2JmZTFhOGMxYzMxNGQ4OWRk
YTE2ZjA0ZWQyMDNiZTEzNGU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC01NDYwLDYgKzU0NjAsOCBA
QAogICAgICAgICAgICAgJ3N0b3JhZ2UvSURCS2V5UGF0aEJhY2tlbmRJbXBsLmgnLAogICAgICAg
ICAgICAgJ3N0b3JhZ2UvSURCS2V5UmFuZ2UuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0lE
QktleVJhbmdlLmgnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZS5jcHAnLAorICAgICAgICAgICAgJ3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5oJywK
ICAgICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVjdFN0b3JlLmNwcCcsCiAgICAgICAgICAgICAn
c3RvcmFnZS9JREJPYmplY3RTdG9yZS5oJywKICAgICAgICAgICAgICdzdG9yYWdlL0lEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkJhY2tpbmdT
dG9yZS5oCmluZGV4IDI5NTIzYTJmYjVjOTZiNzE3ZTM0NDY1NjgwMjhjNjhkNjU5MzFlNDAuLmI5
NzU0M2Q5MTcyMzg3ODY1NDUzMjU2ZDljYzU0YjQzNTAwMGYxMjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJCYWNraW5nU3RvcmUuaApAQCAtNTAsMzAgKzUwLDM4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxpZFJvd0lk
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0T2JqZWN0U3RvcmVzKGludDY0X3QgZGF0YWJh
c2VJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFt
ZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kQXV0
b0luY3JlbWVudEZsYWdzKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNy
ZW1lbnQsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlk
KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgU3RyaW5nIGdldE9iamVjdFN0b3JlUmVjb3JkKGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBwdXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGludDY0X3QmIHJvd0lkLCBib29sIGludmFsaWRSb3dJ
ZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0
U3RvcmVJZCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZVJlY29yZChp
bnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpID0gMDsKLSAg
ICB2aXJ0dWFsIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IG9iamVjdFN0
b3JlSWQpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wga2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYsIGludDY0X3QmIGZvdW5kT2JqZWN0U3Rv
cmVEYXRhSWQpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRf
dCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0b3JlSWQpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKworICAgIGNsYXNzIE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciA6IHB1YmxpYyBSZWZDb3VudGVkPE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmll
cj4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCA9
IDA7CisgICAgICAgIHZpcnR1YWwgfk9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcigpIHt9Cisg
ICAgfTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
PiBpbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpID0gMDsKKworICAgIHZpcnR1YWwgU3RyaW5nIGdl
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmKSA9IDA7CisgICAgdmlydHVhbCBib29sIHB1dE9iamVjdFN0b3Jl
UmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIq
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRl
T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciopID0gMDsKKyAgICB2aXJ0dWFs
IGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVj
dFN0b3JlKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmll
cikgPSAwOwogCiAgICAgY2xhc3MgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayB7CiAgICAgcHVi
bGljOgotICAgICAgICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGludDY0X3Qgb2JqZWN0U3RvcmVE
YXRhSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpID0gMDsKKyAgICAgICAgIHZpcnR1YWwgYm9vbCBj
YWxsYmFjayhjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqLCBjb25zdCBTdHJpbmcm
IHZhbHVlKSA9IDA7CiAgICAgICAgICB2aXJ0dWFsIH5PYmplY3RTdG9yZVJlY29yZENhbGxiYWNr
KCkge307CiAgICAgfTsKLSAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3Jk
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZWN0U3RvcmVSZWNvcmRDYWxsYmFjayYpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJikg
PSAwOwogCi0gICAgdmlydHVhbCB2b2lkIGdldEluZGV4ZXMoaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywg
VmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVG
bGFncykgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlz
VW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUlu
ZGV4KGludDY0X3QgaW5kZXhJZCkgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRleERhdGFG
b3JSZWNvcmQoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmLCBpbnQ2NF90IG9iamVjdFN0
b3JlRGF0YUlkKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29y
ZChpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKSA9IDA7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0
T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKSA9IDA7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJ
bkluZGV4KGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JikgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmROYW1lcywg
VmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRVbmlxdWVG
bGFncykgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2NF90IGRhdGFiYXNl
SWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBwdXRJbmRl
eERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNv
cmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5k
ZXhJZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikgPSAwOworICAgIHZpcnR1
YWwgU3RyaW5nIGdldE9iamVjdFZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBv
YmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpID0gMDsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3Qg
ZGF0YWJhc2VpZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleSYpID0gMDsKIAogICAgIGNsYXNzIEN1cnNvciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1
cnNvcj4gewogICAgIHB1YmxpYzoKQEAgLTgxLDE0ICs4OSwxNCBAQCBwdWJsaWM6CiAgICAgICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSgpID0gMDsKICAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpID0gMDsKICAgICAgICAgdmlydHVhbCBTdHJp
bmcgdmFsdWUoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJ
ZCgpID0gMDsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9iamVjdFN0b3JlUmVjb3JkSWRl
bnRpZmllcj4gb2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKCkgPSAwOwogICAgICAgICB2aXJ0
dWFsIGludDY0X3QgaW5kZXhEYXRhSWQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgfkN1cnNvcigp
IHt9OwogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0
U3RvcmVDdXJzb3IoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSosIElE
QkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4g
b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJ
REJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDdXJzb3I+
IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURC
Q3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pID0gMDsKKyAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3Qg
SURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbikgPSAwOworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxDdXJzb3I+IG9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElE
QkN1cnNvcjo6RGlyZWN0aW9uKSA9IDA7CiAKICAgICBjbGFzcyBUcmFuc2FjdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFRyYW5zYWN0aW9uPiB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKaW5kZXggOTRlMzA1YjFi
YzAzMjkwYWFjMjcwNWVlZTA0M2MxOTMxMWM3OWVlMi4uOGZlOTcxYTI3YzkxMTI0NzU5Y2ZmMzIw
M2RlOGRjZDg1NDVmNjg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJE
YXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTk3LDcgKzk3LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKICAgICBy
ZXR1cm4gb2JqZWN0U3RvcmVOYW1lcy5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiAgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRl
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3Jl
bWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0g
SURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKIApAQCAtMTA2LDcgKzEwNiw3IEBAIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiAgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbmFtZSwga2V5UGF0
aCwgYXV0b0luY3JlbWVudCk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+
IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2lu
Z1N0b3JlLmdldCgpLCBtX2lkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKICAgICBB
U1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKIAogICAgIFJlZlB0cjxJREJEYXRh
YmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7CkBAIC0xMjUsNyArMTI1LDcgQEAgdm9p
ZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZUludGVybmFsKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLAogewogICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZDsKIAotICAg
IGlmICghZGF0YWJhc2UtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVPYmplY3RTdG9yZShvYmplY3RT
dG9yZS0+bmFtZSgpLCBvYmplY3RTdG9yZS0+a2V5UGF0aCgpLCBvYmplY3RTdG9yZS0+YXV0b0lu
Y3JlbWVudCgpLCBkYXRhYmFzZS0+aWQoKSwgb2JqZWN0U3RvcmVJZCkpIHsKKyAgICBpZiAoIWRh
dGFiYXNlLT5tX2JhY2tpbmdTdG9yZS0+Y3JlYXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlkKCks
IG9iamVjdFN0b3JlLT5uYW1lKCksIG9iamVjdFN0b3JlLT5rZXlQYXRoKCksIG9iamVjdFN0b3Jl
LT5hdXRvSW5jcmVtZW50KCksIG9iamVjdFN0b3JlSWQpKSB7CiAgICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU4LDcgKzE1OCw3IEBAIHZv
aWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJUcmFuc2FjdGlvCiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6ZGVs
ZXRlT2JqZWN0U3RvcmVJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSwgUGFzc1JlZlB0cjxJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKQogewotICAgIGRhdGFiYXNlLT5tX2JhY2tpbmdT
dG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmlkKCkpOworICAgIGRhdGFiYXNl
LT5tX2JhY2tpbmdTdG9yZS0+ZGVsZXRlT2JqZWN0U3RvcmUoZGF0YWJhc2UtPmlkKCksIG9iamVj
dFN0b3JlLT5pZCgpKTsKICAgICB0cmFuc2FjdGlvbi0+ZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7
CiB9CiAKQEAgLTI1MCw3ICsyNTAsNyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Omxv
YWRPYmplY3RTdG9yZXMoKQogICAgIEFTU0VSVChhdXRvSW5jcmVtZW50RmxhZ3Muc2l6ZSgpID09
IGlkcy5zaXplKCkpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpZHMuc2l6ZSgpOyBp
KyspCi0gICAgICAgIG1fb2JqZWN0U3RvcmVzLnNldChuYW1lc1tpXSwgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y3JlYXRlKG1fYmFja2luZ1N0b3JlLmdldCgpLCBpZHNbaV0sIG5hbWVzW2ld
LCBrZXlQYXRoc1tpXSwgYXV0b0luY3JlbWVudEZsYWdzW2ldKSk7CisgICAgICAgIG1fb2JqZWN0
U3RvcmVzLnNldChuYW1lc1tpXSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y3JlYXRlKG1f
YmFja2luZ1N0b3JlLmdldCgpLCBtX2lkLCBpZHNbaV0sIG5hbWVzW2ldLCBrZXlQYXRoc1tpXSwg
YXV0b0luY3JlbWVudEZsYWdzW2ldKSk7CiB9CiAKIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bDo6cmVtb3ZlT2JqZWN0U3RvcmVGcm9tTWFwKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNz
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlLCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJGYWN0b3J5QmFja2VuZEltcGwuY3BwCmluZGV4IDQ2MWU5MzBiYzE3NjA0Yjkz
OTU1MWZmZGNiZGE0NThmNDczY2ZlMTcuLjQ3NjhiM2UxMGY5NzI2YjliZWIxYWQzYTk1NzE4YTg1
NDE2ZWU3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCRmFjdG9yeUJh
Y2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkZhY3RvcnlCYWNr
ZW5kSW1wbC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNs
dWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNl
cHRpb24uaCIKKyNpbmNsdWRlICJJREJMZXZlbERCQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAi
SURCU1FMaXRlQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSURCVHJhbnNhY3Rpb25Db29yZGlu
YXRvci5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCkBAIC02OSw3ICs3MCw3IEBAIHZv
aWQgSURCRmFjdG9yeUJhY2tlbmRJbXBsOjpyZW1vdmVJREJCYWNraW5nU3RvcmUoY29uc3QgU3Ry
aW5nJiB1bmlxdWVJZGVudGlmaWVyCiAgICAgbV9iYWNraW5nU3RvcmVNYXAucmVtb3ZlKHVuaXF1
ZUlkZW50aWZpZXIpOwogfQogCi12b2lkIElEQkZhY3RvcnlCYWNrZW5kSW1wbDo6b3Blbihjb25z
dCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NS
ZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luLCBGcmFtZSosIGNvbnN0IFN0cmlu
ZyYgZGF0YURpciwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgQmFja2luZ1N0b3JlVHlwZSkKK3ZvaWQg
SURCRmFjdG9yeUJhY2tlbmRJbXBsOjpvcGVuKGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2Vj
dXJpdHlPcmlnaW4sIEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhRGlyLCBpbnQ2NF90IG1heGlt
dW1TaXplLCBCYWNraW5nU3RvcmVUeXBlIGJhY2tpbmdTdG9yZVR5cGUpCiB7CiAgICAgU3RyaW5n
IGZpbGVJZGVudGlmaWVyID0gc2VjdXJpdHlPcmlnaW4tPmRhdGFiYXNlSWRlbnRpZmllcigpOwog
ICAgIFN0cmluZyB1bmlxdWVJZGVudGlmaWVyID0gZmlsZUlkZW50aWZpZXIgKyAiQCIgKyBuYW1l
OwpAQCAtODYsNyArODcsMTIgQEAgdm9pZCBJREJGYWN0b3J5QmFja2VuZEltcGw6Om9wZW4oY29u
c3QgU3RyaW5nJiBuYW1lLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2EKICAgICBpZiAoaXQy
ICE9IG1fYmFja2luZ1N0b3JlTWFwLmVuZCgpKQogICAgICAgICBiYWNraW5nU3RvcmUgPSBpdDIt
PnNlY29uZDsKICAgICBlbHNlIHsKLSAgICAgICAgYmFja2luZ1N0b3JlID0gSURCU1FMaXRlQmFj
a2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6
ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworICAgICAgICBpZiAoYmFja2luZ1N0b3JlVHlwZSA9
PSBEZWZhdWx0QmFja2luZ1N0b3JlKQorICAgICAgICAgICAgYmFja2luZ1N0b3JlID0gSURCU1FM
aXRlQmFja2luZ1N0b3JlOjpvcGVuKHNlY3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhp
bXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIsIHRoaXMpOworI2lmIEVOQUJMRShMRVZFTERCKQorICAg
ICAgICBlbHNlIGlmIChiYWNraW5nU3RvcmVUeXBlID09IExldmVsREJCYWNraW5nU3RvcmUpCisg
ICAgICAgICAgICBiYWNraW5nU3RvcmUgPSBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuKHNl
Y3VyaXR5T3JpZ2luLmdldCgpLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgZmlsZUlkZW50aWZpZXIs
IHRoaXMpOworI2VuZGlmCiAgICAgICAgIGlmICghYmFja2luZ1N0b3JlKSB7CiAgICAgICAgICAg
ICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkludGVybmFsIGVycm9yLiIpKTsKICAgICAgICAgICAg
IHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNr
ZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwu
Y3BwCmluZGV4IDYyZTUzNjRiZWY4MjJkYjk4Y2MwZGU1NTQwMDVlZTMzZDIwMWY1ZTQuLjM4Zjk1
ZjFhMTJhZGEwMDYwYTdmMTNkNGIzYmQzYzdjNjgzZDBmZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9JREJJbmRleEJhY2tlbmRJbXBsLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCw4ICs0MCwxMCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLUlEQkluZGV4QmFja2VuZEltcGw6OklEQkluZGV4QmFja2VuZEltcGwo
SURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9v
bCB1bmlxdWUpCitJREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJhY2tlbmRJbXBsKElEQkJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwqIG9iamVjdFN0b3JlQmFja2VuZCwgaW50NjRfdCBpZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBib29sIHVuaXF1ZSkKICAgICA6IG1fYmFja2luZ1N0b3JlKGJhY2tpbmdTdG9yZSkK
KyAgICAsIG1fZGF0YWJhc2VJZChkYXRhYmFzZUlkKQorICAgICwgbV9vYmplY3RTdG9yZUJhY2tl
bmQob2JqZWN0U3RvcmVCYWNrZW5kKQogICAgICwgbV9pZChpZCkKICAgICAsIG1fbmFtZShuYW1l
KQogICAgICwgbV9zdG9yZU5hbWUoc3RvcmVOYW1lKQpAQCAtNTAsOCArNTIsMTAgQEAgSURCSW5k
ZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqIGJhY2tp
bmdTdG9yZSwgaW50NjRfdAogewogfQogCi1JREJJbmRleEJhY2tlbmRJbXBsOjpJREJJbmRleEJh
Y2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wg
dW5pcXVlKQorSURCSW5kZXhCYWNrZW5kSW1wbDo6SURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNr
aW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKiBvYmplY3RTdG9yZUJhY2tlbmQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1
bmlxdWUpCiAgICAgOiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2RhdGFi
YXNlSWQoZGF0YWJhc2VJZCkKKyAgICAsIG1fb2JqZWN0U3RvcmVCYWNrZW5kKG9iamVjdFN0b3Jl
QmFja2VuZCkKICAgICAsIG1faWQoSW52YWxpZElkKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAg
LCBtX3N0b3JlTmFtZShzdG9yZU5hbWUpCkBAIC03MiwxMCArNzYsMTAgQEAgdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHIKIAogICAgIHN3aXRjaCAoY3Vyc29yVHlwZSkgewogICAgIGNhc2UgSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4S2V5Q3Vyc29yKGluZGV4
LT5pZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vy
c29yID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhLZXlDdXJzb3IoaW5kZXgtPm1f
ZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQo
KSwgcmFuZ2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhDdXJzb3I6Ci0gICAgICAgIGJhY2tpbmdTdG9y
ZUN1cnNvciA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+b3BlbkluZGV4Q3Vyc29yKGluZGV4LT5p
ZCgpLCByYW5nZS5nZXQoKSwgZGlyZWN0aW9uKTsKKyAgICAgICAgYmFja2luZ1N0b3JlQ3Vyc29y
ID0gaW5kZXgtPm1fYmFja2luZ1N0b3JlLT5vcGVuSW5kZXhDdXJzb3IoaW5kZXgtPm1fZGF0YWJh
c2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRleC0+aWQoKSwgcmFu
Z2UuZ2V0KCksIGRpcmVjdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3I6CiAgICAgY2FzZSBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpJbnZhbGlkQ3Vyc29yVHlwZToKQEAgLTEyMCwxNCArMTI0LDE0IEBA
IHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCSW5kCiB7CiAgICAgLy8gRklYTUU6IFNwbGl0IGdldEludGVy
bmFsIGludG8gdHdvIGZ1bmN0aW9ucywgZ2V0dGluZyByaWQgb2ZmIHxnZXRPYmplY3R8LgogICAg
IGlmIChnZXRPYmplY3QpIHsKLSAgICAgICAgU3RyaW5nIHZhbHVlID0gaW5kZXgtPm1fYmFja2lu
Z1N0b3JlLT5nZXRPYmplY3RWaWFJbmRleChpbmRleC0+aWQoKSwgKmtleSk7CisgICAgICAgIFN0
cmluZyB2YWx1ZSA9IGluZGV4LT5tX2JhY2tpbmdTdG9yZS0+Z2V0T2JqZWN0VmlhSW5kZXgoaW5k
ZXgtPm1fZGF0YWJhc2VJZCwgaW5kZXgtPm1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBpbmRl
eC0+aWQoKSwgKmtleSk7CiAgICAgICAgIGlmICh2YWx1ZS5pc051bGwoKSkgewogICAgICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktleSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5k
ZXguIikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIGNhbGxiYWNr
cy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlRnJvbVdpcmUodmFsdWUp
KTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlSZXN1bHQgPSBpbmRl
eC0+bV9iYWNraW5nU3RvcmUtPmdldFByaW1hcnlLZXlWaWFJbmRleChpbmRleC0+aWQoKSwgKmtl
eSk7CisgICAgICAgIFJlZlB0cjxJREJLZXk+IGtleVJlc3VsdCA9IGluZGV4LT5tX2JhY2tpbmdT
dG9yZS0+Z2V0UHJpbWFyeUtleVZpYUluZGV4KGluZGV4LT5tX2RhdGFiYXNlSWQsIGluZGV4LT5t
X29iamVjdFN0b3JlQmFja2VuZC0+aWQoKSwgaW5kZXgtPmlkKCksICprZXkpOwogICAgICAgICBp
ZiAoIWtleVJlc3VsdCkgewogICAgICAgICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFi
YXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Tk9UX0ZPVU5EX0VSUiwgIktl
eSBkb2VzIG5vdCBleGlzdCBpbiB0aGUgaW5kZXguIikpOwogICAgICAgICAgICAgcmV0dXJuOwpA
QCAtMTU5LDcgKzE2Myw3IEBAIGJvb2wgSURCSW5kZXhCYWNrZW5kSW1wbDo6YWRkaW5nS2V5QWxs
b3dlZChJREJLZXkqIGtleSkKICAgICBpZiAoIW1fdW5pcXVlKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIHJldHVybiAhbV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luSW5kZXgobV9pZCwg
KmtleSk7CisgICAgcmV0dXJuICFtX2JhY2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5JbmRleChtX2Rh
dGFiYXNlSWQsIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5pZCgpLCBtX2lkLCAqa2V5KTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9JREJJbmRleEJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4
QmFja2VuZEltcGwuaAppbmRleCBlMmEwNmI4ZTA1NjQ5Mzk2OGFjNmM2MjM4NjU2ZjZhNWNlZjZk
NjBkLi4yZDQyYTA4YTE4ZTMyMmU1ZDg0YjI4ZTI5YTVkN2ZjYjIzNmI0YTExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQkluZGV4QmFja2VuZEltcGwuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MCwxMyArNDAsMTMgQEAgY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW1wbCA6
IHB1YmxpYyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJh
Y2tpbmdTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3Jl
KiBiYWNraW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbCogb2JqZWN0U3RvcmVCYWNrZW5kLCBpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgdW5pcXVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJJbmRleEJh
Y2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgaWQsIG5hbWUsIHN0b3JlTmFtZSwga2V5UGF0aCwgdW5p
cXVlKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCSW5kZXhCYWNrZW5kSW1wbChi
YWNraW5nU3RvcmUsIGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlQmFja2VuZCwgaWQsIG5hbWUsIHN0
b3JlTmFtZSwga2V5UGF0aCwgdW5pcXVlKSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9y
ZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3Ry
aW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0
X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCogb2JqZWN0U3Rv
cmVCYWNrZW5kLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgdW5pcXVlKQogICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJREJJbmRleEJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgbmFtZSwgc3Rv
cmVOYW1lLCBrZXlQYXRoLCB1bmlxdWUpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
REJJbmRleEJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVC
YWNrZW5kLCBuYW1lLCBzdG9yZU5hbWUsIGtleVBhdGgsIHVuaXF1ZSkpOwogICAgIH0KICAgICB2
aXJ0dWFsIH5JREJJbmRleEJhY2tlbmRJbXBsKCk7CiAKQEAgLTcyLDggKzcyLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgdm9pZCBnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXk+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKIAogcHJpdmF0ZToKLSAgICBJREJJbmRleEJhY2tlbmRJbXBsKElEQkJhY2tpbmdT
dG9yZSosIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9y
ZU5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOwotICAgIElEQkluZGV4
QmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIHVuaXF1ZSk7Cisg
ICAgSURCSW5kZXhCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNl
SWQsIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwqLCBpbnQ2NF90IGlkLCBjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgdW5pcXVlKTsKKyAgICBJREJJbmRleEJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9y
ZSosIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCos
IGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzdG9yZU5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCB1bmlxdWUpOwogCiAgICAgc3RhdGljIHZvaWQgb3BlbkN1cnNvcklu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEltcGw+LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9u
LCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JUeXBlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAg
ICAgc3RhdGljIHZvaWQgZ2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4sIFBhc3NSZWZQdHI8SURCS2V5PiwgYm9vbCBnZXRP
YmplY3QsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPik7CkBAIC04Miw2ICs4Miw4IEBAIHByaXZh
dGU6CiAKICAgICBSZWZQdHI8SURCQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKIAorICAg
IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGNvbnN0IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwqIG1fb2JqZWN0U3RvcmVCYWNrZW5kOwogICAgIGludDY0X3QgbV9pZDsKICAgICBTdHJpbmcg
bV9uYW1lOwogICAgIFN0cmluZyBtX3N0b3JlTmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCTGV2ZWxEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4YjVmZWE0ZjE0
MzNjNjM0NTNiNWRmYjcwNzg0MGQ4NTQxZjEyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuY3BwCkBAIC0wLDAgKzEsMjA0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklEQkxldmVsREJCYWNr
aW5nU3RvcmUuaCIKKworI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorI2lmIEVOQUJMRShM
RVZFTERCKQorCisjaW5jbHVkZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCisjaW5jbHVkZSA8
bGV2ZWxkYi9kYi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0lEQkxldmVsREJCYWNraW5n
U3RvcmU6OklEQkxldmVsREJCYWNraW5nU3RvcmUoU3RyaW5nIGlkZW50aWZpZXIsIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbCogZmFjdG9yeSwgbGV2ZWxkYjo6REIqIGRiKQorICAgIDogbV9pZGVudGlm
aWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2ZhY3RvcnkoZmFjdG9yeSkKKyAgICAsIG1fZGIoZGIp
Cit7CisgICAgbV9mYWN0b3J5LT5hZGRJREJCYWNraW5nU3RvcmUoaWRlbnRpZmllciwgdGhpcyk7
Cit9CisKK0lEQkxldmVsREJCYWNraW5nU3RvcmU6On5JREJMZXZlbERCQmFja2luZ1N0b3JlKCkK
K3sKKyAgICBtX2ZhY3RvcnktPnJlbW92ZUlEQkJhY2tpbmdTdG9yZShtX2lkZW50aWZpZXIpOwor
fQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
b3BlbihTZWN1cml0eU9yaWdpbiosIGNvbnN0IFN0cmluZyYsIGludDY0X3QsIGNvbnN0IFN0cmlu
ZyYsIElEQkZhY3RvcnlCYWNrZW5kSW1wbCopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJREJMZXZlbERC
QmFja2luZ1N0b3JlKCIiLCAwLCAwKSk7Cit9CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6ZXh0cmFjdElEQkRhdGFiYXNlTWV0YURhdGEoY29uc3QgU3RyaW5nJiwgU3RyaW5nJiwgaW50
NjRfdCYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQu
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6
c2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBpbnQ2
NF90JiwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9y
ZTo6Z2V0T2JqZWN0U3RvcmVzKGludDY0X3QsIFZlY3RvcjxpbnQ2NF90PiYsIFZlY3RvcjxTdHJp
bmc+JiwgVmVjdG9yPFN0cmluZz4mLCBWZWN0b3I8Ym9vbD4mKQoreworICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYsIGJvb2wsIGludDY0X3QmKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAv
LyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBJREJMZXZl
bERCQmFja2luZ1N0b3JlOjpkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90LCBpbnQ2NF90KQorewor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitTdHJp
bmcgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwg
aW50NjRfdCwgY29uc3QgSURCS2V5JikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8g
RklYTUU6IEltcGxlbWVudC4KKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK2Jvb2wgSURCTGV2
ZWxEQkJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCwg
Y29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVy
KikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxlbWVudC4KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Y2xlYXJP
YmplY3RTdG9yZShpbnQ2NF90LCBpbnQ2NF90KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OyAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjppbnZh
bGlkUmVjb3JkSWRlbnRpZmllcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJ
WE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSURCTGV2ZWxEQkJhY2tp
bmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCwgY29uc3Qg
T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsgLy8gRklYTUU6IEltcGxlbWVudC4KK30KKworZG91YmxlIElEQkxldmVsREJCYWNraW5nU3Rv
cmU6Om5leHRBdXRvSW5jcmVtZW50TnVtYmVyKGludDY0X3QsIGludDY0X3QpCit7CisgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIDA7Cit9
CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5PYmplY3RTdG9yZShp
bnQ2NF90LCBpbnQ2NF90LCBjb25zdCBJREJLZXkmLCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZp
ZXIqKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50Lgor
ICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpmb3JF
YWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCwgT2JqZWN0U3RvcmVSZWNvcmRD
YWxsYmFjayYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1l
bnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIElEQkxldmVsREJCYWNraW5nU3RvcmU6
OmdldEluZGV4ZXMoaW50NjRfdCwgaW50NjRfdCwgVmVjdG9yPGludDY0X3Q+JiwgVmVjdG9yPFN0
cmluZz4mLCBWZWN0b3I8U3RyaW5nPiYsIFZlY3Rvcjxib29sPiYpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKK2Jvb2wgSURCTGV2ZWxEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCwgaW50NjRfdCwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJiwgYm9vbCwgaW50NjRfdCYpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIElE
QkxldmVsREJCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGludDY0X3QsIGludDY0X3QsIGludDY0
X3QpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGlu
dDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciopCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1F
OiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIElEQkxldmVsREJCYWNr
aW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2
NF90LCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30K
KworU3RyaW5nIElEQkxldmVsREJCYWNraW5nU3RvcmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0
X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IElEQktleSYpCit7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIFN0cmluZygpOworfQor
CitQYXNzUmVmUHRyPElEQktleT4gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtl
eVZpYUluZGV4KGludDY0X3QsIGludDY0X3QsIGludDY0X3QsIGNvbnN0IElEQktleSYpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZTo6a2V5RXhpc3RzSW5JbmRleChp
bnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBJREJLZXkmKQoreworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyAvLyBGSVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiBmYWxzZTsKK30K
KworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCTGV2ZWxEQkJhY2tpbmdT
dG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3QsIGludDY0X3QsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElEQkxldmVsREJCYWNraW5nU3RvcmU6Om9wZW5JbmRl
eEtleUN1cnNvcihpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90LCBjb25zdCBJREJLZXlSYW5nZSos
IElEQkN1cnNvcjo6RGlyZWN0aW9uKQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBG
SVhNRTogSW1wbGVtZW50LgorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPElEQkJhY2tp
bmdTdG9yZTo6Q3Vyc29yPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpvcGVuSW5kZXhDdXJzb3Io
aW50NjRfdCwgaW50NjRfdCwgaW50NjRfdCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6
OkRpcmVjdGlvbikKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRklYTUU6IEltcGxl
bWVudC4KKyAgICByZXR1cm4gMDsKK30KKworUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OlRy
YW5zYWN0aW9uPiBJREJMZXZlbERCQmFja2luZ1N0b3JlOjpjcmVhdGVUcmFuc2FjdGlvbigpCit7
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCisgICAgcmV0
dXJuIDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShM
RVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL0lEQkxldmVsREJCYWNraW5nU3RvcmUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Yzc2
MDExZDE4M2Q2YzAzNWI1ZWI5ZTEzMjNlYWIzMDUxZDg1NzU5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJMZXZlbERCQmFja2luZ1N0b3JlLmgKQEAgLTAsMCAr
MSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCisjZGVmaW5l
IElEQkxldmVsREJCYWNraW5nU3RvcmVfaAorCisjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CisjaWYgRU5BQkxFKExFVkVMREIpCisKKyNpbmNsdWRlICJJREJCYWNraW5nU3RvcmUuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBsZXZlbGRiIHsKK2NsYXNzIERCOwor
fQorbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJREJMZXZlbERCQmFja2luZ1N0b3JlIDog
cHVibGljIElEQkJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SURCQmFja2luZ1N0b3JlPiBvcGVuKFNlY3VyaXR5T3JpZ2luKiwgY29uc3QgU3RyaW5nJiBwYXRo
QmFzZSwgaW50NjRfdCBtYXhpbXVtU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlSWRlbnRpZmllciwg
SURCRmFjdG9yeUJhY2tlbmRJbXBsKik7CisgICAgdmlydHVhbCB+SURCTGV2ZWxEQkJhY2tpbmdT
dG9yZSgpOworCisgICAgdmlydHVhbCBib29sIGV4dHJhY3RJREJEYXRhYmFzZU1ldGFEYXRhKGNv
bnN0IFN0cmluZyYgbmFtZSwgU3RyaW5nJiBmb3VuZFZlcnNpb24sIGludDY0X3QmIGZvdW5kSWQp
OworICAgIHZpcnR1YWwgYm9vbCBzZXRJREJEYXRhYmFzZU1ldGFEYXRhKGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlk
Um93SWQpOworCisgICAgdmlydHVhbCB2b2lkIGdldE9iamVjdFN0b3JlcyhpbnQ2NF90IGRhdGFi
YXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZE5h
bWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3VuZEF1
dG9JbmNyZW1lbnRGbGFncyk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBh
dGgsIGJvb2wgYXV0b0luY3JlbWVudCwgaW50NjRfdCYgYXNzaWduZWRPYmplY3RTdG9yZUlkKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBp
bnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxPYmplY3RTdG9y
ZVJlY29yZElkZW50aWZpZXI+IGludmFsaWRSZWNvcmRJZGVudGlmaWVyKCk7CisgICAgdmlydHVh
bCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90
IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYpOworICAgIHZpcnR1YWwgYm9vbCBwdXRPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
Y29uc3QgSURCS2V5JiwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyKik7CisgICAgdmlydHVhbCB2b2lkIGNsZWFyT2JqZWN0U3RvcmUoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBkb3Vi
bGUgbmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQpOworICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbk9iamVjdFN0b3JlKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBP
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIGZvdW5kUmVjb3JkSWRlbnRpZmllcik7CisKKyAg
ICB2aXJ0dWFsIGJvb2wgZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJ
ZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBPYmplY3RTdG9yZVJlY29yZENhbGxiYWNrJik7CisK
KyAgICB2aXJ0dWFsIHZvaWQgZ2V0SW5kZXhlcyhpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4m
IGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4m
IGZvdW5kVW5pcXVlRmxhZ3MpOworICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2NF90
IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgaXNVbmlxdWUsIGludDY0X3QmIGluZGV4SWQpOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkKTsKKyAgICB2aXJ0dWFsIGJvb2wgcHV0SW5k
ZXhEYXRhRm9yUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlk
LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYsIGNvbnN0IE9iamVjdFN0b3JlUmVjb3Jk
SWRlbnRpZmllciopOworICAgIHZpcnR1YWwgYm9vbCBkZWxldGVJbmRleERhdGFGb3JSZWNvcmQo
aW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBTdHJp
bmcgZ2V0T2JqZWN0VmlhSW5kZXgoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0
b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQktleT4gZ2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwor
ICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwgaW50
NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0
X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXlSYW5nZSos
IElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBv
cGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVj
dGlvbik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEN1cnNvcj4gb3BlbkluZGV4Q3Vyc29yKGlu
dDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworCisgICAgdmlydHVh
bCBQYXNzUmVmUHRyPFRyYW5zYWN0aW9uPiBjcmVhdGVUcmFuc2FjdGlvbigpOworCitwcml2YXRl
OgorICAgIElEQkxldmVsREJCYWNraW5nU3RvcmUoU3RyaW5nIGlkZW50aWZpZXIsIElEQkZhY3Rv
cnlCYWNrZW5kSW1wbCosIGxldmVsZGI6OkRCKik7CisKKyAgICBTdHJpbmcgbV9pZGVudGlmaWVy
OworICAgIFJlZlB0cjxJREJGYWN0b3J5QmFja2VuZEltcGw+IG1fZmFjdG9yeTsKKyAgICBPd25Q
dHI8bGV2ZWxkYjo6REI+IG1fZGI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKwor
I2VuZGlmIC8vIEVOQUJMRShMRVZFTERCKQorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorCisjZW5kaWYgLy8gSURCTGV2ZWxEQkJhY2tpbmdTdG9yZV9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcAppbmRleCAw
NDMzZWQ3NTc4YTJjZGNiNmM0ODZjOTVmODEyMjFjNmRmMjlkY2I5Li41NDU2YWJmZmUxODdiNmRl
ZmQxOTMxMTdiYmFjZWQ5Nzc1MzkzMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTAsOCArNTAsOSBAQCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjp+SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCgpCiB7CiB9CiAKLUlE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoSURCQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCitJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSog
YmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QgaWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiAgICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJh
c2VJZCkKICAgICAsIG1faWQoaWQpCiAgICAgLCBtX25hbWUobmFtZSkKICAgICAsIG1fa2V5UGF0
aChrZXlQYXRoKQpAQCAtNjEsOCArNjIsOSBAQCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSogYmFja2luZ1N0bwogICAg
IGxvYWRJbmRleGVzKCk7CiB9CiAKLUlEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCitJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKElEQkJh
Y2tpbmdTdG9yZSogYmFja2luZ1N0b3JlLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpCiAgICAg
OiBtX2JhY2tpbmdTdG9yZShiYWNraW5nU3RvcmUpCisgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJh
c2VJZCkKICAgICAsIG1faWQoSW52YWxpZElkKQogICAgICwgbV9uYW1lKG5hbWUpCiAgICAgLCBt
X2tleVBhdGgoa2V5UGF0aCkKQEAgLTkwLDcgKzkyLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlZlB0cjxJREJD
YWwKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcykKIHsKLSAgICBTdHJpbmcgd2lyZURhdGEgPSBvYmplY3RTdG9yZS0+bV9i
YWNraW5nU3RvcmUtPmdldE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5
KTsKKyAgICBTdHJpbmcgd2lyZURhdGEgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmdl
dE9iamVjdFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3Jl
LT5pZCgpLCAqa2V5KTsKICAgICBpZiAod2lyZURhdGEuaXNOdWxsKCkpIHsKICAgICAgICAgY2Fs
bGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgp
KTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjI3LDggKzIyOSw4IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cHV0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8CiAgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5LnJlbGVhc2UoKSk7CiAgICAgfQog
Ci0gICAgaW50NjRfdCBkYXRhUm93SWQgPSBJbnZhbGlkSWQ7Ci0gICAgYm9vbCBpc0V4aXN0aW5n
VmFsdWUgPSBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmtleUV4aXN0c0luT2JqZWN0U3Rv
cmUob2JqZWN0U3RvcmUtPmlkKCksICprZXksIGRhdGFSb3dJZCk7CisgICAgUmVmUHRyPElEQkJh
Y2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVy
ID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5pbnZhbGlkUmVjb3JkSWRlbnRpZmllcigp
OworICAgIGJvb2wgaXNFeGlzdGluZ1ZhbHVlID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVj
dFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKIAogICAgIGlmIChw
dXRNb2RlID09IEFkZE9ubHkgJiYgaXNFeGlzdGluZ1ZhbHVlKSB7CiAgICAgICAgIGNhbGxiYWNr
cy0+b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246
OkNPTlNUUkFJTlRfRVJSLCAiS2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBvYmplY3Qgc3RvcmUu
IikpOwpAQCAtMjM3LDE0ICsyMzksNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnB1dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiAgICAg
Ly8gQmVmb3JlIHRoaXMgcG9pbnQsIGRvbid0IGRvIGFueSBtdXRhdGlvbi4gIEFmdGVyIHRoaXMg
cG9pbnQsIHJvbGxiYWNrIHRoZSB0cmFuc2FjdGlvbiBpbiBjYXNlIG9mIGVycm9yLgogCi0gICAg
aWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1dE9iamVjdFN0b3JlUmVjb3JkKG9i
amVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2YWx1ZS0+dG9XaXJlU3RyaW5nKCksIGRhdGFSb3dJZCwg
ZGF0YVJvd0lkID09IEludmFsaWRJZCkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoZSBJbmRleGVk
IERhdGFiYXNlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgaGF2ZSBhbiBlcnJvciBjb2RlIGRlZGlj
YXRlZCB0byBJL08gZXJyb3JzLgotICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJh
c2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9y
IHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Ci0gICAgICAgIHRyYW5zYWN0aW9u
LT5hYm9ydCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFvYmplY3RTdG9y
ZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChkYXRhUm93SWQpKSB7
CisgICAgaWYgKCFvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPnB1dE9iamVjdFN0b3JlUmVj
b3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCB2
YWx1ZS0+dG9XaXJlU3RyaW5nKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGUgSW5kZXhlZCBEYXRhYmFzZSBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IGhh
dmUgYW4gZXJyb3IgY29kZSBkZWRpY2F0ZWQgdG8gSS9PIGVycm9ycy4KICAgICAgICAgY2FsbGJh
Y2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VU5LTk9XTl9FUlIsICJFcnJvciB3cml0aW5nIGRhdGEgdG8gc3RhYmxlIHN0b3JhZ2UuIikp
OwogICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKQEAgLTI1NSw3ICsyNTAsMTUgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUGFzc1JlZlB0cjwKICAgICBmb3IgKEluZGV4TWFwOjppdGVyYXRvciBpdCA9IG9i
amVjdFN0b3JlLT5tX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gb2JqZWN0U3RvcmUtPm1faW5kZXhl
cy5lbmQoKTsgKytpdCwgKytpKSB7CiAgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJ
ZCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4g
Y3JlYXRlZCwgYnV0IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCi0gICAgICAg
IGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJbmRleERhdGFGb3JSZWNvcmQo
aXQtPnNlY29uZC0+aWQoKSwgKmluZGV4S2V5c1tpXSwgZGF0YVJvd0lkKSkgeworCisgICAgICAg
IGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVJbmRleERhdGFGb3JSZWNv
cmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPmlkKCksIGl0LT5zZWNv
bmQtPmlkKCksIHJlY29yZElkZW50aWZpZXIuZ2V0KCkpKSB7CisgICAgICAgICAgICAvLyBGSVhN
RTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVy
cm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBlcnJvcnMuCisgICAgICAgICAgICBjYWxsYmFja3Mt
Pm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
TktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcgZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7Cisg
ICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5wdXRJ
bmRleERhdGFGb3JSZWNvcmQob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUt
PmlkKCksIGl0LT5zZWNvbmQtPmlkKCksICppbmRleEtleXNbaV0sIHJlY29yZElkZW50aWZpZXIu
Z2V0KCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIEluZGV4ZWQgRGF0YWJhc2Ugc3Bl
Y2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFuIGVycm9yIGNvZGUgZGVkaWNhdGVkIHRvIEkvTyBl
cnJvcnMuCiAgICAgICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6
Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVTktOT1dOX0VSUiwgIkVycm9yIHdyaXRpbmcg
ZGF0YSB0byBzdGFibGUgc3RvcmFnZS4iKSk7CiAgICAgICAgICAgICB0cmFuc2FjdGlvbi0+YWJv
cnQoKTsKQEAgLTI4MywxMyArMjg2LDIxIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUGFzc1JlCiAKIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBj
YWxsYmFja3MpCiB7Ci0gICAgaW50NjRfdCBpZDsKLSAgICBpZiAoIW9iamVjdFN0b3JlLT5tX2Jh
Y2tpbmdTdG9yZS0+a2V5RXhpc3RzSW5PYmplY3RTdG9yZShvYmplY3RTdG9yZS0+aWQoKSwgKmtl
eSwgaWQpKSB7CisgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJ
ZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3Jl
LT5pbnZhbGlkUmVjb3JkSWRlbnRpZmllcigpOworICAgIGlmICghb2JqZWN0U3RvcmUtPm1fYmFj
a2luZ1N0b3JlLT5rZXlFeGlzdHNJbk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNl
SWQsIG9iamVjdFN0b3JlLT5pZCgpLCAqa2V5LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKSkgewog
ICAgICAgICBjYWxsYmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpOT1RfRk9VTkRfRVJSLCAiS2V5IGRvZXMgbm90IGV4aXN0IGluIHRo
ZSBvYmplY3Qgc3RvcmUuIikpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgb2JqZWN0
U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5kZWxldGVPYmplY3RTdG9yZVJlY29yZChvYmplY3RTdG9y
ZS0+aWQoKSwgaWQpOworICAgIGZvciAoSW5kZXhNYXA6Oml0ZXJhdG9yIGl0ID0gb2JqZWN0U3Rv
cmUtPm1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBvYmplY3RTdG9yZS0+bV9pbmRleGVzLmVuZCgp
OyArK2l0KSB7CisgICAgICAgIGlmICghaXQtPnNlY29uZC0+aGFzVmFsaWRJZCgpKQorICAgICAg
ICAgICAgY29udGludWU7IC8vIFRoZSBpbmRleCBvYmplY3QgaGFzIGJlZW4gY3JlYXRlZCwgYnV0
IGRvZXMgbm90IGV4aXN0IGluIHRoZSBkYXRhYmFzZSB5ZXQuCisKKyAgICAgICAgaWYgKCFvYmpl
Y3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChvYmplY3RT
dG9yZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaXQtPnNlY29uZC0+aWQoKSwg
cmVjb3JkSWRlbnRpZmllci5nZXQoKSkpCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICBvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZU9iamVj
dFN0b3JlUmVjb3JkKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9iamVjdFN0b3JlLT5pZCgp
LCByZWNvcmRJZGVudGlmaWVyLmdldCgpKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJp
YWxpemVkU2NyaXB0VmFsdWU6Om51bGxWYWx1ZSgpKTsKIH0KIApAQCAtMzA5LDI2ICszMjAsMjgg
QEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREIKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpjbGVhckludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzKQogewotICAgIG9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZS0+Y2xl
YXJPYmplY3RTdG9yZShvYmplY3RTdG9yZS0+aWQoKSk7CisgICAgb2JqZWN0U3RvcmUtPm1fYmFj
a2luZ1N0b3JlLT5jbGVhck9iamVjdFN0b3JlKG9iamVjdFN0b3JlLT5tX2RhdGFiYXNlSWQsIG9i
amVjdFN0b3JlLT5pZCgpKTsKICAgICBjYWxsYmFja3MtPm9uU3VjY2VzcyhTZXJpYWxpemVkU2Ny
aXB0VmFsdWU6OnVuZGVmaW5lZFZhbHVlKCkpOwogfQogCiBuYW1lc3BhY2UgewogY2xhc3MgUG9w
dWxhdGVJbmRleENhbGxiYWNrIDogcHVibGljIElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVS
ZWNvcmRDYWxsYmFjayB7CiBwdWJsaWM6Ci0gICAgUG9wdWxhdGVJbmRleENhbGxiYWNrKElEQkJh
Y2tpbmdTdG9yZSYgYmFja2luZ1N0b3JlLCBjb25zdCBTdHJpbmcmIGluZGV4S2V5UGF0aCwgaW50
NjRfdCBpbmRleElkKQorICAgIFBvcHVsYXRlSW5kZXhDYWxsYmFjayhJREJCYWNraW5nU3RvcmUm
IGJhY2tpbmdTdG9yZSwgY29uc3QgU3RyaW5nJiBpbmRleEtleVBhdGgsIGludDY0X3QgZGF0YWJh
c2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpCiAgICAgICAgIDog
bV9iYWNraW5nU3RvcmUoYmFja2luZ1N0b3JlKQogICAgICAgICAsIG1faW5kZXhLZXlQYXRoKGlu
ZGV4S2V5UGF0aCkKKyAgICAgICAgLCBtX2RhdGFiYXNlSWQoZGF0YWJhc2VJZCkKKyAgICAgICAg
LCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKICAgICAgICAgLCBtX2luZGV4SWQoaW5k
ZXhJZCkKICAgICB7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGNhbGxiYWNrKGludDY0X3Qg
b2JqZWN0U3RvcmVEYXRhSWQsIGNvbnN0IFN0cmluZyYgdmFsdWUpCisgICAgdmlydHVhbCBib29s
IGNhbGxiYWNrKGNvbnN0IElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlm
aWVyKiByZWNvcmRJZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogICAgIHsKICAgICAg
ICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gb2JqZWN0VmFsdWUgPSBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OmNyZWF0ZUZyb21XaXJlKHZhbHVlKTsKICAgICAgICAgUmVmUHRyPElEQktl
eT4gaW5kZXhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKG9iamVjdFZhbHVlLmdldCgpLCBtX2lu
ZGV4S2V5UGF0aCk7CiAKLSAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFG
b3JSZWNvcmQobV9pbmRleElkLCAqaW5kZXhLZXksIG9iamVjdFN0b3JlRGF0YUlkKSkKKyAgICAg
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS5wdXRJbmRleERhdGFGb3JSZWNvcmQobV9kYXRhYmFzZUlk
LCBtX29iamVjdFN0b3JlSWQsIG1faW5kZXhJZCwgKmluZGV4S2V5LCByZWNvcmRJZGVudGlmaWVy
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAg
LTMzNywxNCArMzUwLDE2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSURCQmFja2luZ1N0b3Jl
JiBtX2JhY2tpbmdTdG9yZTsKICAgICBjb25zdCBTdHJpbmcmIG1faW5kZXhLZXlQYXRoOworICAg
IGludDY0X3QgbV9kYXRhYmFzZUlkOworICAgIGludDY0X3QgbV9vYmplY3RTdG9yZUlkOwogICAg
IGludDY0X3QgbV9pbmRleElkOwogfTsKIH0KIAotc3RhdGljIGJvb2wgcG9wdWxhdGVJbmRleChJ
REJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2
NF90IGluZGV4SWQsIGNvbnN0IFN0cmluZyYgaW5kZXhLZXlQYXRoKQorc3RhdGljIGJvb2wgcG9w
dWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgU3RyaW5n
JiBpbmRleEtleVBhdGgpCiB7Ci0gICAgUG9wdWxhdGVJbmRleENhbGxiYWNrIGNhbGxiYWNrKGJh
Y2tpbmdTdG9yZSwgaW5kZXhLZXlQYXRoLCBpbmRleElkKTsKLSAgICBpZiAoIWJhY2tpbmdTdG9y
ZS5mb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQob2JqZWN0U3RvcmVJZCwgY2FsbGJhY2spKQorICAg
IFBvcHVsYXRlSW5kZXhDYWxsYmFjayBjYWxsYmFjayhiYWNraW5nU3RvcmUsIGluZGV4S2V5UGF0
aCwgZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCk7CisgICAgaWYgKCFiYWNraW5n
U3RvcmUuZm9yRWFjaE9iamVjdFN0b3JlUmVjb3JkKGRhdGFiYXNlSWQsIG9iamVjdFN0b3JlSWQs
IGNhbGxiYWNrKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVlOwogfQpA
QCAtMzYwLDcgKzM3NSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zCiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElE
QkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbmFtZSwgbV9u
YW1lLCBrZXlQYXRoLCB1bmlxdWUpOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCA9IElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwg
bV9kYXRhYmFzZUlkLCB0aGlzLCBuYW1lLCBtX25hbWUsIGtleVBhdGgsIHVuaXF1ZSk7CiAgICAg
QVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwpAQCAtMzc4LDE0ICszOTMsMTQgQEAg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y3JlYXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2U+IHRyYW5zYWN0aW9uKQogewogICAgIGludDY0X3QgaWQ7Ci0gICAgaWYgKCFvYmplY3RT
dG9yZS0+bV9iYWNraW5nU3RvcmUtPmNyZWF0ZUluZGV4KG9iamVjdFN0b3JlLT5tX2lkLCBpbmRl
eC0+bmFtZSgpLCBpbmRleC0+a2V5UGF0aCgpLCBpbmRleC0+dW5pcXVlKCksIGlkKSkgeworICAg
IGlmICghb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5jcmVhdGVJbmRleChvYmplY3RTdG9y
ZS0+bV9kYXRhYmFzZUlkLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPm5hbWUoKSwgaW5kZXgt
PmtleVBhdGgoKSwgaW5kZXgtPnVuaXF1ZSgpLCBpZCkpIHsKICAgICAgICAgdHJhbnNhY3Rpb24t
PmFib3J0KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBpbmRleC0+c2V0SWQoaWQp
OwogCi0gICAgaWYgKCFwb3B1bGF0ZUluZGV4KCpvYmplY3RTdG9yZS0+bV9iYWNraW5nU3RvcmUs
IG9iamVjdFN0b3JlLT5tX2lkLCBpZCwgaW5kZXgtPmtleVBhdGgoKSkpIHsKKyAgICBpZiAoIXBv
cHVsYXRlSW5kZXgoKm9iamVjdFN0b3JlLT5tX2JhY2tpbmdTdG9yZSwgb2JqZWN0U3RvcmUtPm1f
ZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmUtPm1faWQsIGlkLCBpbmRleC0+a2V5UGF0aCgpKSkgewog
ICAgICAgICB0cmFuc2FjdGlvbi0+YWJvcnQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTQyOCw3ICs0NDMsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYQogCiB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUs
IFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbikKIHsKLSAgICBvYmplY3RTdG9y
ZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KGluZGV4LT5pZCgpKTsKKyAgICBvYmplY3RT
dG9yZS0+bV9iYWNraW5nU3RvcmUtPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlLT5tX2RhdGFiYXNl
SWQsIG9iamVjdFN0b3JlLT5pZCgpLCBpbmRleC0+aWQoKSk7CiAgICAgdHJhbnNhY3Rpb24tPmRp
ZENvbXBsZXRlVGFza0V2ZW50cygpOwogfQogCkBAIC00NDYsNyArNDYxLDcgQEAgdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3MKIHsKICAgICBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBz
dGF0aWNfY2FzdDxJREJDdXJzb3I6OkRpcmVjdGlvbj4odG1wRGlyZWN0aW9uKTsKIAotICAgIFJl
ZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0
U3RvcmUtPm1fYmFja2luZ1N0b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUt
PmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOworICAgIFJlZlB0cjxJREJCYWNraW5nU3Rv
cmU6OkN1cnNvcj4gYmFja2luZ1N0b3JlQ3Vyc29yID0gb2JqZWN0U3RvcmUtPm1fYmFja2luZ1N0
b3JlLT5vcGVuT2JqZWN0U3RvcmVDdXJzb3Iob2JqZWN0U3RvcmUtPm1fZGF0YWJhc2VJZCwgb2Jq
ZWN0U3RvcmUtPmlkKCksIHJhbmdlLmdldCgpLCBkaXJlY3Rpb24pOwogICAgIGlmICghYmFja2lu
Z1N0b3JlQ3Vyc29yKSB7CiAgICAgICAgIGNhbGxiYWNrcy0+b25TdWNjZXNzKFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6bnVsbFZhbHVlKCkpOwogICAgICAgICByZXR1cm47CkBAIC00NjIsMTQgKzQ3
NywxNCBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmxvYWRJbmRleGVzKCkKICAg
ICBWZWN0b3I8U3RyaW5nPiBuYW1lczsKICAgICBWZWN0b3I8U3RyaW5nPiBrZXlQYXRoczsKICAg
ICBWZWN0b3I8Ym9vbD4gdW5pcXVlRmxhZ3M7Ci0gICAgbV9iYWNraW5nU3RvcmUtPmdldEluZGV4
ZXMobV9pZCwgaWRzLCBuYW1lcywga2V5UGF0aHMsIHVuaXF1ZUZsYWdzKTsKKyAgICBtX2JhY2tp
bmdTdG9yZS0+Z2V0SW5kZXhlcyhtX2RhdGFiYXNlSWQsIG1faWQsIGlkcywgbmFtZXMsIGtleVBh
dGhzLCB1bmlxdWVGbGFncyk7CiAKICAgICBBU1NFUlQobmFtZXMuc2l6ZSgpID09IGlkcy5zaXpl
KCkpOwogICAgIEFTU0VSVChrZXlQYXRocy5zaXplKCkgPT0gaWRzLnNpemUoKSk7CiAgICAgQVNT
RVJUKHVuaXF1ZUZsYWdzLnNpemUoKSA9PSBpZHMuc2l6ZSgpKTsKIAogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgaWRzLnNpemUoKTsgaSsrKQotICAgICAgICBtX2luZGV4ZXMuc2V0KG5hbWVz
W2ldLCBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9iYWNraW5nU3RvcmUuZ2V0KCksIGlk
c1tpXSwgbmFtZXNbaV0sIG1fbmFtZSwga2V5UGF0aHNbaV0sIHVuaXF1ZUZsYWdzW2ldKSk7Cisg
ICAgICAgIG1faW5kZXhlcy5zZXQobmFtZXNbaV0sIElEQkluZGV4QmFja2VuZEltcGw6OmNyZWF0
ZShtX2JhY2tpbmdTdG9yZS5nZXQoKSwgbV9kYXRhYmFzZUlkLCB0aGlzLCBpZHNbaV0sIG5hbWVz
W2ldLCBtX25hbWUsIGtleVBhdGhzW2ldLCB1bmlxdWVGbGFnc1tpXSkpOwogfQogCiB2b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RT
dG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCkKQEAgLTQ5MCw3ICs1
MDUsNyBAQCBQYXNzUmVmUHRyPElEQktleT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2Vu
QXV0b0luY3JlbWVudEtleSgpCiAgICAgaWYgKG1fYXV0b0luY3JlbWVudE51bWJlciA+IDApCiAg
ICAgICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bWJlcihtX2F1dG9JbmNyZW1lbnROdW1iZXIr
Kyk7CiAKLSAgICBtX2F1dG9JbmNyZW1lbnROdW1iZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KG1fYmFj
a2luZ1N0b3JlLT5uZXh0QXV0b0luY3JlbWVudE51bWJlcihpZCgpKSk7CisgICAgbV9hdXRvSW5j
cmVtZW50TnVtYmVyID0gc3RhdGljX2Nhc3Q8aW50PihtX2JhY2tpbmdTdG9yZS0+bmV4dEF1dG9J
bmNyZW1lbnROdW1iZXIobV9kYXRhYmFzZUlkLCBpZCgpKSk7CiAgICAgcmV0dXJuIElEQktleTo6
Y3JlYXRlTnVtYmVyKG1fYXV0b0luY3JlbWVudE51bWJlcisrKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCA0NDc5
ZDFlMGQ3NGJmMDY4MDkyNDdkOGYyZDVmY2I2YjY3NzZiNmUwLi42YmY5NWNkMWYxZTdhNWY4OTdj
Y2M1YWUzNTg1YzQwMjRiZWQwMTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00MiwxMyArNDIsMTMgQEAgY2xhc3MgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDsKIAogY2xhc3MgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCA6IHB1Ymxp
YyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UgewogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJREJCYWNraW5nU3Rv
cmUqIGJhY2tpbmdTdG9yZSwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNr
aW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChiYWNr
aW5nU3RvcmUsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUs
IGRhdGFiYXNlSWQsIGlkLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KSk7CiAgICAgfQot
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IGNyZWF0ZShJ
REJCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlKiBiYWNr
aW5nU3RvcmUsIGludDY0X3QgZGF0YWJhc2VJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChiYWNraW5nU3RvcmUsIG5h
bWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGJhY2tpbmdTdG9yZSwgZGF0YWJhc2VJZCwgbmFt
ZSwga2V5UGF0aCwgYXV0b0luY3JlbWVudCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKCk7CiAKQEAgLTU5LDYgKzU5LDcgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gbV9pZDsKICAgICB9CiAgICAgdm9pZCBzZXRJZChpbnQ2NF90IGlkKSB7IG1faWQg
PSBpZDsgfQorICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJh
c2VJZDsgfQogCiAgICAgdmlydHVhbCBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQogICAgIHZpcnR1YWwgU3RyaW5nIGtleVBhdGgoKSBjb25zdCB7IHJldHVybiBtX2tleVBh
dGg7IH0KQEAgLTc3LDggKzc4LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vy
c29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rp
b24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgotICAgIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwoSURCQmFja2luZ1N0b3JlKiwgaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCk7Ci0gICAgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNraW5nU3RvcmUqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50KTsKKyAgICBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsKElEQkJhY2tpbmdTdG9yZSosIGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIGJv
b2wgYXV0b0luY3JlbWVudCk7CisgICAgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbChJREJCYWNr
aW5nU3RvcmUqLCBpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQpOwogCiAgICAgdm9pZCBsb2FkSW5k
ZXhlcygpOwogICAgIFBhc3NSZWZQdHI8SURCS2V5PiBnZW5BdXRvSW5jcmVtZW50S2V5KCk7CkBA
IC05OSw2ICsxMDAsNyBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4g
bV9iYWNraW5nU3RvcmU7CiAKKyAgICBpbnQ2NF90IG1fZGF0YWJhc2VJZDsKICAgICBpbnQ2NF90
IG1faWQ7CiAgICAgU3RyaW5nIG1fbmFtZTsKICAgICBTdHJpbmcgbV9rZXlQYXRoOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuY3BwCmluZGV4IGU0
M2I3YTM2MDY5NTFlM2QyY2E2NTMwZTQ2YzFmOWEyZGYyZjUxY2QuLjFmYWUwM2NkZjExOGUxZDQ2
OTQyNWJhNDhkZGFlODAzNjFjNDljMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5jcHAKQEAgLTE3Myw3ICsxNzMsNyBAQCBQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZT4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpvcGVuKFNlY3VyaXR5T3Jp
Z2luKiBzZWN1cml0eQogICAgIGlmICghcGF0aEJhc2UuaXNFbXB0eSgpKSB7CiAgICAgICAgIGlm
ICghbWFrZUFsbERpcmVjdG9yaWVzKHBhdGhCYXNlKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IElzIHRoZXJlIGFueSBvdGhlciB0aGluZyB3ZSBjb3VsZCBwb3NzaWJseSBkbyB0byByZWNvdmVy
IGF0IHRoaXMgcG9pbnQ/IElmIHNvLCBkbyBpdCByYXRoZXIgdGhhbiBqdXN0IGVycm9yaW5nIG91
dC4KLSAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlZCB0byBjcmVhdGUgTG9jYWxTdG9yYWdl
IGRhdGFiYXNlIHBhdGggJXMiLCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGNyZWF0ZSBJbmRleGVkIERCIGRhdGFiYXNlIHBhdGggJXMi
LCBwYXRoQmFzZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICB9CiAgICAgICAgIHBhdGggPSBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aEJhc2UsIHNl
Y3VyaXR5T3JpZ2luLT5kYXRhYmFzZUlkZW50aWZpZXIoKSArICIuaW5kZXhlZGRiIik7CkBAIC0y
NjMsNyArMjYzLDcgQEAgdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmdldE9iamVjdFN0b3Jl
cyhpbnQ2NF90IGRhdGFiYXNlSWQsIFZlY3RvcjxpbnQ2NF90PiYKICAgICB9CiB9CiAKLWJvb2wg
SURCU1FMaXRlQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90IGRh
dGFiYXNlSWQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKK2Jvb2wgSURCU1FMaXRl
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFiYXNlSWQsIGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGF1dG9JbmNyZW1lbnQs
IGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCkKIHsKICAgICBTUUxpdGVTdGF0ZW1lbnQg
cXVlcnkobV9kYiwgIklOU0VSVCBJTlRPIE9iamVjdFN0b3JlcyAobmFtZSwga2V5UGF0aCwgZG9B
dXRvSW5jcmVtZW50LCBkYXRhYmFzZUlkKSBWQUxVRVMgKD8sID8sID8sID8pIik7CiAgICAgaWYg
KHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRPaykKQEAgLTI5MSw3ICsyOTEsNyBAQCBzdGF0
aWMgdm9pZCBkb0RlbGV0ZShTUUxpdGVEYXRhYmFzZSYgZGIsIGNvbnN0IGNoYXIqIHNxbCwgaW50
NjRfdCBpZCkKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7IC8vIEZJWE1FOiBCZXR0ZXIgZXJy
b3IgaGFuZGxpbmcuCiB9CiAKLXZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9y
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewog
ICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJPTSBPYmplY3RTdG9yZXMgV0hFUkUgaWQgPSA/
Iiwgb2JqZWN0U3RvcmVJZCk7CiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIE9iamVj
dFN0b3JlRGF0YSBXSEVSRSBvYmplY3RTdG9yZUlkID0gPyIsIG9iamVjdFN0b3JlSWQpOwpAQCAt
Mjk5LDYgKzI5OSwyNiBAQCB2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0
U3RvcmUoaW50NjRfdCBvYmplY3RTdG9yZUlkKQogICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUg
RlJPTSBJbmRleGVzIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/Iiwgb2JqZWN0U3RvcmVJZCk7CiB9
CiAKK25hbWVzcGFjZSB7CitjbGFzcyBTUUxpdGVSZWNvcmRJZGVudGlmaWVyIDogcHVibGljIElE
QkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxpdGVSZWNvcmRJZGVudGlmaWVyPiBjcmVhdGUoKSB7IHJl
dHVybiBhZG9wdFJlZihuZXcgU1FMaXRlUmVjb3JkSWRlbnRpZmllcigpKTsgfQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFNRTGl0ZVJlY29yZElkZW50aWZpZXI+IGNyZWF0ZShpbnQ2NF90IGlkKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgU1FMaXRlUmVjb3JkSWRlbnRpZmllcihpZCkpOyB9CisgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lkICE9IC0xOyB9CisgICAg
aW50NjRfdCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1faWQ7IH0KKyAgICB2b2lkIHNldElkKGludDY0
X3QgaWQpIHsgbV9pZCA9IGlkOyB9Citwcml2YXRlOgorICAgIFNRTGl0ZVJlY29yZElkZW50aWZp
ZXIoKSA6IG1faWQoLTEpIHsgfQorICAgIFNRTGl0ZVJlY29yZElkZW50aWZpZXIoaW50NjRfdCBp
ZCkgOiBtX2lkKGlkKSB7IH0KKyAgICBpbnQ2NF90IG1faWQ7Cit9OworfQorCitQYXNzUmVmUHRy
PElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBJREJTUUxpdGVC
YWNraW5nU3RvcmU6OmludmFsaWRSZWNvcmRJZGVudGlmaWVyKCkKK3sKKyAgICByZXR1cm4gU1FM
aXRlUmVjb3JkSWRlbnRpZmllcjo6Y3JlYXRlKCk7Cit9CisKIHN0YXRpYyBTdHJpbmcgd2hlcmVT
eW50YXhGb3JLZXkoY29uc3QgSURCS2V5JiBrZXksIFN0cmluZyBxdWFsaWZpZWRUYWJsZU5hbWUg
PSAiIikKIHsKICAgICBzd2l0Y2ggKGtleS50eXBlKCkpIHsKQEAgLTM3Myw3ICszOTMsNyBAQCBz
dGF0aWMgU3RyaW5nIHVwcGVyQ3Vyc29yV2hlcmVGcmFnbWVudChjb25zdCBJREJLZXkmIGtleSwg
U3RyaW5nIGNvbXBhcmlzb25PcGVyYQogICAgIHJldHVybiAiIjsKIH0KIAotU3RyaW5nIElEQlNR
TGl0ZUJhY2tpbmdTdG9yZTo6Z2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmIGtleSkKK1N0cmluZyBJREJTUUxpdGVCYWNraW5nU3RvcmU6Omdl
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiBrZXkpCiB7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJTRUxFQ1Qg
a2V5U3RyaW5nLCBrZXlEYXRlLCBrZXlOdW1iZXIsIHZhbHVlIEZST00gT2JqZWN0U3RvcmVEYXRh
IFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCAiICsgd2hlcmVTeW50YXhGb3JLZXkoa2V5KSk7
CiAgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKQEAgLTQyMiw1
OCArNDQyLDU0IEBAIHN0YXRpYyB2b2lkIGJpbmRLZXlUb1F1ZXJ5V2l0aE51bGxzKFNRTGl0ZVN0
YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1uLCBjb25zCiAgICAgfQogfQogCi1ib29sIElE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgaW50NjRfdCYg
cm93SWQsIGJvb2wgaW52YWxpZFJvd0lkKQorYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OnB1
dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3Qg
SURCS2V5JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRp
ZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICBTdHJpbmcgc3FsID0gIWludmFsaWRSb3dJ
ZCA/ICJVUERBVEUgT2JqZWN0U3RvcmVEYXRhIFNFVCBrZXlTdHJpbmcgPSA/LCBrZXlEYXRlID0g
Pywga2V5TnVtYmVyID0gPywgdmFsdWUgPSA/IFdIRVJFIGlkID0gPyIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6ICJJTlNFUlQgSU5UTyBPYmplY3RTdG9yZURhdGEgKGtleVN0cmlu
Zywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSwgb2JqZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/
LCA/LCA/LCA/KSI7CisgICAgU1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3FsaXRlUmVjb3JkSWRl
bnRpZmllciA9IHN0YXRpY19jYXN0PFNRTGl0ZVJlY29yZElkZW50aWZpZXIqPihyZWNvcmRJZGVu
dGlmaWVyKTsKKworICAgIFN0cmluZyBzcWwgPSBzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pc1Zh
bGlkKCkgPyAiVVBEQVRFIE9iamVjdFN0b3JlRGF0YSBTRVQga2V5U3RyaW5nID0gPywga2V5RGF0
ZSA9ID8sIGtleU51bWJlciA9ID8sIHZhbHVlID0gPyBXSEVSRSBpZCA9ID8iCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJJTlNFUlQgSU5UTyBP
YmplY3RTdG9yZURhdGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCB2YWx1ZSwgb2Jq
ZWN0U3RvcmVJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSI7CiAgICAgU1FMaXRlU3RhdGVtZW50
IHF1ZXJ5KG1fZGIsIHNxbCk7CiAgICAgaWYgKHF1ZXJ5LnByZXBhcmUoKSAhPSBTUUxSZXN1bHRP
aykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgYmluZEtleVRvUXVlcnlXaXRoTnVsbHMo
cXVlcnksIDEsIGtleSk7CiAgICAgcXVlcnkuYmluZEJsb2IoNCwgdmFsdWUpOwotICAgIGlmICgh
aW52YWxpZFJvd0lkKQotICAgICAgICBxdWVyeS5iaW5kSW50NjQoNSwgcm93SWQpOworICAgIGlm
IChzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pc1ZhbGlkKCkpCisgICAgICAgIHF1ZXJ5LmJpbmRJ
bnQ2NCg1LCBzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pZCgpKTsKICAgICBlbHNlCiAgICAgICAg
IHF1ZXJ5LmJpbmRJbnQ2NCg1LCBvYmplY3RTdG9yZUlkKTsKIAogICAgIGlmIChxdWVyeS5zdGVw
KCkgIT0gU1FMUmVzdWx0RG9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGlu
dmFsaWRSb3dJZCkKLSAgICAgICAgcm93SWQgPSBtX2RiLmxhc3RJbnNlcnRSb3dJRCgpOworICAg
IGlmICghc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aXNWYWxpZCgpKQorICAgICAgICBzcWxpdGVS
ZWNvcmRJZGVudGlmaWVyLT5zZXRJZChtX2RiLmxhc3RJbnNlcnRSb3dJRCgpKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y2xlYXJPYmplY3RT
dG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQpCit2b2lkIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6
Y2xlYXJPYmplY3RTdG9yZShpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQpCiB7CiAgICAg
ZG9EZWxldGUobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURh
dGFJZCBJTiAoU0VMRUNUIGlkIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3Jl
SWQgPSA/KSIsIG9iamVjdFN0b3JlSWQpOwogICAgIGRvRGVsZXRlKG1fZGIsICJERUxFVEUgRlJP
TSBPYmplY3RTdG9yZURhdGEgV0hFUkUgb2JqZWN0U3RvcmVJZCA9ID8iLCBvYmplY3RTdG9yZUlk
KTsKIH0KIAotdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZU9iamVjdFN0b3JlUmVj
b3JkKGludDY0X3QsIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRhSWQpCit2b2lkIElEQlNRTGl0ZUJh
Y2tpbmdTdG9yZTo6ZGVsZXRlT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqIHJlY29yZElkZW50
aWZpZXIpCiB7CisgICAgY29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3FsaXRlUmVjb3Jk
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PGNvbnN0IFNRTGl0ZVJlY29yZElkZW50aWZpZXIqPihy
ZWNvcmRJZGVudGlmaWVyKTsKKyAgICBBU1NFUlQoc3FsaXRlUmVjb3JkSWRlbnRpZmllci0+aXNW
YWxpZCgpKTsKKwogICAgIFNRTGl0ZVN0YXRlbWVudCBvc1F1ZXJ5KG1fZGIsICJERUxFVEUgRlJP
TSBPYmplY3RTdG9yZURhdGEgV0hFUkUgaWQgPSA/Iik7CiAgICAgYm9vbCBvayA9IG9zUXVlcnku
cHJlcGFyZSgpID09IFNRTFJlc3VsdE9rOwogICAgIEFTU0VSVF9VTlVTRUQob2ssIG9rKTsgLy8g
RklYTUU6IEJldHRlciBlcnJvciBoYW5kbGluZz8KIAotICAgIG9zUXVlcnkuYmluZEludDY0KDEs
IG9iamVjdFN0b3JlRGF0YUlkKTsKKyAgICBvc1F1ZXJ5LmJpbmRJbnQ2NCgxLCBzcWxpdGVSZWNv
cmRJZGVudGlmaWVyLT5pZCgpKTsKIAogICAgIG9rID0gb3NRdWVyeS5zdGVwKCkgPT0gU1FMUmVz
dWx0RG9uZTsKICAgICBBU1NFUlRfVU5VU0VEKG9rLCBvayk7Ci0KLSAgICBTUUxpdGVTdGF0ZW1l
bnQgaW5kZXhRdWVyeShtX2RiLCAiREVMRVRFIEZST00gSW5kZXhEYXRhIFdIRVJFIG9iamVjdFN0
b3JlRGF0YUlkID0gPyIpOwotICAgIG9rID0gaW5kZXhRdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVz
dWx0T2s7Ci0gICAgQVNTRVJUX1VOVVNFRChvaywgb2spOyAvLyBGSVhNRTogQmV0dGVyIGVycm9y
IGhhbmRsaW5nPwotCi0gICAgaW5kZXhRdWVyeS5iaW5kSW50NjQoMSwgb2JqZWN0U3RvcmVEYXRh
SWQpOwotCi0gICAgb2sgPSBpbmRleFF1ZXJ5LnN0ZXAoKSA9PSBTUUxSZXN1bHREb25lOwotICAg
IEFTU0VSVF9VTlVTRUQob2ssIG9rKTsKIH0KIAotZG91YmxlIElEQlNRTGl0ZUJhY2tpbmdTdG9y
ZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKQorZG91Ymxl
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6bmV4dEF1dG9JbmNyZW1lbnROdW1iZXIoaW50NjRfdCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2Ri
LCAiU0VMRUNUIG1heChrZXlOdW1iZXIpICsgMSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBv
YmplY3RTdG9yZUlkID0gPyBBTkQga2V5U3RyaW5nIElTIE5VTEwgQU5EIGtleURhdGUgSVMgTlVM
TCIpOwogICAgIGJvb2wgb2sgPSBxdWVyeS5wcmVwYXJlKCkgPT0gU1FMUmVzdWx0T2s7CkBAIC00
ODcsOCArNTAzLDEwIEBAIGRvdWJsZSBJREJTUUxpdGVCYWNraW5nU3RvcmU6Om5leHRBdXRvSW5j
cmVtZW50TnVtYmVyKGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKICAgICByZXR1cm4gcXVlcnkuZ2V0
Q29sdW1uRG91YmxlKDApOwogfQogCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6a2V5RXhp
c3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktleSYga2V5
LCBpbnQ2NF90JiBmb3VuZE9iamVjdFN0b3JlRGF0YUlkKQorYm9vbCBJREJTUUxpdGVCYWNraW5n
U3RvcmU6OmtleUV4aXN0c0luT2JqZWN0U3RvcmUoaW50NjRfdCwgaW50NjRfdCBvYmplY3RTdG9y
ZUlkLCBjb25zdCBJREJLZXkmIGtleSwgT2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyKiBmb3Vu
ZFJlY29yZElkZW50aWZpZXIpCiB7CisgICAgU1FMaXRlUmVjb3JkSWRlbnRpZmllciogc3FsaXRl
UmVjb3JkSWRlbnRpZmllciA9IHN0YXRpY19jYXN0PFNRTGl0ZVJlY29yZElkZW50aWZpZXIqPihm
b3VuZFJlY29yZElkZW50aWZpZXIpOworCiAgICAgU3RyaW5nIHNxbCA9IFN0cmluZygiU0VMRUNU
IGlkIEZST00gT2JqZWN0U3RvcmVEYXRhIFdIRVJFIG9iamVjdFN0b3JlSWQgPSA/IEFORCAiKSAr
IHdoZXJlU3ludGF4Rm9yS2V5KGtleSk7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIs
IHNxbCk7CiAgICAgYm9vbCBvayA9IHF1ZXJ5LnByZXBhcmUoKSA9PSBTUUxSZXN1bHRPazsKQEAg
LTUwMCwxMSArNTE4LDExIEBAIGJvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJ
bk9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QKICAgICBpZiAocXVlcnku
c3RlcCgpICE9IFNRTFJlc3VsdFJvdykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZm91
bmRPYmplY3RTdG9yZURhdGFJZCA9IHF1ZXJ5LmdldENvbHVtbkludDY0KDApOworICAgIHNxbGl0
ZVJlY29yZElkZW50aWZpZXItPnNldElkKHF1ZXJ5LmdldENvbHVtbkludDY0KDApKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2Fs
bGJhY2smIGNhbGxiYWNrKQorYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmZvckVhY2hPYmpl
Y3RTdG9yZVJlY29yZChpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3Jl
UmVjb3JkQ2FsbGJhY2smIGNhbGxiYWNrKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeSht
X2RiLCAiU0VMRUNUIGlkLCB2YWx1ZSBGUk9NIE9iamVjdFN0b3JlRGF0YSBXSEVSRSBvYmplY3RT
dG9yZUlkID0gPyIpOwogICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCkBA
IC01MTUsMTQgKzUzMywxNSBAQCBib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Zm9yRWFjaE9i
amVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgT2JqZQogICAgIHdoaWxlIChx
dWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0Um93KSB7CiAgICAgICAgIGludDY0X3Qgb2JqZWN0U3Rv
cmVEYXRhSWQgPSBxdWVyeS5nZXRDb2x1bW5JbnQ2NCgwKTsKICAgICAgICAgU3RyaW5nIHZhbHVl
ID0gcXVlcnkuZ2V0Q29sdW1uQmxvYkFzU3RyaW5nKDEpOwotICAgICAgICBpZiAoIWNhbGxiYWNr
LmNhbGxiYWNrKG9iamVjdFN0b3JlRGF0YUlkLCB2YWx1ZSkpCisgICAgICAgIFJlZlB0cjxTUUxp
dGVSZWNvcmRJZGVudGlmaWVyPiByZWNvcmRJZGVudGlmaWVyID0gU1FMaXRlUmVjb3JkSWRlbnRp
Zmllcjo6Y3JlYXRlKG9iamVjdFN0b3JlRGF0YUlkKTsKKyAgICAgICAgaWYgKCFjYWxsYmFjay5j
YWxsYmFjayhyZWNvcmRJZGVudGlmaWVyLmdldCgpLCB2YWx1ZSkpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSURCU1FMaXRl
QmFja2luZ1N0b3JlOjpnZXRJbmRleGVzKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGlu
dDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJp
bmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9vbD4mIGZvdW5kVW5pcXVlRmxhZ3MpCit2b2lk
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0SW5kZXhlcyhpbnQ2NF90LCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIFZlY3RvcjxpbnQ2NF90PiYgZm91bmRJZHMsIFZlY3RvcjxTdHJpbmc+JiBmb3Vu
ZE5hbWVzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRLZXlQYXRocywgVmVjdG9yPGJvb2w+JiBmb3Vu
ZFVuaXF1ZUZsYWdzKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiU0VMRUNU
IGlkLCBuYW1lLCBrZXlQYXRoLCBpc1VuaXF1ZSBGUk9NIEluZGV4ZXMgV0hFUkUgb2JqZWN0U3Rv
cmVJZCA9ID8iKTsKICAgICBib29sIG9rID0gcXVlcnkucHJlcGFyZSgpID09IFNRTFJlc3VsdE9r
OwpAQCAtNTQzLDcgKzU2Miw3IEBAIHZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRJbmRl
eGVzKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmCiAgICAgfQogfQog
Ci1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgoaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBp
c1VuaXF1ZSwgaW50NjRfdCYgaW5kZXhJZCkKK2Jvb2wgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpj
cmVhdGVJbmRleChpbnQ2NF90LCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRl
eElkKQogewogICAgIFNRTGl0ZVN0YXRlbWVudCBxdWVyeShtX2RiLCAiSU5TRVJUIElOVE8gSW5k
ZXhlcyAob2JqZWN0U3RvcmVJZCwgbmFtZSwga2V5UGF0aCwgaXNVbmlxdWUpIFZBTFVFUyAoPywg
PywgPywgPykiKTsKICAgICBpZiAocXVlcnkucHJlcGFyZSgpICE9IFNRTFJlc3VsdE9rKQpAQCAt
NTYxLDM2ICs1ODAsNDEgQEAgYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4
KGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgU3RyaW5nJiBuYW0KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4KGludDY0X3Qg
aW5kZXhJZCkKK3ZvaWQgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpkZWxldGVJbmRleChpbnQ2NF90
LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4SWQpCiB7CiAgICAgZG9EZWxldGUobV9kYiwgIkRFTEVU
RSBGUk9NIEluZGV4ZXMgV0hFUkUgaWQgPSA/IiwgaW5kZXhJZCk7CiAgICAgZG9EZWxldGUobV9k
YiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBpbmRleElkID0gPyIsIGluZGV4SWQpOwog
fQogCi1ib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGlu
dDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGludDY0X3Qgb2JqZWN0U3RvcmVEYXRh
SWQpCitib29sIElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6cHV0SW5kZXhEYXRhRm9yUmVjb3JkKGlu
dDY0X3QsIGludDY0X3QsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXksIGNvbnN0
IE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKKyAgICBj
b25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBzcWxpdGVSZWNvcmRJZGVudGlmaWVyID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllcio+KHJlY29yZElkZW50aWZpZXIp
OworCiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJJTlNFUlQgSU5UTyBJbmRleERh
dGEgKGtleVN0cmluZywga2V5RGF0ZSwga2V5TnVtYmVyLCBpbmRleElkLCBvYmplY3RTdG9yZURh
dGFJZCkgVkFMVUVTICg/LCA/LCA/LCA/LCA/KSIpOwogICAgIGlmIChxdWVyeS5wcmVwYXJlKCkg
IT0gU1FMUmVzdWx0T2spCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGJpbmRLZXlUb1F1
ZXJ5V2l0aE51bGxzKHF1ZXJ5LCAxLCBrZXkpOwogICAgIHF1ZXJ5LmJpbmRJbnQ2NCg0LCBpbmRl
eElkKTsKLSAgICBxdWVyeS5iaW5kSW50NjQoNSwgb2JqZWN0U3RvcmVEYXRhSWQpOworICAgIHF1
ZXJ5LmJpbmRJbnQ2NCg1LCBzcWxpdGVSZWNvcmRJZGVudGlmaWVyLT5pZCgpKTsKIAogICAgIHJl
dHVybiBxdWVyeS5zdGVwKCkgPT0gU1FMUmVzdWx0RG9uZTsKIH0KIAotYm9vbCBJREJTUUxpdGVC
YWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJlY29yZChpbnQ2NF90IG9iamVjdFN0b3Jl
RGF0YUlkKQorYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6OmRlbGV0ZUluZGV4RGF0YUZvclJl
Y29yZChpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IE9iamVjdFN0b3Jl
UmVjb3JkSWRlbnRpZmllciogcmVjb3JkSWRlbnRpZmllcikKIHsKLSAgICBTUUxpdGVTdGF0ZW1l
bnQgcXVlcnkobV9kYiwgIkRFTEVURSBGUk9NIEluZGV4RGF0YSBXSEVSRSBvYmplY3RTdG9yZURh
dGFJZCA9ID8iKTsKKyAgICBjb25zdCBTUUxpdGVSZWNvcmRJZGVudGlmaWVyKiBzcWxpdGVSZWNv
cmRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1FMaXRlUmVjb3JkSWRlbnRpZmllcio+
KHJlY29yZElkZW50aWZpZXIpOworCisgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1fZGIsICJE
RUxFVEUgRlJPTSBJbmRleERhdGEgV0hFUkUgb2JqZWN0U3RvcmVEYXRhSWQgPSA/IEFORCBpbmRl
eElkID0gPyIpOwogICAgIGlmIChxdWVyeS5wcmVwYXJlKCkgIT0gU1FMUmVzdWx0T2spCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIHF1ZXJ5LmJpbmRJbnQ2NCgxLCBvYmplY3RTdG9yZURh
dGFJZCk7CisgICAgcXVlcnkuYmluZEludDY0KDEsIHNxbGl0ZVJlY29yZElkZW50aWZpZXItPmlk
KCkpOworICAgIHF1ZXJ5LmJpbmRJbnQ2NCgyLCBpbmRleElkKTsKICAgICByZXR1cm4gcXVlcnku
c3RlcCgpID09IFNRTFJlc3VsdERvbmU7CiB9CiAKLVN0cmluZyBJREJTUUxpdGVCYWNraW5nU3Rv
cmU6OmdldE9iamVjdFZpYUluZGV4KGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkp
CitTdHJpbmcgSURCU1FMaXRlQmFja2luZ1N0b3JlOjpnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90
LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYga2V5KQogewogICAgIFN0
cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCAiKQogICAgICAgICAgICAgICAgICArICJPYmplY3RT
dG9yZURhdGEudmFsdWUgIgpAQCAtNjI5LDcgKzY1Myw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPElE
QktleT4ga2V5RnJvbVF1ZXJ5KFNRTGl0ZVN0YXRlbWVudCYgcXVlcnksIGludCBiYXNlQ29sdW1u
KQogICAgIHJldHVybiBJREJLZXk6OmNyZWF0ZU51bGwoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJL
ZXk+IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6Z2V0UHJpbWFyeUtleVZpYUluZGV4KGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCitQYXNzUmVmUHRyPElEQktleT4gSURCU1FMaXRl
QmFja2luZ1N0b3JlOjpnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCwgaW50NjRfdCwgaW50
NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKIHsKICAgICBTdHJpbmcgc3FsID0gU3Ry
aW5nKCJTRUxFQ1QgIikKICAgICAgICAgICAgICAgICAgKyAiT2JqZWN0U3RvcmVEYXRhLmtleVN0
cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3JlRGF0YS5rZXlOdW1iZXIg
IgpAQCAtNjUxLDcgKzY3NSw3IEBAIFBhc3NSZWZQdHI8SURCS2V5PiBJREJTUUxpdGVCYWNraW5n
U3RvcmU6OmdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsCiAgICAgcmV0dXJu
IGZvdW5kS2V5LnJlbGVhc2UoKTsKIH0KIAotYm9vbCBJREJTUUxpdGVCYWNraW5nU3RvcmU6Omtl
eUV4aXN0c0luSW5kZXgoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmIGtleSkKK2Jvb2wg
SURCU1FMaXRlQmFja2luZ1N0b3JlOjprZXlFeGlzdHNJbkluZGV4KGludDY0X3QsIGludDY0X3Qs
IGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiBrZXkpCiB7CiAgICAgU3RyaW5nIHNxbCA9
IFN0cmluZygiU0VMRUNUIGlkIEZST00gSW5kZXhEYXRhIFdIRVJFIGluZGV4SWQgPSA/IEFORCAi
KSArIHdoZXJlU3ludGF4Rm9yS2V5KGtleSk7CiAgICAgU1FMaXRlU3RhdGVtZW50IHF1ZXJ5KG1f
ZGIsIHNxbCk7CkBAIC02ODIsNyArNzA2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJLZXk+IGtleSgpIHsgcmV0dXJuIG1fY3VycmVudEtleTsgfQogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRLZXk7IH0K
ICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpID0gMDsKLSAgICB2aXJ0dWFsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVEYXRhSWQoKSA9IDA7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdT
dG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50
aWZpZXIoKSA9IDA7CiAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0YUlkKCkgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCkgPSAwOwpAQCAtNzQxLDcgKzc2NSw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIEN1cnNvckltcGxDb21tb24uCiAgICAgdmlydHVhbCBTdHJpbmcg
dmFsdWUoKSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBv
YmplY3RTdG9yZURhdGFJZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9CisgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBv
YmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IHJldHVybiBTUUxpdGVSZWNvcmRJZGVudGlm
aWVyOjpjcmVhdGUobV9jdXJyZW50SWQpOyB9CiAgICAgdmlydHVhbCBpbnQ2NF90IGluZGV4RGF0
YUlkKCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZv
aWQgbG9hZEN1cnJlbnRSb3coKTsKICAgICB2aXJ0dWFsIGJvb2wgY3VycmVudFJvd0V4aXN0cygp
OwpAQCAtNzc5LDcgKzgwMyw3IEBAIHB1YmxpYzoKICAgICAvLyBDdXJzb3JJbXBsQ29tbW9uCiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQktleT4gcHJpbWFyeUtleSgpIHsgcmV0dXJuIG1fY3Vy
cmVudFByaW1hcnlLZXk7IH0KICAgICB2aXJ0dWFsIFN0cmluZyB2YWx1ZSgpIHsgQVNTRVJUX05P
VF9SRUFDSEVEKCk7IHJldHVybiBTdHJpbmcoKTsgfQotICAgIHZpcnR1YWwgaW50NjRfdCBvYmpl
Y3RTdG9yZURhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiAwOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2JqZWN0U3RvcmVSZWNvcmRJZGVu
dGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7IEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50NjRfdCBpbmRleERhdGFJZCgpIHsgcmV0
dXJuIG1fY3VycmVudElkOyB9CiAgICAgdmlydHVhbCB2b2lkIGxvYWRDdXJyZW50Um93KCk7CiAg
ICAgdmlydHVhbCBib29sIGN1cnJlbnRSb3dFeGlzdHMoKTsKQEAgLTgxNyw3ICs4NDEsNyBAQCBw
dWJsaWM6CiAgICAgLy8gQ3Vyc29ySW1wbENvbW1vbgogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJLZXk+IHByaW1hcnlLZXkoKSB7IHJldHVybiBtX2N1cnJlbnRQcmltYXJ5S2V5OyB9CiAgICAg
dmlydHVhbCBTdHJpbmcgdmFsdWUoKSB7IHJldHVybiBtX2N1cnJlbnRWYWx1ZTsgfQotICAgIHZp
cnR1YWwgaW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCgpIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7
IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6T2Jq
ZWN0U3RvcmVSZWNvcmRJZGVudGlmaWVyPiBvYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIoKSB7
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gMDsgfQogICAgIHZpcnR1YWwgaW50NjRfdCBp
bmRleERhdGFJZCgpIHsgcmV0dXJuIG1fY3VycmVudElkOyB9CiAgICAgdmlydHVhbCB2b2lkIGxv
YWRDdXJyZW50Um93KCk7CiAgICAgdmlydHVhbCBib29sIGN1cnJlbnRSb3dFeGlzdHMoKTsKQEAg
LTg0OSw3ICs4NzMsNyBAQCBib29sIEluZGV4Q3Vyc29ySW1wbDo6Y3VycmVudFJvd0V4aXN0cygp
CiAKIH0gLy8gbmFtZXNwYWNlCiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yKGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlv
biBkaXJlY3Rpb24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxp
dGVCYWNraW5nU3RvcmU6Om9wZW5PYmplY3RTdG9yZUN1cnNvcihpbnQ2NF90LCBpbnQ2NF90IG9i
amVjdFN0b3JlSWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rp
b24gZGlyZWN0aW9uKQogewogICAgIGJvb2wgbG93ZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT5s
b3dlcigpOwogICAgIGJvb2wgdXBwZXJCb3VuZCA9IHJhbmdlICYmIHJhbmdlLT51cHBlcigpOwpA
QCAtODg2LDcgKzkxMCw3IEBAIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+IElE
QlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3Blbk9iamVjdFN0b3JlQ3Vyc29yCiAgICAgcmV0dXJuIGN1
cnNvci5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3JlOjpDdXJzb3I+
IElEQlNRTGl0ZUJhY2tpbmdTdG9yZTo6b3BlbkluZGV4S2V5Q3Vyc29yKGludDY0X3QgaW5kZXhJ
ZCwgY29uc3QgSURCS2V5UmFuZ2UqIHJhbmdlLCBJREJDdXJzb3I6OkRpcmVjdGlvbiBkaXJlY3Rp
b24pCitQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxpdGVCYWNraW5n
U3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90LCBpbnQ2NF90LCBpbnQ2NF90IGluZGV4
SWQsIGNvbnN0IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0
aW9uKQogewogICAgIFN0cmluZyBzcWwgPSBTdHJpbmcoIlNFTEVDVCBJbmRleERhdGEuaWQsIElu
ZGV4RGF0YS5rZXlTdHJpbmcsIEluZGV4RGF0YS5rZXlEYXRlLCBJbmRleERhdGEua2V5TnVtYmVy
LCAiKQogICAgICAgICAgICAgICAgICArICgiT2JqZWN0U3RvcmVEYXRhLmtleVN0cmluZywgT2Jq
ZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3JlRGF0YS5rZXlOdW1iZXIgIikKQEAgLTky
Niw3ICs5NTAsNyBAQCBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJTUUxp
dGVCYWNraW5nU3RvcmU6Om9wZW5JbmRleEtleUN1cnNvcihpbgogICAgIHJldHVybiBjdXJzb3Iu
cmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZTo6Q3Vyc29yPiBJREJT
UUxpdGVCYWNraW5nU3RvcmU6Om9wZW5JbmRleEN1cnNvcihpbnQ2NF90IGluZGV4SWQsIGNvbnN0
IElEQktleVJhbmdlKiByYW5nZSwgSURCQ3Vyc29yOjpEaXJlY3Rpb24gZGlyZWN0aW9uKQorUGFz
c1JlZlB0cjxJREJCYWNraW5nU3RvcmU6OkN1cnNvcj4gSURCU1FMaXRlQmFja2luZ1N0b3JlOjpv
cGVuSW5kZXhDdXJzb3IoaW50NjRfdCwgaW50NjRfdCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJ
REJLZXlSYW5nZSogcmFuZ2UsIElEQkN1cnNvcjo6RGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAg
ICBTdHJpbmcgc3FsID0gU3RyaW5nKCJTRUxFQ1QgSW5kZXhEYXRhLmlkLCBJbmRleERhdGEua2V5
U3RyaW5nLCBJbmRleERhdGEua2V5RGF0ZSwgSW5kZXhEYXRhLmtleU51bWJlciwgIikKICAgICAg
ICAgICAgICAgICAgKyAoIk9iamVjdFN0b3JlRGF0YS52YWx1ZSwgT2JqZWN0U3RvcmVEYXRhLmtl
eVN0cmluZywgT2JqZWN0U3RvcmVEYXRhLmtleURhdGUsIE9iamVjdFN0b3JlRGF0YS5rZXlOdW1i
ZXIgIikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2lu
Z1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL0lEQlNRTGl0ZUJhY2tpbmdTdG9yZS5o
CmluZGV4IGZlMGM2YzE3NTE2ZGU5ZTQwZmE5Nzg3YjFjZTVmMGU2MzIwYjU5YjcuLmFiMWFmY2Uz
OWFlN2RlMDkwNGJiMzJjYTNjZDc1MWFiMGFlMjNlMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvSURCU1FMaXRlQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9JREJTUUxpdGVCYWNraW5nU3RvcmUuaApAQCAtNDEsMjkgKzQxLDMwIEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgc2V0SURCRGF0YWJhc2VNZXRhRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgaW50NjRfdCYgcm93SWQsIGJvb2wgaW52YWxp
ZFJvd0lkKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRPYmplY3RTdG9yZXMoaW50NjRfdCBkYXRh
YmFzZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8U3RyaW5nPiYgZm91bmRO
YW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rvcjxib29sPiYgZm91bmRB
dXRvSW5jcmVtZW50RmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVt
ZW50LCBpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3QmIGFzc2lnbmVkT2JqZWN0U3RvcmVJZCk7
Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJ
ZCk7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0T2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBJREJLZXkmKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0T2JqZWN0U3Rv
cmVSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJp
bmcmIHZhbHVlLCBpbnQ2NF90JiByb3dJZCwgYm9vbCBpbnZhbGlkUm93SWQpOwotICAgIHZpcnR1
YWwgdm9pZCBjbGVhck9iamVjdFN0b3JlKGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJZCwg
aW50NjRfdCBvYmplY3RTdG9yZURhdGFJZCk7Ci0gICAgdmlydHVhbCBkb3VibGUgbmV4dEF1dG9J
bmNyZW1lbnROdW1iZXIoaW50NjRfdCBvYmplY3RTdG9yZUlkKTsKLSAgICB2aXJ0dWFsIGJvb2wg
a2V5RXhpc3RzSW5PYmplY3RTdG9yZShpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eSYsIGludDY0X3QmIGZvdW5kT2JqZWN0U3RvcmVEYXRhSWQpOwotCi0gICAgdmlydHVhbCBib29s
IGZvckVhY2hPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0
b3JlUmVjb3JkQ2FsbGJhY2smKTsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0
X3Qgb2JqZWN0U3RvcmVJZCwgVmVjdG9yPGludDY0X3Q+JiBmb3VuZElkcywgVmVjdG9yPFN0cmlu
Zz4mIGZvdW5kTmFtZXMsIFZlY3RvcjxTdHJpbmc+JiBmb3VuZEtleVBhdGhzLCBWZWN0b3I8Ym9v
bD4mIGZvdW5kVW5pcXVlRmxhZ3MpOwotICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVJbmRleChpbnQ2
NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBib29sIGlzVW5pcXVlLCBpbnQ2NF90JiBpbmRleElkKTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkKTsKLSAgICB2aXJ0dWFsIGJvb2wgcHV0SW5kZXhE
YXRhRm9yUmVjb3JkKGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgaW50NjRfdCBvYmpl
Y3RTdG9yZURhdGFJZCk7Ci0gICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZvclJlY29y
ZChpbnQ2NF90IG9iamVjdFN0b3JlRGF0YUlkKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBnZXRPYmpl
Y3RWaWFJbmRleChpbnQ2NF90IGluZGV4SWQsIGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJLZXk+IGdldFByaW1hcnlLZXlWaWFJbmRleChpbnQ2NF90IGluZGV4SWQs
IGNvbnN0IElEQktleSYpOwotICAgIHZpcnR1YWwgYm9vbCBrZXlFeGlzdHNJbkluZGV4KGludDY0
X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5Jik7Ci0KLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vy
c29yPiBvcGVuT2JqZWN0U3RvcmVDdXJzb3IoaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBJ
REJLZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8Q3Vyc29yPiBvcGVuSW5kZXhLZXlDdXJzb3IoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJL
ZXlSYW5nZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
Q3Vyc29yPiBvcGVuSW5kZXhDdXJzb3IoaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5n
ZSosIElEQkN1cnNvcjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYga2V5UGF0aCwgYm9vbCBhdXRvSW5jcmVtZW50LCBpbnQ2NF90JiBhc3NpZ25lZE9iamVjdFN0
b3JlSWQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShpbnQ2NF90IGRhdGFi
YXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPE9i
amVjdFN0b3JlUmVjb3JkSWRlbnRpZmllcj4gaW52YWxpZFJlY29yZElkZW50aWZpZXIoKTsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRPYmplY3RTdG9yZVJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgY29uc3QgSURCS2V5Jik7CisgICAgdmlydHVhbCBib29s
IHB1dE9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RT
dG9yZUlkLCBjb25zdCBJREJLZXkmLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBPYmplY3RTdG9yZVJl
Y29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPYmplY3RTdG9yZShpbnQ2
NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZU9iamVjdFN0b3JlUmVjb3JkKGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmpl
Y3RTdG9yZUlkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0
dWFsIGRvdWJsZSBuZXh0QXV0b0luY3JlbWVudE51bWJlcihpbnQ2NF90IGRhdGFiYXNlSWQsIGlu
dDY0X3Qgb2JqZWN0U3RvcmVJZCk7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luT2JqZWN0
U3RvcmUoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElE
QktleSYsIE9iamVjdFN0b3JlUmVjb3JkSWRlbnRpZmllciogZm91bmRSZWNvcmRJZGVudGlmaWVy
KTsKKworICAgIHZpcnR1YWwgYm9vbCBmb3JFYWNoT2JqZWN0U3RvcmVSZWNvcmQoaW50NjRfdCBk
YXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIE9iamVjdFN0b3JlUmVjb3JkQ2FsbGJh
Y2smKTsKKworICAgIHZpcnR1YWwgdm9pZCBnZXRJbmRleGVzKGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBWZWN0b3I8aW50NjRfdD4mIGZvdW5kSWRzLCBWZWN0b3I8
U3RyaW5nPiYgZm91bmROYW1lcywgVmVjdG9yPFN0cmluZz4mIGZvdW5kS2V5UGF0aHMsIFZlY3Rv
cjxib29sPiYgZm91bmRVbmlxdWVGbGFncyk7CisgICAgdmlydHVhbCBib29sIGNyZWF0ZUluZGV4
KGludDY0X3QgZGF0YWJhc2VJZCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgYm9vbCBpc1VuaXF1ZSwgaW50NjRfdCYgaW5k
ZXhJZCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QgZGF0YWJhc2VJZCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQpOworICAgIHZpcnR1YWwgYm9v
bCBwdXRJbmRleERhdGFGb3JSZWNvcmQoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVj
dFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5JiwgY29uc3QgT2JqZWN0U3Rv
cmVSZWNvcmRJZGVudGlmaWVyKik7CisgICAgdmlydHVhbCBib29sIGRlbGV0ZUluZGV4RGF0YUZv
clJlY29yZChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRf
dCBpbmRleElkLCBjb25zdCBPYmplY3RTdG9yZVJlY29yZElkZW50aWZpZXIqKTsKKyAgICB2aXJ0
dWFsIFN0cmluZyBnZXRPYmplY3RWaWFJbmRleChpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qg
b2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXkmKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCS2V5PiBnZXRQcmltYXJ5S2V5VmlhSW5kZXgoaW50NjRfdCBkYXRh
YmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURC
S2V5Jik7CisgICAgdmlydHVhbCBib29sIGtleUV4aXN0c0luSW5kZXgoaW50NjRfdCBkYXRhYmFz
ZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3QgaW5kZXhJZCwgY29uc3QgSURCS2V5
Jik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuT2JqZWN0U3RvcmVDdXJz
b3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGNvbnN0IElEQktl
eVJhbmdlKiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24pOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxD
dXJzb3I+IG9wZW5JbmRleEtleUN1cnNvcihpbnQ2NF90IGRhdGFiYXNlSWQsIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBjb25zdCBJREJLZXlSYW5nZSosIElEQkN1cnNv
cjo6RGlyZWN0aW9uKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q3Vyc29yPiBvcGVuSW5kZXhD
dXJzb3IoaW50NjRfdCBkYXRhYmFzZUlkLCBpbnQ2NF90IG9iamVjdFN0b3JlSWQsIGludDY0X3Qg
aW5kZXhJZCwgY29uc3QgSURCS2V5UmFuZ2UqLCBJREJDdXJzb3I6OkRpcmVjdGlvbik7CiAKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8VHJhbnNhY3Rpb24+IGNyZWF0ZVRyYW5zYWN0aW9uKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggNjU4NDcyNDg1OTNkNzQyNzE3NTA1NzkyMjVm
ZDVlNGNlZjA3ODRmMS4uNWY1NDdmYzYyNWI4Mzk4OWI4YzU3ZjA1YTUxZWI4NGJkZjcxNGI2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0wNC0wNSAg
SGFucyBXZW5uYm9yZyAgPGhhbnNAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluZGV4ZWREQjogSW50cm9kdWNlIHNrZWxldG9u
IGZvciBMZXZlbERCIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU3ODI3CisKKyAgICAgICAgKiBmZWF0dXJlcy5neXBpOgorICAgICAgICAg
ICAgQWRkIEVOQUJMRV9MRVZFTERCPTAuCisgICAgICAgICogcHVibGljL1dlYklEQkZhY3Rvcnku
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViSURCRmFjdG9yeTo6b3Blbik6CisgICAgICAgICAgICBS
ZW1vdmUgcHJlLXJvbGwgb3BlbigpIGZ1bmN0aW9uLgorCiAyMDExLTA0LTA2ICBBc2Fua2EgSGVy
YXRoICA8YXNhbmthQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBG
aXNoZXIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkKaW5kZXggNzM1NGViOGU4YzE5
OWM0ODg2ZGNiMjdiYWQwNTBiODk0ZDA1ZmEzNC4uMDA2MTViNDM3YThkN2JkMDMxMjE5ZjIzNGQ4
ZmQ5OWVlNDNiNDQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vZmVhdHVyZXMuZ3lwaQpAQCAtNjUs
NiArNjUsNyBAQAogICAgICAgICAnRU5BQkxFX0lOUFVUX1NQRUVDSD0xJywKICAgICAgICAgJ0VO
QUJMRV9KQVZBU0NSSVBUX0RFQlVHR0VSPTEnLAogICAgICAgICAnRU5BQkxFX0pTQ19NVUxUSVBM
RV9USFJFQURTPTAnLAorICAgICAgICAnRU5BQkxFX0xFVkVMREI9MCcsCiAgICAgICAgICdFTkFC
TEVfTElOS19QUkVGRVRDSD0xJywKICAgICAgICAgJ0VOQUJMRV9NQVRITUw9MCcsCiAgICAgICAg
ICdFTkFCTEVfTUVESUFfU1RBVElTVElDUz0xJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYklEQkZhY3RvcnkuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYklEQkZhY3RvcnkuaAppbmRleCAyOTQxNGU4MDVkYWFjN2YzNzU5Y2ZhYTdjODNj
YmU1ZjkzMjBjYTAwLi45NzU4OGQ1OGMyY2Y1YzNkZDIxMTk0ZjM5OTBlYjU0NzgzMWQ5MmNkIDEw
MDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJJREJGYWN0b3J5LmgK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSURCRmFjdG9yeS5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU3LDExICs1
Nyw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgLy8gVGhlIFdlYktpdCBpbXBsZW1lbnRhdGlv
biBvZiBvcGVuIGlnbm9yZXMgdGhlIFdlYkZyYW1lKiBwYXJhbWV0ZXIuCi0gICAgLy8gRklYTUU6
IEFzc2VydCBub3QgcmVhY2hlZCB3aGVuIENocm9taXVtIHNpZGUgaXMgdXBkYXRlZC4KLSAgICB2
aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyog
Y2FsbGJhY2tzLCBjb25zdCBXZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSogZnJh
bWUsIGNvbnN0IFdlYlN0cmluZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1T
aXplLCBCYWNraW5nU3RvcmVUeXBlKSB7IG9wZW4obmFtZSwgY2FsbGJhY2tzLCBvcmlnaW4sIGZy
YW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSk7IH0KLQotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhp
cyB3aGVuIENocm9taXVtIHNpZGUgaXMgdXBkYXRlZC4KLSAgICB2aXJ0dWFsIHZvaWQgb3Blbihj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBX
ZWJTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBXZWJGcmFtZSogZnJhbWUsIGNvbnN0IFdlYlN0cmlu
ZyYgZGF0YURpciwgdW5zaWduZWQgbG9uZyBsb25nIG1heGltdW1TaXplKSB7IG9wZW4obmFtZSwg
Y2FsbGJhY2tzLCBvcmlnaW4sIGZyYW1lLCBkYXRhRGlyLCBtYXhpbXVtU2l6ZSwgRGVmYXVsdEJh
Y2tpbmdTdG9yZSk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb3Blbihjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUq
LCBjb25zdCBXZWJTdHJpbmcmIGRhdGFEaXIsIHVuc2lnbmVkIGxvbmcgbG9uZyBtYXhpbXVtU2l6
ZSwgQmFja2luZ1N0b3JlVHlwZSkgeyBXRUJLSVRfQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVEYXRhYmFzZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdl
YklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYlNlY3VyaXR5T3JpZ2luJiwgV2ViRnJhbWUqLCBjb25z
dCBXZWJTdHJpbmcmIGRhdGFEaXIpIHsgV0VCS0lUX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CiB9
Owo=
</data>
<flag name="review"
          id="81614"
          type_id="1"
          status="+"
          setter="steveblock"
    />
          </attachment>
      

    </bug>

</bugzilla>