<?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>156321</bug_id>
          
          <creation_ts>2016-04-06 17:12:19 -0700</creation_ts>
          <short_desc>Modern IDB (Blob support): Write blobs to temporary files and move them to the correct location when storing them</short_desc>
          <delta_ts>2016-04-22 14:11: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>WebCore Misc.</component>
          <version>Safari 9</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149117</blocked>
    
    <blocked>143193</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Brady Eidson">beidson</reporter>
          <assigned_to name="Brady Eidson">beidson</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aestes</cc>
    
    <cc>alecflett</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jsbell</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181470</commentid>
    <comment_count>0</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-06 17:12:19 -0700</bug_when>
    <thetext>Modern IDB (Blob support): Write blobs to temporary files and move them to the correct location when storing them

Still a no-op in trunk, as we still don&apos;t actually allow put/add with blobs at the IDBObjectStore level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181472</commentid>
    <comment_count>1</comment_count>
      <attachid>275835</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-06 17:13:35 -0700</bug_when>
    <thetext>Created attachment 275835
WIP in case I have time to work on this at home tonight</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181479</commentid>
    <comment_count>2</comment_count>
      <attachid>275836</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-06 17:21:53 -0700</bug_when>
    <thetext>Created attachment 275836
Updated WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181480</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-06 17:22:26 -0700</bug_when>
    <thetext>Attachment 275836 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:90:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181550</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-04-06 20:05:50 -0700</bug_when>
    <thetext>Could you please elaborate on why blobs need to be stored in files?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181587</commentid>
    <comment_count>5</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-06 22:03:36 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Could you please elaborate on why blobs need to be stored in files?

Follows in a non-exhaustive list of reasons:

1 - Blobs can be so large, that it&apos;s impractical to shuffle around their contents between processes in memory.
E.g. To get a 500MB blob from the Networking process to the Database process would take at LEAST 1GB of memory, and probably 1.5GB of memory, which is not possible on all supported platforms.

2 - If a Blob *is* a File, then we can get &quot;storing it as a file&quot; for free.

3 - If we did store Blobs in the SQLite database, we would then be unable to stream its contents in a way that our ResourceHandle/ResourceLoaders are designed for, and instead would have to make a full copy of the Blob in memory just to read it.
E.g. a 1GB File blob stored in the database would require 1GB of memory to read, instead of &quot;streaming the file from disk little by little&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181729</commentid>
    <comment_count>6</comment_count>
      <attachid>275897</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 10:53:55 -0700</bug_when>
    <thetext>Created attachment 275897
Near-final WIP

No ChangeLogs yet, and maybe doing some final tweaks.

Just want to get the EWS run started.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181730</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 10:54:50 -0700</bug_when>
    <thetext>Attachment 275897 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:90:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 4 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181753</commentid>
    <comment_count>8</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 11:22:00 -0700</bug_when>
    <thetext>For GTK:

Last 500 characters of output:
 undefined reference to &apos;WebCore::hardLinkOrCopyFile(WTF::String const&amp;, WTF::String const&amp;)&apos;
lib/libWebCoreGTK.a(lib/../Source/WebCore/CMakeFiles/WebCore.dir/Modules/indexeddb/server/SQLiteIDBTransaction.cpp.o):SQLiteIDBTransaction.cpp:function WebCore::IDBServer::SQLiteIDBTransaction::moveBlobFilesIfNecessary(): error: undefined reference to &apos;WebCore::hardLinkOrCopyFile(WTF::String const&amp;, WTF::String const&amp;)&apos;
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.


Does GTK not use FileSystemPOSIX.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181756</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-07 11:23:30 -0700</bug_when>
    <thetext>FileSystemGtk.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181758</commentid>
    <comment_count>10</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 11:26:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; For GTK:
&gt; 
&gt; Last 500 characters of output:
&gt;  undefined reference to &apos;WebCore::hardLinkOrCopyFile(WTF::String const&amp;,
&gt; WTF::String const&amp;)&apos;
&gt; lib/libWebCoreGTK.a(lib/../Source/WebCore/CMakeFiles/WebCore.dir/Modules/
&gt; indexeddb/server/SQLiteIDBTransaction.cpp.o):SQLiteIDBTransaction.cpp:
&gt; function
&gt; WebCore::IDBServer::SQLiteIDBTransaction::moveBlobFilesIfNecessary(): error:
&gt; undefined reference to &apos;WebCore::hardLinkOrCopyFile(WTF::String const&amp;,
&gt; WTF::String const&amp;)&apos;
&gt; collect2: error: ld returned 1 exit status
&gt; ninja: build stopped: subcommand failed.
&gt; 
&gt; 
&gt; Does GTK not use FileSystemPOSIX.cpp?

It does not. Bummer. I&apos;ll stub out the new method for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181759</commentid>
    <comment_count>11</comment_count>
      <attachid>275902</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 11:29:24 -0700</bug_when>
    <thetext>Created attachment 275902
Near-final WIP again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181762</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 11:31:47 -0700</bug_when>
    <thetext>Attachment 275902 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181821</commentid>
    <comment_count>13</comment_count>
      <attachid>275922</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 13:15:28 -0700</bug_when>
    <thetext>Created attachment 275922
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181823</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 13:16:17 -0700</bug_when>
    <thetext>Attachment 275922 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181833</commentid>
    <comment_count>15</comment_count>
      <attachid>275922</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-07 13:32:17 -0700</bug_when>
    <thetext>Comment on attachment 275922
Patch v1

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

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:94
&gt; +        if (!hardLinkOrCopyFile(entry.first, pathByAppendingComponent(databaseDirectory, entry.second)))
&gt; +            LOG_ERROR(&quot;Failed to link/copy temporary blob file &apos;%s&apos; to location &apos;%s&apos;&quot;, entry.first.utf8().data(), pathByAppendingComponent(databaseDirectory, entry.second).utf8().data());

Should we continue if this fails?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.h:88
&gt; +    Vector&lt;std::pair&lt;String, String&gt;&gt; m_blobFiles;

Could these be typedefed so we know what they mean?

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:371
&gt; +    bool appendResult = appendFileContentsToFileHandle(source, handle);

This is a strange function to call when copying a file to a destination we know is empty.

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:314
&gt; +        ASSERT_UNUSED(result, result.isNewEntry);

Will this be true if we have multiple blobs of the same file?

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:307
&gt; +    if (handler)

handler could be declared inside the if.  Same thing with extension earlier.

&gt; Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp:280
&gt; +        SandboxExtension::createHandle(paths[i], SandboxExtension::ReadWrite, extensions[i]);

Will this always succeed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181857</commentid>
    <comment_count>16</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 14:03:26 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Comment on attachment 275922 [details]
&gt; Patch v1
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275922&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:94
&gt; &gt; +        if (!hardLinkOrCopyFile(entry.first, pathByAppendingComponent(databaseDirectory, entry.second)))
&gt; &gt; +            LOG_ERROR(&quot;Failed to link/copy temporary blob file &apos;%s&apos; to location &apos;%s&apos;&quot;, entry.first.utf8().data(), pathByAppendingComponent(databaseDirectory, entry.second).utf8().data());
&gt; 
&gt; Should we continue if this fails?

At this point, the transaction is committed.

There&apos;s room for improvement in the future if we find situations where it becomes a problem.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.h:88
&gt; &gt; +    Vector&lt;std::pair&lt;String, String&gt;&gt; m_blobFiles;
&gt; 
&gt; Could these be typedefed so we know what they mean?

In person we decided typedef isn&apos;t necessary, but an improved variable name is.

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:371
&gt; &gt; +    bool appendResult = appendFileContentsToFileHandle(source, handle);
&gt; 
&gt; This is a strange function to call when copying a file to a destination we
&gt; know is empty.

Maybe room for improvement in the function name, but it&apos;s also already used like this.

&gt; &gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:314
&gt; &gt; +        ASSERT_UNUSED(result, result.isNewEntry);
&gt; 
&gt; Will this be true if we have multiple blobs of the same file?

If you have a File, and you put it in IDB 10 times, we&apos;re required by the structured clone algorithm to make 10 unique copies of it.

Therefore the filenames will always be unique.

There&apos;s room for improvement here, as well, but worrying about it now seems like premature optimization.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:307
&gt; &gt; +    if (handler)
&gt; 
&gt; handler could be declared inside the if.  Same thing with extension earlier.

Yup.

&gt; &gt; Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp:280
&gt; &gt; +        SandboxExtension::createHandle(paths[i], SandboxExtension::ReadWrite, extensions[i]);
&gt; 
&gt; Will this always succeed?

In practice, yes.

The UIProcess had already granted the NetworkProcess extensions to these locations when it was launched. So if the UIProcess can&apos;t create an extension here, it means the NetworkProcess never could&apos;ve gotten up and running, and we never would&apos;ve reached this point.

But I&apos;m definitely going to add an ASSERT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181862</commentid>
    <comment_count>17</comment_count>
      <attachid>275930</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 14:09:13 -0700</bug_when>
    <thetext>Created attachment 275930
Patch v2

I have Alex&apos;s review, but since this is a &quot;touches the filesystem&quot; patch I&apos;m waiting for more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181868</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 14:11:03 -0700</bug_when>
    <thetext>Attachment 275930 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181946</commentid>
    <comment_count>19</comment_count>
      <attachid>275930</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-04-07 15:51:04 -0700</bug_when>
    <thetext>Comment on attachment 275930
Patch v2

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

Instead of WebCore keeping a IDBBackingStoreFileHandler* that is null for WebKit1 clients, why don&apos;t we have a default handler that can also handle the deletion issue I mentioned above. This&apos;ll also let you store the handler by reference and get rid of a bunch of branches. r=me with these changes.

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:122
&gt; +    IDBBackingStoreFileHandler* m_backingStoreFileHandler;

Looks like this isn&apos;t initialized when the default constructor is called. You can just initialize it to nullptr here.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:340
&gt; +        } else if (sqliteResult != SQLITE_ROW) {
&gt; +            LOG_ERROR(&quot;Error executing statement to fetch schema for the BlobRecords table.&quot;);
&gt; +            return false;
&gt; +        } else
&gt; +            currentSchema = statement.getColumnText(1);

No need for the else since you return in the else if.

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:133
&gt; +    m_blobTemporaryAndStoredFilenames.clear();

You told me that the only callers of reset() are abort() and commit(), so you can just assert that m_blobTemporaryAndStoredFilenames is empty.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:364
&gt; +    int result = link(fsSource.data(), fsDestination.data());
&gt; +    if (!result)
&gt; +        return true;

This could be more concise by removing the local.

&gt; Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp:329
&gt; +    // We&apos;ve either hard linked the temporary blob file to the database directory, copied it there,
&gt; +    // or the transaction is being aborted.
&gt; +    // In any of those cases, we can delete the temporary blob file now.
&gt; +    deleteFile(path);

It&apos;s strange that we link/copy the file in WebCore but delete it in WebKit2. Even worse, it looks like we never delete it in WebKit1!

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296
&gt; +void NetworkProcess::grantSandboxExtensionsToDatabaseProcessForBlobs(const Vector&lt;String&gt; filenames, std::function&lt;void ()&gt; completionHandler)

filenames should be by reference to const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181948</commentid>
    <comment_count>20</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-04-07 15:58:00 -0700</bug_when>
    <thetext>It&apos;s worth noting that my review of the SQL statements in this patch is essentially a rubber-stamp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181949</commentid>
    <comment_count>21</comment_count>
      <attachid>275930</attachid>
    <who name="Andy Estes">aestes</who>
    <bug_when>2016-04-07 16:02:25 -0700</bug_when>
    <thetext>Comment on attachment 275930
Patch v2

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

&gt; Source/WebCore/Modules/indexeddb/IDBValue.cpp:42
&gt; +    m_blobURLs = scriptValue.blobURLsIsolatedCopy();

You should move this into the initialization list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181953</commentid>
    <comment_count>22</comment_count>
      <attachid>275952</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 16:19:52 -0700</bug_when>
    <thetext>Created attachment 275952
Patch v3 - Awaiting a potential final review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181954</commentid>
    <comment_count>23</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 16:20:12 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Created attachment 275952 [details]
&gt; Patch v3 - Awaiting a potential final review

I&apos;ll work on landing this in the morning if I hear no additional feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181956</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-07 16:21:36 -0700</bug_when>
    <thetext>Attachment 275952 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181959</commentid>
    <comment_count>25</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-07 16:27:50 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; Comment on attachment 275930 [details]
&gt; Patch v2
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275930&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/IDBValue.cpp:42
&gt; &gt; +    m_blobURLs = scriptValue.blobURLsIsolatedCopy();
&gt; 
&gt; You should move this into the initialization list.

Fixed in my local copy, won&apos;t upload a new patch just for it though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182076</commentid>
    <comment_count>26</comment_count>
      <attachid>275952</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-07 23:43:47 -0700</bug_when>
    <thetext>Comment on attachment 275952
Patch v3 - Awaiting a potential final review

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

I didn’t get a chance to think deeply about the patch but did spot a few small things.

&gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:122
&gt; +    IDBBackingStoreTemporaryFileHandler&amp; m_backingStoreTemporaryFileHandler;

Does not seem safe to have a reference counted object hold a reference to another object without any influence over the other object’s lifetime. What guarantees this handler will outlive the server? Perhaps only immortal objects are passed as these handlers?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:202
&gt; +    m_blobTemporaryAndStoredFilenames.append(std::make_pair(temporaryPath, storedFilename));

In new code I think we can just use braces instead of std::make_pair:

    m_blobTemporaryAndStoredFilenames.append({ temporaryPath, storedFilename });

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2759
&gt; +Vector&lt;String&gt; SerializedScriptValue::blobURLsIsolatedCopy() const
&gt; +{
&gt; +    Vector&lt;String&gt; result;
&gt; +    result.reserveInitialCapacity(m_blobURLs.size());
&gt; +    for (auto&amp; url : m_blobURLs)
&gt; +        result.uncheckedAppend(url.isolatedCopy());
&gt; +
&gt; +    return result;
&gt; +}

I don’t think this should be a member function. This is just isolatedCopy for a Vector&lt;String&gt;; nothing specific to URLs here, or to blob URLs, or to SerializedScriptValue. Should be a free function named isolatedCopy and could call isolatedCopy(value.blobURLs()). Not sure exactly where to put it, though.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:352
&gt; +    if (fileExists(destination))
&gt; +        return false;

We should let the file system calls fail instead of trying to preflight. We just need to use O_EXCL. It’s normally bad practice to preflight.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:355
&gt; +    if (!fsSource.data() || fsSource.data()[0] == &apos;\0&apos;)

Do we really need to check for both a null pointer and an empty string? Why exactly? Other code seems to do this, which is super annoying since there’s no reason fileSystemRepresentation has two have two different failure modes. I think maybe the check for the empty string is unnecessary and bogus.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:359
&gt; +    if (!fsDestination.data() || fsDestination.data()[0] == &apos;\0&apos;)

Ditto.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:366
&gt; +    auto handle = openFile(destination, OpenForWrite);

I think we can call open directly here; it’s in the POSIX-specific file, not platform independent code, and we already have the file name converted to a C string. Also, that lets use use O_EXCL instead of O_TRUNC.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:371
&gt; +    closeFile(handle);

Should just call close directly here for similar reasons.

&gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:372
&gt; +    return appendResult;

If this returns false, it’s not good that it leaves a file behind.

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:299
&gt; +    static uint64_t nextRequestID;
&gt; +    m_sandboxExtensionForBlobsCompletionHandlers.set(++nextRequestID, completionHandler);

Note that given how this uses the global variable with pre-increment, it’s not nextRequestID, it’s lastUsedRequestID.

&gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:301
&gt; +    parentProcessConnection()-&gt;send(Messages::NetworkProcessProxy::GrantSandboxExtensionsToDatabaseProcessForBlobs(nextRequestID, filenames), 0);

I think it’s cleaner to put the current requestID into a local variable so we don’t have to think so hard about why the one above does pre increment and this one does not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182156</commentid>
    <comment_count>27</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 08:46:43 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Comment on attachment 275952 [details]
&gt; Patch v3 - Awaiting a potential final review
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275952&amp;action=review
&gt; 
&gt; I didn’t get a chance to think deeply about the patch but did spot a few
&gt; small things.
&gt; 
&gt; &gt; Source/WebCore/Modules/indexeddb/server/IDBServer.h:122
&gt; &gt; +    IDBBackingStoreTemporaryFileHandler&amp; m_backingStoreTemporaryFileHandler;
&gt; 
&gt; Does not seem safe to have a reference counted object hold a reference to
&gt; another object without any influence over the other object’s lifetime. What
&gt; guarantees this handler will outlive the server? Perhaps only immortal
&gt; objects are passed as these handlers?

Correct. The only two handlers are immortal.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBTransaction.cpp:202
&gt; &gt; +    m_blobTemporaryAndStoredFilenames.append(std::make_pair(temporaryPath, storedFilename));
&gt; 
&gt; In new code I think we can just use braces instead of std::make_pair:
&gt; 
&gt;     m_blobTemporaryAndStoredFilenames.append({ temporaryPath, storedFilename
&gt; });

Exciting, will try.

&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2759
&gt; &gt; +Vector&lt;String&gt; SerializedScriptValue::blobURLsIsolatedCopy() const
&gt; &gt; +{
&gt; &gt; +    Vector&lt;String&gt; result;
&gt; &gt; +    result.reserveInitialCapacity(m_blobURLs.size());
&gt; &gt; +    for (auto&amp; url : m_blobURLs)
&gt; &gt; +        result.uncheckedAppend(url.isolatedCopy());
&gt; &gt; +
&gt; &gt; +    return result;
&gt; &gt; +}
&gt; 
&gt; I don’t think this should be a member function. This is just isolatedCopy
&gt; for a Vector&lt;String&gt;; nothing specific to URLs here, or to blob URLs, or to
&gt; SerializedScriptValue. Should be a free function named isolatedCopy and
&gt; could call isolatedCopy(value.blobURLs()). Not sure exactly where to put it,
&gt; though.

We actually explicitly and purposefully do *not* expose the blobURLs Vector on SerializedScriptValue *because* of the potential thread safety issue.
e.g., a SerializedScriptValue is created on a worker and then the blobURLs is accessed from an outside object on the main thread.

This patch requires the blobURLs object to be exposed, but tries to make sure it&apos;s thread safe.

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:352
&gt; &gt; +    if (fileExists(destination))
&gt; &gt; +        return false;
&gt; 
&gt; We should let the file system calls fail instead of trying to preflight. We
&gt; just need to use O_EXCL. It’s normally bad practice to preflight.

Yup. Will get rid of it.

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:355
&gt; &gt; +    if (!fsSource.data() || fsSource.data()[0] == &apos;\0&apos;)
&gt; 
&gt; Do we really need to check for both a null pointer and an empty string? Why
&gt; exactly? Other code seems to do this, which is super annoying since there’s
&gt; no reason fileSystemRepresentation has two have two different failure modes.
&gt; I think maybe the check for the empty string is unnecessary and bogus.

You called out why I did this - It seems to be established practice in our other fileSystem function code.

I will look into it a bit to see if I can get a conclusive answer.

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:366
&gt; &gt; +    auto handle = openFile(destination, OpenForWrite);
&gt; 
&gt; I think we can call open directly here; it’s in the POSIX-specific file, not
&gt; platform independent code, and we already have the file name converted to a
&gt; C string. Also, that lets use use O_EXCL instead of O_TRUNC.

Sure!

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:371
&gt; &gt; +    closeFile(handle);
&gt; 
&gt; Should just call close directly here for similar reasons.

Sure!

&gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:372
&gt; &gt; +    return appendResult;
&gt; 
&gt; If this returns false, it’s not good that it leaves a file behind.

Good call.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:299
&gt; &gt; +    static uint64_t nextRequestID;
&gt; &gt; +    m_sandboxExtensionForBlobsCompletionHandlers.set(++nextRequestID, completionHandler);
&gt; 
&gt; Note that given how this uses the global variable with pre-increment, it’s
&gt; not nextRequestID, it’s lastUsedRequestID.

Touché.

&gt; &gt; Source/WebKit2/NetworkProcess/NetworkProcess.cpp:301
&gt; &gt; +    parentProcessConnection()-&gt;send(Messages::NetworkProcessProxy::GrantSandboxExtensionsToDatabaseProcessForBlobs(nextRequestID, filenames), 0);
&gt; 
&gt; I think it’s cleaner to put the current requestID into a local variable so
&gt; we don’t have to think so hard about why the one above does pre increment
&gt; and this one does not.

Okay!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182157</commentid>
    <comment_count>28</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 08:56:58 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)

&gt; &gt; &gt; Source/WebCore/platform/posix/FileSystemPOSIX.cpp:355
&gt; &gt; &gt; +    if (!fsSource.data() || fsSource.data()[0] == &apos;\0&apos;)
&gt; &gt; 
&gt; &gt; Do we really need to check for both a null pointer and an empty string? Why
&gt; &gt; exactly? Other code seems to do this, which is super annoying since there’s
&gt; &gt; no reason fileSystemRepresentation has two have two different failure modes.
&gt; &gt; I think maybe the check for the empty string is unnecessary and bogus.
&gt; 
&gt; You called out why I did this - It seems to be established practice in our
&gt; other fileSystem function code.
&gt; 
&gt; I will look into it a bit to see if I can get a conclusive answer.

The answer is that if you pass an empty string to CFStringGetFileSystemRepresentation, it will return &quot;True&quot; and give you back an empty, null terminated C string buffer.

So I changed it to explicitly check if source or destination are empty before getting the file system representation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182158</commentid>
    <comment_count>29</comment_count>
      <attachid>276006</attachid>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 09:00:46 -0700</bug_when>
    <thetext>Created attachment 276006
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182159</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-08 09:02:31 -0700</bug_when>
    <thetext>Attachment 276006 did not pass style-queue:


ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.cpp:296:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:115:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WebKit2/NetworkProcess/NetworkProcess.h:207:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 3 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182171</commentid>
    <comment_count>31</comment_count>
      <attachid>276006</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-08 09:37:18 -0700</bug_when>
    <thetext>Comment on attachment 276006
Patch for landing

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

&gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2758
&gt; +    Vector&lt;String&gt; result;
&gt; +    result.reserveInitialCapacity(m_blobURLs.size());
&gt; +    for (auto&amp; url : m_blobURLs)
&gt; +        result.uncheckedAppend(url.isolatedCopy());
&gt; +
&gt; +    return result;

I still think the isolated copy algorithm should be in a separate function. This function’s body should be:

    return isolatedCopy(m_blobURLs);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182178</commentid>
    <comment_count>32</comment_count>
      <attachid>276006</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-08 09:57:30 -0700</bug_when>
    <thetext>Comment on attachment 276006
Patch for landing

Clearing flags on attachment: 276006

Committed r199230: &lt;http://trac.webkit.org/changeset/199230&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182180</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-08 09:57:35 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182181</commentid>
    <comment_count>34</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 09:58:24 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Comment on attachment 276006 [details]
&gt; Patch for landing
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276006&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/bindings/js/SerializedScriptValue.cpp:2758
&gt; &gt; +    Vector&lt;String&gt; result;
&gt; &gt; +    result.reserveInitialCapacity(m_blobURLs.size());
&gt; &gt; +    for (auto&amp; url : m_blobURLs)
&gt; &gt; +        result.uncheckedAppend(url.isolatedCopy());
&gt; &gt; +
&gt; &gt; +    return result;
&gt; 
&gt; I still think the isolated copy algorithm should be in a separate function.
&gt; This function’s body should be:
&gt; 
&gt;     return isolatedCopy(m_blobURLs);

I see. That makes sense.

Like you, not sure where it&apos;d go. =/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182185</commentid>
    <comment_count>35</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 10:00:48 -0700</bug_when>
    <thetext>EFL build failure is interesting...

In file included from /usr/include/fcntl.h:279:0,
                 from ../../Source/WebCore/platform/posix/FileSystemPOSIX.cpp:35:
In function &apos;int open(const char*, int, ...)&apos;,
    inlined from &apos;bool WebCore::hardLinkOrCopyFile(const WTF::String&amp;, const WTF::String&amp;)&apos; at ../../Source/WebCore/platform/posix/FileSystemPOSIX.cpp:366:23:
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:50:26: error: call to &apos;__open_missing_mode&apos; declared with attribute error: open with O_CREAT in second argument needs 3 arguments
    __open_missing_mode ();


open() apparently requires a mode when O_CREAT is used, but Mac (and the GTK bots, are they Linux?) let me *not* do that.

Looking into it now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182186</commentid>
    <comment_count>36</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 10:01:55 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; open() apparently requires a mode when O_CREAT is used, but Mac (and the GTK
&gt; bots, are they Linux?) let me *not* do that.
&gt; 
&gt; Looking into it now.

The only other time in the POSIX implementation that we call open() with O_CREAT, we pass 0666 as the mode/umask.

Will do the same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182190</commentid>
    <comment_count>37</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-08 10:21:41 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/199232</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182347</commentid>
    <comment_count>38</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-08 16:17:17 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; http://trac.webkit.org/changeset/199232

It broke the Apple Mac cmake build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182389</commentid>
    <comment_count>39</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-04-08 17:33:22 -0700</bug_when>
    <thetext>Build fix in r199256</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182641</commentid>
    <comment_count>40</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-11 01:43:23 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; Build fix in r199256

Build is still broken:

/Volumes/Data/slave/elcapitan-cmake-debug/build/WebKitBuild/Debug/DerivedSources/WebKit2/DatabaseProcessMessageReceiver.cpp:71:120: error: no member named &apos;grantSandboxExtensionsForBlobs&apos; in &apos;WebKit::DatabaseProcess&apos;
        IPC::handleMessage&lt;Messages::DatabaseProcess::GrantSandboxExtensionsForBlobs&gt;(decoder, this, &amp;DatabaseProcess::grantSandboxExtensionsForBlobs);
                                                                                                      ~~~~~~~~~~~~~~~~~^


https://trac.webkit.org/changeset/199256 said it is a &quot;Build fix with 
IndexedDB disabled but DatabaseProcess enabled after r199230&quot;, but both
INDEXED_DATABASE and DATABASE_PROCESS are enabled on Apple Mac cmake build.

Otherwise is DatabaseProcess used for anything if IndexedDB is disabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183670</commentid>
    <comment_count>41</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-14 02:32:59 -0700</bug_when>
    <thetext>just to document, Alex fixed it in http://trac.webkit.org/changeset/199532</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1183673</commentid>
    <comment_count>42</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-14 02:43:02 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; https://trac.webkit.org/changeset/199256 said it is a &quot;Build fix with 
&gt; IndexedDB disabled but DatabaseProcess enabled after r199230&quot;, but both
&gt; INDEXED_DATABASE and DATABASE_PROCESS are enabled on Apple Mac cmake build.

(In reply to comment #41)
&gt; just to document, Alex fixed it in http://trac.webkit.org/changeset/199532
Which says &quot;Fix build without IndexedDB.&quot;

But IndexedDB should be enabled on Apple Mac cmake build, see
http://trac.webkit.org/browser/trunk/Source/cmake/OptionsMac.cmake#L48
How come if it is disabled on the Apple Mac cmake bot?


&gt; Otherwise is DatabaseProcess used for anything if IndexedDB is disabled?
I&apos;m still waiting the answer for this question.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186171</commentid>
    <comment_count>43</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-22 01:53:28 -0700</bug_when>
    <thetext>Alex, ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186193</commentid>
    <comment_count>44</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-22 02:31:33 -0700</bug_when>
    <thetext>I think bug156902 shows how is it possible that INDEXED_DATABASE is disabled on Apple Mac cmake.

But the question is still valid: Does it make sense to build DatabaseProcess
when IndexedDB is disabled?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186260</commentid>
    <comment_count>45</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-22 08:57:16 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; I think bug156902 shows how is it possible that INDEXED_DATABASE is disabled
&gt; on Apple Mac cmake.
&gt; 
&gt; But the question is still valid: Does it make sense to build DatabaseProcess
&gt; when IndexedDB is disabled?

Yes - The DatabaseProcess should remain a separate compile time flag from IndexedDB</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186324</commentid>
    <comment_count>46</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2016-04-22 11:04:21 -0700</bug_when>
    <thetext>(In reply to comment #45)
&gt; (In reply to comment #44)
&gt; &gt; I think bug156902 shows how is it possible that INDEXED_DATABASE is disabled
&gt; &gt; on Apple Mac cmake.
&gt; &gt; 
&gt; &gt; But the question is still valid: Does it make sense to build DatabaseProcess
&gt; &gt; when IndexedDB is disabled?
&gt; 
&gt; Yes - The DatabaseProcess should remain a separate compile time flag from
&gt; IndexedDB

I remember a previous discussion that separated compile time guards should
remain to be able to use DatabaseProcess for a database thing which is not
IndexedDB in the near/far future.

But my question was if it makes sense to build DatabaseProcess
without IndexedDB right now. Shouldn&apos;t we disable it if IndexedDB
is disabled? (Until we don&apos;t have a new user of the DatabaseProcess)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186424</commentid>
    <comment_count>47</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-22 14:10:06 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; (In reply to comment #45)
&gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; I think bug156902 shows how is it possible that INDEXED_DATABASE is disabled
&gt; &gt; &gt; on Apple Mac cmake.
&gt; &gt; &gt; 
&gt; &gt; &gt; But the question is still valid: Does it make sense to build DatabaseProcess
&gt; &gt; &gt; when IndexedDB is disabled?
&gt; &gt; 
&gt; &gt; Yes - The DatabaseProcess should remain a separate compile time flag from
&gt; &gt; IndexedDB
&gt; 
&gt; I remember a previous discussion that separated compile time guards should
&gt; remain to be able to use DatabaseProcess for a database thing which is not
&gt; IndexedDB in the near/far future.
&gt; 
&gt; But my question was if it makes sense to build DatabaseProcess
&gt; without IndexedDB right now. Shouldn&apos;t we disable it if IndexedDB
&gt; is disabled? (Until we don&apos;t have a new user of the DatabaseProcess)

There&apos;s already a #if ENABLE(DATABASE_PROCESS) flag.

If a port wants it disabled, they can already do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1186425</commentid>
    <comment_count>48</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2016-04-22 14:11:11 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; (In reply to comment #46)
&gt; &gt; (In reply to comment #45)
&gt; &gt; &gt; (In reply to comment #44)
&gt; &gt; &gt; &gt; I think bug156902 shows how is it possible that INDEXED_DATABASE is disabled
&gt; &gt; &gt; &gt; on Apple Mac cmake.
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; But the question is still valid: Does it make sense to build DatabaseProcess
&gt; &gt; &gt; &gt; when IndexedDB is disabled?
&gt; &gt; &gt; 
&gt; &gt; &gt; Yes - The DatabaseProcess should remain a separate compile time flag from
&gt; &gt; &gt; IndexedDB
&gt; &gt; 
&gt; &gt; I remember a previous discussion that separated compile time guards should
&gt; &gt; remain to be able to use DatabaseProcess for a database thing which is not
&gt; &gt; IndexedDB in the near/far future.
&gt; &gt; 
&gt; &gt; But my question was if it makes sense to build DatabaseProcess
&gt; &gt; without IndexedDB right now. Shouldn&apos;t we disable it if IndexedDB
&gt; &gt; is disabled? (Until we don&apos;t have a new user of the DatabaseProcess)
&gt; 
&gt; There&apos;s already a #if ENABLE(DATABASE_PROCESS) flag.
&gt; 
&gt; If a port wants it disabled, they can already do so.

Said differently,

If a port is interested in both disabling INDEXED_DATABASE and DATABASE_PROCESS, they can already do so today.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>275835</attachid>
            <date>2016-04-06 17:13:35 -0700</date>
            <delta_ts>2016-04-06 17:21:53 -0700</delta_ts>
            <desc>WIP in case I have time to work on this at home tonight</desc>
            <filename>patch</filename>
            <type>application/octet-stream</type>
            <size>38115</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAppbmRleCBjN2UxMGRlLi5lMTE1OTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJET01FcnJvci5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudFF1
ZXVlLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCkBAIC00NSw2ICs0Niw3IEBA
CiAjaW5jbHVkZSAiSURCVmFsdWUuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtODcwLDcgKzg3MiwxNiBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mIG9wZXJhdGlvbgogICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKICAgICBBU1NFUlQo
dmFsdWUpOwogCi0gICAgaWYgKCF2YWx1ZS0+aGFzQmxvYlVSTHMoKSkgeworICAgIGF1dG8qIGNv
bnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBh
dXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KS0+cGFnZSgpOworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2YWx1ZS0+aGFzQmxvYlVS
THMoKSB8fCBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKSB7CiAgICAgICAgIHNlcnZlckNv
bm5lY3Rpb24oKS5wdXRPckFkZChvcGVyYXRpb24sIGtleS5nZXQoKSwgKnZhbHVlLCBvdmVyd3Jp
dGVNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTg3OCw2ICs4ODksOCBAQCB2b2lk
IElEQlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25P
cGVyYXRpb24mIG9wZXJhdGlvbgogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gcHJvdGVjdG9y
KHRoaXMpOwogICAgIFJlZlB0cjxJREJDbGllbnQ6OlRyYW5zYWN0aW9uT3BlcmF0aW9uPiBvcGVy
YXRpb25SZWYoJm9wZXJhdGlvbik7CiAgICAgdmFsdWUtPndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRl
eGVkREIoW3Byb3RlY3RvciwgdGhpcywgb3BlcmF0aW9uUmVmLCBrZXksIHZhbHVlLCBvdmVyd3Jp
dGVNb2RlXShjb25zdCBJREJWYWx1ZSYgaWRiVmFsdWUpIHsKKyAgICAgICAgZm9yIChhdXRvJiB0
ZW1wUGF0aCA6IGlkYlZhbHVlLmJsb2JGaWxlUGF0aHMoKSkKKyAgICAgICAgICAgIG1fdGVtcG9y
YXJ5QmxvYkZpbGVQYXRocy5hcHBlbmQodGVtcFBhdGgpOwogICAgICAgICBzZXJ2ZXJDb25uZWN0
aW9uKCkucHV0T3JBZGQoKm9wZXJhdGlvblJlZiwga2V5LmdldCgpLCBpZGJWYWx1ZSwgb3Zlcndy
aXRlTW9kZSk7CiAgICAgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCVHJhbnNhY3Rpb24uaAppbmRleCBlMjIzMTAzLi42YWQ5MjBlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTIy
Myw2ICsyMjMsOCBAQCBwcml2YXRlOgogICAgIEhhc2hTZXQ8UmVmUHRyPElEQlJlcXVlc3Q+PiBt
X29wZW5SZXF1ZXN0czsKIAogICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZCB7IGZhbHNlIH07CisK
KyAgICBWZWN0b3I8U3RyaW5nPiBtX3RlbXBvcmFyeUJsb2JGaWxlUGF0aHM7CiB9OwogCiBjbGFz
cyBUcmFuc2FjdGlvbkFjdGl2YXRvciB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWYWx1ZS5jcHAKaW5kZXggZjFkZWUxMi4uYjZjZjE4NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcApAQCAtMzksNiArMzksNyBAQCBJ
REJWYWx1ZTo6SURCVmFsdWUoKQogSURCVmFsdWU6OklEQlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCiAgICAgOiBtX2RhdGEoVGhyZWFkU2FmZURhdGFCdWZm
ZXI6OmNvcHlWZWN0b3Ioc2NyaXB0VmFsdWUuZGF0YSgpKSkKIHsKKyAgICBtX2Jsb2JVUkxzID0g
c2NyaXB0VmFsdWUuYmxvYlVSTHNJc29sYXRlZENvcHkoKTsKIH0KIAogSURCVmFsdWU6OklEQlZh
bHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
QmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCQmFja2luZ1N0b3JlLmgKaW5kZXggNTI5NGExNy4uZDVmNDk0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3Rv
cmUuaApAQCAtNTAsNiArNTAsMTMgQEAgZW51bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7CiAKIG5h
bWVzcGFjZSBJREJTZXJ2ZXIgewogCitjbGFzcyBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIoKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckZpbGVDb3B5KGNvbnN0IFN0cmluZyYgcGF0aCkg
PSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxlQ29weUNvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0
aCkgPSAwOworfTsKKwogY2xhc3MgSURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXggOTlhM2Q0Ny4uODNhZDI0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAKQEAgLTQ0LDkgKzQ0LDkgQEAgUmVmPElEQlNlcnZlcj4gSURCU2VydmVy
OjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcigpKTsKIH0KIAot
UmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURp
cmVjdG9yeVBhdGgpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZp
bGVIYW5kbGVyKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFz
ZURpcmVjdG9yeVBhdGgpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoZGF0
YWJhc2VEaXJlY3RvcnlQYXRoLCBmaWxlSGFuZGxlcikpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNl
cnZlcigpCkBAIC01NSw4ICs1NSw5IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKCkKICAgICBtX3Ro
cmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhp
cywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIo
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCitJREJTZXJ2ZXI6OklEQlNlcnZl
cihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlRmls
ZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQogICAgIDogbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0
YWJhc2VEaXJlY3RvcnlQYXRoKQorICAgICwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcihmaWxl
SGFuZGxlcikKIHsKICAgICBMT0coSW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0
aCAlcyIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTIwLDcg
KzEyMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3Jl
YXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJl
Y3RvcnlQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FM
aXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7
CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVu
dGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxl
cik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERh
dGEmIHJlcXVlc3REYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IDk0NTQ5YzguLjdhODNlN2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAg
LTQ5LDEwICs0OSwxMiBAQCBjbGFzcyBJREJWYWx1ZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7
CiAKK2NsYXNzIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyOworCiBjbGFzcyBJREJTZXJ2ZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVm
PElEQlNlcnZlcj4gY3JlYXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJT
ZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqID0gbnVs
bHB0cik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVjdGlvbihJREJD
b25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJD
b25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtOTQsNyArOTYsNyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgSURCU2VydmVyKCk7Ci0gICAgSURCU2VydmVyKGNvbnN0IFN0
cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKKyAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5n
JiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKik7CiAK
ICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIApAQCAtMTE3LDYgKzExOSw3IEBAIHByaXZhdGU6
CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIFVuaXF1ZUlEQkRhdGFiYXNlVHJh
bnNhY3Rpb24qPiBtX3RyYW5zYWN0aW9uczsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aDsKKyAgICBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciogbV9iYWNraW5nU3RvcmVG
aWxlSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBlNTU3YTBlLi4xNGYxZWQ2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMTYwLDkgKzE2MCw0MyBAQCBzdGF0aWMgY29uc3Qg
U3RyaW5nJiB2MkluZGV4UmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKICAgICByZXR1cm4g
djJJbmRleFJlY29yZHNUYWJsZVNjaGVtYVN0cmluZzsKIH0KIAorc3RhdGljIGNvbnN0IFN0cmlu
ZyBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAg
IHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwgdGFibGVOYW1lLCAiIChvYmplY3RT
dG9yZVJvdyBJTlRFR0VSIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwsIGJsb2JVUkwgVEVYVCBO
T1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIpOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBi
bG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JSZWNvcmRzVGFibGVTY2hlbWEo
IkJsb2JSZWNvcmRzIikpOworICAgIHJldHVybiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5n
OworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJu
YXRlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1Rh
YmxlU2NoZW1hU3RyaW5nKGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoIlwiQmxvYlJlY29yZHNcIiIp
KTsKKyAgICByZXR1cm4gYmxvYlJlY29yZHNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGlj
IGNvbnN0IFN0cmluZyBibG9iRmlsZXNUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFt
ZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwg
IiAoYmxvYlVSTCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZM
SUNUIEZBSUwsIGZpbGVOYW1lIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUg
T04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KIAotU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKK3N0YXRpYyBjb25zdCBTdHJpbmcm
IGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3Ry
aW5nPiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZyhibG9iRmlsZXNUYWJsZVNjaGVtYSgiQmxv
YkZpbGVzIikpOworICAgIHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKK30KKwor
c3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGJsb2JGaWxlc1RhYmxlU2NoZW1hU3Ry
aW5nKGJsb2JGaWxlc1RhYmxlU2NoZW1hKCJcIkJsb2JGaWxlc1wiIikpOworICAgIHJldHVybiBi
bG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworU1FMaXRlSURCQmFja2luZ1N0b3JlOjpT
UUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3Jl
RmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIp
CisgICAgLCBtX2ZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIG1fYWJzb2x1dGVEYXRh
YmFzZURpcmVjdG9yeSA9IGlkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9v
dChkYXRhYmFzZVJvb3REaXJlY3RvcnkpOwogfQpAQCAtMjc1LDYgKzMwOSw3OCBAQCBzdGF0aWMg
Ym9vbCBjcmVhdGVPck1pZ3JhdGVSZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFz
ZSYgZGF0YWJhc2UpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMoKQoreworICAgIEFTU0VSVChtX3NxbGl0ZURC
KTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOworCisgICAgU3RyaW5nIGN1cnJl
bnRTY2hlbWE7CisgICAgeworICAgICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlz
dGluZyBibG9iIHJlY29yZCB0YWJsZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVu
dCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJF
IHRibF9uYW1lPSdCbG9iUmVjb3JkcyciKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVw
YXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4i
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBz
cWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlz
IG5vIEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0Li4KKyAgICAgICAgaWYgKHNx
bGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURC
LT5leGVjdXRlQ29tbWFuZChibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIEJsb2JSZWNvcmRzIHRhYmxlIGluIGRh
dGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjdXJyZW50U2NoZW1hID0gYmxvYlJlY29yZHNUYWJsZVNjaGVt
YSgpOworICAgICAgICB9IGVsc2UgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2gg
c2NoZW1hIGZvciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRl
bWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAgIH0KKworICAgIGlmIChjdXJyZW50U2NoZW1hICE9
IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRz
VGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxv
YlJlY29yZHMgdGFibGUgc2NoZW1hIGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5n
IGJsb2IgZmlsZSB0YWJsZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9z
cWxpdGVEQiwgIlNFTEVDVCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9u
YW1lPSdCbG9iRmlsZXMnIik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNR
TElURV9PSykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0
ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJlc3Vs
dCA9IHN0YXRlbWVudC5zdGVwKCk7CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYkZp
bGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0IGFuZCB0aGVuIGJhaWwuCisgICAgICAgIGlmIChz
cWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVE
Qi0+ZXhlY3V0ZUNvbW1hbmQoYmxvYkZpbGVzVGFibGVTY2hlbWEoKSkpIHsKKyAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgQmxvYkZpbGVzIHRhYmxlIGluIGRhdGFi
YXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChz
cWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0
YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAg
IGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICB9CisKKyAg
ICBpZiAoY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRT
Y2hlbWEgIT0gYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgeworICAgICAgICBMT0df
RVJST1IoIkludmFsaWQgQmxvYkZpbGVzIHRhYmxlIHNjaGVtYSBmb3VuZCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpCiB7CiAgICAgQVNTRVJU
KG1fc3FsaXRlREIpOwpAQCAtNjEyLDYgKzcxOCwxMiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5m
bwogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBB
U0NJSUxpdGVyYWwoIkVycm9yIGNyZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRh
YmxlIGluIGRhdGFiYXNlIikgfTsKICAgICB9CiAKKyAgICBpZiAoIWVuc3VyZVZhbGlkQmxvYlRh
YmxlcygpKSB7CisgICAgICAgIExPR19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgY29uZmlybWlu
ZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsaXRlREIg
PSBudWxscHRyOworICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBS
ZWNvcmRzIHRhYmxlcyBpbiBkYXRhYmFzZSIpIH07CisgICAgfQorCiAgICAgYXV0byBkYXRhYmFz
ZUluZm8gPSBleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8oKTsKICAgICBpZiAoIWRhdGFiYXNl
SW5mbykKICAgICAgICAgZGF0YWJhc2VJbmZvID0gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0
YWJhc2VJbmZvKCk7CkBAIC0xMzAwLDEzICsxNDEyLDE0IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RT
dG9yCiAgICAgcmV0dXJuIGVycm9yOwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRl
bnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0
IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpCitJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmpl
Y3RTdG9yZUluZm8sIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVE
YXRhQnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCAtIGtleSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2
NCwga2V5RGF0YS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJbmZv
LmlkZW50aWZpZXIoKSk7CiAKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1f
c3FsaXRlREItPmlzT3BlbigpKTsKICAgICBBU1NFUlQodmFsdWUuZGF0YSgpKTsKKyAgICBBU1NF
UlQoYmxvYlVSTHMuc2l6ZSgpID09IGJsb2JGaWxlcy5zaXplKCkpOwogCiAgICAgYXV0byogdHJh
bnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAg
ICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CkBAIC0x
MzIzLDYgKzE0MzYsOCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29y
ZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURCS2V5IHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3Qg
c3RvcmUiKTsKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0byBiZSBzdG9y
ZWQgaW4gYW4gb2JqZWN0IHN0b3JlIikgfTsKICAgICB9CisKKyAgICBpbnQ2NF90IHJlY29yZElE
ID0gMDsKICAgICB7CiAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFT
Q0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gUmVjb3JkcyBWQUxVRVMgKD8sIENBU1QoPyBBUyBURVhU
KSwgPywgTlVMTCk7IikpOwogICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sK
QEAgLTEzMzMsNiArMTQ0OCw4IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRk
UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwdXQgcmVjb3JkIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJ
aTY0ICIgaW4gUmVjb3JkcyB0YWJsZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUluZm8uaWRlbnRp
ZmllcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNn
KCkpOwogICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gc3RvcmUgcmVjb3JkIGluIG9iamVjdCBzdG9y
ZSIpIH07CiAgICAgICAgIH0KKworICAgICAgICByZWNvcmRJRCA9IG1fc3FsaXRlREItPmxhc3RJ
bnNlcnRSb3dJRCgpOwogICAgIH0KIAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVz
Rm9yQWRkUmVjb3JkKG9iamVjdFN0b3JlSW5mbywga2V5RGF0YSwgdmFsdWUpOwpAQCAtMTM0OCw2
ICsxNDY1LDU1IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2JVUkxzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIHVybCA9IGJsb2JVUkxzW2ldOworICAgICAgICB7CisgICAgICAgICAgICBTUUxp
dGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEJs
b2JSZWNvcmRzIFZBTFVFUyAoPywgPyk7IikpOworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCByZWNv
cmRJRCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIHVy
bCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9i
IHJlY29yZCBpbiBkYXRhYmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29y
ZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaW50NjRfdCBwb3RlbnRpYWxGaWxlTmFtZSA9IG1fc3FsaXRlREItPmxhc3RJbnNl
cnRSb3dJRCgpOworCisgICAgICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRo
aXMgYmxvYlVSTCwgbm90aGluZyBsZWZ0IHRvIGRvLgorICAgICAgICB7CisgICAgICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxl
TmFtZSBGUk9NIEJsb2JGaWxlcyBXSEVSRSBibG9iVVJMID0gPzsiKSk7CisgICAgICAgICAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmlu
ZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmlsZW5hbWVzIGluIGRhdGFiYXNlIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVND
SUlMaXRlcmFsKCJVbmFibGUgdG8gZXhhbWluZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFzZSIp
IH07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgp
OworICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJ
VEVfRE9ORSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUg
QmxvYiBmaWxlbmFtZXMgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0
byBleGFtaW5lIEJsb2IgZmlsZW5hbWVzIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxyZWFkeSBoYXZl
IGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBzbyBjb21taXQgb3VyIGZpbGUgYXMgYSB1bmlxdWUg
ZmlsZW5hbWUKKyAgICAgICAgU3RyaW5nIHN0b3JlZEZpbGVuYW1lID0gU3RyaW5nOjpmb3JtYXQo
IiVsbGkuYmxvYiIsIHBvdGVudGlhbEZpbGVOYW1lKTsKKyAgICAgICAgeworICAgICAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5U
TyBCbG9iRmlsZXMgVkFMVUVTICg/LCA/KTsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBh
cmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJs
KSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMiwgc3RvcmVk
RmlsZW5hbWUpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWNv
cmQgQmxvYiBmaWxlIHJlY29yZCBpbiBkYXRhYmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVy
biB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5h
YmxlIHRvIHJlY29yZCBCbG9iIGZpbGUgcmVjb3JkIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRyYW5zYWN0aW9uLT5hZGRCbG9iRmlsZShibG9i
RmlsZXNbaV0sIHN0b3JlZEZpbGVuYW1lKTsKKyAgICB9CisKICAgICB0cmFuc2FjdGlvbi0+bm90
aWZ5Q3Vyc29yc09mQ2hhbmdlcyhvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKTsKIAogICAg
IHJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA3ZjIzOTJh
Li43MzNjN2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw3ICs0Nyw3
IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIAogY2xhc3MgU1FMaXRlSURCQmFja2luZ1N0b3Jl
IDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6Ci0gICAgU1FMaXRlSURCQmFja2lu
Z1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VSb290RGlyZWN0b3J5KTsKKyAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElE
QkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKik7CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdT
dG9yZSgpIGZpbmFsOwogCkBAIC04MSwxMyArODEsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1
bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1cnNvciYpOwogCisgICAgU3RyaW5nIGZ1bGxEYXRh
YmFzZURpcmVjdG9yeSgpIGNvbnN0OworCisgICAgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIq
IGZpbGVIYW5kbGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxlSGFuZGxlcjsgfQorCiBwcml2YXRl
OgogICAgIFN0cmluZyBmaWxlbmFtZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0OwotICAgIFN0cmlu
ZyBmdWxsRGF0YWJhc2VEaXJlY3RvcnkoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNl
UGF0aCgpIGNvbnN0OwogCiAgICAgYm9vbCBlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOwogICAg
IGJvb2wgZW5zdXJlVmFsaWRJbmRleFJlY29yZHNUYWJsZSgpOworICAgIGJvb2wgZW5zdXJlVmFs
aWRCbG9iVGFibGVzKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gY3Jl
YXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRy
PElEQkRhdGFiYXNlSW5mbz4gZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKCk7CiAKQEAgLTEx
OCw2ICsxMjIsOCBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07CiAgICAg
SlNDOjpTdHJvbmc8SlNDOjpKU0dsb2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisKKyAgICBJ
REJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciogbV9maWxlSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZGNi
ZTMzMS4uMDFhODRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNyw2
ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkZp
bGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJREJDdXJzb3JJbmZvLmgiCiAjaW5jbHVkZSAiSW5kZXhl
ZERCLmgiCiAjaW5jbHVkZSAiU1FMaXRlSURCQmFja2luZ1N0b3JlLmgiCkBAIC03NSwxMCArNzYs
MjggQEAgSURCRXJyb3IgU1FMaXRlSURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiAgICAgaWYgKG1f
c3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHsgSURCRGF0
YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gY29t
bWl0IFNRTGl0ZSB0cmFuc2FjdGlvbiBpbiBkYXRhYmFzZSBiYWNrZW5kIikgfTsKIAorICAgIG1v
dmVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpOworCiAgICAgcmVzZXQoKTsKICAgICByZXR1cm4geyB9
OwogfQogCit2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjptb3ZlQmxvYkZpbGVzSWZOZWNlc3Nh
cnkoKQoreworICAgIFN0cmluZyBkYXRhYmFzZURpcmVjdG9yeSA9IG1fYmFja2luZ1N0b3JlLmZ1
bGxEYXRhYmFzZURpcmVjdG9yeSgpOworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2JGaWxl
cykgeworICAgICAgICBhdXRvKiBmaWxlSGFuZGxlciA9IG1fYmFja2luZ1N0b3JlLmZpbGVIYW5k
bGVyKCk7CisgICAgICAgIGlmIChmaWxlSGFuZGxlcikKKyAgICAgICAgICAgIGZpbGVIYW5kbGVy
LT5wcmVwYXJlRm9yRmlsZUNvcHkoZW50cnkuZmlyc3QpOworICAgICAgICAgICAgCisgICAgICAg
IGlmICghaGFyZExpbmtPckNvcHlGaWxlKGVudHJ5LmZpcnN0LCBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoZGF0YWJhc2VEaXJlY3RvcnksIGVudHJ5LnNlY29uZCkpKQorICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gbGluay9jb3B5IHRlbXBvcmFyeSBibG9iIGZpbGUgJyVzJyB0byBs
b2NhdGlvbiAnJXMnIiwgZW50cnkuZmlyc3QudXRmOCgpLmRhdGEoKSwgcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5LCBlbnRyeS5zZWNvbmQpLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgICAgIGlmIChmaWxlSGFuZGxlcikKKyAgICAgICAgICAgIGZpbGVIYW5kbGVyLT5m
aWxlQ29weUNvbXBsZXRlKGVudHJ5LmZpcnN0KTsKKyAgICB9Cit9CisKIElEQkVycm9yIFNRTGl0
ZUlEQlRyYW5zYWN0aW9uOjphYm9ydCgpCiB7CiAgICAgaWYgKCFtX3NxbGl0ZVRyYW5zYWN0aW9u
IHx8ICFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCkBAIC05Nyw2ICsxMTYsNyBA
QCB2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpyZXNldCgpCiB7CiAgICAgbV9zcWxpdGVUcmFu
c2FjdGlvbiA9IG51bGxwdHI7CiAgICAgY2xlYXJDdXJzb3JzKCk7CisgICAgbV9ibG9iRmlsZXMu
Y2xlYXIoKTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQkN1cnNvcj4gU1FMaXRlSURC
VHJhbnNhY3Rpb246Om1heWJlT3BlbkJhY2tpbmdTdG9yZUN1cnNvcih1aW50NjRfdCBvYmplY3RT
dG9yZUlELCB1aW50NjRfdCBpbmRleElELCBjb25zdCBJREJLZXlSYW5nZURhdGEmIHJhbmdlKQpA
QCAtMTcxLDYgKzE5MSwxMSBAQCBib29sIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjppblByb2dyZXNz
KCkgY29uc3QKICAgICByZXR1cm4gbV9zcWxpdGVUcmFuc2FjdGlvbiAmJiBtX3NxbGl0ZVRyYW5z
YWN0aW9uLT5pblByb2dyZXNzKCk7CiB9CiAKK3ZvaWQgU1FMaXRlSURCVHJhbnNhY3Rpb246OmFk
ZEJsb2JGaWxlKGNvbnN0IFN0cmluZyYgdGVtcG9yYXJ5UGF0aCwgY29uc3QgU3RyaW5nJiBzdG9y
ZWRGaWxlbmFtZSkKK3sKKyAgICBtX2Jsb2JGaWxlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIodGVt
cG9yYXJ5UGF0aCwgc3RvcmVkRmlsZW5hbWUpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSURCU2Vy
dmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgK
aW5kZXggMGVmZTc0NC4uNWQ3YjM3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgKQEAg
LTcxLDE2ICs3MSwyMSBAQCBwdWJsaWM6CiAKICAgICBTUUxpdGVUcmFuc2FjdGlvbiogc3FsaXRl
VHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uLmdldCgpOyB9
CiAKKyAgICB2b2lkIGFkZEJsb2JGaWxlKGNvbnN0IFN0cmluZyYgdGVtcG9yYXJ5UGF0aCwgY29u
c3QgU3RyaW5nJiBzdG9yZWRGaWxlbmFtZSk7CisKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckN1
cnNvcnMoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKKyAgICB2b2lkIG1vdmVCbG9iRmlsZXNJZk5l
Y2Vzc2FyeSgpOworCiAgICAgSURCVHJhbnNhY3Rpb25JbmZvIG1faW5mbzsKIAogICAgIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3RvcmU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFNR
TGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9uOwogICAgIEhhc2hNYXA8SURCUmVz
b3VyY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPj4gbV9jdXJz
b3JzOwogICAgIEhhc2hTZXQ8U1FMaXRlSURCQ3Vyc29yKj4gbV9iYWNraW5nU3RvcmVDdXJzb3Jz
OworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJpbmc+PiBtX2Jsb2JGaWxlczsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNzMwMzI5ZC4uNWU4MzZk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlw
dFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCkBAIC0yNzQ4LDYgKzI3NDgsMTYgQEAgdWludDMyX3QgU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKK1ZlY3RvcjxTdHJpbmc+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6YmxvYlVSTHNJ
c29sYXRlZENvcHkoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKKyAgICBy
ZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Jsb2JVUkxzLnNpemUoKSk7CisgICAgZm9y
IChhdXRvJiB1cmwgOiBtX2Jsb2JVUkxzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5k
KHVybC5pc29sYXRlZENvcHkoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihzdGQ6OmZ1
bmN0aW9uPHZvaWQgKGNvbnN0IElEQlZhbHVlJik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yNzY5LDYgKzI3NzksNiBAQCB2b2lkIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihzdGQ6OmZ1bmN0
aW9uPHZvaWQgKGNvbgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7ICp0aGlzLCBtX2Jsb2JV
UkxzLCBibG9iRmlsZVBhdGhzIH0pOwogICAgIH0pOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXgg
NjQ1ZGNiOC4uMTVjYmY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTg0LDkgKzg0LDExIEBAIHB1YmxpYzoKIAogICAg
IGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQog
ICAgIGJvb2wgaGFzQmxvYlVSTHMoKSBjb25zdCB7IHJldHVybiAhbV9ibG9iVVJMcy5pc0VtcHR5
KCk7IH0KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgIFZlY3RvcjxTdHJpbmc+
IGJsb2JVUkxzSXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgdm9pZCB3cml0ZUJsb2JzVG9EaXNr
Rm9ySW5kZXhlZERCKHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4gY29tcGxl
dGlvbkhhbmRsZXIpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKICAgICBzdGF0aWMgUmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmVC
eXRlcyhWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTeXN0ZW0uaAppbmRleCAwM2FmZmZlLi5mMWE3OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZVN5c3RlbS5oCkBAIC0xODEsNiArMTgxLDkgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwogLy8gUmV0dXJucyB0cnVlIGlm
IHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgaXQgd2FzIG5vdC4KIGJvb2wgYXBw
ZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1G
aWxlSGFuZGxlJik7CiAKKy8vIEhhcmQgbGlua3MgYSBmaWxlIGlmIHBvc3NpYmxlLCBjb3BpZXMg
aXQgaWYgbm90LgorYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2Us
IGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pOworCiAjaWYgVVNFKEZJTEVfTE9DSykKIGJvb2wg
bG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlTG9ja01vZGUpOwogYm9vbCB1bmxvY2tG
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCBmZTI3NmIwLi4yMWEzNmMwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAg
LTM0Niw0ICszNDYsMzEgQEAgZW5kOgogfQogI2VuZGlmCiAKK2Jvb2wgaGFyZExpbmtPckNvcHlG
aWxlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQorewor
ICAgIGlmIChmaWxlRXhpc3RzKGRlc3RpbmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQ1N0cmluZyBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2Up
OworICAgIGlmICghZnNTb3VyY2UuZGF0YSgpIHx8IGZzU291cmNlLmRhdGEoKVswXSA9PSAnXDAn
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzRGVzdGluYXRpb24gPSBm
aWxlU3lzdGVtUmVwcmVzZW50YXRpb24oZGVzdGluYXRpb24pOworICAgIGlmICghZnNEZXN0aW5h
dGlvbi5kYXRhKCkgfHwgZnNEZXN0aW5hdGlvbi5kYXRhKClbMF0gPT0gJ1wwJykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaW50IHJlc3VsdCA9IGxpbmsoZnNTb3VyY2UuZGF0YSgpLCBm
c0Rlc3RpbmF0aW9uLmRhdGEoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgLy8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4K
KyAgICBhdXRvIGhhbmRsZSA9IG9wZW5GaWxlKGRlc3RpbmF0aW9uLCBPcGVuRm9yV3JpdGUpOwor
ICAgIGlmICghaXNIYW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBib29sIGFwcGVuZFJlc3VsdCA9IGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShz
b3VyY2UsIGhhbmRsZSk7CisgICAgY2xvc2VGaWxlKGhhbmRsZSk7CisgICAgcmV0dXJuIGFwcGVu
ZFJlc3VsdDsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcAppbmRleCA5YzZhZTAyLi5j
YzI0NDE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJh
c2VQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJh
c2VQcm9jZXNzLmNwcApAQCAtOTgsNyArOTgsNyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZGlk
UmVjZWl2ZUludmFsaWRNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6U3RyaW5nUmVmZQog
SURCU2VydmVyOjpJREJTZXJ2ZXImIERhdGFiYXNlUHJvY2Vzczo6aWRiU2VydmVyKCkKIHsKICAg
ICBpZiAoIW1faWRiU2VydmVyKQotICAgICAgICBtX2lkYlNlcnZlciA9IElEQlNlcnZlcjo6SURC
U2VydmVyOjpjcmVhdGUoaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KCkpOworICAgICAgICBtX2lk
YlNlcnZlciA9IElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoaW5kZXhlZERhdGFiYXNlRGly
ZWN0b3J5KCksICZEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpKTsKIAogICAgIHJldHVybiAq
bV9pZGJTZXJ2ZXI7CiB9CkBAIC0zMDUsNiArMzA1LDMxIEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNz
OjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25T
ZXQ8CiAjZW5kaWYKIH0KIAordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmdyYW50U2FuZGJveEV4dGVu
c2lvbnNGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFNhbmRib3hF
eHRlbnNpb246OkhhbmRsZUFycmF5JiBoYW5kbGVzKQoreworICAgIEFTU0VSVChwYXRocy5zaXpl
KCkgPT0gaGFuZGxlcy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRo
cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fYmxvYlRlbXBvcmFyeUZp
bGVTYW5kYm94RXh0ZW5zaW9ucy5hZGQocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZShoYW5kbGVzW2ldKSk7CisgICAgICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAg
fQorfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6cHJlcGFyZUZvckZpbGVDb3B5KGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICBhdXRvIGV4dGVuc2lvbiA9IG1fYmxvYlRlbXBvcmFyeUZpbGVT
YW5kYm94RXh0ZW5zaW9ucy5nZXQocGF0aCk7CisgICAgaWYgKGV4dGVuc2lvbikKKyAgICAgICAg
ZXh0ZW5zaW9uLT5jb25zdW1lKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpmaWxlQ29w
eUNvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAvLyBGSVhNRTogV2Uga25vdyB3
ZSdyZSBkb25lIHdpdGggdGhlIHRlbXBvcmFyeSBmaWxlIGhlcmUuLi4gc28gbnVrZSBpdC4KKyAg
ICBhdXRvIGV4dGVuc2lvbiA9IG1fYmxvYlRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9ucy50
YWtlKHBhdGgpOworICAgIGlmIChleHRlbnNpb24pCisgICAgICAgIGV4dGVuc2lvbi0+cmV2b2tl
KCk7Cit9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+PiBEYXRhYmFzZVByb2Nlc3M6OmluZGV4ZWREYXRhYmFzZU9y
aWdpbnMoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0Rh
dGFiYXNlUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
UHJvY2Vzcy5oCmluZGV4IDY4OTI1NGYuLjJjOTUzNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKQEAgLTI5LDYgKzI5LDggQEAKICNp
ZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lEQkJhY2tp
bmdTdG9yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCU2VydmVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9VbmlxdWVJREJEYXRhYmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtNDUsNyArNDcsNyBAQCBjbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb247
CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZTsKIHN0cnVjdCBEYXRhYmFzZVByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM7CiAKLWNsYXNzIERhdGFiYXNlUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFBy
b2Nlc3MgeworY2xhc3MgRGF0YWJhc2VQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHVi
bGljIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNz
IE5ldmVyRGVzdHJveWVkPERhdGFiYXNlUHJvY2Vzcz47CiBwdWJsaWM6CkBAIC02NSw2ICs2Nywx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4pOwogCisgICAgLy8gV2ViQ29yZTo6SURCU2VydmVy
OjpJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlcgorICAgIHZvaWQgcHJlcGFyZUZvckZpbGVDb3B5
KGNvbnN0IFN0cmluZyYgcGF0aCkgZmluYWw7CisgICAgdm9pZCBmaWxlQ29weUNvbXBsZXRlKGNv
bnN0IFN0cmluZyYgcGF0aCkgZmluYWw7CisKIHByaXZhdGU6CiAgICAgRGF0YWJhc2VQcm9jZXNz
KCk7CiAKQEAgLTkwLDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZldGNoV2Vic2l0ZURh
dGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRl
RGF0YVR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVE
YXRhKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0
ZURhdGFUeXBlcywgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmll
ZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHdlYnNpdGVEYXRhVHlwZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRh
dGE+JiBvcmlnaW5zLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGdyYW50U2FuZGJv
eEV4dGVuc2lvbnNGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKICAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luPj4gaW5kZXhl
ZERhdGFiYXNlT3JpZ2lucygpOwpAQCAtMTA5LDYgKzExNiw4IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyPiBtX2lkYlNlcnZlcjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fYmxvYlRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5z
aW9uczsKICNlbmRpZgogCiAgICAgRGVxdWU8c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OkNyb3Nz
VGhyZWFkVGFzaz4+IG1fZGF0YWJhc2VUYXNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDRj
YjlkYTAuLjgyZTI3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMzIsNiArMzIsNyBAQCBt
ZXNzYWdlcyAtPiBEYXRhYmFzZVByb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIEZldGNoV2Vi
c2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6
V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQog
ICAgIERlbGV0ZVdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlv
blNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgc3RkOjpjaHJv
bm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxs
YmFja0lEKQogICAgIERlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVE
YXRhVHlwZXMsIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+IG9yaWdpbnMsIHVp
bnQ2NF90IGNhbGxiYWNrSUQpCisgICAgR3JhbnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKFZl
Y3RvcjxTdHJpbmc+IHBhdGhzLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5
IGV4dGVuc2lvbnMpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA4ODczNTQ3ZC4uOTg4NzNkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMjk2LDEwICsyOTYsMTIgQEAgdm9pZCBOZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXMoY29u
c3QgVmVjdG9yPFN0cmkKICAgICAgICAgZm9yIChhdXRvJiBmaWxlIDogZmlsZVJlZmVyZW5jZXMp
CiAgICAgICAgICAgICBmaWxlLT5yZXZva2VGaWxlQWNjZXNzKCk7CiAKLSAgICAgICAgaWYgKCFt
X2Nvbm5lY3Rpb24gfHwgIW1fY29ubmVjdGlvbi0+aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9uKCkuZ3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMoZmlsZU5hbWVzLCBbdGhpcywgcHJvdGVj
dG9yLCByZXF1ZXN0SWRlbnRpZmllciwgZmlsZU5hbWVzXSgpIHsKKyAgICAgICAgICAgIGlmICgh
bV9jb25uZWN0aW9uIHx8ICFtX2Nvbm5lY3Rpb24tPmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm47CiAKLSAgICAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzc0Nvbm5lY3Rpb246OkRpZFdyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVzKHJlcXVlc3RJ
ZGVudGlmaWVyLCBmaWxlTmFtZXMpLCAwKTsKKyAgICAgICAgICAgIG1fY29ubmVjdGlvbi0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEaWRXcml0ZUJsb2JzVG9UZW1w
b3JhcnlGaWxlcyhyZXF1ZXN0SWRlbnRpZmllciwgZmlsZU5hbWVzKSwgMCk7CisgICAgICAgIH0p
OwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5jcHAKaW5kZXggNGIzN2ZhYy4uMjM5ZTk2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMjkzLDYgKzI5Mywy
MSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZXN0cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIFNlc3Npb25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbihz
ZXNzaW9uSUQpOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpncmFudFNhbmRib3hFeHRlbnNp
b25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFt
ZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpCit7CisgICAgc3Rh
dGljIHVpbnQ2NF90IG5leHRSZXF1ZXN0SUQ7CisgICAgbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxv
YnNDb21wbGV0aW9uSGFuZGxlcnMuc2V0KCsrbmV4dFJlcXVlc3RJRCwgY29tcGxldGlvbkhhbmRs
ZXIpOworCisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3NQcm94eTo6R3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNz
Rm9yQmxvYnMobmV4dFJlcXVlc3RJRCwgZmlsZW5hbWVzKSwgMCk7Cit9CisKK3ZvaWQgTmV0d29y
a1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJs
b2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAgICBhdXRvIGhhbmRsZXIgPSBtX3NhbmRib3hF
eHRlbnNpb25Gb3JCbG9ic0NvbXBsZXRpb25IYW5kbGVycy50YWtlKHJlcXVlc3RJRCk7CisgICAg
aWYgKGhhbmRsZXIpCisgICAgICAgIGhhbmRsZXIoKTsKK30KKwogc3RhdGljIHZvaWQgZmV0Y2hE
aXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0
YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoVmVjdG9yPFdl
YnNpdGVEYXRhOjpFbnRyeT4pPiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICNpZiBFTkFCTEUoTkVU
V09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oCmluZGV4IGUwNzU4M2QuLjM5ODJjNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTEyLDYgKzExMiw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9u
SUQpOwogCisgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NG
b3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMsIHN0ZDo6ZnVuY3Rpb248dm9p
ZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpOworCiBwcml2YXRlOgogICAgIE5ldHdvcmtQcm9jZXNz
KCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzKCk7CkBAIC0xNzgsNiArMTgwLDggQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzU3RhdGlzdGljcyh1aW50NjRfdCBjYWxsYmFja0lE
KTsKICAgICB2b2lkIGNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xl
YXIpOwogCisgICAgdm9pZCBkaWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nl
c3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpOworCiAjaWYgVVNFKFNPVVApCiAgICAgdm9p
ZCBzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCk7CiAgICAgdm9pZCB1c2VyUHJlZmVycmVkTGFuZ3Vh
Z2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwpAQCAtMjAwLDYgKzIwNCw4IEBAIHBy
aXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIqLCBzdGQ6OnVuaXF1ZV9wdHI8
TmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50PiwgUHRySGFzaDxjb25zdCBjaGFyKj4+IE5ldHdvcmtQ
cm9jZXNzU3VwcGxlbWVudE1hcDsKICAgICBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXAgbV9z
dXBwbGVtZW50czsKIAorICAgIEhhc2hNYXA8dWludDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAo
KT4+IG1fc2FuZGJveEV4dGVuc2lvbkZvckJsb2JzQ29tcGxldGlvbkhhbmRsZXJzOworCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vz
c0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzJik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4KaW5kZXggM2M0OTk5MS4uODlmMjQzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTY3
LDQgKzY3LDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewog
ICAgIFByZXBhcmVUb1N1c3BlbmQoKQogICAgIENhbmNlbFByZXBhcmVUb1N1c3BlbmQoKQogICAg
IFByb2Nlc3NEaWRSZXN1bWUoKQorCisgICAgRGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0
YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElEKQogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNw
cAppbmRleCBiYjA0ODIyLi5jNzBiODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcApAQCAtMjgsOSArMjgs
MTEgQEAKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNs
dWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiRGF0
YWJhc2VQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMu
aCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9u
LmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vz
c1Bvb2wuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgpAQCAtMjY5LDYgKzI3MSwyMSBAQCB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyh1
aW50NjRfdCBjYWxsYmFja0lEKQogICAgIGNhbGxiYWNrKCk7CiB9CiAKK3ZvaWQgTmV0d29ya1By
b2Nlc3NQcm94eTo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxv
YnModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7Cisg
ICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9uczsKKyAgICBleHRlbnNp
b25zLmFsbG9jYXRlKHBhdGhzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
YXRocy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBFdmVuIHRob3VnaCB0aGUgRGF0YWJhc2VQ
cm9jZXNzIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiAiY29weWluZyIgdGhlIGNvbnRlbnRzIG9mIHRo
ZSB0ZW1wb3JhcnkgZmlsZSwgYW5kIHRoZSBtb3N0CisgICAgICAgIC8vIGVmZmljaWVudCB3YXkg
dG8gZG8gdGhhdCBpcyB3aXRoIGEgaGFyZCBsaW5rLgorICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5
LCBsaW5rKCkgcmVxdWlyZXMgYSBSZWFkV3JpdGUgZXh0ZW5zaW9uLgorICAgICAgICBTYW5kYm94
RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlJlYWRX
cml0ZSwgZXh0ZW5zaW9uc1tpXSk7CisgICAgfQorCisgICAgbV9wcm9jZXNzUG9vbC5zZW5kVG9E
YXRhYmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpEYXRhYmFzZVBy
b2Nlc3M6OkdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhwYXRocywgZXh0ZW5zaW9ucykp
OworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpZEdy
YW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHJlcXVlc3RJRCks
IDApOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQ
cm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29u
bmVjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgQ2hpbGRQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExh
dW5jaGluZyhsYXVuY2hlciwgY29ubmVjdGlvbklkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4
IDZhZTU0NzQuLjA5MzA5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9O
ZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTEwNiw2ICsxMDYsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlkRmV0Y2hXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lELCBj
b25zdCBXZWJzaXRlRGF0YSYpOwogICAgIHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0
X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMo
dWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9E
YXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocyk7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlhZ25vc3RpY01lc3NhZ2UodWlu
dDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3Jp
cHRpb24pOwogICAgIHZvaWQgbG9nU2FtcGxlZERpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh1
aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNj
cmlwdGlvbiwgdWludDMyX3QgcmVzdWx0KTsKICAgICB2b2lkIGxvZ1NhbXBsZWREaWFnbm9zdGlj
TWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5tZXNzYWdlcy5pbgppbmRleCBkYzkzYjg0Li40N2VmNjc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTI5LDYgKzI5LDggQEAgbWVzc2FnZXMgLT4gTmV0
d29ya1Byb2Nlc3NQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGlkRGVsZXRlV2Vic2l0ZURh
dGEodWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBEaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdp
bnModWludDY0X3QgY2FsbGJhY2tJRCkKIAorICAgIEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0Rh
dGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgVmVjdG9yPFN0cmluZz4g
cGF0aHMpCisKICAgICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQoKQogICAgIFNldElzSG9sZGluZ0xv
Y2tlZEZpbGVzKGJvb2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275836</attachid>
            <date>2016-04-06 17:21:53 -0700</date>
            <delta_ts>2016-04-07 10:53:55 -0700</delta_ts>
            <desc>Updated WIP</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>37838</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
LmNwcAppbmRleCBjN2UxMGRlLi44M2QxYWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJET01FcnJvci5oIgorI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudFF1
ZXVlLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yV2l0aFZhbHVlLmgiCkBAIC00NSw2ICs0Niw3IEBA
CiAjaW5jbHVkZSAiSURCVmFsdWUuaCIKICNpbmNsdWRlICJKU0RPTVdpbmRvd0Jhc2UuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJUcmFuc2FjdGlvbk9wZXJhdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtODcwLDcgKzg3MiwxOCBAQCB2b2lkIElE
QlRyYW5zYWN0aW9uOjpwdXRPckFkZE9uU2VydmVyKElEQkNsaWVudDo6VHJhbnNhY3Rpb25PcGVy
YXRpb24mIG9wZXJhdGlvbgogICAgIEFTU0VSVCghaXNSZWFkT25seSgpKTsKICAgICBBU1NFUlQo
dmFsdWUpOwogCi0gICAgaWYgKCF2YWx1ZS0+aGFzQmxvYlVSTHMoKSkgeworICAgIGF1dG8qIGNv
bnRleHQgPSBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBh
dXRvKiBwYWdlID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihjb250ZXh0KS0+cGFnZSgpOworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFRoaXMgc29sdXRp
b24gZm9yIHByaXZhdGUgYnJvd3NpbmcgZG9lc24ndCBzZWVtIGdyZWF0Li4uCisgICAgLy8gLi4u
YnV0IEkgZG9uJ3Qga25vdyB3aGF0IGFuIGFjY2VwdGlibGUgc29sdXRpb24gaXMuCisgICAgaWYg
KCF2YWx1ZS0+aGFzQmxvYlVSTHMoKSB8fCBwYWdlLT51c2VzRXBoZW1lcmFsU2Vzc2lvbigpKSB7
CiAgICAgICAgIHNlcnZlckNvbm5lY3Rpb24oKS5wdXRPckFkZChvcGVyYXRpb24sIGtleS5nZXQo
KSwgKnZhbHVlLCBvdmVyd3JpdGVNb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcAppbmRleCBmMWRlZTEy
Li5iNmNmMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmFs
dWUuY3BwCkBAIC0zOSw2ICszOSw3IEBAIElEQlZhbHVlOjpJREJWYWx1ZSgpCiBJREJWYWx1ZTo6
SURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSkKICAgICA6
IG1fZGF0YShUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3RvcihzY3JpcHRWYWx1ZS5kYXRh
KCkpKQogeworICAgIG1fYmxvYlVSTHMgPSBzY3JpcHRWYWx1ZS5ibG9iVVJMc0lzb2xhdGVkQ29w
eSgpOwogfQogCiBJREJWYWx1ZTo6SURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVl
JiBzY3JpcHRWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCA1Mjk0YTE3
Li5kNjgzM2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC01MCw2ICs1MCwxMyBAQCBlbnVtIGNs
YXNzIEluZGV4UmVjb3JkVHlwZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NsYXNzIElE
QkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JREJCYWNr
aW5nU3RvcmVGaWxlSGFuZGxlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRmls
ZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZmlsZUFj
Y2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgPSAwOworfTsKKwogY2xhc3MgSURCQmFj
a2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUoKSB7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5jcHAKaW5kZXggOTlhM2Q0Ny4uODNhZDI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ0LDkgKzQ0
LDkgQEAgUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoKQogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElEQlNlcnZlcigpKTsKIH0KIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCitSZWY8SURCU2VydmVy
PiBJREJTZXJ2ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwg
SURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFzZURpcmVjdG9yeVBhdGgpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBmaWxlSGFu
ZGxlcikpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcigpCkBAIC01NSw4ICs1NSw5IEBAIElE
QlNlcnZlcjo6SURCU2VydmVyKCkKICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNl
cnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIi
KTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVj
dG9yeVBhdGgpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQogICAg
IDogbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQorICAgICwg
bV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aC51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTIwLDcgKzEyMSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJ
REJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRh
dGFiYXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwogCi0g
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlm
aWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpv
cGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4
IDk0NTQ5YzguLjdhODNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTQ5LDEwICs0OSwxMiBAQCBjbGFzcyBJREJW
YWx1ZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NsYXNzIElEQkJhY2tpbmdTdG9yZUZp
bGVIYW5kbGVyOworCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJREJTZXJ2
ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJ
REJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURC
QmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0Ns
aWVudCYpOwpAQCAtOTQsNyArOTYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgSURCU2Vy
dmVyKCk7Ci0gICAgSURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
KTsKKyAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElE
QkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFzZSYgZ2V0
T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsK
IApAQCAtMTE3LDYgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxJREJSZXNvdXJjZUlk
ZW50aWZpZXIsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24qPiBtX3RyYW5zYWN0aW9uczsK
IAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKKyAgICBJREJCYWNraW5nU3Rv
cmVGaWxlSGFuZGxlciogbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCBl
NTU3YTBlLi4xNGYxZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAt
MTYwLDkgKzE2MCw0MyBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiB2MkluZGV4UmVjb3Jkc1RhYmxl
U2NoZW1hQWx0ZXJuYXRlKCkKICAgICByZXR1cm4gdjJJbmRleFJlY29yZHNUYWJsZVNjaGVtYVN0
cmluZzsKIH0KIAorc3RhdGljIGNvbnN0IFN0cmluZyBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKGNv
bnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUg
VEFCTEUgIiwgdGFibGVOYW1lLCAiIChvYmplY3RTdG9yZVJvdyBJTlRFR0VSIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwsIGJsb2JVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMKSIp
OworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1h
U3RyaW5nKGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoIkJsb2JSZWNvcmRzIikpOworICAgIHJldHVy
biBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5n
JiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JSZWNvcmRz
VGFibGVTY2hlbWEoIlwiQmxvYlJlY29yZHNcIiIpKTsKKyAgICByZXR1cm4gYmxvYlJlY29yZHNU
YWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyBibG9iRmlsZXNUYWJs
ZVNjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmlu
ZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwgIiAoYmxvYlVSTCBURVhUIE5PVCBOVUxMIE9O
IENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGZpbGVOYW1lIFRFWFQgTk9U
IE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KIAot
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0
YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERp
cmVjdG9yeSkKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0
cmluZyhibG9iRmlsZXNUYWJsZVNjaGVtYSgiQmxvYkZpbGVzIikpOworICAgIHJldHVybiBibG9i
RmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYkZp
bGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxT
dHJpbmc+IGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JGaWxlc1RhYmxlU2NoZW1hKCJc
IkJsb2JGaWxlc1wiIikpOworICAgIHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsK
K30KKworU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
Um9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQog
ICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2ZpbGVIYW5kbGVyKGZpbGVI
YW5kbGVyKQogewogICAgIG1fYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSA9IGlkZW50aWZpZXIu
ZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChkYXRhYmFzZVJvb3REaXJlY3RvcnkpOwog
fQpAQCAtMjc1LDYgKzMwOSw3OCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVSZWNvcmRz
VGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJs
ZXMoKQoreworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAgICBBU1NFUlQobV9zcWxpdGVEQi0+
aXNPcGVuKCkpOworCisgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CisgICAgeworICAgICAgICAv
LyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBibG9iIHJlY29yZCB0YWJsZS4KKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB0eXBl
LCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iUmVjb3JkcyciKTsK
KyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hl
bWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3Rl
cCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxlIGF0IGFs
bCwgY3JlYXRlIGl0Li4KKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkg
eworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9iUmVjb3Jk
c1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
Y3JlYXRlIEJsb2JSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRl
REItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdXJyZW50
U2NoZW1hID0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpOworICAgICAgICB9IGVsc2UgaWYgKHNx
bGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIkVycm9y
IGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYlJlY29yZHMg
dGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEpOworICAg
IH0KKworICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKSAm
JiBjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKSkgewor
ICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYlJlY29yZHMgdGFibGUgc2NoZW1hIGZvdW5k
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIC8vIEZl
dGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2IgZmlsZSB0YWJsZS4KKyAgICAgICAg
U1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB0eXBlLCBzcWwg
RlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iRmlsZXMnIik7CisgICAgICAg
IGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAgTE9H
X0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0
aGUgQmxvYkZpbGVzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisKKyAg
ICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3JlYXRlIGl0
IGFuZCB0aGVuIGJhaWwuCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUp
IHsKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxvYkZpbGVz
VGFibGVTY2hlbWEoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBj
cmVhdGUgQmxvYkZpbGVzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3FsaXRlREIt
Pmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykg
eworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZl
dGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uVGV4dCgxKTsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudFNjaGVtYSAhPSBibG9i
RmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYkZpbGVzVGFibGVTY2hl
bWFBbHRlcm5hdGUoKSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYkZpbGVzIHRh
YmxlIHNjaGVtYSBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxp
ZFJlY29yZHNUYWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwpAQCAtNjEyLDYgKzcx
OCwxMiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0
YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9yIGNyZWF0aW5n
IG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIikgfTsKICAgICB9
CiAKKyAgICBpZiAoIWVuc3VyZVZhbGlkQmxvYlRhYmxlcygpKSB7CisgICAgICAgIExPR19FUlJP
UigiRXJyb3IgY3JlYXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRh
dGFiYXNlIik7CisgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOworICAgICAgICByZXR1cm4g
eyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9y
IGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRhYmxlcyBpbiBkYXRhYmFzZSIp
IH07CisgICAgfQorCiAgICAgYXV0byBkYXRhYmFzZUluZm8gPSBleHRyYWN0RXhpc3RpbmdEYXRh
YmFzZUluZm8oKTsKICAgICBpZiAoIWRhdGFiYXNlSW5mbykKICAgICAgICAgZGF0YWJhc2VJbmZv
ID0gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCk7CkBAIC0xMzAwLDEzICsx
NDEyLDE0IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxsSW5kZXhl
c0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgcmV0dXJuIGVycm9yOwogfQog
Ci1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2JqZWN0U3Rv
cmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktleURhdGEmIGtleURhdGEsIGNvbnN0
IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwg
Y29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktleURh
dGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVzKQog
ewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCAt
IGtleSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwga2V5RGF0YS5sb2dnaW5nU3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKICAgICBBU1NF
UlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsKICAgICBB
U1NFUlQodmFsdWUuZGF0YSgpKTsKKyAgICBBU1NFUlQoYmxvYlVSTHMuc2l6ZSgpID09IGJsb2JG
aWxlcy5zaXplKCkpOwogCiAgICAgYXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0aW9ucy5n
ZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8ICF0cmFu
c2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CkBAIC0xMzIzLDYgKzE0MzYsOCBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aQogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxpemUgSURC
S2V5IHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3Qgc3RvcmUiKTsKICAgICAgICAgcmV0dXJuIHsg
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUg
dG8gc2VyaWFsaXplIElEQktleSB0byBiZSBzdG9yZWQgaW4gYW4gb2JqZWN0IHN0b3JlIikgfTsK
ICAgICB9CisKKyAgICBpbnQ2NF90IHJlY29yZElEID0gMDsKICAgICB7CiAgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gUmVj
b3JkcyBWQUxVRVMgKD8sIENBU1QoPyBBUyBURVhUKSwgPywgTlVMTCk7IikpOwogICAgICAgICBp
ZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKQEAgLTEzMzMsNiArMTQ0OCw4IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwdXQg
cmVjb3JkIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgaW4gUmVjb3JkcyB0YWJsZSAoJWkp
IC0gJXMiLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0dXJuIHsg
SURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUg
dG8gc3RvcmUgcmVjb3JkIGluIG9iamVjdCBzdG9yZSIpIH07CiAgICAgICAgIH0KKworICAgICAg
ICByZWNvcmRJRCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0KIAogICAg
IGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKG9iamVjdFN0b3JlSW5m
bywga2V5RGF0YSwgdmFsdWUpOwpAQCAtMTM0OCw2ICsxNDY1LDU1IEBAIElEQkVycm9yIFNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYg
dHJhbnNhY3RpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGJsb2JVUkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHVybCA9IGJsb2JVUkxzW2ld
OworICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURC
LCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEJsb2JSZWNvcmRzIFZBTFVFUyAoPywgPyk7Iikp
OworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCByZWNvcmRJRCkgIT0gU1FMSVRFX09LCisgICAgICAg
ICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIHVybCkgIT0gU1FMSVRFX09LCisgICAgICAgICAg
ICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3Is
IEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIp
IH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50NjRfdCBwb3RlbnRpYWxG
aWxlTmFtZSA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOworCisgICAgICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBsZWZ0IHRv
IGRvLgorICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0
ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlcyBXSEVSRSBi
bG9iVVJMID0gPzsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmls
ZW5hbWVzIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZXhhbWlu
ZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBmaWxlbmFtZXMgaW4gZGF0YWJhc2Ui
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmlsZW5hbWVzIGlu
IGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBz
byBjb21taXQgb3VyIGZpbGUgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICAgICAgU3RyaW5nIHN0
b3JlZEZpbGVuYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVsbGkuYmxvYiIsIHBvdGVudGlhbEZpbGVO
YW1lKTsKKyAgICAgICAgeworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxp
dGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBCbG9iRmlsZXMgVkFMVUVTICg/LCA/KTsi
KSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAg
ICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAg
ICAgICB8fCBzcWwuYmluZFRleHQoMiwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIHJlY29yZCBpbiBkYXRh
YmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpV
bmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29yZCBCbG9iIGZpbGUgcmVj
b3JkIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHRyYW5zYWN0aW9uLT5hZGRCbG9iRmlsZShibG9iRmlsZXNbaV0sIHN0b3JlZEZpbGVuYW1lKTsK
KyAgICB9CisKICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyhvYmplY3RT
dG9yZUluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIHJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5n
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaAppbmRleCA3ZjIzOTJhLi43MzNjN2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsK
IAogY2xhc3MgU1FMaXRlSURCQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7
CiBwdWJsaWM6Ci0gICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRl
bnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KTsKKyAgICBTUUxp
dGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKik7
CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCkBAIC04MSwxMyAr
ODEsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0ZUlEQkN1
cnNvciYpOwogCisgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0OworCisg
ICAgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKCkgY29uc3QgeyByZXR1
cm4gbV9maWxlSGFuZGxlcjsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBmaWxlbmFtZUZvckRh
dGFiYXNlTmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBmdWxsRGF0YWJhc2VEaXJlY3RvcnkoKSBj
b25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAgYm9vbCBl
bnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOwogICAgIGJvb2wgZW5zdXJlVmFsaWRJbmRleFJlY29y
ZHNUYWJsZSgpOworICAgIGJvb2wgZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJh
c2VJbmZvKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gZXh0cmFjdEV4
aXN0aW5nRGF0YWJhc2VJbmZvKCk7CiAKQEAgLTExOCw2ICsxMjIsOCBAQCBwcml2YXRlOgogCiAg
ICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0dsb2JhbE9i
amVjdD4gbV9nbG9iYWxPYmplY3Q7CisKKyAgICBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciog
bV9maWxlSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5z
YWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZGNiZTMzMS4uOTkxOGE3YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJJREJD
dXJzb3JJbmZvLmgiCiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAjaW5jbHVkZSAiU1FMaXRlSURC
QmFja2luZ1N0b3JlLmgiCkBAIC03NSwxMiArNzYsNDUgQEAgSURCRXJyb3IgU1FMaXRlSURCVHJh
bnNhY3Rpb246OmNvbW1pdCgpCiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jl
c3MoKSkKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJv
ciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gY29tbWl0IFNRTGl0ZSB0cmFuc2FjdGlvbiBpbiBk
YXRhYmFzZSBiYWNrZW5kIikgfTsKIAorICAgIG1vdmVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpOwor
CiAgICAgcmVzZXQoKTsKICAgICByZXR1cm4geyB9OwogfQogCit2b2lkIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uOjptb3ZlQmxvYkZpbGVzSWZOZWNlc3NhcnkoKQoreworICAgIFN0cmluZyBkYXRhYmFz
ZURpcmVjdG9yeSA9IG1fYmFja2luZ1N0b3JlLmZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpOworICAg
IGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2JGaWxlcykgeworICAgICAgICBhdXRvKiBmaWxlSGFu
ZGxlciA9IG1fYmFja2luZ1N0b3JlLmZpbGVIYW5kbGVyKCk7CisgICAgICAgIGlmIChmaWxlSGFu
ZGxlcikKKyAgICAgICAgICAgIGZpbGVIYW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2VzcyhlbnRy
eS5maXJzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFoYXJkTGlua09yQ29weUZpbGUo
ZW50cnkuZmlyc3QsIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZURpcmVjdG9yeSwg
ZW50cnkuc2Vjb25kKSkpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBsaW5rL2Nv
cHkgdGVtcG9yYXJ5IGJsb2IgZmlsZSAnJXMnIHRvIGxvY2F0aW9uICclcyciLCBlbnRyeS5maXJz
dC51dGY4KCkuZGF0YSgpLCBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJhc2VEaXJlY3Rv
cnksIGVudHJ5LnNlY29uZCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGZpbGVIYW5k
bGVyKQorICAgICAgICAgICAgZmlsZUhhbmRsZXItPmZpbGVBY2Nlc3NDb21wbGV0ZShlbnRyeS5m
aXJzdCk7CisgICAgfQorCisgICAgbV9ibG9iRmlsZXMuY2xlYXIoKTsKK30KKwogSURCRXJyb3Ig
U1FMaXRlSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bV9ibG9iRmlsZXMpIHsKKyAgICAgICAgYXV0byogZmlsZUhhbmRsZXIgPSBtX2JhY2tpbmdTdG9y
ZS5maWxlSGFuZGxlcigpOworICAgICAgICBpZiAoZmlsZUhhbmRsZXIpIHsKKyAgICAgICAgICAg
IGZpbGVIYW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2VzcyhlbnRyeS5maXJzdCk7CisgICAgICAg
ICAgICBmaWxlSGFuZGxlci0+ZmlsZUFjY2Vzc0NvbXBsZXRlKGVudHJ5LmZpcnN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghZGVsZXRlRmlsZShlbnRyeS5maXJzdCkpCisg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIHRlbXBvcmFyeSBibG9i
IGZpbGUgJyVzJyIsIGVudHJ5LmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgbV9ibG9iRmlsZXMuY2xlYXIoKTsKKwogICAgIGlmICghbV9zcWxpdGVUcmFuc2Fj
dGlvbiB8fCAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1
cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIk5v
IFNRTGl0ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcyB0byBhYm9ydCIpIH07CiAKQEAgLTk3LDYg
KzEzMSw3IEBAIHZvaWQgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KCkKIHsKICAgICBtX3Nx
bGl0ZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKICAgICBjbGVhckN1cnNvcnMoKTsKKyAgICBtX2Js
b2JGaWxlcy5jbGVhcigpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPiBT
UUxpdGVJREJUcmFuc2FjdGlvbjo6bWF5YmVPcGVuQmFja2luZ1N0b3JlQ3Vyc29yKHVpbnQ2NF90
IG9iamVjdFN0b3JlSUQsIHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYg
cmFuZ2UpCkBAIC0xNzEsNiArMjA2LDExIEBAIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246Omlu
UHJvZ3Jlc3MoKSBjb25zdAogICAgIHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3Fs
aXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKTsKIH0KIAordm9pZCBTUUxpdGVJREJUcmFuc2Fj
dGlvbjo6YWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRoLCBjb25zdCBTdHJp
bmcmIHN0b3JlZEZpbGVuYW1lKQoreworICAgIG1fYmxvYkZpbGVzLmFwcGVuZChzdGQ6Om1ha2Vf
cGFpcih0ZW1wb3JhcnlQYXRoLCBzdG9yZWRGaWxlbmFtZSkpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNh
Y3Rpb24uaAppbmRleCAwZWZlNzQ0Li41ZDdiMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rp
b24uaApAQCAtNzEsMTYgKzcxLDIxIEBAIHB1YmxpYzoKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9u
KiBzcWxpdGVUcmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rpb24u
Z2V0KCk7IH0KIAorICAgIHZvaWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQ
YXRoLCBjb25zdCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKTsKKwogcHJpdmF0ZToKICAgICB2b2lk
IGNsZWFyQ3Vyc29ycygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgbW92ZUJsb2JG
aWxlc0lmTmVjZXNzYXJ5KCk7CisKICAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9pbmZvOwogCiAg
ICAgU1FMaXRlSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAgICAgSGFzaE1h
cDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+
PiBtX2N1cnNvcnM7CiAgICAgSGFzaFNldDxTUUxpdGVJREJDdXJzb3IqPiBtX2JhY2tpbmdTdG9y
ZUN1cnNvcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG1fYmxvYkZp
bGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3MzAzMjlk
Li41ZTgzNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTI3NDgsNiArMjc0OCwxNiBAQCB1aW50MzJfdCBTZXJp
YWxpemVkU2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCkKIH0KIAogI2lmIEVOQUJMRShJ
TkRFWEVEX0RBVEFCQVNFKQorVmVjdG9yPFN0cmluZz4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpi
bG9iVVJMc0lzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0
OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYmxvYlVSTHMuc2l6ZSgpKTsK
KyAgICBmb3IgKGF1dG8mIHVybCA6IG1fYmxvYlVSTHMpCisgICAgICAgIHJlc3VsdC51bmNoZWNr
ZWRBcHBlbmQodXJsLmlzb2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
IHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERC
KHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4gY29tcGxldGlvbkhhbmRsZXIp
CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTI3NjksNiArMjc3OSw2IEBAIHZv
aWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKHN0
ZDo6ZnVuY3Rpb248dm9pZCAoY29uCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgKnRoaXMs
IG1fYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMgfSk7CiAgICAgfSk7CiB9Ci0jZW5kaWYKKyNlbmRp
ZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
aAppbmRleCA2NDVkY2I4Li4xNWNiZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtODQsOSArODQsMTEgQEAgcHVibGlj
OgogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9k
YXRhOyB9CiAgICAgYm9vbCBoYXNCbG9iVVJMcygpIGNvbnN0IHsgcmV0dXJuICFtX2Jsb2JVUkxz
LmlzRW1wdHkoKTsgfQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgVmVjdG9y
PFN0cmluZz4gYmxvYlVSTHNJc29sYXRlZENvcHkoKSBjb25zdDsKICAgICB2b2lkIHdyaXRlQmxv
YnNUb0Rpc2tGb3JJbmRleGVkREIoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJWYWx1ZSYp
PiBjb21wbGV0aW9uSGFuZGxlcik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9E
QVRBQkFTRSkKIAogICAgIHN0YXRpYyBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVG
cm9tV2lyZUJ5dGVzKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiAgICAgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDAzYWZmZmUuLmYxYTc4ZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTE4MSw2ICsxODEsOSBAQCBpbnQgcmVhZEZyb21GaWxl
KFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CiAvLyBSZXR1cm5z
IHRydWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90Lgog
Ym9vbCBhcHBlbmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBQ
bGF0Zm9ybUZpbGVIYW5kbGUmKTsKIAorLy8gSGFyZCBsaW5rcyBhIGZpbGUgaWYgcG9zc2libGUs
IGNvcGllcyBpdCBpZiBub3QuCitib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcm
IHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7CisKICNpZiBVU0UoRklMRV9MT0NL
KQogYm9vbCBsb2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVMb2NrTW9kZSk7CiBib29s
IHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGZlMjc2YjAuLjIxYTM2YzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcApAQCAtMzQ2LDQgKzM0NiwzMSBAQCBlbmQ6CiB9CiAjZW5kaWYKIAorYm9vbCBoYXJkTGlu
a09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRp
b24pCit7CisgICAgaWYgKGZpbGVFeGlzdHMoZGVzdGluYXRpb24pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHNvdXJjZSk7CisgICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkgfHwgZnNTb3VyY2UuZGF0YSgpWzBd
ID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgZnNEZXN0aW5h
dGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7CisgICAgaWYgKCFm
c0Rlc3RpbmF0aW9uLmRhdGEoKSB8fCBmc0Rlc3RpbmF0aW9uLmRhdGEoKVswXSA9PSAnXDAnKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgcmVzdWx0ID0gbGluayhmc1NvdXJjZS5k
YXRhKCksIGZzRGVzdGluYXRpb24uZGF0YSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEgY29weSBp
bnN0ZWFkLgorICAgIGF1dG8gaGFuZGxlID0gb3BlbkZpbGUoZGVzdGluYXRpb24sIE9wZW5Gb3JX
cml0ZSk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxl
SGFuZGxlKHNvdXJjZSwgaGFuZGxlKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1
cm4gYXBwZW5kUmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IDlj
NmFlMDIuLmNjMjQ0MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRGF0YWJhc2VQcm9j
ZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJp
bmdSZWZlCiBJREJTZXJ2ZXI6OklEQlNlcnZlciYgRGF0YWJhc2VQcm9jZXNzOjppZGJTZXJ2ZXIo
KQogewogICAgIGlmICghbV9pZGJTZXJ2ZXIpCi0gICAgICAgIG1faWRiU2VydmVyID0gSURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAg
ICAgIG1faWRiU2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSwgJkRhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkpOwogCiAgICAg
cmV0dXJuICptX2lkYlNlcnZlcjsKIH0KQEAgLTMwNSw2ICszMDUsMzEgQEAgdm9pZCBEYXRhYmFz
ZVByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQs
IE9wdGlvblNldDwKICNlbmRpZgogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6Z3JhbnRTYW5k
Ym94RXh0ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIGhhbmRsZXMpCit7CisgICAgQVNTRVJUKHBh
dGhzLnNpemUoKSA9PSBoYW5kbGVzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBhdGhzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9ibG9iVGVt
cG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zLmFkZChwYXRoc1tpXSwgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlKGhhbmRsZXNbaV0pKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pc05ld0VudHJ5
KTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpwcmVwYXJlRm9yRmlsZUNvcHko
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9y
YXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zLmdldChwYXRoKTsKKyAgICBpZiAoZXh0ZW5zaW9uKQor
ICAgICAgICBleHRlbnNpb24tPmNvbnN1bWUoKTsKK30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6
OmZpbGVDb3B5Q29tcGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIEZJWE1FOiBX
ZSBrbm93IHdlJ3JlIGRvbmUgd2l0aCB0aGUgdGVtcG9yYXJ5IGZpbGUgaGVyZS4uLiBzbyBudWtl
IGl0LgorICAgIGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRl
bnNpb25zLnRha2UocGF0aCk7CisgICAgaWYgKGV4dGVuc2lvbikKKyAgICAgICAgZXh0ZW5zaW9u
LT5yZXZva2UoKTsKK30KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogVmVjdG9yPFJl
ZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IERhdGFiYXNlUHJvY2Vzczo6aW5kZXhlZERh
dGFiYXNlT3JpZ2lucygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3Mv
RGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggNjg5MjU0Zi4uMmM5NTM0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaApAQCAtMjksNiArMjks
OCBAQAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ2hpbGRQcm9j
ZXNzLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdlYkNvcmUv
SURCQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJTZXJ2ZXIuaD4KICNpbmNs
dWRlIDxXZWJDb3JlL1VuaXF1ZUlEQkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC00NSw3ICs0Nyw3IEBAIGNsYXNzIERhdGFiYXNlVG9XZWJQcm9jZXNzQ29u
bmVjdGlvbjsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlOwogc3RydWN0IERhdGFiYXNlUHJv
Y2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgRGF0YWJhc2VQcm9jZXNzIDogcHVibGlj
IENoaWxkUHJvY2VzcyB7CitjbGFzcyBEYXRhYmFzZVByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9j
ZXNzLCBwdWJsaWMgV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VQcm9jZXNzKTsKICAgICBmcmll
bmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RGF0YWJhc2VQcm9jZXNzPjsKIHB1YmxpYzoKQEAgLTY1
LDYgKzY3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdERhdGFiYXNlVGFzayhzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPik7CiAKKyAgICAvLyBXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyCisgICAgdm9pZCBwcmVwYXJlRm9y
RmlsZUNvcHkoY29uc3QgU3RyaW5nJiBwYXRoKSBmaW5hbDsKKyAgICB2b2lkIGZpbGVDb3B5Q29t
cGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKSBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBEYXRhYmFz
ZVByb2Nlc3MoKTsKIApAQCAtOTAsNiArOTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmV0Y2hX
ZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+
IHdlYnNpdGVEYXRhVHlwZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGVsZXRl
V2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBl
PiB3ZWJzaXRlRGF0YVR5cGVzLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50
IG1vZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGVsZXRlV2Vi
c2l0ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVE
YXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4mIG9yaWdpbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZ3Jh
bnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywg
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmKTsKIAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+
PiBpbmRleGVkRGF0YWJhc2VPcmlnaW5zKCk7CkBAIC0xMDksNiArMTE2LDggQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV9pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAKICAgICBSZWZQdHI8V2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1faWRiU2VydmVyOworCisgICAgSGFzaE1hcDxT
dHJpbmcsIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRi
b3hFeHRlbnNpb25zOwogI2VuZGlmCiAKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29y
ZTo6Q3Jvc3NUaHJlYWRUYXNrPj4gbV9kYXRhYmFzZVRhc2tzOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4K
aW5kZXggNGNiOWRhMC4uODJlMjc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0zMiw2ICsz
Miw3IEBAIG1lc3NhZ2VzIC0+IERhdGFiYXNlUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAg
RmV0Y2hXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIHVpbnQ2NF90IGNhbGxi
YWNrSUQpCiAgICAgRGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25J
RCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBz
dGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiAgICAgRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4g
d2Vic2l0ZURhdGFUeXBlcywgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3Jp
Z2lucywgdWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBHcmFudFNhbmRib3hFeHRlbnNpb25zRm9y
QmxvYnMoVmVjdG9yPFN0cmluZz4gcGF0aHMsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlQXJyYXkgZXh0ZW5zaW9ucykKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9D
RVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDg4NzM1NDdkLi45ODg3M2Rl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yOTYsMTAgKzI5NiwxMiBAQCB2
b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlG
aWxlcyhjb25zdCBWZWN0b3I8U3RyaQogICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlUmVm
ZXJlbmNlcykKICAgICAgICAgICAgIGZpbGUtPnJldm9rZUZpbGVBY2Nlc3MoKTsKIAotICAgICAg
ICBpZiAoIW1fY29ubmVjdGlvbiB8fCAhbV9jb25uZWN0aW9uLT5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5ncmFudFNh
bmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhmaWxlTmFtZXMsIFt0aGlz
LCBwcm90ZWN0b3IsIHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXNdKCkgeworICAgICAgICAg
ICAgaWYgKCFtX2Nvbm5lY3Rpb24gfHwgIW1fY29ubmVjdGlvbi0+aXNWYWxpZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGlkV3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXMo
cmVxdWVzdElkZW50aWZpZXIsIGZpbGVOYW1lcyksIDApOworICAgICAgICAgICAgbV9jb25uZWN0
aW9uLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZFdyaXRlQmxv
YnNUb1RlbXBvcmFyeUZpbGVzKHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXMpLCAwKTsKKyAg
ICAgICAgfSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA0YjM3ZmFjLi4yMzllOTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yOTMs
NiArMjkzLDIxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdT
ZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgU2Vzc2lvblRyYWNrZXI6OmRlc3Ryb3lT
ZXNzaW9uKHNlc3Npb25JRCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmdyYW50U2FuZGJv
eEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+
IGZpbGVuYW1lcywgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBzdGF0aWMgdWludDY0X3QgbmV4dFJlcXVlc3RJRDsKKyAgICBtX3NhbmRib3hFeHRlbnNp
b25Gb3JCbG9ic0NvbXBsZXRpb25IYW5kbGVycy5zZXQoKytuZXh0UmVxdWVzdElELCBjb21wbGV0
aW9uSGFuZGxlcik7CisKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3Nh
Z2VzOjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFz
ZVByb2Nlc3NGb3JCbG9icyhuZXh0UmVxdWVzdElELCBmaWxlbmFtZXMpLCAwKTsKK30KKwordm9p
ZCBOZXR3b3JrUHJvY2Vzczo6ZGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9j
ZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElEKQoreworICAgIGF1dG8gaGFuZGxlciA9IG1f
c2FuZGJveEV4dGVuc2lvbkZvckJsb2JzQ29tcGxldGlvbkhhbmRsZXJzLnRha2UocmVxdWVzdElE
KTsKKyAgICBpZiAoaGFuZGxlcikKKyAgICAgICAgaGFuZGxlcigpOworfQorCiBzdGF0aWMgdm9p
ZCBmZXRjaERpc2tDYWNoZUVudHJpZXMoU2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdl
YnNpdGVEYXRhRmV0Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgc3RkOjpmdW5jdGlvbjx2b2lkIChW
ZWN0b3I8V2Vic2l0ZURhdGE6OkVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVO
QUJMRShORVRXT1JLX0NBQ0hFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmgKaW5kZXggZTA3NTgzZC4uMzk4MmM2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMTIsNiArMTEyLDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBlbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFdlYkNvcmU6
OlNlc3Npb25JRCk7CiAKKyAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNl
UHJvY2Vzc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcywgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcik7CisKIHByaXZhdGU6CiAgICAgTmV0d29y
a1Byb2Nlc3MoKTsKICAgICB+TmV0d29ya1Byb2Nlc3MoKTsKQEAgLTE3OCw2ICsxODAsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NTdGF0aXN0aWNzKHVpbnQ2NF90IGNh
bGxiYWNrSUQpOwogICAgIHZvaWQgY2xlYXJDYWNoZUZvckFsbE9yaWdpbnModWludDMyX3QgY2Fj
aGVzVG9DbGVhcik7CiAKKyAgICB2b2lkIGRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFi
YXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisKICNpZiBVU0UoU09VUCkK
ICAgICB2b2lkIHNldElnbm9yZVRMU0Vycm9ycyhib29sKTsKICAgICB2b2lkIHVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CkBAIC0yMDAsNiArMjA0
LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIHN0ZDo6dW5p
cXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4g
TmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50TWFwOwogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVu
dE1hcCBtX3N1cHBsZW1lbnRzOwogCisgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5jdGlv
bjx2b2lkICgpPj4gbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnM7
CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdv
cmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzYzQ5OTkxLi44OWYyNDNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgpAQCAtNjcsNCArNjcsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNl
aXZlciB7CiAgICAgUHJlcGFyZVRvU3VzcGVuZCgpCiAgICAgQ2FuY2VsUHJlcGFyZVRvU3VzcGVu
ZCgpCiAgICAgUHJvY2Vzc0RpZFJlc3VtZSgpCisKKyAgICBEaWRHcmFudFNhbmRib3hFeHRlbnNp
b25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkuY3BwCmluZGV4IGJiMDQ4MjIuLmM3MGI4MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0y
OCw5ICsyOCwxMSBAQAogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5o
IgogI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNs
dWRlICJEYXRhYmFzZVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlN
ZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgi
CiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNhbmRib3hF
eHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJX
ZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCkBAIC0yNjksNiArMjcx
LDIxIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAordm9pZCBO
ZXR3b3JrUHJvY2Vzc1Byb3h5OjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nl
c3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykKK3sKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRlbnNpb25zOworICAg
IGV4dGVuc2lvbnMuYWxsb2NhdGUocGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBhdGhzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBE
YXRhYmFzZVByb2Nlc3MgaXMgb25seSBpbnRlcmVzdGVkIGluICJjb3B5aW5nIiB0aGUgY29udGVu
dHMgb2YgdGhlIHRlbXBvcmFyeSBmaWxlLCBhbmQgdGhlIG1vc3QKKyAgICAgICAgLy8gZWZmaWNp
ZW50IHdheSB0byBkbyB0aGF0IGlzIHdpdGggYSBoYXJkIGxpbmsuCisgICAgICAgIC8vIFVuZm9y
dHVuYXRlbHksIGxpbmsoKSByZXF1aXJlcyBhIFJlYWRXcml0ZSBleHRlbnNpb24uCisgICAgICAg
IFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoc1tpXSwgU2FuZGJveEV4dGVuc2lv
bjo6UmVhZFdyaXRlLCBleHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICBtX3Byb2Nlc3NQb29s
LnNlbmRUb0RhdGFiYXNlUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2FnZXM6OkRh
dGFiYXNlUHJvY2Vzczo6R3JhbnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKHBhdGhzLCBleHRl
bnNpb25zKSk7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vz
czo6RGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMocmVx
dWVzdElEKSwgMCk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmluaXNoTGF1
bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBDaGlsZFByb2Nlc3NQcm94eTo6ZGlk
RmluaXNoTGF1bmNoaW5nKGxhdW5jaGVyLCBjb25uZWN0aW9uSWRlbnRpZmllcik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmgKaW5kZXggNmFlNTQ3NC4uMDkzMDk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtMTA2LDYgKzEwNiw3
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGZXRjaFdlYnNpdGVEYXRhKHVpbnQ2NF90IGNhbGxi
YWNrSUQsIGNvbnN0IFdlYnNpdGVEYXRhJik7CiAgICAgdm9pZCBkaWREZWxldGVXZWJzaXRlRGF0
YSh1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRpZERlbGV0ZVdlYnNpdGVEYXRhRm9y
T3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVu
c2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKICAgICB2b2lkIGxvZ1NhbXBsZWREaWFnbm9zdGljTWVz
c2FnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBkZXNjcmlwdGlvbik7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlhZ25vc3RpY01lc3NhZ2VXaXRo
UmVzdWx0KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlc2NyaXB0aW9uLCB1aW50MzJfdCByZXN1bHQpOwogICAgIHZvaWQgbG9nU2FtcGxlZERp
YWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGRjOTNiODQuLjQ3ZWY2NzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjksNiArMjksOCBAQCBtZXNzYWdl
cyAtPiBOZXR3b3JrUHJvY2Vzc1Byb3h5IExlZ2FjeVJlY2VpdmVyIHsKICAgICBEaWREZWxldGVX
ZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIERpZERlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKQogCisgICAgR3JhbnRTYW5kYm94RXh0ZW5z
aW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBWZWN0b3I8
U3RyaW5nPiBwYXRocykKKwogICAgIFByb2Nlc3NSZWFkeVRvU3VzcGVuZCgpCiAgICAgU2V0SXNI
b2xkaW5nTG9ja2VkRmlsZXMoYm9vbCBpc0hvbGRpbmdMb2NrZWRGaWxlcykKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275897</attachid>
            <date>2016-04-07 10:53:55 -0700</date>
            <delta_ts>2016-04-07 11:29:24 -0700</delta_ts>
            <desc>Near-final WIP</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>36651</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcAppbmRleCBm
MWRlZTEyLi5iNmNmMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmFsdWUuY3BwCkBAIC0zOSw2ICszOSw3IEBAIElEQlZhbHVlOjpJREJWYWx1ZSgpCiBJREJW
YWx1ZTo6SURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSkK
ICAgICA6IG1fZGF0YShUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3RvcihzY3JpcHRWYWx1
ZS5kYXRhKCkpKQogeworICAgIG1fYmxvYlVSTHMgPSBzY3JpcHRWYWx1ZS5ibG9iVVJMc0lzb2xh
dGVkQ29weSgpOwogfQogCiBJREJWYWx1ZTo6SURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNjcmlw
dFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCA1
Mjk0YTE3Li5kNjgzM2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC01MCw2ICs1MCwxMyBAQCBl
bnVtIGNsYXNzIEluZGV4UmVjb3JkVHlwZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2Ns
YXNzIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5J
REJCYWNraW5nU3RvcmVGaWxlSGFuZGxlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRmlsZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlsZUFjY2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgPSAwOworfTsKKwogY2xhc3Mg
SURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUo
KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAKaW5kZXggOTlhM2Q0Ny4uODNhZDI0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ0
LDkgKzQ0LDkgQEAgUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoKQogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IElEQlNlcnZlcigpKTsKIH0KIAotUmVmPElEQlNlcnZlcj4gSURCU2Vy
dmVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCitSZWY8SURC
U2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQogewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFzZURpcmVjdG9yeVBhdGgpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBm
aWxlSGFuZGxlcikpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcigpCkBAIC01NSw4ICs1NSw5
IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKCkKICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBT
ZXJ2ZXIiKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVy
KQogICAgIDogbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQor
ICAgICwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTIwLDcgKzEyMSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIp
OwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihp
ZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2Vy
dmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CmluZGV4IDk0NTQ5YzguLjdhODNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTQ5LDEwICs0OSwxMiBAQCBjbGFz
cyBJREJWYWx1ZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NsYXNzIElEQkJhY2tpbmdT
dG9yZUZpbGVIYW5kbGVyOworCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJTZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rp
b25Ub0NsaWVudCYpOwpAQCAtOTQsNyArOTYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
SURCU2VydmVyKCk7Ci0gICAgSURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoKTsKKyAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFz
ZSYgZ2V0T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImKTsKIApAQCAtMTE3LDYgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxJREJSZXNv
dXJjZUlkZW50aWZpZXIsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24qPiBtX3RyYW5zYWN0
aW9uczsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKKyAgICBJREJCYWNr
aW5nU3RvcmVGaWxlSGFuZGxlciogbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApp
bmRleCBlNTU3YTBlLi4xNGYxZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cApAQCAtMTYwLDkgKzE2MCw0MyBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiB2MkluZGV4UmVjb3Jk
c1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKICAgICByZXR1cm4gdjJJbmRleFJlY29yZHNUYWJsZVNj
aGVtYVN0cmluZzsKIH0KIAorc3RhdGljIGNvbnN0IFN0cmluZyBibG9iUmVjb3Jkc1RhYmxlU2No
ZW1hKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJD
UkVBVEUgVEFCTEUgIiwgdGFibGVOYW1lLCAiIChvYmplY3RTdG9yZVJvdyBJTlRFR0VSIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwsIGJsb2JVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMKSIpOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1h
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1RhYmxl
U2NoZW1hU3RyaW5nKGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoIkJsb2JSZWNvcmRzIikpOworICAg
IHJldHVybiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3Qg
U3RyaW5nJiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JS
ZWNvcmRzVGFibGVTY2hlbWEoIlwiQmxvYlJlY29yZHNcIiIpKTsKKyAgICByZXR1cm4gYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyBibG9iRmls
ZXNUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFr
ZVN0cmluZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwgIiAoYmxvYlVSTCBURVhUIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGZpbGVOYW1lIFRF
WFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCkiKTsK
K30KIAotU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
Um9vdERpcmVjdG9yeSkKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1h
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iRmlsZXNUYWJsZVNj
aGVtYVN0cmluZyhibG9iRmlsZXNUYWJsZVNjaGVtYSgiQmxvYkZpbGVzIikpOworICAgIHJldHVy
biBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYg
YmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JGaWxlc1RhYmxlU2No
ZW1hKCJcIkJsb2JGaWxlc1wiIikpOworICAgIHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0
cmluZzsKK30KKworU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlUm9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5k
bGVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2ZpbGVIYW5kbGVy
KGZpbGVIYW5kbGVyKQogewogICAgIG1fYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSA9IGlkZW50
aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChkYXRhYmFzZVJvb3REaXJlY3Rv
cnkpOwogfQpAQCAtMjc1LDYgKzMwOSw3OCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJs
b2JUYWJsZXMoKQoreworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAgICBBU1NFUlQobV9zcWxp
dGVEQi0+aXNPcGVuKCkpOworCisgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CisgICAgeworICAg
ICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBibG9iIHJlY29yZCB0YWJs
ZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVD
VCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iUmVjb3Jk
cyciKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRj
aCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxl
IGF0IGFsbCwgY3JlYXRlIGl0Li4KKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9i
UmVjb3Jkc1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgY3JlYXRlIEJsb2JSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
dXJyZW50U2NoZW1hID0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpOworICAgICAgICB9IGVsc2Ug
aWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYlJl
Y29yZHMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEp
OworICAgIH0KKworICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hl
bWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUo
KSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYlJlY29yZHMgdGFibGUgc2NoZW1h
IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2IgZmlsZSB0YWJsZS4KKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB0eXBl
LCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iRmlsZXMnIik7Cisg
ICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxv
YkZpbGVzVGFibGVTY2hlbWEoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgQmxvYkZpbGVzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRF
X1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudFNjaGVtYSAh
PSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYkZpbGVzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYkZp
bGVzIHRhYmxlIHNjaGVtYSBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1
cmVWYWxpZFJlY29yZHNUYWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwpAQCAtNjEy
LDYgKzcxOCwxMiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJs
aXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9yIGNy
ZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIikgfTsK
ICAgICB9CiAKKyAgICBpZiAoIWVuc3VyZVZhbGlkQmxvYlRhYmxlcygpKSB7CisgICAgICAgIExP
R19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVz
IGluIGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwo
IkVycm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRhYmxlcyBpbiBkYXRh
YmFzZSIpIH07CisgICAgfQorCiAgICAgYXV0byBkYXRhYmFzZUluZm8gPSBleHRyYWN0RXhpc3Rp
bmdEYXRhYmFzZUluZm8oKTsKICAgICBpZiAoIWRhdGFiYXNlSW5mbykKICAgICAgICAgZGF0YWJh
c2VJbmZvID0gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCk7CkBAIC0xMzAw
LDEzICsxNDEyLDE0IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxs
SW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgcmV0dXJuIGVycm9y
OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktleURhdGEmIGtleURhdGEs
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZp
bGVzKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZCAtIGtleSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwga2V5RGF0YS5sb2dnaW5nU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKICAg
ICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsK
ICAgICBBU1NFUlQodmFsdWUuZGF0YSgpKTsKKyAgICBBU1NFUlQoYmxvYlVSTHMuc2l6ZSgpID09
IGJsb2JGaWxlcy5zaXplKCkpOwogCiAgICAgYXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8
ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CkBAIC0xMzIzLDYgKzE0MzYsOCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxp
emUgSURCS2V5IHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3Qgc3RvcmUiKTsKICAgICAgICAgcmV0
dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0byBiZSBzdG9yZWQgaW4gYW4gb2JqZWN0IHN0b3Jl
IikgfTsKICAgICB9CisKKyAgICBpbnQ2NF90IHJlY29yZElEID0gMDsKICAgICB7CiAgICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElO
VE8gUmVjb3JkcyBWQUxVRVMgKD8sIENBU1QoPyBBUyBURVhUKSwgPywgTlVMTCk7IikpOwogICAg
ICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKQEAgLTEzMzMsNiArMTQ0OCw4IEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBwdXQgcmVjb3JkIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgaW4gUmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gc3RvcmUgcmVjb3JkIGluIG9iamVjdCBzdG9yZSIpIH07CiAgICAgICAgIH0KKwor
ICAgICAgICByZWNvcmRJRCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0K
IAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKG9iamVjdFN0
b3JlSW5mbywga2V5RGF0YSwgdmFsdWUpOwpAQCAtMTM0OCw2ICsxNDY1LDU1IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3RpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2JVUkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHVybCA9IGJsb2JV
UkxzW2ldOworICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3Nx
bGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEJsb2JSZWNvcmRzIFZBTFVFUyAoPywg
Pyk7IikpOworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCByZWNvcmRJRCkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIHVybCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRh
YmFzZSIpIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50NjRfdCBwb3Rl
bnRpYWxGaWxlTmFtZSA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOworCisgICAgICAg
IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBs
ZWZ0IHRvIGRvLgorICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlcyBX
SEVSRSBibG9iVVJMID0gPzsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGFtaW5lIEJs
b2IgZmlsZW5hbWVzIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8g
ZXhhbWluZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBmaWxlbmFtZXMgaW4gZGF0
YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmlsZW5h
bWVzIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9i
VVJMLCBzbyBjb21taXQgb3VyIGZpbGUgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICAgICAgU3Ry
aW5nIHN0b3JlZEZpbGVuYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVsbGkuYmxvYiIsIHBvdGVudGlh
bEZpbGVOYW1lKTsKKyAgICAgICAgeworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgq
bV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBCbG9iRmlsZXMgVkFMVUVTICg/
LCA/KTsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMiwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIHJlY29yZCBp
biBkYXRhYmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29yZCBCbG9iIGZp
bGUgcmVjb3JkIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHRyYW5zYWN0aW9uLT5hZGRCbG9iRmlsZShibG9iRmlsZXNbaV0sIHN0b3JlZEZpbGVu
YW1lKTsKKyAgICB9CisKICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyhv
YmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIHJldHVybiBlcnJvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA3ZjIzOTJhLi43MzNjN2VjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1
cnNvcjsKIAogY2xhc3MgU1FMaXRlSURCQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdT
dG9yZSB7CiBwdWJsaWM6Ci0gICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KTsKKyAg
ICBTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5k
bGVyKik7CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCkBAIC04
MSwxMyArODEsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0
ZUlEQkN1cnNvciYpOwogCisgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0
OworCisgICAgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlSGFuZGxlcjsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBmaWxlbmFt
ZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBmdWxsRGF0YWJhc2VEaXJlY3Rv
cnkoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAg
Ym9vbCBlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOwogICAgIGJvb2wgZW5zdXJlVmFsaWRJbmRl
eFJlY29yZHNUYWJsZSgpOworICAgIGJvb2wgZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFs
RGF0YWJhc2VJbmZvKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gZXh0
cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKCk7CiAKQEAgLTExOCw2ICsxMjIsOCBAQCBwcml2YXRl
OgogCiAgICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0ds
b2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisKKyAgICBJREJCYWNraW5nU3RvcmVGaWxlSGFu
ZGxlciogbV9maWxlSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZGNiZTMzMS4uOTkxOGE3YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJJREJDdXJzb3JJbmZvLmgiCiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAjaW5jbHVkZSAiU1FM
aXRlSURCQmFja2luZ1N0b3JlLmgiCkBAIC03NSwxMiArNzYsNDUgQEAgSURCRXJyb3IgU1FMaXRl
SURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmlu
UHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gY29tbWl0IFNRTGl0ZSB0cmFuc2FjdGlv
biBpbiBkYXRhYmFzZSBiYWNrZW5kIikgfTsKIAorICAgIG1vdmVCbG9iRmlsZXNJZk5lY2Vzc2Fy
eSgpOworCiAgICAgcmVzZXQoKTsKICAgICByZXR1cm4geyB9OwogfQogCit2b2lkIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjptb3ZlQmxvYkZpbGVzSWZOZWNlc3NhcnkoKQoreworICAgIFN0cmluZyBk
YXRhYmFzZURpcmVjdG9yeSA9IG1fYmFja2luZ1N0b3JlLmZ1bGxEYXRhYmFzZURpcmVjdG9yeSgp
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2JGaWxlcykgeworICAgICAgICBhdXRvKiBm
aWxlSGFuZGxlciA9IG1fYmFja2luZ1N0b3JlLmZpbGVIYW5kbGVyKCk7CisgICAgICAgIGlmIChm
aWxlSGFuZGxlcikKKyAgICAgICAgICAgIGZpbGVIYW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2Vz
cyhlbnRyeS5maXJzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFoYXJkTGlua09yQ29w
eUZpbGUoZW50cnkuZmlyc3QsIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZURpcmVj
dG9yeSwgZW50cnkuc2Vjb25kKSkpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBs
aW5rL2NvcHkgdGVtcG9yYXJ5IGJsb2IgZmlsZSAnJXMnIHRvIGxvY2F0aW9uICclcyciLCBlbnRy
eS5maXJzdC51dGY4KCkuZGF0YSgpLCBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJhc2VE
aXJlY3RvcnksIGVudHJ5LnNlY29uZCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGZp
bGVIYW5kbGVyKQorICAgICAgICAgICAgZmlsZUhhbmRsZXItPmZpbGVBY2Nlc3NDb21wbGV0ZShl
bnRyeS5maXJzdCk7CisgICAgfQorCisgICAgbV9ibG9iRmlsZXMuY2xlYXIoKTsKK30KKwogSURC
RXJyb3IgU1FMaXRlSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9ibG9iRmlsZXMpIHsKKyAgICAgICAgYXV0byogZmlsZUhhbmRsZXIgPSBtX2JhY2tp
bmdTdG9yZS5maWxlSGFuZGxlcigpOworICAgICAgICBpZiAoZmlsZUhhbmRsZXIpIHsKKyAgICAg
ICAgICAgIGZpbGVIYW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2VzcyhlbnRyeS5maXJzdCk7Cisg
ICAgICAgICAgICBmaWxlSGFuZGxlci0+ZmlsZUFjY2Vzc0NvbXBsZXRlKGVudHJ5LmZpcnN0KTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghZGVsZXRlRmlsZShlbnRyeS5maXJz
dCkpCisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIHRlbXBvcmFy
eSBibG9iIGZpbGUgJyVzJyIsIGVudHJ5LmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgbV9ibG9iRmlsZXMuY2xlYXIoKTsKKwogICAgIGlmICghbV9zcWxpdGVU
cmFuc2FjdGlvbiB8fCAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQogICAgICAg
ICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVy
YWwoIk5vIFNRTGl0ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcyB0byBhYm9ydCIpIH07CiAKQEAg
LTk3LDYgKzEzMSw3IEBAIHZvaWQgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KCkKIHsKICAg
ICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKICAgICBjbGVhckN1cnNvcnMoKTsKKyAg
ICBtX2Jsb2JGaWxlcy5jbGVhcigpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vy
c29yPiBTUUxpdGVJREJUcmFuc2FjdGlvbjo6bWF5YmVPcGVuQmFja2luZ1N0b3JlQ3Vyc29yKHVp
bnQ2NF90IG9iamVjdFN0b3JlSUQsIHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElEQktleVJhbmdl
RGF0YSYgcmFuZ2UpCkBAIC0xNzEsNiArMjA2LDExIEBAIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rp
b246OmluUHJvZ3Jlc3MoKSBjb25zdAogICAgIHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uICYm
IG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKTsKIH0KIAordm9pZCBTUUxpdGVJREJU
cmFuc2FjdGlvbjo6YWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRoLCBjb25z
dCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKQoreworICAgIG1fYmxvYkZpbGVzLmFwcGVuZChzdGQ6
Om1ha2VfcGFpcih0ZW1wb3JhcnlQYXRoLCBzdG9yZWRGaWxlbmFtZSkpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0
aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
VHJhbnNhY3Rpb24uaAppbmRleCAwZWZlNzQ0Li41ZDdiMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJh
bnNhY3Rpb24uaApAQCAtNzEsMTYgKzcxLDIxIEBAIHB1YmxpYzoKIAogICAgIFNRTGl0ZVRyYW5z
YWN0aW9uKiBzcWxpdGVUcmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3FsaXRlVHJhbnNh
Y3Rpb24uZ2V0KCk7IH0KIAorICAgIHZvaWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1w
b3JhcnlQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKTsKKwogcHJpdmF0ZToKICAg
ICB2b2lkIGNsZWFyQ3Vyc29ycygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgbW92
ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5KCk7CisKICAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9pbmZv
OwogCiAgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAgICAg
SGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJD
dXJzb3I+PiBtX2N1cnNvcnM7CiAgICAgSGFzaFNldDxTUUxpdGVJREJDdXJzb3IqPiBtX2JhY2tp
bmdTdG9yZUN1cnNvcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG1f
YmxvYkZpbGVzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3
MzAzMjlkLi41ZTgzNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTI3NDgsNiArMjc0OCwxNiBAQCB1aW50MzJf
dCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCkKIH0KIAogI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQorVmVjdG9yPFN0cmluZz4gU2VyaWFsaXplZFNjcmlwdFZh
bHVlOjpibG9iVVJMc0lzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4g
cmVzdWx0OworICAgIHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYmxvYlVSTHMuc2l6
ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHVybCA6IG1fYmxvYlVSTHMpCisgICAgICAgIHJlc3VsdC51
bmNoZWNrZWRBcHBlbmQodXJsLmlzb2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5k
ZXhlZERCKHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4gY29tcGxldGlvbkhh
bmRsZXIpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTI3NjksNiArMjc3OSw2
IEBAIHZvaWQgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhl
ZERCKHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsg
KnRoaXMsIG1fYmxvYlVSTHMsIGJsb2JGaWxlUGF0aHMgfSk7CiAgICAgfSk7CiB9Ci0jZW5kaWYK
KyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaAppbmRleCA2NDVkY2I4Li4xNWNiZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtODQsOSArODQsMTEgQEAg
cHVibGljOgogCiAgICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CiAgICAgYm9vbCBoYXNCbG9iVVJMcygpIGNvbnN0IHsgcmV0dXJuICFtX2Js
b2JVUkxzLmlzRW1wdHkoKTsgfQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAg
VmVjdG9yPFN0cmluZz4gYmxvYlVSTHNJc29sYXRlZENvcHkoKSBjb25zdDsKICAgICB2b2lkIHdy
aXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVkREIoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJW
YWx1ZSYpPiBjb21wbGV0aW9uSGFuZGxlcik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKIAogICAgIHN0YXRpYyBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBj
cmVhdGVGcm9tV2lyZUJ5dGVzKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiAgICAgewpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCmluZGV4IDAzYWZmZmUuLmYxYTc4ZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKQEAgLTE4MSw2ICsxODEsOSBAQCBpbnQgcmVhZEZy
b21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CiAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMg
bm90LgogYm9vbCBhcHBlbmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoY29uc3QgU3RyaW5nJiBw
YXRoLCBQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKIAorLy8gSGFyZCBsaW5rcyBhIGZpbGUgaWYgcG9z
c2libGUsIGNvcGllcyBpdCBpZiBub3QuCitib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBT
dHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7CisKICNpZiBVU0UoRklM
RV9MT0NLKQogYm9vbCBsb2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVMb2NrTW9kZSk7
CiBib29sIHVubG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGZlMjc2YjAuLjIx
YTM2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0
ZW1QT1NJWC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3Rl
bVBPU0lYLmNwcApAQCAtMzQ2LDQgKzM0NiwzMSBAQCBlbmQ6CiB9CiAjZW5kaWYKIAorYm9vbCBo
YXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb24pCit7CisgICAgaWYgKGZpbGVFeGlzdHMoZGVzdGluYXRpb24pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2Vu
dGF0aW9uKHNvdXJjZSk7CisgICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkgfHwgZnNTb3VyY2UuZGF0
YSgpWzBdID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgZnNE
ZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7CisgICAg
aWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEoKSB8fCBmc0Rlc3RpbmF0aW9uLmRhdGEoKVswXSA9PSAn
XDAnKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgcmVzdWx0ID0gbGluayhmc1Nv
dXJjZS5kYXRhKCksIGZzRGVzdGluYXRpb24uZGF0YSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEg
Y29weSBpbnN0ZWFkLgorICAgIGF1dG8gaGFuZGxlID0gb3BlbkZpbGUoZGVzdGluYXRpb24sIE9w
ZW5Gb3JXcml0ZSk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRz
VG9GaWxlSGFuZGxlKHNvdXJjZSwgaGFuZGxlKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAg
ICByZXR1cm4gYXBwZW5kUmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmlu
ZGV4IDljNmFlMDIuLmVkZTg3NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRGF0YWJh
c2VQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBD
OjpTdHJpbmdSZWZlCiBJREJTZXJ2ZXI6OklEQlNlcnZlciYgRGF0YWJhc2VQcm9jZXNzOjppZGJT
ZXJ2ZXIoKQogewogICAgIGlmICghbV9pZGJTZXJ2ZXIpCi0gICAgICAgIG1faWRiU2VydmVyID0g
SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7
CisgICAgICAgIG1faWRiU2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRl
eGVkRGF0YWJhc2VEaXJlY3RvcnkoKSwgJkRhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkpOwog
CiAgICAgcmV0dXJuICptX2lkYlNlcnZlcjsKIH0KQEAgLTMwNSw2ICszMDUsMzUgQEAgdm9pZCBE
YXRhYmFzZVByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNz
aW9uSUQsIE9wdGlvblNldDwKICNlbmRpZgogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6Z3Jh
bnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywg
Y29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIGhhbmRsZXMpCit7CisgICAgQVNT
RVJUKHBhdGhzLnNpemUoKSA9PSBoYW5kbGVzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBhdGhzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9i
bG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zLmFkZChwYXRoc1tpXSwgU2FuZGJveEV4
dGVuc2lvbjo6Y3JlYXRlKGhhbmRsZXNbaV0pKTsKKyAgICAgICAgQVNTRVJUKHJlc3VsdC5pc05l
d0VudHJ5KTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpwcmVwYXJlRm9yRmls
ZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0byBleHRlbnNpb24gPSBtX2Js
b2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMuZ2V0KHBhdGgpOworICAgIGlmIChleHRl
bnNpb24pCisgICAgICAgIGV4dGVuc2lvbi0+Y29uc3VtZSgpOworfQorCit2b2lkIERhdGFiYXNl
UHJvY2Vzczo6ZmlsZUFjY2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICAv
LyBXZSd2ZSBlaXRoZXIgaGFyZCBsaW5rZWQgdGhlIHRlbXBvcmFyeSBibG9iIGZpbGUgdG8gdGhl
IGRhdGFiYXNlIGRpcmVjdG9yeSwgY29waWVkIGl0IHRoZXJlLAorICAgIC8vIG9yIHRoZSB0cmFu
c2FjdGlvbiBpcyBiZWluZyBhYm9ydGVkLgorICAgIC8vIEluIGFueSBvZiB0aG9zZSBjYXNlcywg
d2UgY2FuIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGJsb2IgZmlsZSBub3cuCisgICAgZGVsZXRlRmls
ZShwYXRoKTsKKworICAgIGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRi
b3hFeHRlbnNpb25zLnRha2UocGF0aCk7CisgICAgaWYgKGV4dGVuc2lvbikKKyAgICAgICAgZXh0
ZW5zaW9uLT5yZXZva2UoKTsKK30KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogVmVj
dG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IERhdGFiYXNlUHJvY2Vzczo6aW5k
ZXhlZERhdGFiYXNlT3JpZ2lucygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggNjg5MjU0Zi4uYWRkZWQ5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaApAQCAtMjks
NiArMjksOCBAQAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5jbHVkZSAiQ2hp
bGRQcm9jZXNzLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUgPFdl
YkNvcmUvSURCQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJTZXJ2ZXIuaD4K
ICNpbmNsdWRlIDxXZWJDb3JlL1VuaXF1ZUlEQkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CkBAIC00NSw3ICs0Nyw3IEBAIGNsYXNzIERhdGFiYXNlVG9XZWJQcm9j
ZXNzQ29ubmVjdGlvbjsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlOwogc3RydWN0IERhdGFi
YXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgRGF0YWJhc2VQcm9jZXNzIDog
cHVibGljIENoaWxkUHJvY2VzcyB7CitjbGFzcyBEYXRhYmFzZVByb2Nlc3MgOiBwdWJsaWMgQ2hp
bGRQcm9jZXNzLCBwdWJsaWMgV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5nU3RvcmVGaWxl
SGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VQcm9jZXNzKTsKICAg
ICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RGF0YWJhc2VQcm9jZXNzPjsKIHB1YmxpYzoK
QEAgLTY1LDYgKzY3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdERhdGFiYXNlVGFzayhz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPik7CiAKKyAgICAvLyBXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyCisgICAgdm9pZCBwcmVw
YXJlRm9yRmlsZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpIGZpbmFsOworICAgIHZvaWQgZmls
ZUFjY2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgZmluYWw7CisKIHByaXZhdGU6CiAg
ICAgRGF0YWJhc2VQcm9jZXNzKCk7CiAKQEAgLTkwLDYgKzk2LDcgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0
ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2
b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNp
dGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6
dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lk
IGRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNl
dDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIGNvbnN0IFZlY3RvcjxXZWJDb3Jl
OjpTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCB1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAg
ICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7CiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNlY3Vy
aXR5T3JpZ2luPj4gaW5kZXhlZERhdGFiYXNlT3JpZ2lucygpOwpAQCAtMTA5LDYgKzExNiw4IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OwogCiAgICAg
UmVmUHRyPFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyPiBtX2lkYlNlcnZlcjsKKworICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fYmxvYlRlbXBvcmFy
eUZpbGVTYW5kYm94RXh0ZW5zaW9uczsKICNlbmRpZgogCiAgICAgRGVxdWU8c3RkOjp1bmlxdWVf
cHRyPFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4+IG1fZGF0YWJhc2VUYXNrczsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1l
c3NhZ2VzLmluCmluZGV4IDRjYjlkYTAuLjgyZTI3NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgpA
QCAtMzIsNiArMzIsNyBAQCBtZXNzYWdlcyAtPiBEYXRhYmFzZVByb2Nlc3MgTGVnYWN5UmVjZWl2
ZXIgewogICAgIEZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
T3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCB1aW50
NjRfdCBjYWxsYmFja0lEKQogICAgIERlbGV0ZVdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25J
RCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURh
dGFUeXBlcywgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNp
bmNlLCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIERlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lu
cyhXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRl
RGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIFZlY3RvcjxXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGE+IG9yaWdpbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgR3JhbnRTYW5kYm94RXh0
ZW5zaW9uc0ZvckJsb2JzKFZlY3RvcjxTdHJpbmc+IHBhdGhzLCBXZWJLaXQ6OlNhbmRib3hFeHRl
bnNpb246OkhhbmRsZUFycmF5IGV4dGVuc2lvbnMpCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoREFU
QUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNz
L05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRleCA4ODczNTQ3
ZC4uOTg4NzNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAtMjk2LDEwICsy
OTYsMTIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1Rv
VGVtcG9yYXJ5RmlsZXMoY29uc3QgVmVjdG9yPFN0cmkKICAgICAgICAgZm9yIChhdXRvJiBmaWxl
IDogZmlsZVJlZmVyZW5jZXMpCiAgICAgICAgICAgICBmaWxlLT5yZXZva2VGaWxlQWNjZXNzKCk7
CiAKLSAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24gfHwgIW1fY29ubmVjdGlvbi0+aXNWYWxpZCgp
KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOZXR3b3JrUHJvY2Vzczo6c2luZ2xldG9u
KCkuZ3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMoZmlsZU5h
bWVzLCBbdGhpcywgcHJvdGVjdG9yLCByZXF1ZXN0SWRlbnRpZmllciwgZmlsZU5hbWVzXSgpIHsK
KyAgICAgICAgICAgIGlmICghbV9jb25uZWN0aW9uIHx8ICFtX2Nvbm5lY3Rpb24tPmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jb25uZWN0aW9uLT5zZW5k
KE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZFdyaXRlQmxvYnNUb1RlbXBv
cmFyeUZpbGVzKHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXMpLCAwKTsKKyAgICAgICAgICAg
IG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpE
aWRXcml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlcyhyZXF1ZXN0SWRlbnRpZmllciwgZmlsZU5hbWVz
KSwgMCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNGIzN2ZhYy4uMjM5ZTk2YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNw
cApAQCAtMjkzLDYgKzI5MywyMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZXN0cm95UHJpdmF0
ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIFNlc3Npb25UcmFja2Vy
OjpkZXN0cm95U2Vzc2lvbihzZXNzaW9uSUQpOwogfQogCit2b2lkIE5ldHdvcmtQcm9jZXNzOjpn
cmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0
b3I8U3RyaW5nPiBmaWxlbmFtZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhh
bmRsZXIpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IG5leHRSZXF1ZXN0SUQ7CisgICAgbV9zYW5k
Ym94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnMuc2V0KCsrbmV4dFJlcXVlc3RJ
RCwgY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+
c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R3JhbnRTYW5kYm94RXh0ZW5zaW9u
c1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMobmV4dFJlcXVlc3RJRCwgZmlsZW5hbWVzKSwgMCk7
Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0Rh
dGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAgICBhdXRvIGhh
bmRsZXIgPSBtX3NhbmRib3hFeHRlbnNpb25Gb3JCbG9ic0NvbXBsZXRpb25IYW5kbGVycy50YWtl
KHJlcXVlc3RJRCk7CisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIGhhbmRsZXIoKTsKK30KKwog
c3RhdGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9w
dGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIHN0ZDo6ZnVuY3Rp
b248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiBjb21wbGV0aW9uSGFuZGxlcikK
IHsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGUwNzU4M2QuLjM5ODJjNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTEyLDYg
KzExMiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lv
bihXZWJDb3JlOjpTZXNzaW9uSUQpOwogCisgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25z
VG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMs
IHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpOworCiBwcml2YXRlOgog
ICAgIE5ldHdvcmtQcm9jZXNzKCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzKCk7CkBAIC0xNzgsNiAr
MTgwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzU3RhdGlzdGljcyh1
aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVGb3JBbGxPcmlnaW5zKHVp
bnQzMl90IGNhY2hlc1RvQ2xlYXIpOwogCisgICAgdm9pZCBkaWRHcmFudFNhbmRib3hFeHRlbnNp
b25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpOworCiAjaWYg
VVNFKFNPVVApCiAgICAgdm9pZCBzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCk7CiAgICAgdm9pZCB1
c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwpAQCAt
MjAwLDYgKzIwNCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNvbnN0IGNoYXIq
LCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50PiwgUHRySGFzaDxjb25z
dCBjaGFyKj4+IE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudE1hcDsKICAgICBOZXR3b3JrUHJvY2Vz
c1N1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIAorICAgIEhhc2hNYXA8dWludDY0X3QsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1fc2FuZGJveEV4dGVuc2lvbkZvckJsb2JzQ29tcGxldGlv
bkhhbmRsZXJzOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0Zm9ybUluaXRp
YWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2M0OTk5MS4uODlmMjQzZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KQEAgLTY3LDQgKzY3LDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3Mg
TGVnYWN5UmVjZWl2ZXIgewogICAgIFByZXBhcmVUb1N1c3BlbmQoKQogICAgIENhbmNlbFByZXBh
cmVUb1N1c3BlbmQoKQogICAgIFByb2Nlc3NEaWRSZXN1bWUoKQorCisgICAgRGlkR3JhbnRTYW5k
Ym94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElE
KQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBiYjA0ODIyLi5jNzBiODA4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmNwcApAQCAtMjgsOSArMjgsMTEgQEAKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlUHJveHkuaCIKICNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94eU1lc3NhZ2Vz
LmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJEb3du
bG9hZFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFy
YW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIKKyNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3NhZ2VzLmgiCiAj
aW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0YS5oIgpAQCAt
MjY5LDYgKzI3MSwyMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERlbGV0ZVdlYnNp
dGVEYXRhRm9yT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIGNhbGxiYWNrKCk7CiB9
CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0
YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgcGF0aHMpCit7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5z
aW9uczsKKyAgICBleHRlbnNpb25zLmFsbG9jYXRlKHBhdGhzLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwYXRocy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBFdmVuIHRo
b3VnaCB0aGUgRGF0YWJhc2VQcm9jZXNzIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiAiY29weWluZyIg
dGhlIGNvbnRlbnRzIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSwgYW5kIHRoZSBtb3N0CisgICAgICAg
IC8vIGVmZmljaWVudCB3YXkgdG8gZG8gdGhhdCBpcyB3aXRoIGEgaGFyZCBsaW5rLgorICAgICAg
ICAvLyBVbmZvcnR1bmF0ZWx5LCBsaW5rKCkgcmVxdWlyZXMgYSBSZWFkV3JpdGUgZXh0ZW5zaW9u
LgorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aHNbaV0sIFNhbmRi
b3hFeHRlbnNpb246OlJlYWRXcml0ZSwgZXh0ZW5zaW9uc1tpXSk7CisgICAgfQorCisgICAgbV9w
cm9jZXNzUG9vbC5zZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1l
c3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3M6OkdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhw
YXRocywgZXh0ZW5zaW9ucykpOworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3M6OkRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0Zv
ckJsb2JzKHJlcXVlc3RJRCksIDApOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgQ2hpbGRQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhsYXVuY2hlciwgY29ubmVjdGlvbklkZW50aWZpZXIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1By
b2Nlc3NQcm94eS5oCmluZGV4IDZhZTU0NzQuLjA5MzA5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTEw
Niw2ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmV0Y2hXZWJzaXRlRGF0YSh1aW50
NjRfdCBjYWxsYmFja0lELCBjb25zdCBXZWJzaXRlRGF0YSYpOwogICAgIHZvaWQgZGlkRGVsZXRl
V2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkaWREZWxldGVXZWJz
aXRlRGF0YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNh
bmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0
SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlh
Z25vc3RpY01lc3NhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIHZvaWQgbG9nU2FtcGxlZERpYWdub3N0aWNN
ZXNzYWdlV2l0aFJlc3VsdCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
Y29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgdWludDMyX3QgcmVzdWx0KTsKICAgICB2b2lkIGxv
Z1NhbXBsZWREaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0
IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5n
JiB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgppbmRleCBkYzkzYjg0Li40
N2VmNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3
b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTI5LDYgKzI5LDgg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3NQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAg
RGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBEaWREZWxldGVX
ZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCkKIAorICAgIEdyYW50U2Fu
ZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJ
RCwgVmVjdG9yPFN0cmluZz4gcGF0aHMpCisKICAgICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQoKQog
ICAgIFNldElzSG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275902</attachid>
            <date>2016-04-07 11:29:24 -0700</date>
            <delta_ts>2016-04-07 13:15:28 -0700</delta_ts>
            <desc>Near-final WIP again</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>37116</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVlLmNwcAppbmRleCBm
MWRlZTEyLi5iNmNmMTg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmFsdWUuY3BwCkBAIC0zOSw2ICszOSw3IEBAIElEQlZhbHVlOjpJREJWYWx1ZSgpCiBJREJW
YWx1ZTo6SURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlJiBzY3JpcHRWYWx1ZSkK
ICAgICA6IG1fZGF0YShUaHJlYWRTYWZlRGF0YUJ1ZmZlcjo6Y29weVZlY3RvcihzY3JpcHRWYWx1
ZS5kYXRhKCkpKQogeworICAgIG1fYmxvYlVSTHMgPSBzY3JpcHRWYWx1ZS5ibG9iVVJMc0lzb2xh
dGVkQ29weSgpOwogfQogCiBJREJWYWx1ZTo6SURCVmFsdWUoY29uc3QgU2VyaWFsaXplZFNjcmlw
dFZhbHVlJiBzY3JpcHRWYWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZpbGVQYXRocykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCA1
Mjk0YTE3Li5kNjgzM2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC01MCw2ICs1MCwxMyBAQCBl
bnVtIGNsYXNzIEluZGV4UmVjb3JkVHlwZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2Ns
YXNzIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5J
REJCYWNraW5nU3RvcmVGaWxlSGFuZGxlcigpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJl
Rm9yRmlsZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlsZUFjY2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgPSAwOworfTsKKwogY2xhc3Mg
SURCQmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJCYWNraW5nU3RvcmUo
KSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQlNlcnZlci5jcHAKaW5kZXggOTlhM2Q0Ny4uODNhZDI0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTQ0
LDkgKzQ0LDkgQEAgUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoKQogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IElEQlNlcnZlcigpKTsKIH0KIAotUmVmPElEQlNlcnZlcj4gSURCU2Vy
dmVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCitSZWY8SURC
U2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKQogewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFzZURpcmVjdG9yeVBhdGgpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBm
aWxlSGFuZGxlcikpOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlcigpCkBAIC01NSw4ICs1NSw5
IEBAIElEQlNlcnZlcjo6SURCU2VydmVyKCkKICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFk
KElEQlNlcnZlcjo6ZGF0YWJhc2VUaHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBT
ZXJ2ZXIiKTsKIH0KIAotSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgpCitJREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVy
KQogICAgIDogbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQor
ICAgICwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMT0co
SW5kZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0
b3J5UGF0aC51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTIwLDcgKzEyMSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0
IElEQkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIp
OwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihp
ZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6bWFr
ZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGly
ZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2Vy
dmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZl
ci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5o
CmluZGV4IDk0NTQ5YzguLjdhODNlN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTQ5LDEwICs0OSwxMiBAQCBjbGFz
cyBJREJWYWx1ZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NsYXNzIElEQkJhY2tpbmdT
dG9yZUZpbGVIYW5kbGVyOworCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJ
REJTZXJ2ZXI+IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBT
dHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqID0gbnVsbHB0cik7CiAKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVucmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rp
b25Ub0NsaWVudCYpOwpAQCAtOTQsNyArOTYsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAg
SURCU2VydmVyKCk7Ci0gICAgSURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3Rv
cnlQYXRoKTsKKyAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKik7CiAKICAgICBVbmlxdWVJREJEYXRhYmFz
ZSYgZ2V0T3JDcmVhdGVVbmlxdWVJREJEYXRhYmFzZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImKTsKIApAQCAtMTE3LDYgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxJREJSZXNv
dXJjZUlkZW50aWZpZXIsIFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24qPiBtX3RyYW5zYWN0
aW9uczsKIAogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKKyAgICBJREJCYWNr
aW5nU3RvcmVGaWxlSGFuZGxlciogbV9iYWNraW5nU3RvcmVGaWxlSGFuZGxlcjsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApp
bmRleCBlNTU3YTBlLi4xNGYxZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cApAQCAtMTYwLDkgKzE2MCw0MyBAQCBzdGF0aWMgY29uc3QgU3RyaW5nJiB2MkluZGV4UmVjb3Jk
c1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKICAgICByZXR1cm4gdjJJbmRleFJlY29yZHNUYWJsZVNj
aGVtYVN0cmluZzsKIH0KIAorc3RhdGljIGNvbnN0IFN0cmluZyBibG9iUmVjb3Jkc1RhYmxlU2No
ZW1hKGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJD
UkVBVEUgVEFCTEUgIiwgdGFibGVOYW1lLCAiIChvYmplY3RTdG9yZVJvdyBJTlRFR0VSIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwsIGJsb2JVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBG
QUlMKSIpOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1h
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1RhYmxl
U2NoZW1hU3RyaW5nKGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoIkJsb2JSZWNvcmRzIikpOworICAg
IHJldHVybiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3Qg
U3RyaW5nJiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0aWMg
TmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JS
ZWNvcmRzVGFibGVTY2hlbWEoIlwiQmxvYlJlY29yZHNcIiIpKTsKKyAgICByZXR1cm4gYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyBibG9iRmls
ZXNUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFr
ZVN0cmluZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwgIiAoYmxvYlVSTCBURVhUIE5PVCBO
VUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwsIGZpbGVOYW1lIFRF
WFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCkiKTsK
K30KIAotU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
Um9vdERpcmVjdG9yeSkKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1h
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iRmlsZXNUYWJsZVNj
aGVtYVN0cmluZyhibG9iRmlsZXNUYWJsZVNjaGVtYSgiQmxvYkZpbGVzIikpOworICAgIHJldHVy
biBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYg
YmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxTdHJpbmc+IGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JGaWxlc1RhYmxlU2No
ZW1hKCJcIkJsb2JGaWxlc1wiIikpOworICAgIHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0
cmluZzsKK30KKworU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUo
Y29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlUm9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5k
bGVyKQogICAgIDogbV9pZGVudGlmaWVyKGlkZW50aWZpZXIpCisgICAgLCBtX2ZpbGVIYW5kbGVy
KGZpbGVIYW5kbGVyKQogewogICAgIG1fYWJzb2x1dGVEYXRhYmFzZURpcmVjdG9yeSA9IGlkZW50
aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRvUm9vdChkYXRhYmFzZVJvb3REaXJlY3Rv
cnkpOwogfQpAQCAtMjc1LDYgKzMwOSw3OCBAQCBzdGF0aWMgYm9vbCBjcmVhdGVPck1pZ3JhdGVS
ZWNvcmRzVGFibGVJZk5lY2Vzc2FyeShTUUxpdGVEYXRhYmFzZSYgZGF0YWJhc2UpCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1cmVWYWxpZEJs
b2JUYWJsZXMoKQoreworICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKKyAgICBBU1NFUlQobV9zcWxp
dGVEQi0+aXNPcGVuKCkpOworCisgICAgU3RyaW5nIGN1cnJlbnRTY2hlbWE7CisgICAgeworICAg
ICAgICAvLyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBibG9iIHJlY29yZCB0YWJs
ZS4KKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVD
VCB0eXBlLCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iUmVjb3Jk
cyciKTsKKyAgICAgICAgaWYgKHN0YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7Cisg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRj
aCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1l
bnQuc3RlcCgpOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJsb2JSZWNvcmRzIHRhYmxl
IGF0IGFsbCwgY3JlYXRlIGl0Li4KKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVf
RE9ORSkgeworICAgICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9i
UmVjb3Jkc1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3Vs
ZCBub3QgY3JlYXRlIEJsb2JSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBj
dXJyZW50U2NoZW1hID0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpOworICAgICAgICB9IGVsc2Ug
aWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZvciB0aGUgQmxvYlJl
Y29yZHMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1bW5UZXh0KDEp
OworICAgIH0KKworICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hl
bWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUo
KSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYlJlY29yZHMgdGFibGUgc2NoZW1h
IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB7CisgICAgICAg
IC8vIEZldGNoIHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2IgZmlsZSB0YWJsZS4KKyAg
ICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqbV9zcWxpdGVEQiwgIlNFTEVDVCB0eXBl
LCBzcWwgRlJPTSBzcWxpdGVfbWFzdGVyIFdIRVJFIHRibF9uYW1lPSdCbG9iRmlsZXMnIik7Cisg
ICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1h
IGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7
CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYkZpbGVzIHRhYmxlIGF0IGFsbCwgY3Jl
YXRlIGl0IGFuZCB0aGVuIGJhaWwuCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRF
X0RPTkUpIHsKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxv
YkZpbGVzVGFibGVTY2hlbWEoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxk
IG5vdCBjcmVhdGUgQmxvYkZpbGVzIHRhYmxlIGluIGRhdGFiYXNlICglaSkgLSAlcyIsIG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgIT0gU1FMSVRF
X1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVjdXRpbmcgc3RhdGVtZW50
IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0
ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICB9CisKKyAgICBpZiAoY3VycmVudFNjaGVtYSAh
PSBibG9iRmlsZXNUYWJsZVNjaGVtYSgpICYmIGN1cnJlbnRTY2hlbWEgIT0gYmxvYkZpbGVzVGFi
bGVTY2hlbWFBbHRlcm5hdGUoKSkgeworICAgICAgICBMT0dfRVJST1IoIkludmFsaWQgQmxvYkZp
bGVzIHRhYmxlIHNjaGVtYSBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgU1FMaXRlSURCQmFja2luZ1N0b3JlOjplbnN1
cmVWYWxpZFJlY29yZHNUYWJsZSgpCiB7CiAgICAgQVNTRVJUKG1fc3FsaXRlREIpOwpAQCAtNjEy
LDYgKzcxOCwxMiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJs
aXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIkVycm9yIGNy
ZWF0aW5nIG9yIG1pZ3JhdGluZyBJbmRleCBSZWNvcmRzIHRhYmxlIGluIGRhdGFiYXNlIikgfTsK
ICAgICB9CiAKKyAgICBpZiAoIWVuc3VyZVZhbGlkQmxvYlRhYmxlcygpKSB7CisgICAgICAgIExP
R19FUlJPUigiRXJyb3IgY3JlYXRpbmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVz
IGluIGRhdGFiYXNlIik7CisgICAgICAgIG1fc3FsaXRlREIgPSBudWxscHRyOworICAgICAgICBy
ZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwo
IkVycm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRhYmxlcyBpbiBkYXRh
YmFzZSIpIH07CisgICAgfQorCiAgICAgYXV0byBkYXRhYmFzZUluZm8gPSBleHRyYWN0RXhpc3Rp
bmdEYXRhYmFzZUluZm8oKTsKICAgICBpZiAoIWRhdGFiYXNlSW5mbykKICAgICAgICAgZGF0YWJh
c2VJbmZvID0gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFsRGF0YWJhc2VJbmZvKCk7CkBAIC0xMzAw
LDEzICsxNDEyLDE0IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dXBkYXRlQWxs
SW5kZXhlc0ZvckFkZFJlY29yZChjb25zdCBJREJPYmplY3RTdG9yCiAgICAgcmV0dXJuIGVycm9y
OwogfQogCi1JREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJ
REJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRpZmllciwgY29uc3QgSURCT2Jq
ZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElEQktleURhdGEmIGtleURhdGEs
IGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgY29uc3QgVmVjdG9yPFN0cmluZz4m
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYpCitJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aW9uSWRlbnRp
ZmllciwgY29uc3QgSURCT2JqZWN0U3RvcmVJbmZvJiBvYmplY3RTdG9yZUluZm8sIGNvbnN0IElE
QktleURhdGEmIGtleURhdGEsIGNvbnN0IFRocmVhZFNhZmVEYXRhQnVmZmVyJiB2YWx1ZSwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIGJsb2JVUkxzLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYkZp
bGVzKQogewogICAgIExPRyhJbmRleGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZCAtIGtleSAlcywgb2JqZWN0IHN0b3JlICUiIFBSSXU2NCwga2V5RGF0YS5sb2dnaW5nU3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKICAg
ICBBU1NFUlQobV9zcWxpdGVEQik7CiAgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3BlbigpKTsK
ICAgICBBU1NFUlQodmFsdWUuZGF0YSgpKTsKKyAgICBBU1NFUlQoYmxvYlVSTHMuc2l6ZSgpID09
IGJsb2JGaWxlcy5zaXplKCkpOwogCiAgICAgYXV0byogdHJhbnNhY3Rpb24gPSBtX3RyYW5zYWN0
aW9ucy5nZXQodHJhbnNhY3Rpb25JZGVudGlmaWVyKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uIHx8
ICF0cmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7CkBAIC0xMzIzLDYgKzE0MzYsOCBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlk
ZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBzZXJpYWxp
emUgSURCS2V5IHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3Qgc3RvcmUiKTsKICAgICAgICAgcmV0
dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0byBiZSBzdG9yZWQgaW4gYW4gb2JqZWN0IHN0b3Jl
IikgfTsKICAgICB9CisKKyAgICBpbnQ2NF90IHJlY29yZElEID0gMDsKICAgICB7CiAgICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElO
VE8gUmVjb3JkcyBWQUxVRVMgKD8sIENBU1QoPyBBUyBURVhUKSwgPywgTlVMTCk7IikpOwogICAg
ICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKQEAgLTEzMzMsNiArMTQ0OCw4IEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBwdXQgcmVjb3JkIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgaW4gUmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwogICAgICAgICAgICAgcmV0
dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJV
bmFibGUgdG8gc3RvcmUgcmVjb3JkIGluIG9iamVjdCBzdG9yZSIpIH07CiAgICAgICAgIH0KKwor
ICAgICAgICByZWNvcmRJRCA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOwogICAgIH0K
IAogICAgIGF1dG8gZXJyb3IgPSB1cGRhdGVBbGxJbmRleGVzRm9yQWRkUmVjb3JkKG9iamVjdFN0
b3JlSW5mbywga2V5RGF0YSwgdmFsdWUpOwpAQCAtMTM0OCw2ICsxNDY1LDU1IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdHJhbnNhY3RpCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGJsb2JVUkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8mIHVybCA9IGJsb2JV
UkxzW2ldOworICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3Nx
bGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEJsb2JSZWNvcmRzIFZBTFVFUyAoPywg
Pyk7IikpOworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLmJpbmRJbnQ2NCgxLCByZWNvcmRJRCkgIT0gU1FMSVRFX09LCisg
ICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIHVybCkgIT0gU1FMSVRFX09LCisgICAg
ICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAg
ICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIp
OworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3du
RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRh
YmFzZSIpIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaW50NjRfdCBwb3Rl
bnRpYWxGaWxlTmFtZSA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOworCisgICAgICAg
IC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBs
ZWZ0IHRvIGRvLgorICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCpt
X3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlcyBX
SEVSRSBibG9iVVJMID0gPzsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBT
UUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJ
VEVfT0spIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGFtaW5lIEJs
b2IgZmlsZW5hbWVzIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8g
ZXhhbWluZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgaWYgKHJl
c3VsdCAhPSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAg
ICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBmaWxlbmFtZXMgaW4gZGF0
YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmlsZW5h
bWVzIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJl
c3VsdCA9PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9i
VVJMLCBzbyBjb21taXQgb3VyIGZpbGUgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICAgICAgU3Ry
aW5nIHN0b3JlZEZpbGVuYW1lID0gU3RyaW5nOjpmb3JtYXQoIiVsbGkuYmxvYiIsIHBvdGVudGlh
bEZpbGVOYW1lKTsKKyAgICAgICAgeworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgq
bV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBCbG9iRmlsZXMgVkFMVUVTICg/
LCA/KTsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAg
ICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0sKKyAgICAg
ICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMiwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAg
ICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIHJlY29yZCBp
biBkYXRhYmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHJlY29yZCBCbG9iIGZp
bGUgcmVjb3JkIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHRyYW5zYWN0aW9uLT5hZGRCbG9iRmlsZShibG9iRmlsZXNbaV0sIHN0b3JlZEZpbGVu
YW1lKTsKKyAgICB9CisKICAgICB0cmFuc2FjdGlvbi0+bm90aWZ5Q3Vyc29yc09mQ2hhbmdlcyhv
YmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIHJldHVybiBlcnJvcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA3ZjIzOTJhLi43MzNjN2VjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2lu
Z1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1
cnNvcjsKIAogY2xhc3MgU1FMaXRlSURCQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdT
dG9yZSB7CiBwdWJsaWM6Ci0gICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KTsKKyAg
ICBTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29u
c3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5k
bGVyKik7CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCkBAIC04
MSwxMyArODEsMTcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1bnJlZ2lzdGVyQ3Vyc29yKFNRTGl0
ZUlEQkN1cnNvciYpOwogCisgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0
OworCisgICAgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIGZpbGVIYW5kbGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9maWxlSGFuZGxlcjsgfQorCiBwcml2YXRlOgogICAgIFN0cmluZyBmaWxlbmFt
ZUZvckRhdGFiYXNlTmFtZSgpIGNvbnN0OwotICAgIFN0cmluZyBmdWxsRGF0YWJhc2VEaXJlY3Rv
cnkoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlUGF0aCgpIGNvbnN0OwogCiAgICAg
Ym9vbCBlbnN1cmVWYWxpZFJlY29yZHNUYWJsZSgpOwogICAgIGJvb2wgZW5zdXJlVmFsaWRJbmRl
eFJlY29yZHNUYWJsZSgpOworICAgIGJvb2wgZW5zdXJlVmFsaWRCbG9iVGFibGVzKCk7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gY3JlYXRlQW5kUG9wdWxhdGVJbml0aWFs
RGF0YWJhc2VJbmZvKCk7CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkRhdGFiYXNlSW5mbz4gZXh0
cmFjdEV4aXN0aW5nRGF0YWJhc2VJbmZvKCk7CiAKQEAgLTExOCw2ICsxMjIsOCBAQCBwcml2YXRl
OgogCiAgICAgUmVmUHRyPEpTQzo6Vk0+IG1fdm07CiAgICAgSlNDOjpTdHJvbmc8SlNDOjpKU0ds
b2JhbE9iamVjdD4gbV9nbG9iYWxPYmplY3Q7CisKKyAgICBJREJCYWNraW5nU3RvcmVGaWxlSGFu
ZGxlciogbV9maWxlSGFuZGxlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlE
QlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggZGNiZTMzMS4uZTBmNGJkZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRy
YW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAorI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJJREJDdXJzb3JJbmZvLmgiCiAjaW5jbHVkZSAiSW5kZXhlZERCLmgiCiAjaW5jbHVkZSAiU1FM
aXRlSURCQmFja2luZ1N0b3JlLmgiCkBAIC03NSwxMiArNzYsNDUgQEAgSURCRXJyb3IgU1FMaXRl
SURCVHJhbnNhY3Rpb246OmNvbW1pdCgpCiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmlu
UHJvZ3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25v
d25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gY29tbWl0IFNRTGl0ZSB0cmFuc2FjdGlv
biBpbiBkYXRhYmFzZSBiYWNrZW5kIikgfTsKIAorICAgIG1vdmVCbG9iRmlsZXNJZk5lY2Vzc2Fy
eSgpOworCiAgICAgcmVzZXQoKTsKICAgICByZXR1cm4geyB9OwogfQogCit2b2lkIFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjptb3ZlQmxvYkZpbGVzSWZOZWNlc3NhcnkoKQoreworICAgIFN0cmluZyBk
YXRhYmFzZURpcmVjdG9yeSA9IG1fYmFja2luZ1N0b3JlLmZ1bGxEYXRhYmFzZURpcmVjdG9yeSgp
OworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2JGaWxlcykgeworICAgICAgICBhdXRvKiBm
aWxlSGFuZGxlciA9IG1fYmFja2luZ1N0b3JlLmZpbGVIYW5kbGVyKCk7CisgICAgICAgIGlmIChm
aWxlSGFuZGxlcikKKyAgICAgICAgICAgIGZpbGVIYW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2Vz
cyhlbnRyeS5maXJzdCk7CisKKyAgICAgICAgaWYgKCFoYXJkTGlua09yQ29weUZpbGUoZW50cnku
Zmlyc3QsIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZURpcmVjdG9yeSwgZW50cnku
c2Vjb25kKSkpCisgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBsaW5rL2NvcHkgdGVt
cG9yYXJ5IGJsb2IgZmlsZSAnJXMnIHRvIGxvY2F0aW9uICclcyciLCBlbnRyeS5maXJzdC51dGY4
KCkuZGF0YSgpLCBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoZGF0YWJhc2VEaXJlY3RvcnksIGVu
dHJ5LnNlY29uZCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICAgICAgaWYgKGZpbGVIYW5kbGVyKQor
ICAgICAgICAgICAgZmlsZUhhbmRsZXItPmZpbGVBY2Nlc3NDb21wbGV0ZShlbnRyeS5maXJzdCk7
CisgICAgfQorCisgICAgbV9ibG9iRmlsZXMuY2xlYXIoKTsKK30KKwogSURCRXJyb3IgU1FMaXRl
SURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9ibG9i
RmlsZXMpIHsKKyAgICAgICAgYXV0byogZmlsZUhhbmRsZXIgPSBtX2JhY2tpbmdTdG9yZS5maWxl
SGFuZGxlcigpOworICAgICAgICBpZiAoZmlsZUhhbmRsZXIpIHsKKyAgICAgICAgICAgIGZpbGVI
YW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2VzcyhlbnRyeS5maXJzdCk7CisgICAgICAgICAgICBm
aWxlSGFuZGxlci0+ZmlsZUFjY2Vzc0NvbXBsZXRlKGVudHJ5LmZpcnN0KTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICghZGVsZXRlRmlsZShlbnRyeS5maXJzdCkpCisgICAgICAg
ICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIHRlbXBvcmFyeSBibG9iIGZpbGUg
JyVzJyIsIGVudHJ5LmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAgfQorCisg
ICAgbV9ibG9iRmlsZXMuY2xlYXIoKTsKKwogICAgIGlmICghbV9zcWxpdGVUcmFuc2FjdGlvbiB8
fCAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm4geyBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIk5vIFNRTGl0
ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcyB0byBhYm9ydCIpIH07CiAKQEAgLTk3LDYgKzEzMSw3
IEBAIHZvaWQgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KCkKIHsKICAgICBtX3NxbGl0ZVRy
YW5zYWN0aW9uID0gbnVsbHB0cjsKICAgICBjbGVhckN1cnNvcnMoKTsKKyAgICBtX2Jsb2JGaWxl
cy5jbGVhcigpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPiBTUUxpdGVJ
REJUcmFuc2FjdGlvbjo6bWF5YmVPcGVuQmFja2luZ1N0b3JlQ3Vyc29yKHVpbnQ2NF90IG9iamVj
dFN0b3JlSUQsIHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2Up
CkBAIC0xNzEsNiArMjA2LDExIEBAIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OmluUHJvZ3Jl
c3MoKSBjb25zdAogICAgIHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJh
bnNhY3Rpb24tPmluUHJvZ3Jlc3MoKTsKIH0KIAordm9pZCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6
YWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRoLCBjb25zdCBTdHJpbmcmIHN0
b3JlZEZpbGVuYW1lKQoreworICAgIG1fYmxvYkZpbGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcih0
ZW1wb3JhcnlQYXRoLCBzdG9yZWRGaWxlbmFtZSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBJREJT
ZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24u
aAppbmRleCAwZWZlNzQ0Li41ZDdiMzdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaApA
QCAtNzEsMTYgKzcxLDIxIEBAIHB1YmxpYzoKIAogICAgIFNRTGl0ZVRyYW5zYWN0aW9uKiBzcWxp
dGVUcmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rpb24uZ2V0KCk7
IH0KIAorICAgIHZvaWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRoLCBj
b25zdCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKTsKKwogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFy
Q3Vyc29ycygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgbW92ZUJsb2JGaWxlc0lm
TmVjZXNzYXJ5KCk7CisKICAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9pbmZvOwogCiAgICAgU1FM
aXRlSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8
U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAgICAgSGFzaE1hcDxJREJS
ZXNvdXJjZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+PiBtX2N1
cnNvcnM7CiAgICAgSGFzaFNldDxTUUxpdGVJREJDdXJzb3IqPiBtX2JhY2tpbmdTdG9yZUN1cnNv
cnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG1fYmxvYkZpbGVzOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3MzAzMjlkLi41ZTgz
NmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2Ny
aXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZS5jcHAKQEAgLTI3NDgsNiArMjc0OCwxNiBAQCB1aW50MzJfdCBTZXJpYWxpemVk
U2NyaXB0VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCkKIH0KIAogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQorVmVjdG9yPFN0cmluZz4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJM
c0lzb2xhdGVkQ29weSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAg
IHJlc3VsdC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYmxvYlVSTHMuc2l6ZSgpKTsKKyAgICBm
b3IgKGF1dG8mIHVybCA6IG1fYmxvYlVSTHMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQodXJsLmlzb2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQg
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTI3NjksNiArMjc3OSw2IEBAIHZvaWQgU2Vy
aWFsaXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKHN0ZDo6ZnVu
Y3Rpb248dm9pZCAoY29uCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgKnRoaXMsIG1fYmxv
YlVSTHMsIGJsb2JGaWxlUGF0aHMgfSk7CiAgICAgfSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRl
eCA2NDVkY2I4Li4xNWNiZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaApAQCAtODQsOSArODQsMTEgQEAgcHVibGljOgogCiAg
ICAgY29uc3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9
CiAgICAgYm9vbCBoYXNCbG9iVVJMcygpIGNvbnN0IHsgcmV0dXJuICFtX2Jsb2JVUkxzLmlzRW1w
dHkoKTsgfQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgVmVjdG9yPFN0cmlu
Zz4gYmxvYlVSTHNJc29sYXRlZENvcHkoKSBjb25zdDsKICAgICB2b2lkIHdyaXRlQmxvYnNUb0Rp
c2tGb3JJbmRleGVkREIoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJWYWx1ZSYpPiBjb21w
bGV0aW9uSGFuZGxlcik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAogICAgIHN0YXRpYyBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2ly
ZUJ5dGVzKFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RmlsZVN5c3RlbS5oCmluZGV4IDAzYWZmZmUuLmYxYTc4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlU3lzdGVtLmgKQEAgLTE4MSw2ICsxODEsOSBAQCBpbnQgcmVhZEZyb21GaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CiAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlIHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogYm9vbCBh
cHBlbmRGaWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBQbGF0Zm9y
bUZpbGVIYW5kbGUmKTsKIAorLy8gSGFyZCBsaW5rcyBhIGZpbGUgaWYgcG9zc2libGUsIGNvcGll
cyBpdCBpZiBub3QuCitib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJj
ZSwgY29uc3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7CisKICNpZiBVU0UoRklMRV9MT0NLKQogYm9v
bCBsb2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVMb2NrTW9kZSk7CiBib29sIHVubG9j
a0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9GaWxlU3lzdGVtR3RrLmNwcAppbmRleCA5MTVlYTY5Li4xZDhlZDdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCkBAIC0zNjQsNCArMzY0LDEx
IEBAIGJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKICAgICByZXR1cm4g
Z19tb2R1bGVfY2xvc2UobW9kdWxlKTsKICNlbmRpZgogfQorCitib29sIGhhcmRMaW5rT3JDb3B5
RmlsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGZlMjc2YjAuLjIxYTM2YzAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJ
WC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lY
LmNwcApAQCAtMzQ2LDQgKzM0NiwzMSBAQCBlbmQ6CiB9CiAjZW5kaWYKIAorYm9vbCBoYXJkTGlu
a09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRp
b24pCit7CisgICAgaWYgKGZpbGVFeGlzdHMoZGVzdGluYXRpb24pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzU291cmNlID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9u
KHNvdXJjZSk7CisgICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkgfHwgZnNTb3VyY2UuZGF0YSgpWzBd
ID09ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgZnNEZXN0aW5h
dGlvbiA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7CisgICAgaWYgKCFm
c0Rlc3RpbmF0aW9uLmRhdGEoKSB8fCBmc0Rlc3RpbmF0aW9uLmRhdGEoKVswXSA9PSAnXDAnKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpbnQgcmVzdWx0ID0gbGluayhmc1NvdXJjZS5k
YXRhKCksIGZzRGVzdGluYXRpb24uZGF0YSgpKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICAvLyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEgY29weSBp
bnN0ZWFkLgorICAgIGF1dG8gaGFuZGxlID0gb3BlbkZpbGUoZGVzdGluYXRpb24sIE9wZW5Gb3JX
cml0ZSk7CisgICAgaWYgKCFpc0hhbmRsZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxl
SGFuZGxlKHNvdXJjZSwgaGFuZGxlKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1
cm4gYXBwZW5kUmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IDlj
NmFlMDIuLmI4ZTVlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRGF0YWJhc2VQcm9j
ZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJp
bmdSZWZlCiBJREJTZXJ2ZXI6OklEQlNlcnZlciYgRGF0YWJhc2VQcm9jZXNzOjppZGJTZXJ2ZXIo
KQogewogICAgIGlmICghbV9pZGJTZXJ2ZXIpCi0gICAgICAgIG1faWRiU2VydmVyID0gSURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAg
ICAgIG1faWRiU2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0
YWJhc2VEaXJlY3RvcnkoKSwgJkRhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkpOwogCiAgICAg
cmV0dXJuICptX2lkYlNlcnZlcjsKIH0KQEAgLTMwNSw2ICszMDUsMzUgQEAgdm9pZCBEYXRhYmFz
ZVByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQs
IE9wdGlvblNldDwKICNlbmRpZgogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6Z3JhbnRTYW5k
Ym94RXh0ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3Qg
U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIGhhbmRsZXMpCit7CisgICAgQVNTRVJUKHBh
dGhzLnNpemUoKSA9PSBoYW5kbGVzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHBhdGhzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gbV9ibG9iVGVt
cG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zLmFkZChwYXRoc1tpXSwgU2FuZGJveEV4dGVuc2lv
bjo6Y3JlYXRlKGhhbmRsZXNbaV0pKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJl
c3VsdC5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpwcmVw
YXJlRm9yRmlsZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0byBleHRlbnNp
b24gPSBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMuZ2V0KHBhdGgpOworICAg
IGlmIChleHRlbnNpb24pCisgICAgICAgIGV4dGVuc2lvbi0+Y29uc3VtZSgpOworfQorCit2b2lk
IERhdGFiYXNlUHJvY2Vzczo6ZmlsZUFjY2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkK
K3sKKyAgICAvLyBXZSd2ZSBlaXRoZXIgaGFyZCBsaW5rZWQgdGhlIHRlbXBvcmFyeSBibG9iIGZp
bGUgdG8gdGhlIGRhdGFiYXNlIGRpcmVjdG9yeSwgY29waWVkIGl0IHRoZXJlLAorICAgIC8vIG9y
IHRoZSB0cmFuc2FjdGlvbiBpcyBiZWluZyBhYm9ydGVkLgorICAgIC8vIEluIGFueSBvZiB0aG9z
ZSBjYXNlcywgd2UgY2FuIGRlbGV0ZSB0aGUgdGVtcG9yYXJ5IGJsb2IgZmlsZSBub3cuCisgICAg
ZGVsZXRlRmlsZShwYXRoKTsKKworICAgIGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5
RmlsZVNhbmRib3hFeHRlbnNpb25zLnRha2UocGF0aCk7CisgICAgaWYgKGV4dGVuc2lvbikKKyAg
ICAgICAgZXh0ZW5zaW9uLT5yZXZva2UoKTsKK30KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IERhdGFiYXNlUHJv
Y2Vzczo6aW5kZXhlZERhdGFiYXNlT3JpZ2lucygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggNjg5MjU0Zi4uYWRkZWQ5ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vz
cy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
aApAQCAtMjksNiArMjksOCBAQAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5j
bHVkZSAiQ2hpbGRQcm9jZXNzLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2lu
Y2x1ZGUgPFdlYkNvcmUvSURCQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJT
ZXJ2ZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1VuaXF1ZUlEQkRhdGFiYXNlLmg+CiAjaW5jbHVk
ZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC00NSw3ICs0Nyw3IEBAIGNsYXNzIERhdGFiYXNl
VG9XZWJQcm9jZXNzQ29ubmVjdGlvbjsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlOwogc3Ry
dWN0IERhdGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgRGF0YWJhc2VQ
cm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcyB7CitjbGFzcyBEYXRhYmFzZVByb2Nlc3MgOiBw
dWJsaWMgQ2hpbGRQcm9jZXNzLCBwdWJsaWMgV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5n
U3RvcmVGaWxlSGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VQcm9j
ZXNzKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RGF0YWJhc2VQcm9jZXNzPjsK
IHB1YmxpYzoKQEAgLTY1LDYgKzY3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdERhdGFi
YXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPik7CiAKKyAg
ICAvLyBXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyCisgICAg
dm9pZCBwcmVwYXJlRm9yRmlsZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpIGZpbmFsOworICAg
IHZvaWQgZmlsZUFjY2Vzc0NvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgZmluYWw7CisKIHBy
aXZhdGU6CiAgICAgRGF0YWJhc2VQcm9jZXNzKCk7CiAKQEAgLTkwLDYgKzk2LDcgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25T
ZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCB1aW50NjRfdCBjYWxsYmFja0lE
KTsKICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9u
U2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgc3RkOjpjaHJvbm86OnN5c3Rl
bV9jbG9jazo6dGltZV9wb2ludCBtb2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFja0lEKTsK
ICAgICB2b2lkIGRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQs
IE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIGNvbnN0IFZlY3Rv
cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGE+JiBvcmlnaW5zLCB1aW50NjRfdCBjYWxsYmFj
a0lEKTsKKyAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGF0aHMsIGNvbnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5Jik7
CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBWZWN0b3I8UmVmUHRyPFdlYkNv
cmU6OlNlY3VyaXR5T3JpZ2luPj4gaW5kZXhlZERhdGFiYXNlT3JpZ2lucygpOwpAQCAtMTA5LDYg
KzExNiw4IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1faW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
OwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyPiBtX2lkYlNlcnZl
cjsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8U2FuZGJveEV4dGVuc2lvbj4+IG1fYmxv
YlRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9uczsKICNlbmRpZgogCiAgICAgRGVxdWU8c3Rk
Ojp1bmlxdWVfcHRyPFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4+IG1fZGF0YWJhc2VUYXNrczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nl
c3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQ
cm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDRjYjlkYTAuLjgyZTI3NjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNz
YWdlcy5pbgpAQCAtMzIsNiArMzIsNyBAQCBtZXNzYWdlcyAtPiBEYXRhYmFzZVByb2Nlc3MgTGVn
YWN5UmVjZWl2ZXIgewogICAgIEZldGNoV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5
cGVzLCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIERlbGV0ZVdlYnNpdGVEYXRhKFdlYkNvcmU6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4g
d2Vic2l0ZURhdGFUeXBlcywgc3RkOjpjaHJvbm86OnN5c3RlbV9jbG9jazo6dGltZV9wb2ludCBt
b2RpZmllZFNpbmNlLCB1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIERlbGV0ZVdlYnNpdGVEYXRh
Rm9yT3JpZ2lucyhXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2ViS2l0
OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIFZlY3RvcjxXZWJDb3JlOjpTZWN1
cml0eU9yaWdpbkRhdGE+IG9yaWdpbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCisgICAgR3JhbnRT
YW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKFZlY3RvcjxTdHJpbmc+IHBhdGhzLCBXZWJLaXQ6OlNh
bmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGV4dGVuc2lvbnMpCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdv
cmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcAppbmRl
eCA4ODczNTQ3ZC4uOTg4NzNkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzLmNwcApAQCAt
Mjk2LDEwICsyOTYsMTIgQEAgdm9pZCBOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3Jp
dGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXMoY29uc3QgVmVjdG9yPFN0cmkKICAgICAgICAgZm9yIChh
dXRvJiBmaWxlIDogZmlsZVJlZmVyZW5jZXMpCiAgICAgICAgICAgICBmaWxlLT5yZXZva2VGaWxl
QWNjZXNzKCk7CiAKLSAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24gfHwgIW1fY29ubmVjdGlvbi0+
aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOZXR3b3JrUHJvY2Vzczo6
c2luZ2xldG9uKCkuZ3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxv
YnMoZmlsZU5hbWVzLCBbdGhpcywgcHJvdGVjdG9yLCByZXF1ZXN0SWRlbnRpZmllciwgZmlsZU5h
bWVzXSgpIHsKKyAgICAgICAgICAgIGlmICghbV9jb25uZWN0aW9uIHx8ICFtX2Nvbm5lY3Rpb24t
PmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgbV9jb25uZWN0
aW9uLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZFdyaXRlQmxv
YnNUb1RlbXBvcmFyeUZpbGVzKHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXMpLCAwKTsKKyAg
ICAgICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NDb25u
ZWN0aW9uOjpEaWRXcml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlcyhyZXF1ZXN0SWRlbnRpZmllciwg
ZmlsZU5hbWVzKSwgMCk7CisgICAgICAgIH0pOwogICAgIH0pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggNGIzN2ZhYy4u
MjM5ZTk2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcApAQCAtMjkzLDYgKzI5MywyMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjpkZXN0
cm95UHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihTZXNzaW9uSUQgc2Vzc2lvbklEKQogICAgIFNlc3Np
b25UcmFja2VyOjpkZXN0cm95U2Vzc2lvbihzZXNzaW9uSUQpOwogfQogCit2b2lkIE5ldHdvcmtQ
cm9jZXNzOjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhj
b25zdCBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29t
cGxldGlvbkhhbmRsZXIpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IG5leHRSZXF1ZXN0SUQ7Cisg
ICAgbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnMuc2V0KCsrbmV4
dFJlcXVlc3RJRCwgY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgcGFyZW50UHJvY2Vzc0Nvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R3JhbnRTYW5kYm94
RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMobmV4dFJlcXVlc3RJRCwgZmlsZW5h
bWVzKSwgMCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGVu
c2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAg
ICBhdXRvIGhhbmRsZXIgPSBtX3NhbmRib3hFeHRlbnNpb25Gb3JCbG9ic0NvbXBsZXRpb25IYW5k
bGVycy50YWtlKHJlcXVlc3RJRCk7CisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIGhhbmRsZXIo
KTsKK30KKwogc3RhdGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNz
aW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIHN0
ZDo6ZnVuY3Rpb248dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGUwNzU4M2QuLjM5ODJjNjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApA
QCAtMTEyLDYgKzExMiw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW5zdXJlUHJpdmF0ZUJyb3dz
aW5nU2Vzc2lvbihXZWJDb3JlOjpTZXNzaW9uSUQpOwogCisgICAgdm9pZCBncmFudFNhbmRib3hF
eHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiBm
aWxlbmFtZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxldGlvbkhhbmRsZXIpOworCiBw
cml2YXRlOgogICAgIE5ldHdvcmtQcm9jZXNzKCk7CiAgICAgfk5ldHdvcmtQcm9jZXNzKCk7CkBA
IC0xNzgsNiArMTgwLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGdldE5ldHdvcmtQcm9jZXNzU3Rh
dGlzdGljcyh1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVGb3JBbGxP
cmlnaW5zKHVpbnQzMl90IGNhY2hlc1RvQ2xlYXIpOwogCisgICAgdm9pZCBkaWRHcmFudFNhbmRi
b3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQp
OworCiAjaWYgVVNFKFNPVVApCiAgICAgdm9pZCBzZXRJZ25vcmVUTFNFcnJvcnMoYm9vbCk7CiAg
ICAgdm9pZCB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hhbmdlZChjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwpAQCAtMjAwLDYgKzIwNCw4IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IGNoYXIqLCBzdGQ6OnVuaXF1ZV9wdHI8TmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50PiwgUHRy
SGFzaDxjb25zdCBjaGFyKj4+IE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudE1hcDsKICAgICBOZXR3
b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXAgbV9zdXBwbGVtZW50czsKIAorICAgIEhhc2hNYXA8dWlu
dDY0X3QsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4+IG1fc2FuZGJveEV4dGVuc2lvbkZvckJsb2Jz
Q29tcGxldGlvbkhhbmRsZXJzOworCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgdm9pZCBwbGF0
Zm9ybUluaXRpYWxpemVOZXR3b3JrUHJvY2Vzc0NvY29hKGNvbnN0IE5ldHdvcmtQcm9jZXNzQ3Jl
YXRpb25QYXJhbWV0ZXJzJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggM2M0OTk5MS4uODlmMjQz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTY3LDQgKzY3LDYgQEAgbWVzc2FnZXMgLT4gTmV0d29y
a1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIFByZXBhcmVUb1N1c3BlbmQoKQogICAgIENh
bmNlbFByZXBhcmVUb1N1c3BlbmQoKQogICAgIFByb2Nlc3NEaWRSZXN1bWUoKQorCisgICAgRGlk
R3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3Qg
cmVxdWVzdElEKQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdv
cmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcAppbmRleCBiYjA0ODIyLi5jNzBiODA4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5LmNwcApAQCAtMjgsOSArMjgsMTEgQEAKIAogI2luY2x1ZGUgIkF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlUHJveHkuaCIKICNpbmNsdWRlICJDdXN0b21Qcm90b2NvbE1hbmFnZXJQcm94
eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSAiRGF0YWJhc2VQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNs
dWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc0Ny
ZWF0aW9uUGFyYW1ldGVycy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzTWVzc2FnZXMuaCIK
KyNpbmNsdWRlICJTYW5kYm94RXh0ZW5zaW9uLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc01lc3Nh
Z2VzLmgiCiAjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKICNpbmNsdWRlICJXZWJzaXRlRGF0
YS5oIgpAQCAtMjY5LDYgKzI3MSwyMSBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZERl
bGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIGNhbGxi
YWNrKCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6Z3JhbnRTYW5kYm94RXh0ZW5z
aW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGF0aHMpCit7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJy
YXkgZXh0ZW5zaW9uczsKKyAgICBleHRlbnNpb25zLmFsbG9jYXRlKHBhdGhzLnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXRocy5zaXplKCk7ICsraSkgeworICAgICAgICAv
LyBFdmVuIHRob3VnaCB0aGUgRGF0YWJhc2VQcm9jZXNzIGlzIG9ubHkgaW50ZXJlc3RlZCBpbiAi
Y29weWluZyIgdGhlIGNvbnRlbnRzIG9mIHRoZSB0ZW1wb3JhcnkgZmlsZSwgYW5kIHRoZSBtb3N0
CisgICAgICAgIC8vIGVmZmljaWVudCB3YXkgdG8gZG8gdGhhdCBpcyB3aXRoIGEgaGFyZCBsaW5r
LgorICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCBsaW5rKCkgcmVxdWlyZXMgYSBSZWFkV3JpdGUg
ZXh0ZW5zaW9uLgorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aHNb
aV0sIFNhbmRib3hFeHRlbnNpb246OlJlYWRXcml0ZSwgZXh0ZW5zaW9uc1tpXSk7CisgICAgfQor
CisgICAgbV9wcm9jZXNzUG9vbC5zZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVj
ZXNzYXJ5KE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3M6OkdyYW50U2FuZGJveEV4dGVuc2lvbnNG
b3JCbG9icyhwYXRocywgZXh0ZW5zaW9ucykpOworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNz
YWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNl
UHJvY2Vzc0ZvckJsb2JzKHJlcXVlc3RJRCksIDApOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNz
UHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6
OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgQ2hp
bGRQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhsYXVuY2hlciwgY29ubmVjdGlvbklk
ZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDZhZTU0NzQuLjA5MzA5NzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5
LmgKQEAgLTEwNiw2ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmV0Y2hXZWJzaXRl
RGF0YSh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBXZWJzaXRlRGF0YSYpOwogICAgIHZvaWQg
ZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkaWRE
ZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9p
ZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRf
dCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CiAgICAgdm9pZCBsb2dT
YW1wbGVkRGlhZ25vc3RpY01lc3NhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwogICAgIHZvaWQgbG9nU2FtcGxlZERp
YWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgdWludDMyX3QgcmVzdWx0KTsKICAg
ICB2b2lkIGxvZ1NhbXBsZWREaWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCBwYWdl
SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29u
c3QgU3RyaW5nJiB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgppbmRleCBk
YzkzYjg0Li40N2VmNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTI5
LDYgKzI5LDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3NQcm94eSBMZWdhY3lSZWNlaXZl
ciB7CiAgICAgRGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBE
aWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCkKIAorICAg
IEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90
IHJlcXVlc3RJRCwgVmVjdG9yPFN0cmluZz4gcGF0aHMpCisKICAgICBQcm9jZXNzUmVhZHlUb1N1
c3BlbmQoKQogICAgIFNldElzSG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wgaXNIb2xkaW5nTG9ja2Vk
RmlsZXMpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275922</attachid>
            <date>2016-04-07 13:15:28 -0700</date>
            <delta_ts>2016-04-07 16:19:52 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>42384</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYjUwMjk0Li41OTY5MmYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTYtMDQtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFdyaXRlIGJsb2JzIHRvIHRlbXBvcmFyeSBm
aWxlcyBhbmQgbW92ZSB0aGVtIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIHdoZW4gc3RvcmluZyB0
aGVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzIChObyB0ZXN0YWJsZSBjaGFuZ2UgaW4gYmVoYXZpb3IgeWV0LCBjdXJyZW50IHRl
c3RzIHBhc3MpLgorCisgICAgICAgIFdoZW4gYXNrZWQgdG8gc3RvcmUgYSBCbG9iIChpbmNsdWRp
bmcgRmlsZXMpIGluIEluZGV4ZWREQiwgdGhlIEJsb2IgaXMgd3JpdHRlbiBvdXQgdG8gYSB0ZW1w
b3JhcnkgZmlsZS4KKyAgICAgICAgCisgICAgICAgIFRoZW4gd2hlbiB0aGUgcHV0T3JBZGQgcmVx
dWVzdCBpcyByZWNlaXZlZCBieSBJREJTZXJ2ZXIgaXQgaW5jbHVkZXMgYSBsaXN0IG9mIGJsb2JV
UkxzIGFuZCB0aGVpciBtYXBwaW5ncworICAgICAgICB0byB0ZW1wb3JhcnkgZmlsZXMuCisgICAg
ICAgIAorICAgICAgICBGaW5hbGx5LCBhcyBwYXJ0IG9mIHN0b3JpbmcgdGhlIEJsb2IgdmFsdWUg
aW4gdGhlIGRhdGFiYXNlLCB0aG9zZSB0ZW1wb3JhcnkgZmlsZXMgYXJlIG1vdmVkIGluIHRvIHBs
YWNlCisgICAgICAgIHVuZGVyIHRoZSBJbmRleGVkREIgZGlyZWN0b3J5IGZvciBzdG9yYWdlIGFu
ZCBsYXRlciByZXRyaWV2YWwuCisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRi
L0lEQlZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlZhbHVlOjpJREJWYWx1ZSk6Cisg
ICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3Rv
cmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhh
bmRsZXI6On5JREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlcik6CisgICAgICAgIAorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6SURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6SURCU2VydmVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaDoKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OmJsb2JSZWNvcmRzVGFibGVTY2hlbWEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6YmxvYkZpbGVzVGFibGVTY2hlbWEpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRS
ZWNvcmQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpmaWxlSGFuZGxlcik6CisgICAgICAgIAorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
REJTZXJ2ZXI6OlNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6bW92ZUJsb2JGaWxlc0lmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCVHJhbnNhY3Rpb246
OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCVHJhbnNhY3Rp
b246OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCVHJhbnNh
Y3Rpb246OmFkZEJsb2JGaWxlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCVHJhbnNhY3Rpb24uaDoKKyAgICAgICAgCisgICAgICAgICogYmluZGluZ3MvanMv
U2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZTo6YmxvYlVSTHNJc29sYXRlZENvcHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pz
L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oOgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9G
aWxlU3lzdGVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aGFyZExpbmtPckNvcHlGaWxlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwOgorICAgICAgICAoV2ViQ29yZTo6aGFyZExpbmtP
ckNvcHlGaWxlKToKKwogMjAxNi0wNC0wNiAgQnJhZHkgRWlkc29uICA8YmVpZHNvbkBhcHBsZS5j
b20+CiAKICAgICAgICAgTW9kZXJuIElEQjogTWFrZSBzdXJlIFNRTGl0ZSBiYWNraW5nIHN0b3Jl
IHJlY29yZHMgaGF2ZSBhIElOVEVHRVIgUFJJTUFSWSBLRVkgY29sdW1uLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmFsdWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVmFsdWUuY3BwCmluZGV4IGYxZGVlMTIuLmI2Y2Yx
ODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAK
QEAgLTM5LDYgKzM5LDcgQEAgSURCVmFsdWU6OklEQlZhbHVlKCkKIElEQlZhbHVlOjpJREJWYWx1
ZShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNjcmlwdFZhbHVlKQogICAgIDogbV9kYXRh
KFRocmVhZFNhZmVEYXRhQnVmZmVyOjpjb3B5VmVjdG9yKHNjcmlwdFZhbHVlLmRhdGEoKSkpCiB7
CisgICAgbV9ibG9iVVJMcyA9IHNjcmlwdFZhbHVlLmJsb2JVUkxzSXNvbGF0ZWRDb3B5KCk7CiB9
CiAKIElEQlZhbHVlOjpJREJWYWx1ZShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHNjcmlw
dFZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBibG9iRmlsZVBhdGhzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDUyOTRhMTcuLmQ2ODMz
Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTUwLDYgKzUwLDEzIEBAIGVudW0gY2xhc3MgSW5k
ZXhSZWNvcmRUeXBlOwogCiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAorY2xhc3MgSURCQmFja2lu
Z1N0b3JlRmlsZUhhbmRsZXIgeworcHVibGljOgorICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9y
ZUZpbGVIYW5kbGVyKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JGaWxlQWNjZXNz
KGNvbnN0IFN0cmluZyYgcGF0aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaWxlQWNjZXNzQ29t
cGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKSA9IDA7Cit9OworCiBjbGFzcyBJREJCYWNraW5nU3Rv
cmUgewogcHVibGljOgogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNw
cAppbmRleCA5OWEzZDQ3Li44M2FkMjQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtNDQsOSArNDQsOSBAQCBS
ZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZSgpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSURCU2VydmVyKCkpOwogfQogCi1SZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKK1JlZjxJREJTZXJ2ZXI+IElEQlNl
cnZlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNr
aW5nU3RvcmVGaWxlSGFuZGxlciogZmlsZUhhbmRsZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgSURCU2VydmVyKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkpOworICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFzZURpcmVjdG9yeVBhdGgsIGZpbGVIYW5kbGVyKSk7
CiB9CiAKIElEQlNlcnZlcjo6SURCU2VydmVyKCkKQEAgLTU1LDggKzU1LDkgQEAgSURCU2VydmVy
OjpJREJTZXJ2ZXIoKQogICAgIG1fdGhyZWFkSUQgPSBjcmVhdGVUaHJlYWQoSURCU2VydmVyOjpk
YXRhYmFzZVRocmVhZEVudHJ5LCB0aGlzLCAiSW5kZXhlZERhdGFiYXNlIFNlcnZlciIpOwogfQog
Ci1JREJTZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCkKK0lEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciogZmlsZUhhbmRsZXIpCiAgICAgOiBtX2Rh
dGFiYXNlRGlyZWN0b3J5UGF0aChkYXRhYmFzZURpcmVjdG9yeVBhdGgpCisgICAgLCBtX2JhY2tp
bmdTdG9yZUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVyKQogewogICAgIExPRyhJbmRleGVkREIsICJJ
REJTZXJ2ZXIgY3JlYXRlZCBhdCBwYXRoICVzIiwgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLnV0Zjgo
KS5kYXRhKCkpOwogCkBAIC0xMjAsNyArMTIxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tp
bmdTdG9yZT4gSURCU2VydmVyOjpjcmVhdGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2UK
ICAgICBpZiAobV9kYXRhYmFzZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gTWVtb3J5SURCQmFja2luZ1N0b3JlOjpjcmVhdGUoaWRlbnRpZmllcik7CiAKLSAgICByZXR1
cm4gc3RkOjptYWtlX3VuaXF1ZTxTUUxpdGVJREJCYWNraW5nU3RvcmU+KGlkZW50aWZpZXIsIG1f
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTUUxp
dGVJREJCYWNraW5nU3RvcmU+KGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBt
X2JhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6Om9wZW5EYXRh
YmFzZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKaW5kZXggOTQ1NDlj
OC4uN2E4M2U3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtNDksMTAgKzQ5LDEyIEBAIGNsYXNzIElEQlZhbHVlOwog
CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAorY2xhc3MgSURCQmFja2luZ1N0b3JlRmlsZUhhbmRs
ZXI7CisKIGNsYXNzIElEQlNlcnZlciA6IHB1YmxpYyBSZWZDb3VudGVkPElEQlNlcnZlcj4gewog
cHVibGljOgogICAgIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VEaXJlY3RvcnlQYXRoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZl
cj4gY3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5n
U3RvcmVGaWxlSGFuZGxlciogPSBudWxscHRyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdW5yZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7
CkBAIC05NCw3ICs5Niw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBJREJTZXJ2ZXIoKTsK
LSAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAg
IElEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURCQmFja2lu
Z1N0b3JlRmlsZUhhbmRsZXIqKTsKIAogICAgIFVuaXF1ZUlEQkRhdGFiYXNlJiBnZXRPckNyZWF0
ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogCkBAIC0x
MTcsNiArMTE5LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPElEQlJlc291cmNlSWRlbnRpZmll
ciwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbio+IG1fdHJhbnNhY3Rpb25zOwogCiAgICAg
U3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOworICAgIElEQkJhY2tpbmdTdG9yZUZpbGVI
YW5kbGVyKiBtX2JhY2tpbmdTdG9yZUZpbGVIYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
SURCU2VydmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGU1NTdhMGUu
LjRmOGVjMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0xNjAsOSAr
MTYwLDQzIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIHYySW5kZXhSZWNvcmRzVGFibGVTY2hlbWFB
bHRlcm5hdGUoKQogICAgIHJldHVybiB2MkluZGV4UmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOwog
fQogCitzdGF0aWMgY29uc3QgU3RyaW5nIGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoY29uc3QgU3Ry
aW5nJiB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAi
LCB0YWJsZU5hbWUsICIgKG9iamVjdFN0b3JlUm93IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCwgYmxvYlVSTCBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9CisK
K3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmco
YmxvYlJlY29yZHNUYWJsZVNjaGVtYSgiQmxvYlJlY29yZHMiKSk7CisgICAgcmV0dXJuIGJsb2JS
ZWNvcmRzVGFibGVTY2hlbWFTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JS
ZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmcoYmxvYlJlY29yZHNUYWJsZVNj
aGVtYSgiXCJCbG9iUmVjb3Jkc1wiIikpOworICAgIHJldHVybiBibG9iUmVjb3Jkc1RhYmxlU2No
ZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nIGJsb2JGaWxlc1RhYmxlU2NoZW1h
KGNvbnN0IFN0cmluZyYgdGFibGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVB
VEUgVEFCTEUgIiwgdGFibGVOYW1lLCAiIChibG9iVVJMIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJ
Q1QgRkFJTCBVTklRVUUgT04gQ09ORkxJQ1QgRkFJTCwgZmlsZU5hbWUgVEVYVCBOT1QgTlVMTCBP
TiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMKSIpOworfQogCi1TUUxpdGVJ
REJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlk
ZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5
KQorc3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWEoKQoreworICAgIHN0
YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nKGJs
b2JGaWxlc1RhYmxlU2NoZW1hKCJCbG9iRmlsZXMiKSk7CisgICAgcmV0dXJuIGJsb2JGaWxlc1Rh
YmxlU2NoZW1hU3RyaW5nOworfQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJs
ZVNjaGVtYUFsdGVybmF0ZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4g
YmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmcoYmxvYkZpbGVzVGFibGVTY2hlbWEoIlwiQmxvYkZp
bGVzXCIiKSk7CisgICAgcmV0dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitT
UUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGly
ZWN0b3J5LCBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciogZmlsZUhhbmRsZXIpCiAgICAgOiBt
X2lkZW50aWZpZXIoaWRlbnRpZmllcikKKyAgICAsIG1fZmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIp
CiB7CiAgICAgbV9hYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5ID0gaWRlbnRpZmllci5kYXRhYmFz
ZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KGRhdGFiYXNlUm9vdERpcmVjdG9yeSk7CiB9CkBAIC0y
NzUsNiArMzA5LDc4IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlm
TmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCit7
CisgICAgQVNTRVJUKG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4o
KSk7CisKKyAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKKyAgICB7CisgICAgICAgIC8vIEZldGNo
IHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2IgcmVjb3JkIHRhYmxlLgorICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBG
Uk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JSZWNvcmRzJyIpOworICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisK
KyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYlJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVh
dGUgaXQuLgorICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CisgICAg
ICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JSZWNvcmRzVGFibGVT
Y2hlbWEoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUg
QmxvYlJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEg
PSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3FsaXRlUmVz
dWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0
aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4i
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgfQorCisg
ICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJl
bnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CisgICAgICAg
IExPR19FUlJPUigiSW52YWxpZCBCbG9iUmVjb3JkcyB0YWJsZSBzY2hlbWEgZm91bmQiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gRmV0Y2ggdGhl
IHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRhYmxlLgorICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciKTsKKyAgICAgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9i
RmlsZXMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKworICAgICAgICAv
LyBJZiB0aGVyZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRo
ZW4gYmFpbC4KKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9iRmlsZXNUYWJsZVNj
aGVtYSgpKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBC
bG9iRmlsZXMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2No
ZW1hIGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDEpOworICAgIH0KKworICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1Rh
YmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVy
bmF0ZSgpKSB7CisgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBCbG9iRmlsZXMgdGFibGUgc2No
ZW1hIGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkUmVjb3Jk
c1RhYmxlKCkKIHsKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CkBAIC02MTIsNiArNzE4LDEyIEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUlu
Zm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvCiAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgY3JlYXRpbmcgb3IgbWln
cmF0aW5nIEluZGV4IFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UiKSB9OwogICAgIH0KIAorICAg
IGlmICghZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBjcmVhdGluZyBvciBjb25maXJtaW5nIEJsb2IgUmVjb3JkcyB0YWJsZXMgaW4gZGF0YWJhc2Ui
KTsKKyAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgY3JlYXRp
bmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRhdGFiYXNlIikgfTsKKyAg
ICB9CisKICAgICBhdXRvIGRhdGFiYXNlSW5mbyA9IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5m
bygpOwogICAgIGlmICghZGF0YWJhc2VJbmZvKQogICAgICAgICBkYXRhYmFzZUluZm8gPSBjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8oKTsKQEAgLTEzMDAsMTMgKzE0MTIsMTQg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRk
UmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUlEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
IG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImIHZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JikKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZXMpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkIC0ga2V5ICVz
LCBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBrZXlEYXRhLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVCh2
YWx1ZS5kYXRhKCkpOworICAgIEFTU0VSVChibG9iVVJMcy5zaXplKCkgPT0gYmxvYkZpbGVzLnNp
emUoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9u
LT5pblByb2dyZXNzKCkpIHsKQEAgLTEzMjMsNiArMTQzNiw4IEBAIElEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3RpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlcmlhbGl6ZSBJREJLZXkgdG8g
YmUgc3RvcmVkIGluIGFuIG9iamVjdCBzdG9yZSIpOwogICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJp
YWxpemUgSURCS2V5IHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3Qgc3RvcmUiKSB9OwogICAgIH0K
KworICAgIGludDY0X3QgcmVjb3JkSUQgPSAwOwogICAgIHsKICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZB
TFVFUyAoPywgQ0FTVCg/IEFTIFRFWFQpLCA/LCBOVUxMKTsiKSk7CiAgICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTElURV9PSwpAQCAtMTMzMyw2ICsxNDQ4LDggQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGkKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCByZWNvcmQg
Zm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIs
IG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzdG9y
ZSByZWNvcmQgaW4gb2JqZWN0IHN0b3JlIikgfTsKICAgICAgICAgfQorCisgICAgICAgIHJlY29y
ZElEID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAgICAgfQogCiAgICAgYXV0byBl
cnJvciA9IHVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQob2JqZWN0U3RvcmVJbmZvLCBrZXlE
YXRhLCB2YWx1ZSk7CkBAIC0xMzQ4LDYgKzE0NjUsNTUgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGkKICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvYlVS
THMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgdXJsID0gYmxvYlVSTHNbaV07CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJ
TGl0ZXJhbCgiSU5TRVJUIElOVE8gQmxvYlJlY29yZHMgVkFMVUVTICg/LCA/KTsiKSk7CisgICAg
ICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8
fCBzcWwuYmluZEludDY0KDEsIHJlY29yZElEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAg
ICB8fCBzcWwuYmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlM
aXRlcmFsKCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIikgfTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IHBvdGVudGlhbEZpbGVOYW1l
SW50ZWdlciA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOworCisgICAgICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBsZWZ0IHRv
IGRvLgorICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0
ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlcyBXSEVSRSBi
bG9iVVJMID0gPzsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmls
ZW5hbWVzIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZXhhbWlu
ZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBmaWxlbmFtZXMgaW4gZGF0YWJhc2Ui
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmlsZW5hbWVzIGlu
IGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBz
byBjb21taXQgb3VyIGZpbGUgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICAgICAgU3RyaW5nIHN0
b3JlZEZpbGVuYW1lID0gU3RyaW5nOjpmb3JtYXQoIiUiIFBSSWQ2NCAiLmJsb2IiLCBwb3RlbnRp
YWxGaWxlTmFtZUludGVnZXIpOworICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEJsb2JGaWxlcyBW
QUxVRVMgKD8sID8pOyIpKTsKKyAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCB1cmwpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBzdG9yZWRGaWxlbmFtZSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIGZpbGUg
cmVjb3JkIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gcmVjb3Jk
IEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKSB9OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFkZEJsb2JGaWxlKGJsb2JGaWxlc1tpXSwgc3Rv
cmVkRmlsZW5hbWUpOworICAgIH0KKwogICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlDdXJzb3JzT2ZD
aGFuZ2VzKG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCkpOwogCiAgICAgcmV0dXJuIGVycm9y
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDdmMjM5MmEuLjczM2M3ZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgU1FM
aXRlSURCQ3Vyc29yOwogCiBjbGFzcyBTUUxpdGVJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURC
QmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKLSAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3Rv
cnkpOworICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3Jl
RmlsZUhhbmRsZXIqKTsKICAgICAKICAgICB+U1FMaXRlSURCQmFja2luZ1N0b3JlKCkgZmluYWw7
CiAKQEAgLTgxLDEzICs4MSwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVucmVnaXN0ZXJDdXJz
b3IoU1FMaXRlSURCQ3Vyc29yJik7CiAKKyAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5
KCkgY29uc3Q7CisKKyAgICBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciogZmlsZUhhbmRsZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVIYW5kbGVyOyB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5n
IGZpbGVuYW1lRm9yRGF0YWJhc2VOYW1lKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGZ1bGxEYXRhYmFz
ZURpcmVjdG9yeSgpIGNvbnN0OwogICAgIFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoKCkgY29uc3Q7
CiAKICAgICBib29sIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVW
YWxpZEluZGV4UmVjb3Jkc1RhYmxlKCk7CisgICAgYm9vbCBlbnN1cmVWYWxpZEJsb2JUYWJsZXMo
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBjcmVhdGVBbmRQb3B1bGF0
ZUluaXRpYWxEYXRhYmFzZUluZm8oKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJ
bmZvPiBleHRyYWN0RXhpc3RpbmdEYXRhYmFzZUluZm8oKTsKIApAQCAtMTE4LDYgKzEyMiw4IEBA
IHByaXZhdGU6CiAKICAgICBSZWZQdHI8SlNDOjpWTT4gbV92bTsKICAgICBKU0M6OlN0cm9uZzxK
U0M6OkpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKKworICAgIElEQkJhY2tpbmdTdG9y
ZUZpbGVIYW5kbGVyKiBtX2ZpbGVIYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2Vy
dmVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBkY2JlMzMxLi5lMGY0YmRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgog
I2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJJbmRleGVkREIuaCIKICNpbmNs
dWRlICJTUUxpdGVJREJCYWNraW5nU3RvcmUuaCIKQEAgLTc1LDEyICs3Niw0NSBAQCBJREJFcnJv
ciBTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKICAgICBpZiAobV9zcWxpdGVUcmFuc2Fj
dGlvbi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBjb21taXQgU1FMaXRlIHRy
YW5zYWN0aW9uIGluIGRhdGFiYXNlIGJhY2tlbmQiKSB9OwogCisgICAgbW92ZUJsb2JGaWxlc0lm
TmVjZXNzYXJ5KCk7CisKICAgICByZXNldCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKK3ZvaWQg
U1FMaXRlSURCVHJhbnNhY3Rpb246Om1vdmVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpCit7CisgICAg
U3RyaW5nIGRhdGFiYXNlRGlyZWN0b3J5ID0gbV9iYWNraW5nU3RvcmUuZnVsbERhdGFiYXNlRGly
ZWN0b3J5KCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYmxvYkZpbGVzKSB7CisgICAgICAg
IGF1dG8qIGZpbGVIYW5kbGVyID0gbV9iYWNraW5nU3RvcmUuZmlsZUhhbmRsZXIoKTsKKyAgICAg
ICAgaWYgKGZpbGVIYW5kbGVyKQorICAgICAgICAgICAgZmlsZUhhbmRsZXItPnByZXBhcmVGb3JG
aWxlQWNjZXNzKGVudHJ5LmZpcnN0KTsKKworICAgICAgICBpZiAoIWhhcmRMaW5rT3JDb3B5Rmls
ZShlbnRyeS5maXJzdCwgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5
LCBlbnRyeS5zZWNvbmQpKSkKKyAgICAgICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGxpbmsv
Y29weSB0ZW1wb3JhcnkgYmxvYiBmaWxlICclcycgdG8gbG9jYXRpb24gJyVzJyIsIGVudHJ5LmZp
cnN0LnV0ZjgoKS5kYXRhKCksIHBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZURpcmVj
dG9yeSwgZW50cnkuc2Vjb25kKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoZmlsZUhh
bmRsZXIpCisgICAgICAgICAgICBmaWxlSGFuZGxlci0+ZmlsZUFjY2Vzc0NvbXBsZXRlKGVudHJ5
LmZpcnN0KTsKKyAgICB9CisKKyAgICBtX2Jsb2JGaWxlcy5jbGVhcigpOworfQorCiBJREJFcnJv
ciBTUUxpdGVJREJUcmFuc2FjdGlvbjo6YWJvcnQoKQogeworICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX2Jsb2JGaWxlcykgeworICAgICAgICBhdXRvKiBmaWxlSGFuZGxlciA9IG1fYmFja2luZ1N0
b3JlLmZpbGVIYW5kbGVyKCk7CisgICAgICAgIGlmIChmaWxlSGFuZGxlcikgeworICAgICAgICAg
ICAgZmlsZUhhbmRsZXItPnByZXBhcmVGb3JGaWxlQWNjZXNzKGVudHJ5LmZpcnN0KTsKKyAgICAg
ICAgICAgIGZpbGVIYW5kbGVyLT5maWxlQWNjZXNzQ29tcGxldGUoZW50cnkuZmlyc3QpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFkZWxldGVGaWxlKGVudHJ5LmZpcnN0KSkK
KyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBkZWxldGUgdGVtcG9yYXJ5IGJs
b2IgZmlsZSAnJXMnIiwgZW50cnkuZmlyc3QudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX2Jsb2JGaWxlcy5jbGVhcigpOworCiAgICAgaWYgKCFtX3NxbGl0ZVRyYW5z
YWN0aW9uIHx8ICFtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCiAgICAgICAgIHJl
dHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgi
Tm8gU1FMaXRlIHRyYW5zYWN0aW9uIGluIHByb2dyZXNzIHRvIGFib3J0IikgfTsKIApAQCAtOTcs
NiArMTMxLDcgQEAgdm9pZCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6cmVzZXQoKQogewogICAgIG1f
c3FsaXRlVHJhbnNhY3Rpb24gPSBudWxscHRyOwogICAgIGNsZWFyQ3Vyc29ycygpOworICAgIG1f
YmxvYkZpbGVzLmNsZWFyKCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+
IFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjptYXliZU9wZW5CYWNraW5nU3RvcmVDdXJzb3IodWludDY0
X3Qgb2JqZWN0U3RvcmVJRCwgdWludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRh
JiByYW5nZSkKQEAgLTE3MSw2ICsyMDYsMTEgQEAgYm9vbCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6
aW5Qcm9ncmVzcygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rpb24gJiYgbV9z
cWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpOwogfQogCit2b2lkIFNRTGl0ZUlEQlRyYW5z
YWN0aW9uOjphZGRCbG9iRmlsZShjb25zdCBTdHJpbmcmIHRlbXBvcmFyeVBhdGgsIGNvbnN0IFN0
cmluZyYgc3RvcmVkRmlsZW5hbWUpCit7CisgICAgbV9ibG9iRmlsZXMuYXBwZW5kKHN0ZDo6bWFr
ZV9wYWlyKHRlbXBvcmFyeVBhdGgsIHN0b3JlZEZpbGVuYW1lKSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIElEQlNlcnZlcgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFu
c2FjdGlvbi5oCmluZGV4IDBlZmU3NDQuLjVkN2IzN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2Fj
dGlvbi5oCkBAIC03MSwxNiArNzEsMjEgQEAgcHVibGljOgogCiAgICAgU1FMaXRlVHJhbnNhY3Rp
b24qIHNxbGl0ZVRyYW5zYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zcWxpdGVUcmFuc2FjdGlv
bi5nZXQoKTsgfQogCisgICAgdm9pZCBhZGRCbG9iRmlsZShjb25zdCBTdHJpbmcmIHRlbXBvcmFy
eVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmVkRmlsZW5hbWUpOworCiBwcml2YXRlOgogICAgIHZv
aWQgY2xlYXJDdXJzb3JzKCk7CiAgICAgdm9pZCByZXNldCgpOwogCisgICAgdm9pZCBtb3ZlQmxv
YkZpbGVzSWZOZWNlc3NhcnkoKTsKKwogICAgIElEQlRyYW5zYWN0aW9uSW5mbyBtX2luZm87CiAK
ICAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUmIG1fYmFja2luZ1N0b3JlOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxTUUxpdGVUcmFuc2FjdGlvbj4gbV9zcWxpdGVUcmFuc2FjdGlvbjsKICAgICBIYXNo
TWFwPElEQlJlc291cmNlSWRlbnRpZmllciwgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZUlEQkN1cnNv
cj4+IG1fY3Vyc29yczsKICAgICBIYXNoU2V0PFNRTGl0ZUlEQkN1cnNvcio+IG1fYmFja2luZ1N0
b3JlQ3Vyc29yczsKKyAgICBWZWN0b3I8c3RkOjpwYWlyPFN0cmluZywgU3RyaW5nPj4gbV9ibG9i
RmlsZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCmluZGV4IDczMDMy
OWQuLjVlODM2ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcApAQCAtMjc0OCw2ICsyNzQ4LDE2IEBAIHVpbnQzMl90IFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZTo6d2lyZUZvcm1hdFZlcnNpb24oKQogfQogCiAjaWYgRU5BQkxF
KElOREVYRURfREFUQUJBU0UpCitWZWN0b3I8U3RyaW5nPiBTZXJpYWxpemVkU2NyaXB0VmFsdWU6
OmJsb2JVUkxzSXNvbGF0ZWRDb3B5KCkgY29uc3QKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1
bHQ7CisgICAgcmVzdWx0LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9ibG9iVVJMcy5zaXplKCkp
OworICAgIGZvciAoYXV0byYgdXJsIDogbV9ibG9iVVJMcykKKyAgICAgICAgcmVzdWx0LnVuY2hl
Y2tlZEFwcGVuZCh1cmwuaXNvbGF0ZWRDb3B5KCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwogdm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVk
REIoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJWYWx1ZSYpPiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMjc2OSw2ICsyNzc5LDYgQEAg
dm9pZCBTZXJpYWxpemVkU2NyaXB0VmFsdWU6OndyaXRlQmxvYnNUb0Rpc2tGb3JJbmRleGVkREIo
c3RkOjpmdW5jdGlvbjx2b2lkIChjb24KICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyAqdGhp
cywgbV9ibG9iVVJMcywgYmxvYkZpbGVQYXRocyB9KTsKICAgICB9KTsKIH0KLSNlbmRpZgorI2Vu
ZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0
VmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oCmluZGV4IDY0NWRjYjguLjE1Y2JmOGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oCkBAIC04NCw5ICs4NCwxMSBAQCBwdWJs
aWM6CiAKICAgICBjb25zdCBWZWN0b3I8dWludDhfdD4mIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KICAgICBib29sIGhhc0Jsb2JVUkxzKCkgY29uc3QgeyByZXR1cm4gIW1fYmxvYlVS
THMuaXNFbXB0eSgpOyB9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBWZWN0
b3I8U3RyaW5nPiBibG9iVVJMc0lzb2xhdGVkQ29weSgpIGNvbnN0OwogICAgIHZvaWQgd3JpdGVC
bG9ic1RvRGlza0ZvckluZGV4ZWREQihzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQlZhbHVl
Jik+IGNvbXBsZXRpb25IYW5kbGVyKTsKLSNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogCiAgICAgc3RhdGljIFJlZjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IGNyZWF0
ZUZyb21XaXJlQnl0ZXMoVmVjdG9yPHVpbnQ4X3Q+JiYgZGF0YSkKICAgICB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9GaWxlU3lzdGVtLmgKaW5kZXggMDNhZmZmZS4uZjFhNzhkZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaApAQCAtMTgxLDYgKzE4MSw5IEBAIGludCByZWFkRnJvbUZp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGUgd3JpdGUgd2FzIHN1Y2Nlc3NmdWwsIGZhbHNlIGlmIGl0IHdhcyBub3Qu
CiBib29sIGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShjb25zdCBTdHJpbmcmIHBhdGgs
IFBsYXRmb3JtRmlsZUhhbmRsZSYpOwogCisvLyBIYXJkIGxpbmtzIGEgZmlsZSBpZiBwb3NzaWJs
ZSwgY29waWVzIGl0IGlmIG5vdC4KK2Jvb2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0cmlu
ZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKTsKKwogI2lmIFVTRShGSUxFX0xP
Q0spCiBib29sIGxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgRmlsZUxvY2tNb2RlKTsKIGJv
b2wgdW5sb2NrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCmluZGV4IDkxNWVhNjkuLjFkOGVkN2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKQEAgLTM2NCw0
ICszNjQsMTEgQEAgYm9vbCB1bmxvYWRNb2R1bGUoUGxhdGZvcm1Nb2R1bGUgbW9kdWxlKQogICAg
IHJldHVybiBnX21vZHVsZV9jbG9zZShtb2R1bGUpOwogI2VuZGlmCiB9CisKK2Jvb2wgaGFyZExp
bmtPckNvcHlGaWxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudAorICAgIHJldHVybiBmYWxzZTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKaW5kZXggZmUyNzZiMC4u
MjFhMzZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lz
dGVtUE9TSVguY3BwCkBAIC0zNDYsNCArMzQ2LDMxIEBAIGVuZDoKIH0KICNlbmRpZgogCitib29s
IGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBk
ZXN0aW5hdGlvbikKK3sKKyAgICBpZiAoZmlsZUV4aXN0cyhkZXN0aW5hdGlvbikpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVz
ZW50YXRpb24oc291cmNlKTsKKyAgICBpZiAoIWZzU291cmNlLmRhdGEoKSB8fCBmc1NvdXJjZS5k
YXRhKClbMF0gPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1N0cmluZyBm
c0Rlc3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKKyAg
ICBpZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpIHx8IGZzRGVzdGluYXRpb24uZGF0YSgpWzBdID09
ICdcMCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGludCByZXN1bHQgPSBsaW5rKGZz
U291cmNlLmRhdGEoKSwgZnNEZXN0aW5hdGlvbi5kYXRhKCkpOworICAgIGlmICghcmVzdWx0KQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIEhhcmQgbGluayBmYWlsZWQuIFBlcmZvcm0g
YSBjb3B5IGluc3RlYWQuCisgICAgYXV0byBoYW5kbGUgPSBvcGVuRmlsZShkZXN0aW5hdGlvbiwg
T3BlbkZvcldyaXRlKTsKKyAgICBpZiAoIWlzSGFuZGxlVmFsaWQoaGFuZGxlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBhcHBlbmRSZXN1bHQgPSBhcHBlbmRGaWxlQ29udGVu
dHNUb0ZpbGVIYW5kbGUoc291cmNlLCBoYW5kbGUpOworICAgIGNsb3NlRmlsZShoYW5kbGUpOwor
ICAgIHJldHVybiBhcHBlbmRSZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwppbmRleCA2ZDAzYWY1Li40OWYxYWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAK
KzIwMTYtMDQtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAgICAg
IE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFdyaXRlIGJsb2JzIHRvIHRlbXBvcmFyeSBmaWxl
cyBhbmQgbW92ZSB0aGVtIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIHdoZW4gc3RvcmluZyB0aGVt
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MzIx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIE5l
dHdvcmtQcm9jZXNzIHdyaXRlcyBhIGJsb2IgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgdGhlbiB0ZWxs
cyB0aGUgVUlQcm9jZXNzIHRvIGdyYW50IHRoZSBEYXRhYmFzZVByb2Nlc3MKKyAgICAgICAgYSBT
YW5kYm94IEV4dGVuc2lvbiB0byB0aGF0IHBhdGguCisgICAgICAgIAorICAgICAgICBJdCB0aGVu
IHRlbGxzIHRoZSBXZWJQcm9jZXNzIHRoZSBwYXRocyBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcywg
d2hpY2ggdGhlbiB0ZWxscyB0aGUgRGF0YWJhc2VQcm9jZXNzIHRvIHN0b3JlCisgICAgICAgIHRo
ZSBjb250ZW50cyBvZiB0aG9zZSBmaWxlcyBhcyBibG9iIHJlZmVyZW5jZXMgaW4gdGhlIGRhdGFi
YXNlLgorICAgICAgICAKKyAgICAgICAgU2luY2UgdGhlIFVJUHJvY2VzcyBoYWQgYWxyZWFkeSBn
cmFudGVkIGl0IGEgU2FuZGJveCBFeHRlbnNpb24sIGl0IGlzIGFibGUgdG8gZG8gc28uCisKKyAg
ICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6RGF0YWJhc2VQcm9jZXNzOjppZGJTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpEYXRh
YmFzZVByb2Nlc3M6OmdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyk6CisgICAgICAgIChX
ZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6cHJlcGFyZUZvckZpbGVBY2Nlc3MpOgorICAgICAgICAo
V2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmZpbGVBY2Nlc3NDb21wbGV0ZSk6CisgICAgICAgICog
RGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oOgorICAgICAgICAqIERhdGFiYXNlUHJv
Y2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBOZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxl
cyk6CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRh
YmFzZVByb2Nlc3NGb3JCbG9icyk6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpk
aWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyk6CisgICAg
ICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFVJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzc1Byb3h5OjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NG
b3JCbG9icyk6CisgICAgICAgICogVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVz
c2FnZXMuaW46CisKIDIwMTYtMDQtMDUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBNYWtlIENNYWtlLWdlbmVyYXRlZCBiaW5hcmllcyBvbiBN
YWMgYWJsZSB0byBydW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vz
cy9EYXRhYmFzZVByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0Rh
dGFiYXNlUHJvY2Vzcy5jcHAKaW5kZXggOWM2YWUwMi4uYjhlNWU5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKQEAgLTk4LDcg
Kzk4LDcgQEAgdm9pZCBEYXRhYmFzZVByb2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJ
UEM6OkNvbm5lY3Rpb24mLCBJUEM6OlN0cmluZ1JlZmUKIElEQlNlcnZlcjo6SURCU2VydmVyJiBE
YXRhYmFzZVByb2Nlc3M6OmlkYlNlcnZlcigpCiB7CiAgICAgaWYgKCFtX2lkYlNlcnZlcikKLSAg
ICAgICAgbV9pZGJTZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSgpKTsKKyAgICAgICAgbV9pZGJTZXJ2ZXIgPSBJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpLCAmRGF0YWJhc2VQcm9j
ZXNzOjpzaW5nbGV0b24oKSk7CiAKICAgICByZXR1cm4gKm1faWRiU2VydmVyOwogfQpAQCAtMzA1
LDYgKzMwNSwzNSBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PAogI2VuZGlmCiB9CiAKK3ZvaWQg
RGF0YWJhc2VQcm9jZXNzOjpncmFudFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYnMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYg
aGFuZGxlcykKK3sKKyAgICBBU1NFUlQocGF0aHMuc2l6ZSgpID09IGhhbmRsZXMuc2l6ZSgpKTsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXV0byByZXN1bHQgPSBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMuYWRk
KHBhdGhzW2ldLCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoaGFuZGxlc1tpXSkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0KK30KKwor
dm9pZCBEYXRhYmFzZVByb2Nlc3M6OnByZXBhcmVGb3JGaWxlQWNjZXNzKGNvbnN0IFN0cmluZyYg
cGF0aCkKK3sKKyAgICBhdXRvIGV4dGVuc2lvbiA9IG1fYmxvYlRlbXBvcmFyeUZpbGVTYW5kYm94
RXh0ZW5zaW9ucy5nZXQocGF0aCk7CisgICAgaWYgKGV4dGVuc2lvbikKKyAgICAgICAgZXh0ZW5z
aW9uLT5jb25zdW1lKCk7Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpmaWxlQWNjZXNzQ29t
cGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIFdlJ3ZlIGVpdGhlciBoYXJkIGxp
bmtlZCB0aGUgdGVtcG9yYXJ5IGJsb2IgZmlsZSB0byB0aGUgZGF0YWJhc2UgZGlyZWN0b3J5LCBj
b3BpZWQgaXQgdGhlcmUsCisgICAgLy8gb3IgdGhlIHRyYW5zYWN0aW9uIGlzIGJlaW5nIGFib3J0
ZWQuCisgICAgLy8gSW4gYW55IG9mIHRob3NlIGNhc2VzLCB3ZSBjYW4gZGVsZXRlIHRoZSB0ZW1w
b3JhcnkgYmxvYiBmaWxlIG5vdy4KKyAgICBkZWxldGVGaWxlKHBhdGgpOworCisgICAgYXV0byBl
eHRlbnNpb24gPSBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMudGFrZShwYXRo
KTsKKyAgICBpZiAoZXh0ZW5zaW9uKQorICAgICAgICBleHRlbnNpb24tPnJldm9rZSgpOworfQor
CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luPj4gRGF0YWJhc2VQcm9jZXNzOjppbmRleGVkRGF0YWJhc2VPcmlnaW5zKCkK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVBy
b2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
aAppbmRleCA2ODkyNTRmLi5hZGRlZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJh
c2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaWYgRU5BQkxF
KERBVEFCQVNFX1BST0NFU1MpCiAKICNpbmNsdWRlICJDaGlsZFByb2Nlc3MuaCIKKyNpbmNsdWRl
ICJTYW5kYm94RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9JREJCYWNraW5nU3RvcmUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0lEQlNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVW5p
cXVlSURCRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTQ1
LDcgKzQ3LDcgQEAgY2xhc3MgRGF0YWJhc2VUb1dlYlByb2Nlc3NDb25uZWN0aW9uOwogZW51bSBj
bGFzcyBXZWJzaXRlRGF0YVR5cGU7CiBzdHJ1Y3QgRGF0YWJhc2VQcm9jZXNzQ3JlYXRpb25QYXJh
bWV0ZXJzOwogCi1jbGFzcyBEYXRhYmFzZVByb2Nlc3MgOiBwdWJsaWMgQ2hpbGRQcm9jZXNzIHsK
K2NsYXNzIERhdGFiYXNlUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MsIHB1YmxpYyBXZWJD
b3JlOjpJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyIHsKICAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShEYXRhYmFzZVByb2Nlc3MpOwogICAgIGZyaWVuZCBjbGFzcyBOZXZlckRl
c3Ryb3llZDxEYXRhYmFzZVByb2Nlc3M+OwogcHVibGljOgpAQCAtNjUsNiArNjcsMTAgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBwb3N0RGF0YWJhc2VUYXNrKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpDcm9zc1RocmVhZFRhc2s+KTsKIAorICAgIC8vIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFj
a2luZ1N0b3JlRmlsZUhhbmRsZXIKKyAgICB2b2lkIHByZXBhcmVGb3JGaWxlQWNjZXNzKGNvbnN0
IFN0cmluZyYgcGF0aCkgZmluYWw7CisgICAgdm9pZCBmaWxlQWNjZXNzQ29tcGxldGUoY29uc3Qg
U3RyaW5nJiBwYXRoKSBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBEYXRhYmFzZVByb2Nlc3MoKTsK
IApAQCAtOTAsNiArOTYsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShX
ZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRh
VHlwZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEo
V2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0
YVR5cGVzLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2lu
Y2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vi
c2l0ZURhdGFUeXBlcywgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4m
IG9yaWdpbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOworICAgIHZvaWQgZ3JhbnRTYW5kYm94RXh0
ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocywgY29uc3QgU2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmKTsKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW4+PiBpbmRleGVkRGF0
YWJhc2VPcmlnaW5zKCk7CkBAIC0xMDksNiArMTE2LDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcg
bV9pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAKICAgICBSZWZQdHI8V2ViQ29yZTo6SURCU2Vy
dmVyOjpJREJTZXJ2ZXI+IG1faWRiU2VydmVyOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0
cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25z
OwogI2VuZGlmCiAKICAgICBEZXF1ZTxzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJl
YWRUYXNrPj4gbV9kYXRhYmFzZVRhc2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0
YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQy
L0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggNGNiOWRh
MC4uODJlMjc2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0Rh
dGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0zMiw2ICszMiw3IEBAIG1lc3Nh
Z2VzIC0+IERhdGFiYXNlUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgRmV0Y2hXZWJzaXRl
RGF0YShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJz
aXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAg
RGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0
PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBzdGQ6OmNocm9ubzo6
c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNr
SUQpCiAgICAgRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIE9wdGlvblNldDxXZWJLaXQ6OldlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFU
eXBlcywgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4gb3JpZ2lucywgdWludDY0
X3QgY2FsbGJhY2tJRCkKKyAgICBHcmFudFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYnMoVmVjdG9y
PFN0cmluZz4gcGF0aHMsIFdlYktpdDo6U2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0
ZW5zaW9ucykKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dl
YlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDg4NzM1NDdkLi45ODg3M2RlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yOTYsMTAgKzI5NiwxMiBAQCB2b2lkIE5ldHdvcmtD
b25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlcyhjb25zdCBW
ZWN0b3I8U3RyaQogICAgICAgICBmb3IgKGF1dG8mIGZpbGUgOiBmaWxlUmVmZXJlbmNlcykKICAg
ICAgICAgICAgIGZpbGUtPnJldm9rZUZpbGVBY2Nlc3MoKTsKIAotICAgICAgICBpZiAoIW1fY29u
bmVjdGlvbiB8fCAhbV9jb25uZWN0aW9uLT5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47
CisgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5nbGV0b24oKS5ncmFudFNhbmRib3hFeHRlbnNp
b25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhmaWxlTmFtZXMsIFt0aGlzLCBwcm90ZWN0b3Is
IHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXNdKCkgeworICAgICAgICAgICAgaWYgKCFtX2Nv
bm5lY3Rpb24gfHwgIW1fY29ubmVjdGlvbi0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKIAotICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzQ29ubmVjdGlvbjo6RGlkV3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXMocmVxdWVzdElkZW50
aWZpZXIsIGZpbGVOYW1lcyksIDApOworICAgICAgICAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1l
c3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRpZFdyaXRlQmxvYnNUb1RlbXBvcmFy
eUZpbGVzKHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXMpLCAwKTsKKyAgICAgICAgfSk7CiAg
ICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmNwcAppbmRleCA0YjM3ZmFjLi4yMzllOTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yOTMsNiArMjkzLDIxIEBA
IHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Np
b25JRCBzZXNzaW9uSUQpCiAgICAgU2Vzc2lvblRyYWNrZXI6OmRlc3Ryb3lTZXNzaW9uKHNlc3Np
b25JRCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmdyYW50U2FuZGJveEV4dGVuc2lvbnNU
b0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcywg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzdGF0aWMg
dWludDY0X3QgbmV4dFJlcXVlc3RJRDsKKyAgICBtX3NhbmRib3hFeHRlbnNpb25Gb3JCbG9ic0Nv
bXBsZXRpb25IYW5kbGVycy5zZXQoKytuZXh0UmVxdWVzdElELCBjb21wbGV0aW9uSGFuZGxlcik7
CisKKyAgICBwYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzc1Byb3h5OjpHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JC
bG9icyhuZXh0UmVxdWVzdElELCBmaWxlbmFtZXMpLCAwKTsKK30KKwordm9pZCBOZXR3b3JrUHJv
Y2Vzczo6ZGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMo
dWludDY0X3QgcmVxdWVzdElEKQoreworICAgIGF1dG8gaGFuZGxlciA9IG1fc2FuZGJveEV4dGVu
c2lvbkZvckJsb2JzQ29tcGxldGlvbkhhbmRsZXJzLnRha2UocmVxdWVzdElEKTsKKyAgICBpZiAo
aGFuZGxlcikKKyAgICAgICAgaGFuZGxlcigpOworfQorCiBzdGF0aWMgdm9pZCBmZXRjaERpc2tD
YWNoZUVudHJpZXMoU2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0
Y2hPcHRpb24+IGZldGNoT3B0aW9ucywgc3RkOjpmdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0
ZURhdGE6OkVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShORVRXT1JL
X0NBQ0hFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmgKaW5kZXggZTA3NTgzZC4uMzk4MmM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAg
ICAgdm9pZCBlbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7
CiAKKyAgICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJs
b2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcywgc3RkOjpmdW5jdGlvbjx2b2lkICgp
PiBjb21wbGV0aW9uSGFuZGxlcik7CisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Byb2Nlc3MoKTsK
ICAgICB+TmV0d29ya1Byb2Nlc3MoKTsKQEAgLTE3OCw2ICsxODAsOCBAQCBwcml2YXRlOgogICAg
IHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NTdGF0aXN0aWNzKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwog
ICAgIHZvaWQgY2xlYXJDYWNoZUZvckFsbE9yaWdpbnModWludDMyX3QgY2FjaGVzVG9DbGVhcik7
CiAKKyAgICB2b2lkIGRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0Zv
ckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisKICNpZiBVU0UoU09VUCkKICAgICB2b2lkIHNl
dElnbm9yZVRMU0Vycm9ycyhib29sKTsKICAgICB2b2lkIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXND
aGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CkBAIC0yMDAsNiArMjA0LDggQEAgcHJpdmF0
ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIHN0ZDo6dW5pcXVlX3B0cjxOZXR3
b3JrUHJvY2Vzc1N1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gTmV0d29ya1Byb2Nl
c3NTdXBwbGVtZW50TWFwOwogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudE1hcCBtX3N1cHBs
ZW1lbnRzOwogCisgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPj4g
bV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnM7CisKICNpZiBQTEFU
Rk9STShDT0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29j
b2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMu
aW4gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbgppbmRleCAzYzQ5OTkxLi44OWYyNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNjcsNCAr
NjcsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAg
UHJlcGFyZVRvU3VzcGVuZCgpCiAgICAgQ2FuY2VsUHJlcGFyZVRvU3VzcGVuZCgpCiAgICAgUHJv
Y2Vzc0RpZFJlc3VtZSgpCisKKyAgICBEaWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFz
ZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmlu
ZGV4IGJiMDQ4MjIuLjQ5NTkzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yOCw5ICsyOCwxMSBA
QAogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUg
IkN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJEYXRhYmFz
ZVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAi
TmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIK
ICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9v
bC5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCkBAIC0yNjksNiArMjcxLDE5IEBAIHZvaWQg
TmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKHVpbnQ2
NF90IGNhbGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vz
c1Byb3h5OjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1
aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBT
YW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRlbnNpb25zOworICAgIGV4dGVuc2lvbnMu
YWxsb2NhdGUocGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhdGhz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIFJlYWRXcml0ZSBpcyByZXF1aXJlZCBmb3IgY3Jl
YXRpbmcgaGFyZCBsaW5rcyBhcyB3ZWxsIGFzIGRlbGV0aW5nIHRoZSB0ZW1wb3JhcnkgZmlsZSwg
d2hpY2ggdGhlIERhdGFiYXNlUHJvY2VzcyB3aWxsIGRvLgorICAgICAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGUocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlJlYWRXcml0ZSwg
ZXh0ZW5zaW9uc1tpXSk7CisgICAgfQorCisgICAgbV9wcm9jZXNzUG9vbC5zZW5kVG9EYXRhYmFz
ZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3M6
OkdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhwYXRocywgZXh0ZW5zaW9ucykpOworICAg
IGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpZEdyYW50U2Fu
ZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHJlcXVlc3RJRCksIDApOwor
fQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNz
TGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlv
bklkZW50aWZpZXIpCiB7CiAgICAgQ2hpbGRQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGlu
ZyhsYXVuY2hlciwgY29ubmVjdGlvbklkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDZhZTU0
NzQuLjA5MzA5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTEwNiw2ICsxMDYsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZGlkRmV0Y2hXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBX
ZWJzaXRlRGF0YSYpOwogICAgIHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2Fs
bGJhY2tJRCk7CiAgICAgdm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0
X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFz
ZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBwYXRocyk7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlhZ25vc3RpY01lc3NhZ2UodWludDY0X3Qg
cGFnZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24p
OwogICAgIHZvaWQgbG9nU2FtcGxlZERpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh1aW50NjRf
dCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlv
biwgdWludDMyX3QgcmVzdWx0KTsKICAgICB2b2lkIGxvZ1NhbXBsZWREaWFnbm9zdGljTWVzc2Fn
ZVdpdGhWYWx1ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQ
cm94eS5tZXNzYWdlcy5pbgppbmRleCBkYzkzYjg0Li40N2VmNjc0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNz
UHJveHkubWVzc2FnZXMuaW4KQEAgLTI5LDYgKzI5LDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1By
b2Nlc3NQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGlkRGVsZXRlV2Vic2l0ZURhdGEodWlu
dDY0X3QgY2FsbGJhY2tJRCkKICAgICBEaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWlu
dDY0X3QgY2FsbGJhY2tJRCkKIAorICAgIEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNl
UHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgVmVjdG9yPFN0cmluZz4gcGF0aHMp
CisKICAgICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQoKQogICAgIFNldElzSG9sZGluZ0xvY2tlZEZp
bGVzKGJvb2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMpCiAK
</data>
<flag name="review"
          id="300211"
          type_id="1"
          status="+"
          setter="achristensen"
    />
    <flag name="commit-queue"
          id="300212"
          type_id="3"
          status="-"
          setter="achristensen"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275930</attachid>
            <date>2016-04-07 14:09:13 -0700</date>
            <delta_ts>2016-04-07 16:19:52 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>42492</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYjUwMjk0Li5hOGM3M2U0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIg
QEAKKzIwMTYtMDQtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFdyaXRlIGJsb2JzIHRvIHRlbXBvcmFyeSBm
aWxlcyBhbmQgbW92ZSB0aGVtIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIHdoZW4gc3RvcmluZyB0
aGVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbiAoYW5kIC4uLikKKwor
ICAgICAgICBObyBuZXcgdGVzdHMgKE5vIHRlc3RhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciB5ZXQs
IGN1cnJlbnQgdGVzdHMgcGFzcykuCisKKyAgICAgICAgV2hlbiBhc2tlZCB0byBzdG9yZSBhIEJs
b2IgKGluY2x1ZGluZyBGaWxlcykgaW4gSW5kZXhlZERCLCB0aGUgQmxvYiBpcyB3cml0dGVuIG91
dCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAgICAgICAKKyAgICAgICAgVGhlbiB3aGVuIHRoZSBw
dXRPckFkZCByZXF1ZXN0IGlzIHJlY2VpdmVkIGJ5IElEQlNlcnZlciBpdCBpbmNsdWRlcyBhIGxp
c3Qgb2YgYmxvYlVSTHMgYW5kIHRoZWlyIG1hcHBpbmdzCisgICAgICAgIHRvIHRlbXBvcmFyeSBm
aWxlcy4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIGFzIHBhcnQgb2Ygc3RvcmluZyB0aGUg
QmxvYiB2YWx1ZSBpbiB0aGUgZGF0YWJhc2UsIHRob3NlIHRlbXBvcmFyeSBmaWxlcyBhcmUgbW92
ZWQgaW4gdG8gcGxhY2UKKyAgICAgICAgdW5kZXIgdGhlIEluZGV4ZWREQiBkaXJlY3RvcnkgZm9y
IHN0b3JhZ2UgYW5kIGxhdGVyIHJldHJpZXZhbC4KKyAgICAgICAgCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCVmFsdWU6OklE
QlZhbHVlKToKKyAgICAgICAgCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5n
U3RvcmVGaWxlSGFuZGxlcjo6fklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKToKKyAgICAgICAg
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAKKyAgICAgICAg
KiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6YmxvYlJlY29yZHNUYWJsZVNjaGVtYSk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpibG9iRmlsZXNUYWJsZVNjaGVtYSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0ZXJuYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpT
UUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRh
YmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmZpbGVIYW5kbGVyKToKKyAgICAgICAgCisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCVHJhbnNhY3Rpb246OmNvbW1pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQlRyYW5zYWN0aW9uOjptb3ZlQmxvYkZp
bGVzSWZOZWNlc3NhcnkpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJU
cmFuc2FjdGlvbjo6YWJvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJ
REJUcmFuc2FjdGlvbjo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJUcmFuc2FjdGlvbjo6YWRkQmxvYkZpbGUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAKKyAgICAgICAgKiBi
aW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJMc0lzb2xhdGVkQ29weSk6CisgICAgICAgICog
YmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmg6CisgICAgICAgIAorICAgICAgICAq
IHBsYXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3Rl
bUd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXJkTGlua09yQ29weUZpbGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpoYXJkTGlua09yQ29weUZpbGUpOgorCiAyMDE2LTA0LTA2ICBCcmFkeSBFaWRzb24gIDxiZWlk
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm4gSURCOiBNYWtlIHN1cmUgU1FMaXRlIGJh
Y2tpbmcgc3RvcmUgcmVjb3JkcyBoYXZlIGEgSU5URUdFUiBQUklNQVJZIEtFWSBjb2x1bW4uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAKaW5kZXggZjFk
ZWUxMi4uYjZjZjE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlZhbHVlLmNwcApAQCAtMzksNiArMzksNyBAQCBJREJWYWx1ZTo6SURCVmFsdWUoKQogSURCVmFs
dWU6OklEQlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCiAg
ICAgOiBtX2RhdGEoVGhyZWFkU2FmZURhdGFCdWZmZXI6OmNvcHlWZWN0b3Ioc2NyaXB0VmFsdWUu
ZGF0YSgpKSkKIHsKKyAgICBtX2Jsb2JVUkxzID0gc2NyaXB0VmFsdWUuYmxvYlVSTHNJc29sYXRl
ZENvcHkoKTsKIH0KIAogSURCVmFsdWU6OklEQlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNTI5
NGExNy4uZDY4MzNjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaApAQCAtNTAsNiArNTAsMTMgQEAgZW51
bSBjbGFzcyBJbmRleFJlY29yZFR5cGU7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCitjbGFz
cyBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB+SURC
QmFja2luZ1N0b3JlRmlsZUhhbmRsZXIoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZv
ckZpbGVBY2Nlc3MoY29uc3QgU3RyaW5nJiBwYXRoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGZp
bGVBY2Nlc3NDb21wbGV0ZShjb25zdCBTdHJpbmcmIHBhdGgpID0gMDsKK307CisKIGNsYXNzIElE
QkJhY2tpbmdTdG9yZSB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkg
eyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuY3BwCmluZGV4IDk5YTNkNDcuLjgzYWQyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC00NCw5
ICs0NCw5IEBAIFJlZjxJREJTZXJ2ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKCkKICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoKSk7CiB9CiAKLVJlZjxJREJTZXJ2ZXI+IElEQlNlcnZl
cjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQorUmVmPElEQlNl
cnZlcj4gSURCU2VydmVyOjpjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKiBmaWxlSGFuZGxlcikKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoZGF0YWJhc2VEaXJlY3RvcnlQYXRoKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgZmls
ZUhhbmRsZXIpKTsKIH0KIAogSURCU2VydmVyOjpJREJTZXJ2ZXIoKQpAQCAtNTUsOCArNTUsOSBA
QCBJREJTZXJ2ZXI6OklEQlNlcnZlcigpCiAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJ
REJTZXJ2ZXI6OmRhdGFiYXNlVGhyZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2Vy
dmVyIik7CiB9CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VE
aXJlY3RvcnlQYXRoKQorSURCU2VydmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFz
ZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKiBmaWxlSGFuZGxlcikK
ICAgICA6IG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKKyAg
ICAsIG1fYmFja2luZ1N0b3JlRmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCiB7CiAgICAgTE9HKElu
ZGV4ZWREQiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURpcmVjdG9y
eVBhdGgudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTEyMCw3ICsxMjEsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8SURCQmFja2luZ1N0b3JlPiBJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZQogICAgIGlmIChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZShpZGVudGlmaWVyKTsK
IAotICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4oaWRl
bnRpZmllciwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgIHJldHVybiBzdGQ6Om1ha2Vf
dW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4oaWRlbnRpZmllciwgbV9kYXRhYmFzZURpcmVj
dG9yeVBhdGgsIG1fYmFja2luZ1N0b3JlRmlsZUhhbmRsZXIpOwogfQogCiB2b2lkIElEQlNlcnZl
cjo6b3BlbkRhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApp
bmRleCA5NDU0OWM4Li43YTgzZTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC00OSwxMCArNDksMTIgQEAgY2xhc3Mg
SURCVmFsdWU7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCitjbGFzcyBJREJCYWNraW5nU3Rv
cmVGaWxlSGFuZGxlcjsKKwogY2xhc3MgSURCU2VydmVyIDogcHVibGljIFJlZkNvdW50ZWQ8SURC
U2VydmVyPiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZSgpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBS
ZWY8SURCU2VydmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgs
IElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKiA9IG51bGxwdHIpOwogCiAgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCByZWdpc3RlckNvbm5lY3Rpb24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJlZ2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9u
VG9DbGllbnQmKTsKQEAgLTk0LDcgKzk2LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIElE
QlNlcnZlcigpOwotICAgIElEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aCk7CisgICAgSURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlciopOwogCiAgICAgVW5pcXVlSURCRGF0YWJhc2Um
IGdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVy
Jik7CiAKQEAgLTExNyw2ICsxMTksNyBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8SURCUmVzb3Vy
Y2VJZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4gbV90cmFuc2FjdGlv
bnM7CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGg7CisgICAgSURCQmFja2lu
Z1N0b3JlRmlsZUhhbmRsZXIqIG1fYmFja2luZ1N0b3JlRmlsZUhhbmRsZXI7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggZTU1N2EwZS4uNGY4ZWMyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAK
QEAgLTE2MCw5ICsxNjAsNDMgQEAgc3RhdGljIGNvbnN0IFN0cmluZyYgdjJJbmRleFJlY29yZHNU
YWJsZVNjaGVtYUFsdGVybmF0ZSgpCiAgICAgcmV0dXJuIHYySW5kZXhSZWNvcmRzVGFibGVTY2hl
bWFTdHJpbmc7CiB9CiAKK3N0YXRpYyBjb25zdCBTdHJpbmcgYmxvYlJlY29yZHNUYWJsZVNjaGVt
YShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkKK3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ1JF
QVRFIFRBQkxFICIsIHRhYmxlTmFtZSwgIiAob2JqZWN0U3RvcmVSb3cgSU5URUdFUiBOT1QgTlVM
TCBPTiBDT05GTElDVCBGQUlMLCBibG9iVVJMIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJ
TCkiKTsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYmxvYlJlY29yZHNUYWJsZVNj
aGVtYVN0cmluZyhibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCJCbG9iUmVjb3JkcyIpKTsKKyAgICBy
ZXR1cm4gYmxvYlJlY29yZHNUYWJsZVNjaGVtYVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0
cmluZyYgYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpCit7CisgICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFN0cmluZz4gYmxvYlJlY29yZHNUYWJsZVNjaGVtYVN0cmluZyhibG9iUmVj
b3Jkc1RhYmxlU2NoZW1hKCJcIkJsb2JSZWNvcmRzXCIiKSk7CisgICAgcmV0dXJuIGJsb2JSZWNv
cmRzVGFibGVTY2hlbWFTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcgYmxvYkZpbGVz
VGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VT
dHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUsICIgKGJsb2JVUkwgVEVYVCBOT1QgTlVM
TCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBPTiBDT05GTElDVCBGQUlMLCBmaWxlTmFtZSBURVhU
IE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwgVU5JUVVFIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9
CiAKLVNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJv
b3REaXJlY3RvcnkpCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYmxvYkZpbGVzVGFibGVTY2hl
bWFTdHJpbmcoYmxvYkZpbGVzVGFibGVTY2hlbWEoIkJsb2JGaWxlcyIpKTsKKyAgICByZXR1cm4g
YmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJs
b2JGaWxlc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U3RyaW5nPiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZyhibG9iRmlsZXNUYWJsZVNjaGVt
YSgiXCJCbG9iRmlsZXNcIiIpKTsKKyAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJp
bmc7Cit9CisKK1NRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKiBmaWxlSGFuZGxl
cikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQorICAgICwgbV9maWxlSGFuZGxlcihm
aWxlSGFuZGxlcikKIHsKICAgICBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkgPSBpZGVudGlm
aWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3QoZGF0YWJhc2VSb290RGlyZWN0b3J5
KTsKIH0KQEAgLTI3NSw2ICszMDksNzggQEAgc3RhdGljIGJvb2wgY3JlYXRlT3JNaWdyYXRlUmVj
b3Jkc1RhYmxlSWZOZWNlc3NhcnkoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKQogICAgIHJldHVy
biB0cnVlOwogfQogCitib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9i
VGFibGVzKCkKK3sKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRl
REItPmlzT3BlbigpKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAg
ICAgLy8gRmV0Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQgdGFibGUu
CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1Qg
dHlwZSwgc3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYlJlY29yZHMn
Iik7CisgICAgICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAg
ICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2gg
c2NoZW1hIGZvciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50
LnN0ZXAoKTsKKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBh
dCBhbGwsIGNyZWF0ZSBpdC4uCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RP
TkUpIHsKKyAgICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYSgpKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IGNyZWF0ZSBCbG9iUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3Vy
cmVudFNjaGVtYSA9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzcWxpdGVSZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJF
cnJvciBleGVjdXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNv
cmRzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsK
KyAgICB9CisKKyAgICBpZiAoY3VycmVudFNjaGVtYSAhPSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1h
KCkgJiYgY3VycmVudFNjaGVtYSAhPSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIEJsb2JSZWNvcmRzIHRhYmxlIHNjaGVtYSBm
b3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICAv
LyBGZXRjaCB0aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBibG9iIGZpbGUgdGFibGUuCisgICAg
ICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwg
c3FsIEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYkZpbGVzJyIpOworICAg
ICAgICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBm
b3IgdGhlIEJsb2JGaWxlcyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwor
CisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIEJsb2JGaWxlcyB0YWJsZSBhdCBhbGwsIGNyZWF0
ZSBpdCBhbmQgdGhlbiBiYWlsLgorICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9E
T05FKSB7CisgICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JG
aWxlc1RhYmxlU2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgY3JlYXRlIEJsb2JGaWxlcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9S
T1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0
byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iRmlsZXMgdGFibGUuIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVt
ZW50LmdldENvbHVtblRleHQoMSk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0g
YmxvYkZpbGVzVGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxl
U2NoZW1hQWx0ZXJuYXRlKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIEJsb2JGaWxl
cyB0YWJsZSBzY2hlbWEgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCiBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJl
VmFsaWRSZWNvcmRzVGFibGUoKQogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKQEAgLTYxMiw2
ICs3MTgsMTIgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlz
aERhdGFiYXNlSW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8KICAgICAgICAgcmV0dXJuIHsgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJFcnJvciBjcmVh
dGluZyBvciBtaWdyYXRpbmcgSW5kZXggUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpIH07CiAg
ICAgfQogCisgICAgaWYgKCFlbnN1cmVWYWxpZEJsb2JUYWJsZXMoKSkgeworICAgICAgICBMT0df
RVJST1IoIkVycm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRhYmxlcyBp
biBkYXRhYmFzZSIpOworICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJF
cnJvciBjcmVhdGluZyBvciBjb25maXJtaW5nIEJsb2IgUmVjb3JkcyB0YWJsZXMgaW4gZGF0YWJh
c2UiKSB9OworICAgIH0KKwogICAgIGF1dG8gZGF0YWJhc2VJbmZvID0gZXh0cmFjdEV4aXN0aW5n
RGF0YWJhc2VJbmZvKCk7CiAgICAgaWYgKCFkYXRhYmFzZUluZm8pCiAgICAgICAgIGRhdGFiYXNl
SW5mbyA9IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbygpOwpAQCAtMTMwMCwx
MyArMTQxMiwxNCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbElu
ZGV4ZXNGb3JBZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgIHJldHVybiBlcnJvcjsK
IH0KIAotSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURC
UmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVj
dFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBj
b25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjph
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZp
ZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJL
ZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxl
cykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNv
cmQgLSBrZXkgJXMsIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIGtleURhdGEubG9nZ2luZ1N0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCkpOwogCiAgICAg
QVNTRVJUKG1fc3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAg
ICAgQVNTRVJUKHZhbHVlLmRhdGEoKSk7CisgICAgQVNTRVJUKGJsb2JVUkxzLnNpemUoKSA9PSBi
bG9iRmlsZXMuc2l6ZSgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlv
bnMuZ2V0KHRyYW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAh
dHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewpAQCAtMTMyMyw2ICsxNDM2LDggQEAgSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVu
dGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VyaWFsaXpl
IElEQktleSB0byBiZSBzdG9yZWQgaW4gYW4gb2JqZWN0IHN0b3JlIik7CiAgICAgICAgIHJldHVy
biB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5h
YmxlIHRvIHNlcmlhbGl6ZSBJREJLZXkgdG8gYmUgc3RvcmVkIGluIGFuIG9iamVjdCBzdG9yZSIp
IH07CiAgICAgfQorCisgICAgaW50NjRfdCByZWNvcmRJRCA9IDA7CiAgICAgewogICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRP
IFJlY29yZHMgVkFMVUVTICg/LCBDQVNUKD8gQVMgVEVYVCksID8sIE5VTEwpOyIpKTsKICAgICAg
ICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCkBAIC0xMzMzLDYgKzE0NDgsOCBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qg
cHV0IHJlY29yZCBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiIGluIFJlY29yZHMgdGFibGUg
KCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVy
biB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5h
YmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiKSB9OwogICAgICAgICB9CisKKyAg
ICAgICAgcmVjb3JkSUQgPSBtX3NxbGl0ZURCLT5sYXN0SW5zZXJ0Um93SUQoKTsKICAgICB9CiAK
ICAgICBhdXRvIGVycm9yID0gdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChvYmplY3RTdG9y
ZUluZm8sIGtleURhdGEsIHZhbHVlKTsKQEAgLTEzNDgsNiArMTQ2NSw1NSBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aQogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBibG9iVVJMcy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiB1cmwgPSBibG9iVVJM
c1tpXTsKKyAgICAgICAgeworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxp
dGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBCbG9iUmVjb3JkcyBWQUxVRVMgKD8sID8p
OyIpKTsKKyAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgICAgIHx8IHNxbC5iaW5kSW50NjQoMSwgcmVjb3JkSUQpICE9IFNRTElURV9PSworICAg
ICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCB1cmwpICE9IFNRTElURV9PSworICAgICAg
ICAgICAgICAgIHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2UiKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVy
cm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJh
c2UiKSB9OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludDY0X3QgcG90ZW50
aWFsRmlsZU5hbWVJbnRlZ2VyID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CisKKyAg
ICAgICAgLy8gSWYgd2UgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBub3Ro
aW5nIGxlZnQgdG8gZG8uCisgICAgICAgIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBz
cWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGZpbGVOYW1lIEZST00gQmxvYkZp
bGVzIFdIRVJFIGJsb2JVUkwgPSA/OyIpKTsKKyAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgp
ICE9IFNRTElURV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCB1cmwpICE9
IFNRTElURV9PSykgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1p
bmUgQmxvYiBmaWxlbmFtZXMgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJs
ZSB0byBleGFtaW5lIEJsb2IgZmlsZW5hbWVzIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0ICE9IFNRTElURV9ST1cgJiYgcmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAg
ICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhhbWluZSBCbG9iIGZpbGVuYW1lcyBp
biBkYXRhYmFzZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBm
aWxlbmFtZXMgaW4gZGF0YWJhc2UiKSB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBXZSBkb24ndCBhbHJlYWR5IGhhdmUgYSBmaWxlIGZvciB0aGlz
IGJsb2JVUkwsIHNvIGNvbW1pdCBvdXIgZmlsZSBhcyBhIHVuaXF1ZSBmaWxlbmFtZQorICAgICAg
ICBTdHJpbmcgc3RvcmVkRmlsZW5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiJSIgUFJJZDY0ICIuYmxv
YiIsIHBvdGVudGlhbEZpbGVOYW1lSW50ZWdlcik7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNR
TGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8g
QmxvYkZpbGVzIFZBTFVFUyAoPywgPyk7IikpOworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJl
KCkgIT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIHVybCkg
IT0gU1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIHN0b3JlZEZp
bGVuYW1lKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNR
TElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVjb3Jk
IEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJs
ZSB0byByZWNvcmQgQmxvYiBmaWxlIHJlY29yZCBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi0+YWRkQmxvYkZpbGUoYmxvYkZp
bGVzW2ldLCBzdG9yZWRGaWxlbmFtZSk7CisgICAgfQorCiAgICAgdHJhbnNhY3Rpb24tPm5vdGlm
eUN1cnNvcnNPZkNoYW5nZXMob2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKICAgICBy
ZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggN2YyMzkyYS4u
NzMzYzdlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtNDcsNyArNDcsNyBA
QCBjbGFzcyBTUUxpdGVJREJDdXJzb3I7CiAKIGNsYXNzIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6
IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNl
Um9vdERpcmVjdG9yeSk7CisgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJC
YWNraW5nU3RvcmVGaWxlSGFuZGxlciopOwogICAgIAogICAgIH5TUUxpdGVJREJCYWNraW5nU3Rv
cmUoKSBmaW5hbDsKIApAQCAtODEsMTMgKzgxLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdW5y
ZWdpc3RlckN1cnNvcihTUUxpdGVJREJDdXJzb3ImKTsKIAorICAgIFN0cmluZyBmdWxsRGF0YWJh
c2VEaXJlY3RvcnkoKSBjb25zdDsKKworICAgIElEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyKiBm
aWxlSGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZUhhbmRsZXI7IH0KKwogcHJpdmF0ZToK
ICAgICBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFzZU5hbWUoKSBjb25zdDsKLSAgICBTdHJpbmcg
ZnVsbERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZVBh
dGgoKSBjb25zdDsKIAogICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKICAgICBi
b29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKKyAgICBib29sIGVuc3VyZVZhbGlk
QmxvYlRhYmxlcygpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IGNyZWF0
ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbygpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
REJEYXRhYmFzZUluZm8+IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5mbygpOwogCkBAIC0xMTgs
NiArMTIyLDggQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxKU0M6OlZNPiBtX3ZtOwogICAgIEpT
Qzo6U3Ryb25nPEpTQzo6SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OworCisgICAgSURC
QmFja2luZ1N0b3JlRmlsZUhhbmRsZXIqIG1fZmlsZUhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IGRjYmUz
MzEuLjNiMmU3ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcApAQCAtMjcsNiAr
MjcsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJGaWxl
U3lzdGVtLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIkluZGV4ZWRE
Qi5oIgogI2luY2x1ZGUgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIgpAQCAtNzUsMTIgKzc2LDQ0
IEBAIElEQkVycm9yIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQoKQogICAgIGlmIChtX3Nx
bGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybiB7IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGNvbW1p
dCBTUUxpdGUgdHJhbnNhY3Rpb24gaW4gZGF0YWJhc2UgYmFja2VuZCIpIH07CiAKKyAgICBtb3Zl
QmxvYkZpbGVzSWZOZWNlc3NhcnkoKTsKKwogICAgIHJlc2V0KCk7CiAgICAgcmV0dXJuIHsgfTsK
IH0KIAordm9pZCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6bW92ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5
KCkKK3sKKyAgICBTdHJpbmcgZGF0YWJhc2VEaXJlY3RvcnkgPSBtX2JhY2tpbmdTdG9yZS5mdWxs
RGF0YWJhc2VEaXJlY3RvcnkoKTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9ibG9iVGVtcG9y
YXJ5QW5kU3RvcmVkRmlsZW5hbWVzKSB7CisgICAgICAgIGF1dG8qIGZpbGVIYW5kbGVyID0gbV9i
YWNraW5nU3RvcmUuZmlsZUhhbmRsZXIoKTsKKyAgICAgICAgaWYgKGZpbGVIYW5kbGVyKQorICAg
ICAgICAgICAgZmlsZUhhbmRsZXItPnByZXBhcmVGb3JGaWxlQWNjZXNzKGVudHJ5LmZpcnN0KTsK
KworICAgICAgICBpZiAoIWhhcmRMaW5rT3JDb3B5RmlsZShlbnRyeS5maXJzdCwgcGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5LCBlbnRyeS5zZWNvbmQpKSkKKyAgICAg
ICAgICAgIExPR19FUlJPUigiRmFpbGVkIHRvIGxpbmsvY29weSB0ZW1wb3JhcnkgYmxvYiBmaWxl
ICclcycgdG8gbG9jYXRpb24gJyVzJyIsIGVudHJ5LmZpcnN0LnV0ZjgoKS5kYXRhKCksIHBhdGhC
eUFwcGVuZGluZ0NvbXBvbmVudChkYXRhYmFzZURpcmVjdG9yeSwgZW50cnkuc2Vjb25kKS51dGY4
KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoZmlsZUhhbmRsZXIpCisgICAgICAgICAgICBmaWxl
SGFuZGxlci0+ZmlsZUFjY2Vzc0NvbXBsZXRlKGVudHJ5LmZpcnN0KTsKKyAgICB9CisKKyAgICBt
X2Jsb2JUZW1wb3JhcnlBbmRTdG9yZWRGaWxlbmFtZXMuY2xlYXIoKTsKK30KKwogSURCRXJyb3Ig
U1FMaXRlSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzKSB7CisgICAgICAgIGlmIChhdXRvKiBm
aWxlSGFuZGxlciA9IG1fYmFja2luZ1N0b3JlLmZpbGVIYW5kbGVyKCkpIHsKKyAgICAgICAgICAg
IGZpbGVIYW5kbGVyLT5wcmVwYXJlRm9yRmlsZUFjY2VzcyhlbnRyeS5maXJzdCk7CisgICAgICAg
ICAgICBmaWxlSGFuZGxlci0+ZmlsZUFjY2Vzc0NvbXBsZXRlKGVudHJ5LmZpcnN0KTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghZGVsZXRlRmlsZShlbnRyeS5maXJzdCkpCisg
ICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gZGVsZXRlIHRlbXBvcmFyeSBibG9i
IGZpbGUgJyVzJyIsIGVudHJ5LmZpcnN0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmNsZWFyKCk7CisKICAg
ICBpZiAoIW1fc3FsaXRlVHJhbnNhY3Rpb24gfHwgIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJv
Z3Jlc3MoKSkKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25F
cnJvciwgQVNDSUlMaXRlcmFsKCJObyBTUUxpdGUgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MgdG8g
YWJvcnQiKSB9OwogCkBAIC05Nyw2ICsxMzAsNyBAQCB2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9u
OjpyZXNldCgpCiB7CiAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9IG51bGxwdHI7CiAgICAgY2xl
YXJDdXJzb3JzKCk7CisgICAgbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmNsZWFy
KCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+IFNRTGl0ZUlEQlRyYW5z
YWN0aW9uOjptYXliZU9wZW5CYWNraW5nU3RvcmVDdXJzb3IodWludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgdWludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkKQEAgLTE3
MSw2ICsyMDUsMTEgQEAgYm9vbCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6aW5Qcm9ncmVzcygpIGNv
bnN0CiAgICAgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rpb24gJiYgbV9zcWxpdGVUcmFuc2FjdGlv
bi0+aW5Qcm9ncmVzcygpOwogfQogCit2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjphZGRCbG9i
RmlsZShjb25zdCBTdHJpbmcmIHRlbXBvcmFyeVBhdGgsIGNvbnN0IFN0cmluZyYgc3RvcmVkRmls
ZW5hbWUpCit7CisgICAgbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcih0ZW1wb3JhcnlQYXRoLCBzdG9yZWRGaWxlbmFtZSkpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5z
YWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCVHJhbnNhY3Rpb24uaAppbmRleCAwZWZlNzQ0Li45OGY4MzI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
VHJhbnNhY3Rpb24uaApAQCAtNzEsMTYgKzcxLDIxIEBAIHB1YmxpYzoKIAogICAgIFNRTGl0ZVRy
YW5zYWN0aW9uKiBzcWxpdGVUcmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3FsaXRlVHJh
bnNhY3Rpb24uZ2V0KCk7IH0KIAorICAgIHZvaWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0
ZW1wb3JhcnlQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKTsKKwogcHJpdmF0ZToK
ICAgICB2b2lkIGNsZWFyQ3Vyc29ycygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQg
bW92ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5KCk7CisKICAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9p
bmZvOwogCiAgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAg
ICAgSGFzaE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJ
REJDdXJzb3I+PiBtX2N1cnNvcnM7CiAgICAgSGFzaFNldDxTUUxpdGVJREJDdXJzb3IqPiBtX2Jh
Y2tpbmdTdG9yZUN1cnNvcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+
IG1fYmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNzMwMzI5ZC4uNWU4MzZkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0y
NzQ4LDYgKzI3NDgsMTYgQEAgdWludDMyX3QgU2VyaWFsaXplZFNjcmlwdFZhbHVlOjp3aXJlRm9y
bWF0VmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKK1ZlY3RvcjxT
dHJpbmc+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6YmxvYlVSTHNJc29sYXRlZENvcHkoKSBjb25z
dAoreworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2Jsb2JVUkxzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiB1cmwgOiBtX2Js
b2JVUkxzKQorICAgICAgICByZXN1bHQudW5jaGVja2VkQXBwZW5kKHVybC5pc29sYXRlZENvcHko
KSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0
IElEQlZhbHVlJik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CkBAIC0yNzY5LDYgKzI3NzksNiBAQCB2b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6
d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihzdGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbgogICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcih7ICp0aGlzLCBtX2Jsb2JVUkxzLCBibG9iRmlsZVBhdGhz
IH0pOwogICAgIH0pOwogfQotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKaW5kZXggNjQ1ZGNiOC4uMTVjYmY4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZh
bHVlLmgKQEAgLTg0LDkgKzg0LDExIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFZlY3Rvcjx1aW50
OF90PiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogICAgIGJvb2wgaGFzQmxvYlVS
THMoKSBjb25zdCB7IHJldHVybiAhbV9ibG9iVVJMcy5pc0VtcHR5KCk7IH0KKwogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQorICAgIFZlY3RvcjxTdHJpbmc+IGJsb2JVUkxzSXNvbGF0ZWRD
b3B5KCkgY29uc3Q7CiAgICAgdm9pZCB3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKHN0ZDo6
ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4gY29tcGxldGlvbkhhbmRsZXIpOwotI2Vu
ZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICAgICBzdGF0aWMgUmVm
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJvbVdpcmVCeXRlcyhWZWN0b3I8dWludDhf
dD4mJiBkYXRhKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Zp
bGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAppbmRleCAw
M2FmZmZlLi5mMWE3OGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oCkBAIC0x
ODEsNiArMTgxLDkgQEAgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpOwogLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB3cml0ZSB3YXMgc3Vj
Y2Vzc2Z1bCwgZmFsc2UgaWYgaXQgd2FzIG5vdC4KIGJvb2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9G
aWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgUGxhdGZvcm1GaWxlSGFuZGxlJik7CiAKKy8v
IEhhcmQgbGlua3MgYSBmaWxlIGlmIHBvc3NpYmxlLCBjb3BpZXMgaXQgaWYgbm90LgorYm9vbCBo
YXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVz
dGluYXRpb24pOworCiAjaWYgVVNFKEZJTEVfTE9DSykKIGJvb2wgbG9ja0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlLCBGaWxlTG9ja01vZGUpOwogYm9vbCB1bmxvY2tGaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3Rl
bUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAK
aW5kZXggOTE1ZWE2OS4uMWQ4ZWQ3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0
ay9GaWxlU3lzdGVtR3RrLmNwcApAQCAtMzY0LDQgKzM2NCwxMSBAQCBib29sIHVubG9hZE1vZHVs
ZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCiAgICAgcmV0dXJuIGdfbW9kdWxlX2Nsb3NlKG1vZHVs
ZSk7CiAjZW5kaWYKIH0KKworYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiwg
Y29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50CisgICAgcmV0dXJuIGZh
bHNlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9G
aWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5
c3RlbVBPU0lYLmNwcAppbmRleCBmZTI3NmIwLi4yMWEzNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAKQEAgLTM0Niw0ICszNDYs
MzEgQEAgZW5kOgogfQogI2VuZGlmCiAKK2Jvb2wgaGFyZExpbmtPckNvcHlGaWxlKGNvbnN0IFN0
cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcmIGRlc3RpbmF0aW9uKQoreworICAgIGlmIChmaWxl
RXhpc3RzKGRlc3RpbmF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1N0cmlu
ZyBmc1NvdXJjZSA9IGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbihzb3VyY2UpOworICAgIGlmICgh
ZnNTb3VyY2UuZGF0YSgpIHx8IGZzU291cmNlLmRhdGEoKVswXSA9PSAnXDAnKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzRGVzdGluYXRpb24gPSBmaWxlU3lzdGVtUmVw
cmVzZW50YXRpb24oZGVzdGluYXRpb24pOworICAgIGlmICghZnNEZXN0aW5hdGlvbi5kYXRhKCkg
fHwgZnNEZXN0aW5hdGlvbi5kYXRhKClbMF0gPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaW50IHJlc3VsdCA9IGxpbmsoZnNTb3VyY2UuZGF0YSgpLCBmc0Rlc3RpbmF0aW9u
LmRhdGEoKSk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
Ly8gSGFyZCBsaW5rIGZhaWxlZC4gUGVyZm9ybSBhIGNvcHkgaW5zdGVhZC4KKyAgICBhdXRvIGhh
bmRsZSA9IG9wZW5GaWxlKGRlc3RpbmF0aW9uLCBPcGVuRm9yV3JpdGUpOworICAgIGlmICghaXNI
YW5kbGVWYWxpZChoYW5kbGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGFw
cGVuZFJlc3VsdCA9IGFwcGVuZEZpbGVDb250ZW50c1RvRmlsZUhhbmRsZShzb3VyY2UsIGhhbmRs
ZSk7CisgICAgY2xvc2VGaWxlKGhhbmRsZSk7CisgICAgcmV0dXJuIGFwcGVuZFJlc3VsdDsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDZkMDNhZjUuLjlmODc5OGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MCBAQAorMjAxNi0wNC0wNyAgQnJhZHkgRWlkc29uICA8
YmVpZHNvbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW9kZXJuIElEQiAoQmxvYiBzdXBwb3J0KTog
V3JpdGUgYmxvYnMgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBtb3ZlIHRoZW0gdG8gdGhlIGNvcnJl
Y3QgbG9jYXRpb24gd2hlbiBzdG9yaW5nIHRoZW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYzMjEKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4
IENocmlzdGVuc2VuIChhbmQgLi4uKQorCisgICAgICAgIFRoZSBOZXR3b3JrUHJvY2VzcyB3cml0
ZXMgYSBibG9iIHRvIGEgdGVtcG9yYXJ5IGZpbGUsIHRoZW4gdGVsbHMgdGhlIFVJUHJvY2VzcyB0
byBncmFudCB0aGUgRGF0YWJhc2VQcm9jZXNzCisgICAgICAgIGEgU2FuZGJveCBFeHRlbnNpb24g
dG8gdGhhdCBwYXRoLgorICAgICAgICAKKyAgICAgICAgSXQgdGhlbiB0ZWxscyB0aGUgV2ViUHJv
Y2VzcyB0aGUgcGF0aHMgZm9yIHRoZSB0ZW1wb3JhcnkgZmlsZXMsIHdoaWNoIHRoZW4gdGVsbHMg
dGhlIERhdGFiYXNlUHJvY2VzcyB0byBzdG9yZQorICAgICAgICB0aGUgY29udGVudHMgb2YgdGhv
c2UgZmlsZXMgYXMgYmxvYiByZWZlcmVuY2VzIGluIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgCisg
ICAgICAgIFNpbmNlIHRoZSBVSVByb2Nlc3MgaGFkIGFscmVhZHkgZ3JhbnRlZCBpdCBhIFNhbmRi
b3ggRXh0ZW5zaW9uLCBpdCBpcyBhYmxlIHRvIGRvIHNvLgorCisgICAgICAgICogRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNlUHJv
Y2Vzczo6aWRiU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpncmFu
dFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYnMpOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVBy
b2Nlc3M6OnByZXBhcmVGb3JGaWxlQWNjZXNzKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQ
cm9jZXNzOjpmaWxlQWNjZXNzQ29tcGxldGUpOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9E
YXRhYmFzZVByb2Nlc3MuaDoKKyAgICAgICAgKiBEYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5l
Y3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9yYXJ5RmlsZXMpOgorCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxv
YnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6ZGlkR3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMpOgorICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3Jr
UHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6
Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMpOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluOgorCiAyMDE2
LTA0LTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgTWFrZSBDTWFrZS1nZW5lcmF0ZWQgYmluYXJpZXMgb24gTWFjIGFibGUgdG8gcnVuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3Bw
CmluZGV4IDljNmFlMDIuLjA1MGMwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFi
YXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBAIC05OCw3ICs5OCw3IEBAIHZvaWQgRGF0
YWJhc2VQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpTdHJpbmdSZWZlCiBJREJTZXJ2ZXI6OklEQlNlcnZlciYgRGF0YWJhc2VQcm9jZXNzOjpp
ZGJTZXJ2ZXIoKQogewogICAgIGlmICghbV9pZGJTZXJ2ZXIpCi0gICAgICAgIG1faWRiU2VydmVy
ID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnko
KSk7CisgICAgICAgIG1faWRiU2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSwgJkRhdGFiYXNlUHJvY2Vzczo6c2luZ2xldG9uKCkp
OwogCiAgICAgcmV0dXJuICptX2lkYlNlcnZlcjsKIH0KQEAgLTMwNSw2ICszMDUsMzMgQEAgdm9p
ZCBEYXRhYmFzZVByb2Nlc3M6OmRlbGV0ZVdlYnNpdGVEYXRhRm9yT3JpZ2lucyhXZWJDb3JlOjpT
ZXNzaW9uSUQsIE9wdGlvblNldDwKICNlbmRpZgogfQogCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6
Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cywgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmIGhhbmRsZXMpCit7CisgICAg
QVNTRVJUKHBhdGhzLnNpemUoKSA9PSBoYW5kbGVzLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHBhdGhzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0g
bV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zLmFkZChwYXRoc1tpXSwgU2FuZGJv
eEV4dGVuc2lvbjo6Y3JlYXRlKGhhbmRsZXNbaV0pKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChy
ZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKyAgICB9Cit9CisKK3ZvaWQgRGF0YWJhc2VQcm9j
ZXNzOjpwcmVwYXJlRm9yRmlsZUFjY2Vzcyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgaWYg
KGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zLmdl
dChwYXRoKSkKKyAgICAgICAgZXh0ZW5zaW9uLT5jb25zdW1lKCk7Cit9CisKK3ZvaWQgRGF0YWJh
c2VQcm9jZXNzOjpmaWxlQWNjZXNzQ29tcGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAg
IC8vIFdlJ3ZlIGVpdGhlciBoYXJkIGxpbmtlZCB0aGUgdGVtcG9yYXJ5IGJsb2IgZmlsZSB0byB0
aGUgZGF0YWJhc2UgZGlyZWN0b3J5LCBjb3BpZWQgaXQgdGhlcmUsCisgICAgLy8gb3IgdGhlIHRy
YW5zYWN0aW9uIGlzIGJlaW5nIGFib3J0ZWQuCisgICAgLy8gSW4gYW55IG9mIHRob3NlIGNhc2Vz
LCB3ZSBjYW4gZGVsZXRlIHRoZSB0ZW1wb3JhcnkgYmxvYiBmaWxlIG5vdy4KKyAgICBkZWxldGVG
aWxlKHBhdGgpOworCisgICAgaWYgKGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5Rmls
ZVNhbmRib3hFeHRlbnNpb25zLnRha2UocGF0aCkpCisgICAgICAgIGV4dGVuc2lvbi0+cmV2b2tl
KCk7Cit9CisKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIFZlY3RvcjxSZWZQdHI8V2Vi
Q29yZTo6U2VjdXJpdHlPcmlnaW4+PiBEYXRhYmFzZVByb2Nlc3M6OmluZGV4ZWREYXRhYmFzZU9y
aWdpbnMoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0Rh
dGFiYXNlUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNl
UHJvY2Vzcy5oCmluZGV4IDY4OTI1NGYuLmFkZGVkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKQEAgLTI5LDYgKzI5LDggQEAKICNp
ZiBFTkFCTEUoREFUQUJBU0VfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgor
I2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lEQkJhY2tp
bmdTdG9yZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSURCU2VydmVyLmg+CiAjaW5jbHVkZSA8V2Vi
Q29yZS9VbmlxdWVJREJEYXRhYmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5o
PgpAQCAtNDUsNyArNDcsNyBAQCBjbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb247
CiBlbnVtIGNsYXNzIFdlYnNpdGVEYXRhVHlwZTsKIHN0cnVjdCBEYXRhYmFzZVByb2Nlc3NDcmVh
dGlvblBhcmFtZXRlcnM7CiAKLWNsYXNzIERhdGFiYXNlUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFBy
b2Nlc3MgeworY2xhc3MgRGF0YWJhc2VQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHVi
bGljIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIgewogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNz
IE5ldmVyRGVzdHJveWVkPERhdGFiYXNlUHJvY2Vzcz47CiBwdWJsaWM6CkBAIC02NSw2ICs2Nywx
MCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4pOwogCisgICAgLy8gV2ViQ29yZTo6SURCU2VydmVy
OjpJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlcgorICAgIHZvaWQgcHJlcGFyZUZvckZpbGVBY2Nl
c3MoY29uc3QgU3RyaW5nJiBwYXRoKSBmaW5hbDsKKyAgICB2b2lkIGZpbGVBY2Nlc3NDb21wbGV0
ZShjb25zdCBTdHJpbmcmIHBhdGgpIGZpbmFsOworCiBwcml2YXRlOgogICAgIERhdGFiYXNlUHJv
Y2VzcygpOwogCkBAIC05MCw2ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmZXRjaFdlYnNp
dGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vi
c2l0ZURhdGFUeXBlcywgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJz
aXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdl
YnNpdGVEYXRhVHlwZXMsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9k
aWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFU
eXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmln
aW5EYXRhPiYgb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNh
bmRib3hFeHRlbnNpb25zRm9yQmxvYnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25z
dCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOwogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IGlu
ZGV4ZWREYXRhYmFzZU9yaWdpbnMoKTsKQEAgLTEwOSw2ICsxMTYsOCBAQCBwcml2YXRlOgogICAg
IFN0cmluZyBtX2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKIAogICAgIFJlZlB0cjxXZWJDb3Jl
OjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4gbV9pZGJTZXJ2ZXI7CisKKyAgICBIYXNoTWFwPFN0cmlu
ZywgUmVmUHRyPFNhbmRib3hFeHRlbnNpb24+PiBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4
dGVuc2lvbnM7CiAjZW5kaWYKIAogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpD
cm9zc1RocmVhZFRhc2s+PiBtX2RhdGFiYXNlVGFza3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRl
eCA0Y2I5ZGEwLi44MmUyNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0Rh
dGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTMyLDYgKzMyLDcg
QEAgbWVzc2FnZXMgLT4gRGF0YWJhc2VQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBGZXRj
aFdlYnNpdGVEYXRhKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJL
aXQ6OldlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgdWludDY0X3QgY2FsbGJhY2tJ
RCkKICAgICBEZWxldGVXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBP
cHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIHN0ZDo6
Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgdWludDY0X3Qg
Y2FsbGJhY2tJRCkKICAgICBEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJz
aXRlRGF0YVR5cGVzLCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5z
LCB1aW50NjRfdCBjYWxsYmFja0lEKQorICAgIEdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9i
cyhWZWN0b3I8U3RyaW5nPiBwYXRocywgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVB
cnJheSBleHRlbnNpb25zKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1Mp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODg3MzU0N2QuLjk4ODczZGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9u
VG9XZWJQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTI5NiwxMCArMjk2LDEyIEBAIHZvaWQg
TmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3M6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVz
KGNvbnN0IFZlY3RvcjxTdHJpCiAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVSZWZlcmVu
Y2VzKQogICAgICAgICAgICAgZmlsZS0+cmV2b2tlRmlsZUFjY2VzcygpOwogCi0gICAgICAgIGlm
ICghbV9jb25uZWN0aW9uIHx8ICFtX2Nvbm5lY3Rpb24tPmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmdyYW50U2FuZGJv
eEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKGZpbGVOYW1lcywgW3RoaXMsIHBy
b3RlY3RvciwgcmVxdWVzdElkZW50aWZpZXIsIGZpbGVOYW1lc10oKSB7CisgICAgICAgICAgICBp
ZiAoIW1fY29ubmVjdGlvbiB8fCAhbV9jb25uZWN0aW9uLT5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0
d29ya1Byb2Nlc3NDb25uZWN0aW9uOjpEaWRXcml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlcyhyZXF1
ZXN0SWRlbnRpZmllciwgZmlsZU5hbWVzKSwgMCk7CisgICAgICAgICAgICBtX2Nvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGlkV3JpdGVCbG9ic1Rv
VGVtcG9yYXJ5RmlsZXMocmVxdWVzdElkZW50aWZpZXIsIGZpbGVOYW1lcyksIDApOworICAgICAg
ICB9KTsKICAgICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDRiMzdmYWMuLjgyYjE0YTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTI5Myw2ICsy
OTMsMjAgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Np
b24oU2Vzc2lvbklEIHNlc3Npb25JRCkKICAgICBTZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Np
b24oc2Vzc2lvbklEKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6Z3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMoY29uc3QgVmVjdG9yPFN0cmluZz4gZmls
ZW5hbWVzLCBzdGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKQoreworICAg
IHN0YXRpYyB1aW50NjRfdCBuZXh0UmVxdWVzdElEOworICAgIG1fc2FuZGJveEV4dGVuc2lvbkZv
ckJsb2JzQ29tcGxldGlvbkhhbmRsZXJzLnNldCgrK25leHRSZXF1ZXN0SUQsIGNvbXBsZXRpb25I
YW5kbGVyKTsKKworICAgIHBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzUHJveHk6OkdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJv
Y2Vzc0ZvckJsb2JzKG5leHRSZXF1ZXN0SUQsIGZpbGVuYW1lcyksIDApOworfQorCit2b2lkIE5l
dHdvcmtQcm9jZXNzOjpkaWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NG
b3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpCit7CisgICAgaWYgKGF1dG8gaGFuZGxlciA9IG1f
c2FuZGJveEV4dGVuc2lvbkZvckJsb2JzQ29tcGxldGlvbkhhbmRsZXJzLnRha2UocmVxdWVzdElE
KSkKKyAgICAgICAgaGFuZGxlcigpOworfQorCiBzdGF0aWMgdm9pZCBmZXRjaERpc2tDYWNoZUVu
dHJpZXMoU2Vzc2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhRmV0Y2hPcHRp
b24+IGZldGNoT3B0aW9ucywgc3RkOjpmdW5jdGlvbjx2b2lkIChWZWN0b3I8V2Vic2l0ZURhdGE6
OkVudHJ5Pik+IGNvbXBsZXRpb25IYW5kbGVyKQogewogI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hF
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5k
ZXggZTA3NTgzZC4uMzk4MmM2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0xMTIsNiArMTEyLDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCBlbnN1cmVQcml2YXRlQnJvd3NpbmdTZXNzaW9uKFdlYkNvcmU6OlNlc3Npb25JRCk7CiAKKyAg
ICB2b2lkIGdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lcywgc3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21w
bGV0aW9uSGFuZGxlcik7CisKIHByaXZhdGU6CiAgICAgTmV0d29ya1Byb2Nlc3MoKTsKICAgICB+
TmV0d29ya1Byb2Nlc3MoKTsKQEAgLTE3OCw2ICsxODAsOCBAQCBwcml2YXRlOgogICAgIHZvaWQg
Z2V0TmV0d29ya1Byb2Nlc3NTdGF0aXN0aWNzKHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAgIHZv
aWQgY2xlYXJDYWNoZUZvckFsbE9yaWdpbnModWludDMyX3QgY2FjaGVzVG9DbGVhcik7CiAKKyAg
ICB2b2lkIGRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2Jz
KHVpbnQ2NF90IHJlcXVlc3RJRCk7CisKICNpZiBVU0UoU09VUCkKICAgICB2b2lkIHNldElnbm9y
ZVRMU0Vycm9ycyhib29sKTsKICAgICB2b2lkIHVzZXJQcmVmZXJyZWRMYW5ndWFnZXNDaGFuZ2Vk
KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CkBAIC0yMDAsNiArMjA0LDggQEAgcHJpdmF0ZToKICAg
ICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIHN0ZDo6dW5pcXVlX3B0cjxOZXR3b3JrUHJv
Y2Vzc1N1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIqPj4gTmV0d29ya1Byb2Nlc3NTdXBw
bGVtZW50TWFwOwogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudE1hcCBtX3N1cHBsZW1lbnRz
OwogCisgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5jdGlvbjx2b2lkICgpPj4gbV9zYW5k
Ym94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnM7CisKICNpZiBQTEFURk9STShD
T0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzQ29jb2EoY29u
c3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpp
bmRleCAzYzQ5OTkxLi44OWYyNDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtNjcsNCArNjcsNiBA
QCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgUHJlcGFy
ZVRvU3VzcGVuZCgpCiAgICAgQ2FuY2VsUHJlcGFyZVRvU3VzcGVuZCgpCiAgICAgUHJvY2Vzc0Rp
ZFJlc3VtZSgpCisKKyAgICBEaWRHcmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nl
c3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCmluZGV4IGJi
MDQ4MjIuLjQ5NTkzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3
b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBAIC0yOCw5ICsyOCwxMSBAQAogCiAj
aW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94eS5oIgogI2luY2x1ZGUgIkN1c3Rv
bVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlICJEYXRhYmFzZVByb2Nl
c3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJveHlNZXNzYWdlcy5oIgogI2luY2x1
ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJzLmgiCiAjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKICNpbmNs
dWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzUG9vbC5oIgog
I2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCkBAIC0yNjksNiArMjcxLDE5IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3NQcm94eTo6ZGlkRGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5
OjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRf
dCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKK3sKKyAgICBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRlbnNpb25zOworICAgIGV4dGVuc2lvbnMuYWxsb2Nh
dGUocGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhdGhzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIC8vIFJlYWRXcml0ZSBpcyByZXF1aXJlZCBmb3IgY3JlYXRpbmcg
aGFyZCBsaW5rcyBhcyB3ZWxsIGFzIGRlbGV0aW5nIHRoZSB0ZW1wb3JhcnkgZmlsZSwgd2hpY2gg
dGhlIERhdGFiYXNlUHJvY2VzcyB3aWxsIGRvLgorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpj
cmVhdGVIYW5kbGUocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNpb246OlJlYWRXcml0ZSwgZXh0ZW5z
aW9uc1tpXSk7CisgICAgfQorCisgICAgbV9wcm9jZXNzUG9vbC5zZW5kVG9EYXRhYmFzZVByb2Nl
c3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpEYXRhYmFzZVByb2Nlc3M6OkdyYW50
U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhwYXRocywgZXh0ZW5zaW9ucykpOworICAgIGNvbm5l
Y3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OkRpZEdyYW50U2FuZGJveEV4
dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHJlcXVlc3RJRCksIDApOworfQorCiB2
b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhQcm9jZXNzTGF1bmNo
ZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgY29ubmVjdGlvbklkZW50
aWZpZXIpCiB7CiAgICAgQ2hpbGRQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExhdW5jaGluZyhsYXVu
Y2hlciwgY29ubmVjdGlvbklkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCmluZGV4IDZhZTU0NzQuLjA5
MzA5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9O
ZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTEwNiw2ICsxMDYsNyBAQCBwcml2YXRlOgogICAgIHZv
aWQgZGlkRmV0Y2hXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lELCBjb25zdCBXZWJzaXRl
RGF0YSYpOwogICAgIHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJ
RCk7CiAgICAgdm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0X3QgY2Fs
bGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nl
c3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cyk7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlhZ25vc3RpY01lc3NhZ2UodWludDY0X3QgcGFnZUlE
LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwogICAg
IHZvaWQgbG9nU2FtcGxlZERpYWdub3N0aWNNZXNzYWdlV2l0aFJlc3VsdCh1aW50NjRfdCBwYWdl
SUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgdWlu
dDMyX3QgcmVzdWx0KTsKICAgICB2b2lkIGxvZ1NhbXBsZWREaWFnbm9zdGljTWVzc2FnZVdpdGhW
YWx1ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3RyaW5n
JiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5t
ZXNzYWdlcy5pbgppbmRleCBkYzkzYjg0Li40N2VmNjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHku
bWVzc2FnZXMuaW4KQEAgLTI5LDYgKzI5LDggQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3NQ
cm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGlkRGVsZXRlV2Vic2l0ZURhdGEodWludDY0X3Qg
Y2FsbGJhY2tJRCkKICAgICBEaWREZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnModWludDY0X3Qg
Y2FsbGJhY2tJRCkKIAorICAgIEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vz
c0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgVmVjdG9yPFN0cmluZz4gcGF0aHMpCisKICAg
ICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQoKQogICAgIFNldElzSG9sZGluZ0xvY2tlZEZpbGVzKGJv
b2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMpCiAK
</data>
<flag name="review"
          id="300224"
          type_id="1"
          status="+"
          setter="aestes"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275952</attachid>
            <date>2016-04-07 16:19:52 -0700</date>
            <delta_ts>2016-04-08 09:00:46 -0700</delta_ts>
            <desc>Patch v3 - Awaiting a potential final review</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>46161</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYjUwMjk0Li43ODFjODJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcg
QEAKKzIwMTYtMDQtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFdyaXRlIGJsb2JzIHRvIHRlbXBvcmFyeSBm
aWxlcyBhbmQgbW92ZSB0aGVtIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIHdoZW4gc3RvcmluZyB0
aGVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbiwgQW5keSBFc3Rlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgKE5vIHRlc3RhYmxlIGNoYW5nZSBpbiBiZWhhdmlvciB5
ZXQsIGN1cnJlbnQgdGVzdHMgcGFzcykuCisKKyAgICAgICAgV2hlbiBhc2tlZCB0byBzdG9yZSBh
IEJsb2IgKGluY2x1ZGluZyBGaWxlcykgaW4gSW5kZXhlZERCLCB0aGUgQmxvYiBpcyB3cml0dGVu
IG91dCB0byBhIHRlbXBvcmFyeSBmaWxlLgorICAgICAgICAKKyAgICAgICAgVGhlbiB3aGVuIHRo
ZSBwdXRPckFkZCByZXF1ZXN0IGlzIHJlY2VpdmVkIGJ5IElEQlNlcnZlciBpdCBpbmNsdWRlcyBh
IGxpc3Qgb2YgYmxvYlVSTHMgYW5kIHRoZWlyIG1hcHBpbmdzCisgICAgICAgIHRvIHRlbXBvcmFy
eSBmaWxlcy4KKyAgICAgICAgCisgICAgICAgIEZpbmFsbHksIGFzIHBhcnQgb2Ygc3RvcmluZyB0
aGUgQmxvYiB2YWx1ZSBpbiB0aGUgZGF0YWJhc2UsIHRob3NlIHRlbXBvcmFyeSBmaWxlcyBhcmUg
bW92ZWQgaW4gdG8gcGxhY2UKKyAgICAgICAgdW5kZXIgdGhlIEluZGV4ZWREQiBkaXJlY3Rvcnkg
Zm9yIHN0b3JhZ2UgYW5kIGxhdGVyIHJldHJpZXZhbC4KKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlZhbHVlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlZhbHVlOjpJREJWYWx1
ZSk6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3Jl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZVRlbXBvcmFy
eUZpbGVIYW5kbGVyOjp+SURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIpOgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpJREJTZXJ2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OmJsb2JSZWNvcmRzVGFibGVTY2hlbWEpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6YmxvYkZpbGVzVGFibGVTY2hlbWEpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjplbnN1cmVWYWxpZEJsb2JUYWJsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRS
ZWNvcmQpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjp0ZW1wb3JhcnlGaWxlSGFuZGxlcik6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6Y29tbWl0KToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U1FMaXRlSURCVHJhbnNhY3Rpb246Om1vdmVCbG9iRmlsZXNJZk5lY2Vz
c2FyeSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQlRyYW5zYWN0aW9u
OjphYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQlRyYW5zYWN0
aW9uOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQlRyYW5z
YWN0aW9uOjphZGRCbG9iRmlsZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmg6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkluUHJvY2Vz
c0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkluUHJv
Y2Vzc0lEQlNlcnZlcjo6YWNjZXNzVG9UZW1wb3JhcnlGaWxlQ29tcGxldGUpOgorICAgICAgICAq
IE1vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaDoKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU6OmJsb2JVUkxzSXNvbGF0ZWRDb3B5KToKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaDoKKworICAgICAgICAqIHBs
YXRmb3JtL0ZpbGVTeXN0ZW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0
ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpoYXJkTGlua09yQ29weUZpbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpo
YXJkTGlua09yQ29weUZpbGUpOgorCiAyMDE2LTA0LTA2ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm4gSURCOiBNYWtlIHN1cmUgU1FMaXRlIGJhY2tp
bmcgc3RvcmUgcmVjb3JkcyBoYXZlIGEgSU5URUdFUiBQUklNQVJZIEtFWSBjb2x1bW4uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAKaW5kZXggZjFkZWUx
Mi4uYjZjZjE4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCVmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZh
bHVlLmNwcApAQCAtMzksNiArMzksNyBAQCBJREJWYWx1ZTo6SURCVmFsdWUoKQogSURCVmFsdWU6
OklEQlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgc2NyaXB0VmFsdWUpCiAgICAg
OiBtX2RhdGEoVGhyZWFkU2FmZURhdGFCdWZmZXI6OmNvcHlWZWN0b3Ioc2NyaXB0VmFsdWUuZGF0
YSgpKSkKIHsKKyAgICBtX2Jsb2JVUkxzID0gc2NyaXB0VmFsdWUuYmxvYlVSTHNJc29sYXRlZENv
cHkoKTsKIH0KIAogSURCVmFsdWU6OklEQlZhbHVlKGNvbnN0IFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSYgc2NyaXB0VmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVj
dG9yPFN0cmluZz4mIGJsb2JGaWxlUGF0aHMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggNTI5NGEx
Ny4uZjkwZTRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaApAQCAtNTAsNiArNTAsMTMgQEAgZW51bSBj
bGFzcyBJbmRleFJlY29yZFR5cGU7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCitjbGFzcyBJ
REJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciB7CitwdWJsaWM6CisgICAgdmlydHVh
bCB+SURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZUZvckFjY2Vzc1RvVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYWNjZXNzVG9UZW1wb3JhcnlGaWxlQ29tcGxldGUoY29u
c3QgU3RyaW5nJiBwYXRoKSA9IDA7Cit9OworCiBjbGFzcyBJREJCYWNraW5nU3RvcmUgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfklEQkJhY2tpbmdTdG9yZSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA5
OWEzZDQ3Li5kMTg5OGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtMzksMjQgKzM5LDI2IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgSURCU2VydmVyIHsKIAotUmVmPElEQlNlcnZlcj4gSURC
U2VydmVyOjpjcmVhdGUoKQorUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpjcmVhdGUoSURCQmFj
a2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQogewotICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IElEQlNlcnZlcigpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
REJTZXJ2ZXIoZmlsZUhhbmRsZXIpKTsKIH0KIAotUmVmPElEQlNlcnZlcj4gSURCU2VydmVyOjpj
cmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCitSZWY8SURCU2VydmVy
PiBJREJTZXJ2ZXI6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwg
SURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQogewotICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFzZURpcmVjdG9yeVBhdGgpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJREJTZXJ2ZXIoZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBmaWxlSGFuZGxlcikpOwogfQogCi1JREJTZXJ2ZXI6OklEQlNlcnZlcigpCitJREJTZXJ2ZXI6
OklEQlNlcnZlcihJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRs
ZXIpCisgICAgOiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyKGZpbGVIYW5kbGVy
KQogewogICAgIExvY2tlcjxMb2NrPiBsb2NrZXIobV9kYXRhYmFzZVRocmVhZENyZWF0aW9uTG9j
ayk7CiAgICAgbV90aHJlYWRJRCA9IGNyZWF0ZVRocmVhZChJREJTZXJ2ZXI6OmRhdGFiYXNlVGhy
ZWFkRW50cnksIHRoaXMsICJJbmRleGVkRGF0YWJhc2UgU2VydmVyIik7CiB9CiAKLUlEQlNlcnZl
cjo6SURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQorSURCU2Vy
dmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElEQkJh
Y2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKICAgICA6IG1fZGF0
YWJhc2VEaXJlY3RvcnlQYXRoKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKKyAgICAsIG1fYmFja2lu
Z1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCiB7CiAgICAgTE9HKEluZGV4
ZWREQiwgIklEQlNlcnZlciBjcmVhdGVkIGF0IHBhdGggJXMiLCBkYXRhYmFzZURpcmVjdG9yeVBh
dGgudXRmOCgpLmRhdGEoKSk7CiAKQEAgLTEyMCw3ICsxMjIsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8
SURCQmFja2luZ1N0b3JlPiBJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZQogICAgIGlmIChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0ZShpZGVudGlmaWVyKTsKIAot
ICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4oaWRlbnRp
ZmllciwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4oaWRlbnRpZmllciwgbV9kYXRhYmFzZURpcmVjdG9y
eVBhdGgsIG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIpOwogfQogCiB2b2lkIElE
QlNlcnZlcjo6b3BlbkRhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJT
ZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuaAppbmRleCA5NDU0OWM4Li42NWEwMmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC00OSwxMCArNDksMTIgQEAg
Y2xhc3MgSURCVmFsdWU7CiAKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCitjbGFzcyBJREJCYWNr
aW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcjsKKwogY2xhc3MgSURCU2VydmVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8SURCU2VydmVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxJREJTZXJ2
ZXI+IGNyZWF0ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOworICAgIHN0YXRpYyBS
ZWY8SURCU2VydmVyPiBjcmVhdGUoSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIm
KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPElEQlNlcnZlcj4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlG
aWxlSGFuZGxlciYpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWdpc3RlckNvbm5lY3Rp
b24oSURCQ29ubmVjdGlvblRvQ2xpZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1bnJl
Z2lzdGVyQ29ubmVjdGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKQEAgLTkzLDggKzk1LDgg
QEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IGNyZWF0ZUJh
Y2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImKTsKIAogcHJpdmF0ZToKLSAg
ICBJREJTZXJ2ZXIoKTsKLSAgICBJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVj
dG9yeVBhdGgpOworICAgIElEQlNlcnZlcihJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlciYpOworICAgIElEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0
aCwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImKTsKIAogICAgIFVuaXF1ZUlE
QkRhdGFiYXNlJiBnZXRPckNyZWF0ZVVuaXF1ZUlEQkRhdGFiYXNlKGNvbnN0IElEQkRhdGFiYXNl
SWRlbnRpZmllciYpOwogCkBAIC0xMTcsNiArMTE5LDcgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFw
PElEQlJlc291cmNlSWRlbnRpZmllciwgVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbio+IG1f
dHJhbnNhY3Rpb25zOwogCiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOworICAg
IElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBtX2JhY2tpbmdTdG9yZVRlbXBv
cmFyeUZpbGVIYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IGU1NTdhMGUuLjhkYmE1NGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0xNjAsOSArMTYwLDQzIEBAIHN0YXRpYyBj
b25zdCBTdHJpbmcmIHYySW5kZXhSZWNvcmRzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQogICAgIHJl
dHVybiB2MkluZGV4UmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOwogfQogCitzdGF0aWMgY29uc3Qg
U3RyaW5nIGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiB0YWJsZU5hbWUpCit7
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJsZU5hbWUsICIgKG9i
amVjdFN0b3JlUm93IElOVEVHRVIgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCwgYmxvYlVSTCBU
RVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJp
bmcmIGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGJsb2JSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmcoYmxvYlJlY29yZHNUYWJsZVNj
aGVtYSgiQmxvYlJlY29yZHMiKSk7CisgICAgcmV0dXJuIGJsb2JSZWNvcmRzVGFibGVTY2hlbWFT
dHJpbmc7Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JSZWNvcmRzVGFibGVTY2hlbWFB
bHRlcm5hdGUoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IGJsb2JSZWNv
cmRzVGFibGVTY2hlbWFTdHJpbmcoYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgiXCJCbG9iUmVjb3Jk
c1wiIikpOworICAgIHJldHVybiBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitz
dGF0aWMgY29uc3QgU3RyaW5nIGJsb2JGaWxlc1RhYmxlU2NoZW1hKGNvbnN0IFN0cmluZyYgdGFi
bGVOYW1lKQoreworICAgIHJldHVybiBtYWtlU3RyaW5nKCJDUkVBVEUgVEFCTEUgIiwgdGFibGVO
YW1lLCAiIChibG9iVVJMIFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCBVTklRVUUgT04g
Q09ORkxJQ1QgRkFJTCwgZmlsZU5hbWUgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVO
SVFVRSBPTiBDT05GTElDVCBGQUlMKSIpOworfQogCi1TUUxpdGVJREJCYWNraW5nU3RvcmU6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5KQorc3RhdGljIGNvbnN0IFN0
cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWEoKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTdHJpbmc+IGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nKGJsb2JGaWxlc1RhYmxlU2NoZW1h
KCJCbG9iRmlsZXMiKSk7CisgICAgcmV0dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOwor
fQorCitzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgp
Cit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYmxvYkZpbGVzVGFibGVTY2hl
bWFTdHJpbmcoYmxvYkZpbGVzVGFibGVTY2hlbWEoIlwiQmxvYkZpbGVzXCIiKSk7CisgICAgcmV0
dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOworfQorCitTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlk
ZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5n
U3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2lkZW50aWZp
ZXIoaWRlbnRpZmllcikKKyAgICAsIG1fdGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIp
CiB7CiAgICAgbV9hYnNvbHV0ZURhdGFiYXNlRGlyZWN0b3J5ID0gaWRlbnRpZmllci5kYXRhYmFz
ZURpcmVjdG9yeVJlbGF0aXZlVG9Sb290KGRhdGFiYXNlUm9vdERpcmVjdG9yeSk7CiB9CkBAIC0y
NzUsNiArMzA5LDc4IEBAIHN0YXRpYyBib29sIGNyZWF0ZU9yTWlncmF0ZVJlY29yZHNUYWJsZUlm
TmVjZXNzYXJ5KFNRTGl0ZURhdGFiYXNlJiBkYXRhYmFzZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcygpCit7
CisgICAgQVNTRVJUKG1fc3FsaXRlREIpOworICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4o
KSk7CisKKyAgICBTdHJpbmcgY3VycmVudFNjaGVtYTsKKyAgICB7CisgICAgICAgIC8vIEZldGNo
IHRoZSBzY2hlbWEgZm9yIGFuIGV4aXN0aW5nIGJsb2IgcmVjb3JkIHRhYmxlLgorICAgICAgICBT
UUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBG
Uk9NIHNxbGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JSZWNvcmRzJyIpOworICAgICAg
ICBpZiAoc3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3Ig
dGhlIEJsb2JSZWNvcmRzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IHNxbGl0ZVJlc3VsdCA9IHN0YXRlbWVudC5zdGVwKCk7CisK
KyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gQmxvYlJlY29yZHMgdGFibGUgYXQgYWxsLCBjcmVh
dGUgaXQuLgorICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7CisgICAg
ICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JSZWNvcmRzVGFibGVT
Y2hlbWEoKSkpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUg
QmxvYlJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1cnJlbnRTY2hlbWEg
PSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3FsaXRlUmVz
dWx0ICE9IFNRTElURV9ST1cpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0
aW5nIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9iUmVjb3JkcyB0YWJsZS4i
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENvbHVtblRleHQoMSk7CisgICAgfQorCisg
ICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpICYmIGN1cnJl
bnRTY2hlbWEgIT0gYmxvYlJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpKSB7CisgICAgICAg
IExPR19FUlJPUigiSW52YWxpZCBCbG9iUmVjb3JkcyB0YWJsZSBzY2hlbWEgZm91bmQiKTsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHsKKyAgICAgICAgLy8gRmV0Y2ggdGhl
IHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiBmaWxlIHRhYmxlLgorICAgICAgICBTUUxpdGVT
dGF0ZW1lbnQgc3RhdGVtZW50KCptX3NxbGl0ZURCLCAiU0VMRUNUIHR5cGUsIHNxbCBGUk9NIHNx
bGl0ZV9tYXN0ZXIgV0hFUkUgdGJsX25hbWU9J0Jsb2JGaWxlcyciKTsKKyAgICAgICAgaWYgKHN0
YXRlbWVudC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LKSB7CisgICAgICAgICAgICBMT0dfRVJST1Io
IlVuYWJsZSB0byBwcmVwYXJlIHN0YXRlbWVudCB0byBmZXRjaCBzY2hlbWEgZm9yIHRoZSBCbG9i
RmlsZXMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsKKworICAgICAgICAv
LyBJZiB0aGVyZSBpcyBubyBCbG9iRmlsZXMgdGFibGUgYXQgYWxsLCBjcmVhdGUgaXQgYW5kIHRo
ZW4gYmFpbC4KKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCA9PSBTUUxJVEVfRE9ORSkgeworICAg
ICAgICAgICAgaWYgKCFtX3NxbGl0ZURCLT5leGVjdXRlQ29tbWFuZChibG9iRmlsZXNUYWJsZVNj
aGVtYSgpKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0ZSBC
bG9iRmlsZXMgdGFibGUgaW4gZGF0YWJhc2UgKCVpKSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHNxbGl0ZVJlc3VsdCAhPSBTUUxJVEVfUk9XKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIkVycm9yIGV4ZWN1dGluZyBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2No
ZW1hIGZvciB0aGUgQmxvYkZpbGVzIHRhYmxlLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgY3VycmVudFNjaGVtYSA9IHN0YXRlbWVudC5nZXRDb2x1
bW5UZXh0KDEpOworICAgIH0KKworICAgIGlmIChjdXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1Rh
YmxlU2NoZW1hKCkgJiYgY3VycmVudFNjaGVtYSAhPSBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVy
bmF0ZSgpKSB7CisgICAgICAgIExPR19FUlJPUigiSW52YWxpZCBCbG9iRmlsZXMgdGFibGUgc2No
ZW1hIGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogYm9vbCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkUmVjb3Jk
c1RhYmxlKCkKIHsKICAgICBBU1NFUlQobV9zcWxpdGVEQik7CkBAIC02MTIsNiArNzE4LDEyIEBA
IElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUlu
Zm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvCiAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgY3JlYXRpbmcgb3IgbWln
cmF0aW5nIEluZGV4IFJlY29yZHMgdGFibGUgaW4gZGF0YWJhc2UiKSB9OwogICAgIH0KIAorICAg
IGlmICghZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJFcnJv
ciBjcmVhdGluZyBvciBjb25maXJtaW5nIEJsb2IgUmVjb3JkcyB0YWJsZXMgaW4gZGF0YWJhc2Ui
KTsKKyAgICAgICAgbV9zcWxpdGVEQiA9IG51bGxwdHI7CisgICAgICAgIHJldHVybiB7IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiRXJyb3IgY3JlYXRp
bmcgb3IgY29uZmlybWluZyBCbG9iIFJlY29yZHMgdGFibGVzIGluIGRhdGFiYXNlIikgfTsKKyAg
ICB9CisKICAgICBhdXRvIGRhdGFiYXNlSW5mbyA9IGV4dHJhY3RFeGlzdGluZ0RhdGFiYXNlSW5m
bygpOwogICAgIGlmICghZGF0YWJhc2VJbmZvKQogICAgICAgICBkYXRhYmFzZUluZm8gPSBjcmVh
dGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8oKTsKQEAgLTEzMDAsMTMgKzE0MTIsMTQg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1cGRhdGVBbGxJbmRleGVzRm9yQWRk
UmVjb3JkKGNvbnN0IElEQk9iamVjdFN0b3IKICAgICByZXR1cm4gZXJyb3I7CiB9CiAKLUlEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRl
bnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJREJPYmplY3RTdG9yZUluZm8m
IG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5RGF0YSwgY29uc3QgVGhyZWFk
U2FmZURhdGFCdWZmZXImIHZhbHVlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JikKK0lEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNv
bnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3Rpb25JZGVudGlmaWVyLCBjb25zdCBJ
REJPYmplY3RTdG9yZUluZm8mIG9iamVjdFN0b3JlSW5mbywgY29uc3QgSURCS2V5RGF0YSYga2V5
RGF0YSwgY29uc3QgVGhyZWFkU2FmZURhdGFCdWZmZXImIHZhbHVlLCBjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgYmxvYlVSTHMsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBibG9iRmlsZXMpCiB7CiAgICAg
TE9HKEluZGV4ZWREQiwgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkIC0ga2V5ICVz
LCBvYmplY3Qgc3RvcmUgJSIgUFJJdTY0LCBrZXlEYXRhLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCku
ZGF0YSgpLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpKTsKIAogICAgIEFTU0VSVChtX3Nx
bGl0ZURCKTsKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVCh2
YWx1ZS5kYXRhKCkpOworICAgIEFTU0VSVChibG9iVVJMcy5zaXplKCkgPT0gYmxvYkZpbGVzLnNp
emUoKSk7CiAKICAgICBhdXRvKiB0cmFuc2FjdGlvbiA9IG1fdHJhbnNhY3Rpb25zLmdldCh0cmFu
c2FjdGlvbklkZW50aWZpZXIpOwogICAgIGlmICghdHJhbnNhY3Rpb24gfHwgIXRyYW5zYWN0aW9u
LT5pblByb2dyZXNzKCkpIHsKQEAgLTEzMjMsNiArMTQzNiw4IEBAIElEQkVycm9yIFNRTGl0ZUlE
QkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJh
bnNhY3RpCiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHNlcmlhbGl6ZSBJREJLZXkgdG8g
YmUgc3RvcmVkIGluIGFuIG9iamVjdCBzdG9yZSIpOwogICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzZXJp
YWxpemUgSURCS2V5IHRvIGJlIHN0b3JlZCBpbiBhbiBvYmplY3Qgc3RvcmUiKSB9OwogICAgIH0K
KworICAgIGludDY0X3QgcmVjb3JkSUQgPSAwOwogICAgIHsKICAgICAgICAgU1FMaXRlU3RhdGVt
ZW50IHNxbCgqbV9zcWxpdGVEQiwgQVNDSUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBSZWNvcmRzIFZB
TFVFUyAoPywgQ0FTVCg/IEFTIFRFWFQpLCA/LCBOVUxMKTsiKSk7CiAgICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTElURV9PSwpAQCAtMTMzMyw2ICsxNDQ4LDggQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGkKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCByZWNvcmQg
Zm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIs
IG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7CiAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBzdG9y
ZSByZWNvcmQgaW4gb2JqZWN0IHN0b3JlIikgfTsKICAgICAgICAgfQorCisgICAgICAgIHJlY29y
ZElEID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CiAgICAgfQogCiAgICAgYXV0byBl
cnJvciA9IHVwZGF0ZUFsbEluZGV4ZXNGb3JBZGRSZWNvcmQob2JqZWN0U3RvcmVJbmZvLCBrZXlE
YXRhLCB2YWx1ZSk7CkBAIC0xMzQ4LDYgKzE0NjUsNTUgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2Fj
dGkKICAgICAgICAgfQogICAgIH0KIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmxvYlVS
THMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgYXV0byYgdXJsID0gYmxvYlVSTHNbaV07CisgICAg
ICAgIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJ
TGl0ZXJhbCgiSU5TRVJUIElOVE8gQmxvYlJlY29yZHMgVkFMVUVTICg/LCA/KTsiKSk7CisgICAg
ICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8
fCBzcWwuYmluZEludDY0KDEsIHJlY29yZElEKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAg
ICB8fCBzcWwuYmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8
fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9S
KCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlM
aXRlcmFsKCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIikgfTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpbnQ2NF90IHBvdGVudGlhbEZpbGVOYW1l
SW50ZWdlciA9IG1fc3FsaXRlREItPmxhc3RJbnNlcnRSb3dJRCgpOworCisgICAgICAgIC8vIElm
IHdlIGFscmVhZHkgaGF2ZSBhIGZpbGUgZm9yIHRoaXMgYmxvYlVSTCwgbm90aGluZyBsZWZ0IHRv
IGRvLgorICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3FsKCptX3NxbGl0
ZURCLCBBU0NJSUxpdGVyYWwoIlNFTEVDVCBmaWxlTmFtZSBGUk9NIEJsb2JGaWxlcyBXSEVSRSBi
bG9iVVJMID0gPzsiKSk7CisgICAgICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVf
T0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuYmluZFRleHQoMSwgdXJsKSAhPSBTUUxJVEVfT0sp
IHsKKyAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmls
ZW5hbWVzIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gZXhhbWlu
ZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGludCByZXN1bHQgPSBzcWwuc3RlcCgpOworICAgICAgICAgICAgaWYgKHJlc3VsdCAh
PSBTUUxJVEVfUk9XICYmIHJlc3VsdCAhPSBTUUxJVEVfRE9ORSkgeworICAgICAgICAgICAgICAg
IExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBmaWxlbmFtZXMgaW4gZGF0YWJhc2Ui
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93
bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBleGFtaW5lIEJsb2IgZmlsZW5hbWVzIGlu
IGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBTUUxJVEVfUk9XKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBz
byBjb21taXQgb3VyIGZpbGUgYXMgYSB1bmlxdWUgZmlsZW5hbWUKKyAgICAgICAgU3RyaW5nIHN0
b3JlZEZpbGVuYW1lID0gU3RyaW5nOjpmb3JtYXQoIiUiIFBSSWQ2NCAiLmJsb2IiLCBwb3RlbnRp
YWxGaWxlTmFtZUludGVnZXIpOworICAgICAgICB7CisgICAgICAgICAgICBTUUxpdGVTdGF0ZW1l
bnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIEJsb2JGaWxlcyBW
QUxVRVMgKD8sID8pOyIpKTsKKyAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCB1cmwpICE9IFNRTElURV9P
SworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgyLCBzdG9yZWRGaWxlbmFtZSkgIT0g
U1FMSVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
eworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIGZpbGUg
cmVjb3JkIGluIGRhdGFiYXNlIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJh
c2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJVbmFibGUgdG8gcmVjb3Jk
IEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKSB9OworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgdHJhbnNhY3Rpb24tPmFkZEJsb2JGaWxlKGJsb2JGaWxlc1tpXSwgc3Rv
cmVkRmlsZW5hbWUpOworICAgIH0KKwogICAgIHRyYW5zYWN0aW9uLT5ub3RpZnlDdXJzb3JzT2ZD
aGFuZ2VzKG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCkpOwogCiAgICAgcmV0dXJuIGVycm9y
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDdmMjM5MmEuLjhlOTE1MTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJ
REJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgU1FM
aXRlSURCQ3Vyc29yOwogCiBjbGFzcyBTUUxpdGVJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURC
QmFja2luZ1N0b3JlIHsKIHB1YmxpYzoKLSAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3Qg
SURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3Rv
cnkpOworICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZp
ZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3Jl
VGVtcG9yYXJ5RmlsZUhhbmRsZXImKTsKICAgICAKICAgICB+U1FMaXRlSURCQmFja2luZ1N0b3Jl
KCkgZmluYWw7CiAKQEAgLTgxLDEzICs4MSwxNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVucmVn
aXN0ZXJDdXJzb3IoU1FMaXRlSURCQ3Vyc29yJik7CiAKKyAgICBTdHJpbmcgZnVsbERhdGFiYXNl
RGlyZWN0b3J5KCkgY29uc3Q7CisKKyAgICBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlciYgdGVtcG9yYXJ5RmlsZUhhbmRsZXIoKSBjb25zdCB7IHJldHVybiBtX3RlbXBvcmFyeUZp
bGVIYW5kbGVyOyB9CisKIHByaXZhdGU6CiAgICAgU3RyaW5nIGZpbGVuYW1lRm9yRGF0YWJhc2VO
YW1lKCkgY29uc3Q7Ci0gICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeSgpIGNvbnN0Owog
ICAgIFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAKICAgICBib29sIGVuc3VyZVZh
bGlkUmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxl
KCk7CisgICAgYm9vbCBlbnN1cmVWYWxpZEJsb2JUYWJsZXMoKTsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8SURCRGF0YWJhc2VJbmZvPiBjcmVhdGVBbmRQb3B1bGF0ZUluaXRpYWxEYXRhYmFzZUluZm8o
KTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SURCRGF0YWJhc2VJbmZvPiBleHRyYWN0RXhpc3RpbmdE
YXRhYmFzZUluZm8oKTsKIApAQCAtMTE4LDYgKzEyMiw4IEBAIHByaXZhdGU6CiAKICAgICBSZWZQ
dHI8SlNDOjpWTT4gbV92bTsKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTR2xvYmFsT2JqZWN0PiBt
X2dsb2JhbE9iamVjdDsKKworICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVy
JiBtX3RlbXBvcmFyeUZpbGVIYW5kbGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSURCU2VydmVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCVHJhbnNhY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcAppbmRleCBkY2JlMzMxLi4wYmQzN2FkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2lu
Y2x1ZGUgIklEQkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJJbmRleGVkREIuaCIKICNpbmNsdWRl
ICJTUUxpdGVJREJCYWNraW5nU3RvcmUuaCIKQEAgLTc1LDEyICs3NiwzNiBAQCBJREJFcnJvciBT
UUxpdGVJREJUcmFuc2FjdGlvbjo6Y29tbWl0KCkKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlv
bi0+aW5Qcm9ncmVzcygpKQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBjb21taXQgU1FMaXRlIHRyYW5z
YWN0aW9uIGluIGRhdGFiYXNlIGJhY2tlbmQiKSB9OwogCisgICAgbW92ZUJsb2JGaWxlc0lmTmVj
ZXNzYXJ5KCk7CisKICAgICByZXNldCgpOwogICAgIHJldHVybiB7IH07CiB9CiAKK3ZvaWQgU1FM
aXRlSURCVHJhbnNhY3Rpb246Om1vdmVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpCit7CisgICAgU3Ry
aW5nIGRhdGFiYXNlRGlyZWN0b3J5ID0gbV9iYWNraW5nU3RvcmUuZnVsbERhdGFiYXNlRGlyZWN0
b3J5KCk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fYmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZp
bGVuYW1lcykgeworICAgICAgICBtX2JhY2tpbmdTdG9yZS50ZW1wb3JhcnlGaWxlSGFuZGxlcigp
LnByZXBhcmVGb3JBY2Nlc3NUb1RlbXBvcmFyeUZpbGUoZW50cnkuZmlyc3QpOworCisgICAgICAg
IGlmICghaGFyZExpbmtPckNvcHlGaWxlKGVudHJ5LmZpcnN0LCBwYXRoQnlBcHBlbmRpbmdDb21w
b25lbnQoZGF0YWJhc2VEaXJlY3RvcnksIGVudHJ5LnNlY29uZCkpKQorICAgICAgICAgICAgTE9H
X0VSUk9SKCJGYWlsZWQgdG8gbGluay9jb3B5IHRlbXBvcmFyeSBibG9iIGZpbGUgJyVzJyB0byBs
b2NhdGlvbiAnJXMnIiwgZW50cnkuZmlyc3QudXRmOCgpLmRhdGEoKSwgcGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KGRhdGFiYXNlRGlyZWN0b3J5LCBlbnRyeS5zZWNvbmQpLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnRlbXBvcmFyeUZpbGVIYW5kbGVyKCkuYWNjZXNz
VG9UZW1wb3JhcnlGaWxlQ29tcGxldGUoZW50cnkuZmlyc3QpOworICAgIH0KKworICAgIG1fYmxv
YlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lcy5jbGVhcigpOworfQorCiBJREJFcnJvciBTUUxp
dGVJREJUcmFuc2FjdGlvbjo6YWJvcnQoKQogeworICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Js
b2JUZW1wb3JhcnlBbmRTdG9yZWRGaWxlbmFtZXMpIHsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUu
dGVtcG9yYXJ5RmlsZUhhbmRsZXIoKS5wcmVwYXJlRm9yQWNjZXNzVG9UZW1wb3JhcnlGaWxlKGVu
dHJ5LmZpcnN0KTsKKyAgICAgICAgbV9iYWNraW5nU3RvcmUudGVtcG9yYXJ5RmlsZUhhbmRsZXIo
KS5hY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShlbnRyeS5maXJzdCk7CisgICAgfQorCisg
ICAgbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmNsZWFyKCk7CisKICAgICBpZiAo
IW1fc3FsaXRlVHJhbnNhY3Rpb24gfHwgIW1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3Mo
KSkKICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwg
QVNDSUlMaXRlcmFsKCJObyBTUUxpdGUgdHJhbnNhY3Rpb24gaW4gcHJvZ3Jlc3MgdG8gYWJvcnQi
KSB9OwogCkBAIC05Nyw2ICsxMjIsNyBAQCB2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpyZXNl
dCgpCiB7CiAgICAgbV9zcWxpdGVUcmFuc2FjdGlvbiA9IG51bGxwdHI7CiAgICAgY2xlYXJDdXJz
b3JzKCk7CisgICAgQVNTRVJUKG1fYmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lcy5pc0Vt
cHR5KCkpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8U1FMaXRlSURCQ3Vyc29yPiBTUUxpdGVJREJU
cmFuc2FjdGlvbjo6bWF5YmVPcGVuQmFja2luZ1N0b3JlQ3Vyc29yKHVpbnQ2NF90IG9iamVjdFN0
b3JlSUQsIHVpbnQ2NF90IGluZGV4SUQsIGNvbnN0IElEQktleVJhbmdlRGF0YSYgcmFuZ2UpCkBA
IC0xNzEsNiArMTk3LDExIEBAIGJvb2wgU1FMaXRlSURCVHJhbnNhY3Rpb246OmluUHJvZ3Jlc3Mo
KSBjb25zdAogICAgIHJldHVybiBtX3NxbGl0ZVRyYW5zYWN0aW9uICYmIG1fc3FsaXRlVHJhbnNh
Y3Rpb24tPmluUHJvZ3Jlc3MoKTsKIH0KIAordm9pZCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6YWRk
QmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3JhcnlQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3Jl
ZEZpbGVuYW1lKQoreworICAgIG1fYmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lcy5hcHBl
bmQoc3RkOjptYWtlX3BhaXIodGVtcG9yYXJ5UGF0aCwgc3RvcmVkRmlsZW5hbWUpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgSURCU2VydmVyCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJU
cmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQlRyYW5zYWN0aW9uLmgKaW5kZXggMGVmZTc0NC4uOThmODMyNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0
aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQlRyYW5zYWN0aW9uLmgKQEAgLTcxLDE2ICs3MSwyMSBAQCBwdWJsaWM6CiAKICAgICBTUUxp
dGVUcmFuc2FjdGlvbiogc3FsaXRlVHJhbnNhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3NxbGl0
ZVRyYW5zYWN0aW9uLmdldCgpOyB9CiAKKyAgICB2b2lkIGFkZEJsb2JGaWxlKGNvbnN0IFN0cmlu
ZyYgdGVtcG9yYXJ5UGF0aCwgY29uc3QgU3RyaW5nJiBzdG9yZWRGaWxlbmFtZSk7CisKIHByaXZh
dGU6CiAgICAgdm9pZCBjbGVhckN1cnNvcnMoKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKKyAgICB2
b2lkIG1vdmVCbG9iRmlsZXNJZk5lY2Vzc2FyeSgpOworCiAgICAgSURCVHJhbnNhY3Rpb25JbmZv
IG1faW5mbzsKIAogICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSYgbV9iYWNraW5nU3RvcmU7CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFNRTGl0ZVRyYW5zYWN0aW9uPiBtX3NxbGl0ZVRyYW5zYWN0aW9u
OwogICAgIEhhc2hNYXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBzdGQ6OnVuaXF1ZV9wdHI8U1FM
aXRlSURCQ3Vyc29yPj4gbV9jdXJzb3JzOwogICAgIEhhc2hTZXQ8U1FMaXRlSURCQ3Vyc29yKj4g
bV9iYWNraW5nU3RvcmVDdXJzb3JzOworICAgIFZlY3RvcjxzdGQ6OnBhaXI8U3RyaW5nLCBTdHJp
bmc+PiBtX2Jsb2JUZW1wb3JhcnlBbmRTdG9yZWRGaWxlbmFtZXM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKaW5kZXggNmE1MzE4My4u
NWRjODNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hh
cmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNlcnZlci5jcHAKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgogI2luY2x1ZGUgIklEQkNvbm5lY3Rpb25Ub0NsaWVudC5oIgogI2luY2x1ZGUgIklEQkNvbm5l
Y3Rpb25Ub1NlcnZlci5oIgogI2luY2x1ZGUgIklEQkN1cnNvckluZm8uaCIKQEAgLTU2LDcgKzU3
LDcgQEAgUmVmPEluUHJvY2Vzc0lEQlNlcnZlcj4gSW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUo
Y29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG8KIH0KIAogSW5Qcm9jZXNzSURCU2VydmVyOjpJ
blByb2Nlc3NJREJTZXJ2ZXIoKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2ZXI6
OmNyZWF0ZSgpKQorICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZSgq
dGhpcykpCiB7CiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CiAgICAgbV9jb25uZWN0
aW9uVG9TZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlKCp0
aGlzKTsKQEAgLTY0LDcgKzY1LDcgQEAgSW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJT
ZXJ2ZXIoKQogfQogCiBJblByb2Nlc3NJREJTZXJ2ZXI6OkluUHJvY2Vzc0lEQlNlcnZlcihjb25z
dCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKLSAgICA6IG1fc2VydmVyKElEQlNlcnZl
cjo6SURCU2VydmVyOjpjcmVhdGUoZGF0YWJhc2VEaXJlY3RvcnlQYXRoKSkKKyAgICA6IG1fc2Vy
dmVyKElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUoZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCAq
dGhpcykpCiB7CiAgICAgcmVsYXhBZG9wdGlvblJlcXVpcmVtZW50KCk7CiAgICAgbV9jb25uZWN0
aW9uVG9TZXJ2ZXIgPSBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlcjo6Y3JlYXRlKCp0
aGlzKTsKQEAgLTQwMCw2ICs0MDEsMTEgQEAgdm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmRpZEZp
cmVWZXJzaW9uQ2hhbmdlRXZlbnQodWludDY0X3QgZGF0YWJhc2VDb25uZWN0aW9uSWQKICAgICB9
KTsKIH0KIAordm9pZCBJblByb2Nlc3NJREJTZXJ2ZXI6OmFjY2Vzc1RvVGVtcG9yYXJ5RmlsZUNv
bXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICBkZWxldGVGaWxlKHBhdGgpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJl
ZC9JblByb2Nlc3NJREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuaAppbmRleCA4MmEyMDkxLi5mZTI4NGMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luUHJvY2Vzc0lEQlNlcnZlci5oCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBJREJTZXJ2
ZXIgewogY2xhc3MgSURCU2VydmVyOwogfQogCi1jbGFzcyBJblByb2Nlc3NJREJTZXJ2ZXIgZmlu
YWwgOiBwdWJsaWMgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZSwgcHVi
bGljIElEQlNlcnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUsIHB1YmxpYyBSZWZD
b3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj4geworY2xhc3MgSW5Qcm9jZXNzSURCU2VydmVyIGZp
bmFsIDogcHVibGljIElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyRGVsZWdhdGUsIHB1
YmxpYyBJREJTZXJ2ZXI6OklEQkNvbm5lY3Rpb25Ub0NsaWVudERlbGVnYXRlLCBwdWJsaWMgUmVm
Q291bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+LCBwdWJsaWMgSURCU2VydmVyOjpJREJCYWNraW5n
U3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+IGNyZWF0ZSgpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWY8SW5Qcm9jZXNzSURCU2VydmVyPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBk
YXRhYmFzZURpcmVjdG9yeVBhdGgpOwpAQCAtMTAwLDYgKzEwMCw5IEBAIHB1YmxpYzoKICAgICB2
b2lkIHJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+OjpyZWYo
KTsgfQogICAgIHZvaWQgZGVyZWYoKSBvdmVycmlkZSB7IFJlZkNvdW50ZWQ8SW5Qcm9jZXNzSURC
U2VydmVyPjo6ZGVyZWYoKTsgfQogCisgICAgdm9pZCBwcmVwYXJlRm9yQWNjZXNzVG9UZW1wb3Jh
cnlGaWxlKGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlIHsgfQorICAgIHZvaWQgYWNjZXNzVG9UZW1w
b3JhcnlGaWxlQ29tcGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKSBvdmVycmlkZTsKKwogcHJpdmF0
ZToKICAgICBJblByb2Nlc3NJREJTZXJ2ZXIoKTsKICAgICBJblByb2Nlc3NJREJTZXJ2ZXIoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggNzMwMzI5ZC4u
NWU4MzZkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxp
emVkU2NyaXB0VmFsdWUuY3BwCkBAIC0yNzQ4LDYgKzI3NDgsMTYgQEAgdWludDMyX3QgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjp3aXJlRm9ybWF0VmVyc2lvbigpCiB9CiAKICNpZiBFTkFCTEUoSU5E
RVhFRF9EQVRBQkFTRSkKK1ZlY3RvcjxTdHJpbmc+IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6Ymxv
YlVSTHNJc29sYXRlZENvcHkoKSBjb25zdAoreworICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsK
KyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2Jsb2JVUkxzLnNpemUoKSk7Cisg
ICAgZm9yIChhdXRvJiB1cmwgOiBtX2Jsb2JVUkxzKQorICAgICAgICByZXN1bHQudW5jaGVja2Vk
QXBwZW5kKHVybC5pc29sYXRlZENvcHkoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2
b2lkIFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihz
dGQ6OmZ1bmN0aW9uPHZvaWQgKGNvbnN0IElEQlZhbHVlJik+IGNvbXBsZXRpb25IYW5kbGVyKQog
ewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CkBAIC0yNzY5LDYgKzI3NzksNiBAQCB2b2lk
IFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6d3JpdGVCbG9ic1RvRGlza0ZvckluZGV4ZWREQihzdGQ6
OmZ1bmN0aW9uPHZvaWQgKGNvbgogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7ICp0aGlzLCBt
X2Jsb2JVUkxzLCBibG9iRmlsZVBhdGhzIH0pOwogICAgIH0pOwogfQotI2VuZGlmCisjZW5kaWYg
Ly8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1
ZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgK
aW5kZXggNjQ1ZGNiOC4uMTVjYmY4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgKQEAgLTg0LDkgKzg0LDExIEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0IFZlY3Rvcjx1aW50OF90PiYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YTsgfQogICAgIGJvb2wgaGFzQmxvYlVSTHMoKSBjb25zdCB7IHJldHVybiAhbV9ibG9iVVJMcy5p
c0VtcHR5KCk7IH0KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgIFZlY3RvcjxT
dHJpbmc+IGJsb2JVUkxzSXNvbGF0ZWRDb3B5KCkgY29uc3Q7CiAgICAgdm9pZCB3cml0ZUJsb2Jz
VG9EaXNrRm9ySW5kZXhlZERCKHN0ZDo6ZnVuY3Rpb248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4g
Y29tcGxldGlvbkhhbmRsZXIpOwotI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKICAgICBzdGF0aWMgUmVmPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gY3JlYXRlRnJv
bVdpcmVCeXRlcyhWZWN0b3I8dWludDhfdD4mJiBkYXRhKQogICAgIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0ZpbGVTeXN0ZW0uaAppbmRleCAwM2FmZmZlLi5mMWE3OGRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRmlsZVN5c3RlbS5oCkBAIC0xODEsNiArMTgxLDkgQEAgaW50IHJlYWRGcm9tRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOwogLy8gUmV0dXJucyB0
cnVlIGlmIHRoZSB3cml0ZSB3YXMgc3VjY2Vzc2Z1bCwgZmFsc2UgaWYgaXQgd2FzIG5vdC4KIGJv
b2wgYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKGNvbnN0IFN0cmluZyYgcGF0aCwgUGxh
dGZvcm1GaWxlSGFuZGxlJik7CiAKKy8vIEhhcmQgbGlua3MgYSBmaWxlIGlmIHBvc3NpYmxlLCBj
b3BpZXMgaXQgaWYgbm90LgorYm9vbCBoYXJkTGlua09yQ29weUZpbGUoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pOworCiAjaWYgVVNFKEZJTEVfTE9DSykK
IGJvb2wgbG9ja0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBGaWxlTG9ja01vZGUpOwogYm9vbCB1
bmxvY2tGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKaW5kZXggOTE1ZWE2OS4uMWQ4ZWQ3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcApAQCAtMzY0LDQgKzM2
NCwxMSBAQCBib29sIHVubG9hZE1vZHVsZShQbGF0Zm9ybU1vZHVsZSBtb2R1bGUpCiAgICAgcmV0
dXJuIGdfbW9kdWxlX2Nsb3NlKG1vZHVsZSk7CiAjZW5kaWYKIH0KKworYm9vbCBoYXJkTGlua09y
Q29weUZpbGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcAppbmRleCBmZTI3NmIwLi5jYWZi
ZWExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3Rl
bVBPU0lYLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9wb3NpeC9GaWxlU3lzdGVt
UE9TSVguY3BwCkBAIC0zNDYsNCArMzQ2LDMwIEBAIGVuZDoKIH0KICNlbmRpZgogCitib29sIGhh
cmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBkZXN0
aW5hdGlvbikKK3sKKyAgICBpZiAoZmlsZUV4aXN0cyhkZXN0aW5hdGlvbikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgZnNTb3VyY2UgPSBmaWxlU3lzdGVtUmVwcmVzZW50
YXRpb24oc291cmNlKTsKKyAgICBpZiAoIWZzU291cmNlLmRhdGEoKSB8fCBmc1NvdXJjZS5kYXRh
KClbMF0gPT0gJ1wwJykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ1N0cmluZyBmc0Rl
c3RpbmF0aW9uID0gZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGRlc3RpbmF0aW9uKTsKKyAgICBp
ZiAoIWZzRGVzdGluYXRpb24uZGF0YSgpIHx8IGZzRGVzdGluYXRpb24uZGF0YSgpWzBdID09ICdc
MCcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbGluayhmc1NvdXJjZS5kYXRh
KCksIGZzRGVzdGluYXRpb24uZGF0YSgpKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAv
LyBIYXJkIGxpbmsgZmFpbGVkLiBQZXJmb3JtIGEgY29weSBpbnN0ZWFkLgorICAgIGF1dG8gaGFu
ZGxlID0gb3BlbkZpbGUoZGVzdGluYXRpb24sIE9wZW5Gb3JXcml0ZSk7CisgICAgaWYgKCFpc0hh
bmRsZVZhbGlkKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgYXBw
ZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKHNvdXJjZSwgaGFuZGxl
KTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gYXBwZW5kUmVzdWx0OworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmQwM2FmNS4uMGEyMmFkYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE2LTA0LTA3ICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4gSURCIChCbG9iIHN1cHBvcnQpOiBX
cml0ZSBibG9icyB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIG1vdmUgdGhlbSB0byB0aGUgY29ycmVj
dCBsb2NhdGlvbiB3aGVuIHN0b3JpbmcgdGhlbS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjMyMQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXgg
Q2hyaXN0ZW5zZW4sIEFuZHkgRXN0ZXMuCisKKyAgICAgICAgVGhlIE5ldHdvcmtQcm9jZXNzIHdy
aXRlcyBhIGJsb2IgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgdGhlbiB0ZWxscyB0aGUgVUlQcm9jZXNz
IHRvIGdyYW50IHRoZSBEYXRhYmFzZVByb2Nlc3MKKyAgICAgICAgYSBTYW5kYm94IEV4dGVuc2lv
biB0byB0aGF0IHBhdGguCisgICAgICAgIAorICAgICAgICBJdCB0aGVuIHRlbGxzIHRoZSBXZWJQ
cm9jZXNzIHRoZSBwYXRocyBmb3IgdGhlIHRlbXBvcmFyeSBmaWxlcywgd2hpY2ggdGhlbiB0ZWxs
cyB0aGUgRGF0YWJhc2VQcm9jZXNzIHRvIHN0b3JlCisgICAgICAgIHRoZSBjb250ZW50cyBvZiB0
aG9zZSBmaWxlcyBhcyBibG9iIHJlZmVyZW5jZXMgaW4gdGhlIGRhdGFiYXNlLgorICAgICAgICAK
KyAgICAgICAgU2luY2UgdGhlIFVJUHJvY2VzcyBoYWQgYWxyZWFkeSBncmFudGVkIGl0IGEgU2Fu
ZGJveCBFeHRlbnNpb24sIGl0IGlzIGFibGUgdG8gZG8gc28uCisKKyAgICAgICAgKiBEYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQ
cm9jZXNzOjppZGJTZXJ2ZXIpOgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6Omdy
YW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyk6CisgICAgICAgIChXZWJLaXQ6OkRhdGFiYXNl
UHJvY2Vzczo6cHJlcGFyZUZvckFjY2Vzc1RvVGVtcG9yYXJ5RmlsZSk6CisgICAgICAgIChXZWJL
aXQ6OkRhdGFiYXNlUHJvY2Vzczo6YWNjZXNzVG9UZW1wb3JhcnlGaWxlQ29tcGxldGUpOgorICAg
ICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaDoKKyAgICAgICAgKiBEYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluOgorCisgICAgICAgICogTmV0
d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwOgorICAgICAgICAo
V2ViS2l0OjpOZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzczo6d3JpdGVCbG9ic1RvVGVtcG9y
YXJ5RmlsZXMpOgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9u
c1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJv
Y2Vzczo6ZGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMp
OgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBV
SVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6TmV0d29ya1Byb2Nlc3NQcm94eTo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQ
cm9jZXNzRm9yQmxvYnMpOgorICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1By
b3h5Lm1lc3NhZ2VzLmluOgorCiAyMDE2LTA0LTA1ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBDTWFrZS1nZW5lcmF0ZWQgYmluYXJp
ZXMgb24gTWFjIGFibGUgdG8gcnVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCmluZGV4IDljNmFlMDIuLjFiZWQ1ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3BwCkBA
IC05OCw3ICs5OCw3IEBAIHZvaWQgRGF0YWJhc2VQcm9jZXNzOjpkaWRSZWNlaXZlSW52YWxpZE1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpTdHJpbmdSZWZlCiBJREJTZXJ2ZXI6OklEQlNl
cnZlciYgRGF0YWJhc2VQcm9jZXNzOjppZGJTZXJ2ZXIoKQogewogICAgIGlmICghbV9pZGJTZXJ2
ZXIpCi0gICAgICAgIG1faWRiU2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShp
bmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSk7CisgICAgICAgIG1faWRiU2VydmVyID0gSURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkoKSwgRGF0YWJh
c2VQcm9jZXNzOjpzaW5nbGV0b24oKSk7CiAKICAgICByZXR1cm4gKm1faWRiU2VydmVyOwogfQpA
QCAtMzA1LDYgKzMwNSwzMyBAQCB2b2lkIERhdGFiYXNlUHJvY2Vzczo6ZGVsZXRlV2Vic2l0ZURh
dGFGb3JPcmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PAogI2VuZGlmCiB9CiAK
K3ZvaWQgRGF0YWJhc2VQcm9jZXNzOjpncmFudFNhbmRib3hFeHRlbnNpb25zRm9yQmxvYnMoY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVB
cnJheSYgaGFuZGxlcykKK3sKKyAgICBBU1NFUlQocGF0aHMuc2l6ZSgpID09IGhhbmRsZXMuc2l6
ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lv
bnMuYWRkKHBhdGhzW2ldLCBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGUoaGFuZGxlc1tpXSkpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmlzTmV3RW50cnkpOworICAgIH0K
K30KKwordm9pZCBEYXRhYmFzZVByb2Nlc3M6OnByZXBhcmVGb3JBY2Nlc3NUb1RlbXBvcmFyeUZp
bGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIGlmIChhdXRvIGV4dGVuc2lvbiA9IG1fYmxv
YlRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9ucy5nZXQocGF0aCkpCisgICAgICAgIGV4dGVu
c2lvbi0+Y29uc3VtZSgpOworfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6YWNjZXNzVG9UZW1w
b3JhcnlGaWxlQ29tcGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIC8vIFdlJ3ZlIGVp
dGhlciBoYXJkIGxpbmtlZCB0aGUgdGVtcG9yYXJ5IGJsb2IgZmlsZSB0byB0aGUgZGF0YWJhc2Ug
ZGlyZWN0b3J5LCBjb3BpZWQgaXQgdGhlcmUsCisgICAgLy8gb3IgdGhlIHRyYW5zYWN0aW9uIGlz
IGJlaW5nIGFib3J0ZWQuCisgICAgLy8gSW4gYW55IG9mIHRob3NlIGNhc2VzLCB3ZSBjYW4gZGVs
ZXRlIHRoZSB0ZW1wb3JhcnkgYmxvYiBmaWxlIG5vdy4KKyAgICBkZWxldGVGaWxlKHBhdGgpOwor
CisgICAgaWYgKGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRl
bnNpb25zLnRha2UocGF0aCkpCisgICAgICAgIGV4dGVuc2lvbi0+cmV2b2tlKCk7Cit9CisKICNp
ZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6U2VjdXJp
dHlPcmlnaW4+PiBEYXRhYmFzZVByb2Nlc3M6OmluZGV4ZWREYXRhYmFzZU9yaWdpbnMoKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCmlu
ZGV4IDY4OTI1NGYuLjRmODVkYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNl
UHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVBy
b2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKQEAgLTI5LDYgKzI5LDggQEAKICNpZiBFTkFCTEUoREFU
QUJBU0VfUFJPQ0VTUykKIAogI2luY2x1ZGUgIkNoaWxkUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlNh
bmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0lEQkJhY2tpbmdTdG9yZS5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvSURCU2VydmVyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9VbmlxdWVJ
REJEYXRhYmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgpAQCAtNDUsNyAr
NDcsNyBAQCBjbGFzcyBEYXRhYmFzZVRvV2ViUHJvY2Vzc0Nvbm5lY3Rpb247CiBlbnVtIGNsYXNz
IFdlYnNpdGVEYXRhVHlwZTsKIHN0cnVjdCBEYXRhYmFzZVByb2Nlc3NDcmVhdGlvblBhcmFtZXRl
cnM7CiAKLWNsYXNzIERhdGFiYXNlUHJvY2VzcyA6IHB1YmxpYyBDaGlsZFByb2Nlc3MgeworY2xh
c3MgRGF0YWJhc2VQcm9jZXNzIDogcHVibGljIENoaWxkUHJvY2VzcywgcHVibGljIFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIgewogICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKERhdGFiYXNlUHJvY2Vzcyk7CiAgICAgZnJpZW5kIGNsYXNzIE5l
dmVyRGVzdHJveWVkPERhdGFiYXNlUHJvY2Vzcz47CiBwdWJsaWM6CkBAIC02NSw2ICs2NywxMCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBvc3REYXRhYmFzZVRhc2soc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OkNyb3NzVGhyZWFkVGFzaz4pOwogCisgICAgLy8gV2ViQ29yZTo6SURCU2VydmVyOjpJ
REJCYWNraW5nU3RvcmVGaWxlSGFuZGxlcgorICAgIHZvaWQgcHJlcGFyZUZvckFjY2Vzc1RvVGVt
cG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpIGZpbmFsOworICAgIHZvaWQgYWNjZXNzVG9U
ZW1wb3JhcnlGaWxlQ29tcGxldGUoY29uc3QgU3RyaW5nJiBwYXRoKSBmaW5hbDsKKwogcHJpdmF0
ZToKICAgICBEYXRhYmFzZVByb2Nlc3MoKTsKIApAQCAtOTAsNiArOTYsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgZmV0Y2hXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxX
ZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwog
ICAgIHZvaWQgZGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5cGVzLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Ns
b2NrOjp0aW1lX3BvaW50IG1vZGlmaWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpOwogICAg
IHZvaWQgZGVsZXRlV2Vic2l0ZURhdGFGb3JPcmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCwgT3B0
aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgY29uc3QgVmVjdG9yPFdl
YkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YT4mIG9yaWdpbnMsIHVpbnQ2NF90IGNhbGxiYWNrSUQp
OworICAgIHZvaWQgZ3JhbnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXRocywgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkmKTsKIAog
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6
U2VjdXJpdHlPcmlnaW4+PiBpbmRleGVkRGF0YWJhc2VPcmlnaW5zKCk7CkBAIC0xMDksNiArMTE2
LDggQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9pbmRleGVkRGF0YWJhc2VEaXJlY3Rvcnk7CiAK
ICAgICBSZWZQdHI8V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+IG1faWRiU2VydmVyOwor
CisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxTYW5kYm94RXh0ZW5zaW9uPj4gbV9ibG9iVGVt
cG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNpb25zOwogI2VuZGlmCiAKICAgICBEZXF1ZTxzdGQ6OnVu
aXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPj4gbV9kYXRhYmFzZVRhc2tzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nl
c3MubWVzc2FnZXMuaW4KaW5kZXggNGNiOWRhMC4uODJlMjc2NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2Vz
LmluCkBAIC0zMiw2ICszMiw3IEBAIG1lc3NhZ2VzIC0+IERhdGFiYXNlUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgRmV0Y2hXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBPcHRpb25TZXQ8V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMs
IHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRGVsZXRlV2Vic2l0ZURhdGEoV2ViQ29yZTo6U2Vz
c2lvbklEIHNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJz
aXRlRGF0YVR5cGVzLCBzdGQ6OmNocm9ubzo6c3lzdGVtX2Nsb2NrOjp0aW1lX3BvaW50IG1vZGlm
aWVkU2luY2UsIHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgRGVsZXRlV2Vic2l0ZURhdGFGb3JP
cmlnaW5zKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJLaXQ6Oldl
YnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgVmVjdG9yPFdlYkNvcmU6OlNlY3VyaXR5
T3JpZ2luRGF0YT4gb3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCkKKyAgICBHcmFudFNhbmRi
b3hFeHRlbnNpb25zRm9yQmxvYnMoVmVjdG9yPFN0cmluZz4gcGF0aHMsIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlQXJyYXkgZXh0ZW5zaW9ucykKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShEQVRBQkFTRV9QUk9DRVNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1By
b2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCmluZGV4IDg4
NzM1NDdkLi45ODg3M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya0Nvbm5lY3Rpb25Ub1dlYlByb2Nlc3MuY3BwCkBAIC0yOTYs
MTAgKzI5NiwxMiBAQCB2b2lkIE5ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9jZXNzOjp3cml0ZUJs
b2JzVG9UZW1wb3JhcnlGaWxlcyhjb25zdCBWZWN0b3I8U3RyaQogICAgICAgICBmb3IgKGF1dG8m
IGZpbGUgOiBmaWxlUmVmZXJlbmNlcykKICAgICAgICAgICAgIGZpbGUtPnJldm9rZUZpbGVBY2Nl
c3MoKTsKIAotICAgICAgICBpZiAoIW1fY29ubmVjdGlvbiB8fCAhbV9jb25uZWN0aW9uLT5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIE5ldHdvcmtQcm9jZXNzOjpzaW5n
bGV0b24oKS5ncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyhm
aWxlTmFtZXMsIFt0aGlzLCBwcm90ZWN0b3IsIHJlcXVlc3RJZGVudGlmaWVyLCBmaWxlTmFtZXNd
KCkgeworICAgICAgICAgICAgaWYgKCFtX2Nvbm5lY3Rpb24gfHwgIW1fY29ubmVjdGlvbi0+aXNW
YWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBtX2Nvbm5lY3Rpb24t
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGlkV3JpdGVCbG9ic1Rv
VGVtcG9yYXJ5RmlsZXMocmVxdWVzdElkZW50aWZpZXIsIGZpbGVOYW1lcyksIDApOworICAgICAg
ICAgICAgbV9jb25uZWN0aW9uLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rp
b246OkRpZFdyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVzKHJlcXVlc3RJZGVudGlmaWVyLCBmaWxl
TmFtZXMpLCAwKTsKKyAgICAgICAgfSk7CiAgICAgfSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCA0YjM3ZmFjLi4xN2Y2
ZDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCkBAIC0yOTMsNiArMjkzLDIwIEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmRlc3Ryb3lQ
cml2YXRlQnJvd3NpbmdTZXNzaW9uKFNlc3Npb25JRCBzZXNzaW9uSUQpCiAgICAgU2Vzc2lvblRy
YWNrZXI6OmRlc3Ryb3lTZXNzaW9uKHNlc3Npb25JRCk7CiB9CiAKK3ZvaWQgTmV0d29ya1Byb2Nl
c3M6OmdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMsIHN0ZDo6ZnVuY3Rpb248dm9pZCAoKT4gY29tcGxl
dGlvbkhhbmRsZXIpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IG5leHRSZXF1ZXN0SUQ7CisgICAg
bV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxlcnMuc2V0KCsrbmV4dFJl
cXVlc3RJRCwgY29tcGxldGlvbkhhbmRsZXIpOworCisgICAgcGFyZW50UHJvY2Vzc0Nvbm5lY3Rp
b24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMobmV4dFJlcXVlc3RJRCwgZmlsZW5hbWVz
KSwgMCk7Cit9CisKK3ZvaWQgTmV0d29ya1Byb2Nlc3M6OmRpZEdyYW50U2FuZGJveEV4dGVuc2lv
bnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkKK3sKKyAgICBp
ZiAoYXV0byBoYW5kbGVyID0gbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFu
ZGxlcnMudGFrZShyZXF1ZXN0SUQpKQorICAgICAgICBoYW5kbGVyKCk7Cit9CisKIHN0YXRpYyB2
b2lkIGZldGNoRGlza0NhY2hlRW50cmllcyhTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2Vic2l0ZURhdGFGZXRjaE9wdGlvbj4gZmV0Y2hPcHRpb25zLCBzdGQ6OmZ1bmN0aW9uPHZvaWQg
KFZlY3RvcjxXZWJzaXRlRGF0YTo6RW50cnk+KT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAjaWYg
RU5BQkxFKE5FVFdPUktfQ0FDSEUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCBlMDc1ODNkLi5jMjgwZjk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTExMiw2ICsxMTIsOCBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIGVuc3VyZVByaXZhdGVCcm93c2luZ1Nlc3Npb24oV2ViQ29y
ZTo6U2Vzc2lvbklEKTsKIAorICAgIHZvaWQgZ3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJh
c2VQcm9jZXNzRm9yQmxvYnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywgc3RkOjpm
dW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcik7CisKIHByaXZhdGU6CiAgICAgTmV0
d29ya1Byb2Nlc3MoKTsKICAgICB+TmV0d29ya1Byb2Nlc3MoKTsKQEAgLTE3OCw2ICsxODAsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgZ2V0TmV0d29ya1Byb2Nlc3NTdGF0aXN0aWNzKHVpbnQ2NF90
IGNhbGxiYWNrSUQpOwogICAgIHZvaWQgY2xlYXJDYWNoZUZvckFsbE9yaWdpbnModWludDMyX3Qg
Y2FjaGVzVG9DbGVhcik7CiAKKyAgICB2b2lkIGRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0Rh
dGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCk7CisKICNpZiBVU0UoU09V
UCkKICAgICB2b2lkIHNldElnbm9yZVRMU0Vycm9ycyhib29sKTsKICAgICB2b2lkIHVzZXJQcmVm
ZXJyZWRMYW5ndWFnZXNDaGFuZ2VkKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CkBAIC0yMDAsNiAr
MjA0LDggQEAgcHJpdmF0ZToKICAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgY2hhciosIHN0ZDo6
dW5pcXVlX3B0cjxOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnQ+LCBQdHJIYXNoPGNvbnN0IGNoYXIq
Pj4gTmV0d29ya1Byb2Nlc3NTdXBwbGVtZW50TWFwOwogICAgIE5ldHdvcmtQcm9jZXNzU3VwcGxl
bWVudE1hcCBtX3N1cHBsZW1lbnRzOwogCisgICAgSGFzaE1hcDx1aW50NjRfdCwgc3RkOjpmdW5j
dGlvbjx2b2lkICgpPj4gbV9zYW5kYm94RXh0ZW5zaW9uRm9yQmxvYnNDb21wbGV0aW9uSGFuZGxl
cnM7CisKICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2b2lkIHBsYXRmb3JtSW5pdGlhbGl6ZU5l
dHdvcmtQcm9jZXNzQ29jb2EoY29uc3QgTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMm
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCAzYzQ5OTkxLi44OWYyNDNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbgpAQCAtNjcsNCArNjcsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgUHJlcGFyZVRvU3VzcGVuZCgpCiAgICAgQ2FuY2VsUHJlcGFyZVRvU3Vz
cGVuZCgpCiAgICAgUHJvY2Vzc0RpZFJlc3VtZSgpCisKKyAgICBEaWRHcmFudFNhbmRib3hFeHRl
bnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQpCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwCmluZGV4IGJiMDQ4MjIuLjQ5NTkzMjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuY3BwCkBA
IC0yOCw5ICsyOCwxMSBAQAogCiAjaW5jbHVkZSAiQXV0aGVudGljYXRpb25DaGFsbGVuZ2VQcm94
eS5oIgogI2luY2x1ZGUgIkN1c3RvbVByb3RvY29sTWFuYWdlclByb3h5TWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJEYXRhYmFzZVByb2Nlc3NNZXNzYWdlcy5oIgogI2luY2x1ZGUgIkRvd25sb2FkUHJv
eHlNZXNzYWdlcy5oIgogI2luY2x1ZGUgIk5ldHdvcmtQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
LmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlNhbmRi
b3hFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJQcm9jZXNzTWVzc2FnZXMuaCIKICNpbmNsdWRl
ICJXZWJQcm9jZXNzUG9vbC5oIgogI2luY2x1ZGUgIldlYnNpdGVEYXRhLmgiCkBAIC0yNjksNiAr
MjcxLDE5IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRGVsZXRlV2Vic2l0ZURhdGFG
b3JPcmlnaW5zKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAordm9p
ZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVBy
b2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBw
YXRocykKK3sKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRlbnNpb25zOwor
ICAgIGV4dGVuc2lvbnMuYWxsb2NhdGUocGF0aHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBhdGhzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIFJlYWRXcml0ZSBpcyBy
ZXF1aXJlZCBmb3IgY3JlYXRpbmcgaGFyZCBsaW5rcyBhcyB3ZWxsIGFzIGRlbGV0aW5nIHRoZSB0
ZW1wb3JhcnkgZmlsZSwgd2hpY2ggdGhlIERhdGFiYXNlUHJvY2VzcyB3aWxsIGRvLgorICAgICAg
ICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aHNbaV0sIFNhbmRib3hFeHRlbnNp
b246OlJlYWRXcml0ZSwgZXh0ZW5zaW9uc1tpXSk7CisgICAgfQorCisgICAgbV9wcm9jZXNzUG9v
bC5zZW5kVG9EYXRhYmFzZVByb2Nlc3NSZWxhdW5jaGluZ0lmTmVjZXNzYXJ5KE1lc3NhZ2VzOjpE
YXRhYmFzZVByb2Nlc3M6OkdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhwYXRocywgZXh0
ZW5zaW9ucykpOworICAgIGNvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3M6OkRpZEdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHJl
cXVlc3RJRCksIDApOworfQorCiB2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmRpZEZpbmlzaExh
dW5jaGluZyhQcm9jZXNzTGF1bmNoZXIqIGxhdW5jaGVyLCBJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIgY29ubmVjdGlvbklkZW50aWZpZXIpCiB7CiAgICAgQ2hpbGRQcm9jZXNzUHJveHk6OmRp
ZEZpbmlzaExhdW5jaGluZyhsYXVuY2hlciwgY29ubmVjdGlvbklkZW50aWZpZXIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94
eS5oCmluZGV4IDZhZTU0NzQuLjA5MzA5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5LmgKQEAgLTEwNiw2ICsxMDYs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkRmV0Y2hXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxs
YmFja0lELCBjb25zdCBXZWJzaXRlRGF0YSYpOwogICAgIHZvaWQgZGlkRGVsZXRlV2Vic2l0ZURh
dGEodWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkaWREZWxldGVXZWJzaXRlRGF0YUZv
ck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNhbmRib3hFeHRl
bnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyh1aW50NjRfdCByZXF1ZXN0SUQsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwYXRocyk7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlhZ25vc3RpY01l
c3NhZ2UodWludDY0X3QgcGFnZUlELCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNvbnN0IFN0cmlu
ZyYgZGVzY3JpcHRpb24pOwogICAgIHZvaWQgbG9nU2FtcGxlZERpYWdub3N0aWNNZXNzYWdlV2l0
aFJlc3VsdCh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3QgU3Ry
aW5nJiBkZXNjcmlwdGlvbiwgdWludDMyX3QgcmVzdWx0KTsKICAgICB2b2lkIGxvZ1NhbXBsZWRE
aWFnbm9zdGljTWVzc2FnZVdpdGhWYWx1ZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJv
Y2Vzc1Byb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsv
TmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgppbmRleCBkYzkzYjg0Li40N2VmNjc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3Jr
L05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4KQEAgLTI5LDYgKzI5LDggQEAgbWVzc2Fn
ZXMgLT4gTmV0d29ya1Byb2Nlc3NQcm94eSBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGlkRGVsZXRl
V2Vic2l0ZURhdGEodWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBEaWREZWxldGVXZWJzaXRlRGF0
YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCkKIAorICAgIEdyYW50U2FuZGJveEV4dGVu
c2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgVmVjdG9y
PFN0cmluZz4gcGF0aHMpCisKICAgICBQcm9jZXNzUmVhZHlUb1N1c3BlbmQoKQogICAgIFNldElz
SG9sZGluZ0xvY2tlZEZpbGVzKGJvb2wgaXNIb2xkaW5nTG9ja2VkRmlsZXMpCiAK
</data>
<flag name="review"
          id="300250"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276006</attachid>
            <date>2016-04-08 09:00:46 -0700</date>
            <delta_ts>2016-04-08 09:57:30 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>46166</size>
            <attacher name="Brady Eidson">beidson</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhYjUwMjk0Li5hYTQ3NTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjcg
QEAKKzIwMTYtMDQtMDcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgorCisgICAg
ICAgIE1vZGVybiBJREIgKEJsb2Igc3VwcG9ydCk6IFdyaXRlIGJsb2JzIHRvIHRlbXBvcmFyeSBm
aWxlcyBhbmQgbW92ZSB0aGVtIHRvIHRoZSBjb3JyZWN0IGxvY2F0aW9uIHdoZW4gc3RvcmluZyB0
aGVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2
MzIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbiwgQW5keSBFc3Rlcywg
YW5kIERhcmluIEFkbGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoTm8gdGVzdGFibGUgY2hh
bmdlIGluIGJlaGF2aW9yIHlldCwgY3VycmVudCB0ZXN0cyBwYXNzKS4KKworICAgICAgICBXaGVu
IGFza2VkIHRvIHN0b3JlIGEgQmxvYiAoaW5jbHVkaW5nIEZpbGVzKSBpbiBJbmRleGVkREIsIHRo
ZSBCbG9iIGlzIHdyaXR0ZW4gb3V0IHRvIGEgdGVtcG9yYXJ5IGZpbGUuCisgICAgICAgIAorICAg
ICAgICBUaGVuIHdoZW4gdGhlIHB1dE9yQWRkIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYnkgSURCU2Vy
dmVyIGl0IGluY2x1ZGVzIGEgbGlzdCBvZiBibG9iVVJMcyBhbmQgdGhlaXIgbWFwcGluZ3MKKyAg
ICAgICAgdG8gdGVtcG9yYXJ5IGZpbGVzLgorICAgICAgICAKKyAgICAgICAgRmluYWxseSwgYXMg
cGFydCBvZiBzdG9yaW5nIHRoZSBCbG9iIHZhbHVlIGluIHRoZSBkYXRhYmFzZSwgdGhvc2UgdGVt
cG9yYXJ5IGZpbGVzIGFyZSBtb3ZlZCBpbiB0byBwbGFjZQorICAgICAgICB1bmRlciB0aGUgSW5k
ZXhlZERCIGRpcmVjdG9yeSBmb3Igc3RvcmFnZSBhbmQgbGF0ZXIgcmV0cmlldmFsLgorCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCVmFsdWU6OklEQlZhbHVlKToKKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFj
a2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXI6On5JREJCYWNraW5nU3RvcmVUZW1wb3JhcnlG
aWxlSGFuZGxlcik6CisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OklEQlNlcnZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3Jl
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisKKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6YmxvYlJlY29yZHNUYWJsZVNjaGVtYSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmJsb2JSZWNvcmRzVGFibGVTY2hlbWFBbHRl
cm5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpibG9iRmlsZXNUYWJsZVNjaGVt
YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OmJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmVuc3VyZVZhbGlkQmxvYlRhYmxlcyk6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Z2V0T3JFc3RhYmxp
c2hEYXRhYmFzZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVy
OjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnRlbXBvcmFyeUZpbGVIYW5kbGVyKToKKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJUcmFuc2FjdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJUcmFuc2FjdGlvbjo6bW92
ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FM
aXRlSURCVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCVHJhbnNhY3Rpb246OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZl
cjo6U1FMaXRlSURCVHJhbnNhY3Rpb246OmFkZEJsb2JGaWxlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaDoKKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpJblByb2Nlc3NJREJTZXJ2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjphY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21w
bGV0ZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vzc0lEQlNl
cnZlci5oOgorCisgICAgICAgICogYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6YmxvYlVSTHNJc29s
YXRlZENvcHkpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
OgorCisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2d0ay9GaWxlU3lzdGVtR3RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmhhcmRMaW5rT3JDb3B5
RmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmhhcmRMaW5rT3JDb3B5RmlsZSk6CisKIDIwMTYtMDQtMDYgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IE1ha2Ug
c3VyZSBTUUxpdGUgYmFja2luZyBzdG9yZSByZWNvcmRzIGhhdmUgYSBJTlRFR0VSIFBSSU1BUlkg
S0VZIGNvbHVtbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlZhbHVl
LmNwcAppbmRleCBmMWRlZTEyLi45MjFlYzMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJWYWx1ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVmFsdWUuY3BwCkBAIC0zOCw2ICszOCw3IEBAIElEQlZhbHVlOjpJREJW
YWx1ZSgpCiAKIElEQlZhbHVlOjpJREJWYWx1ZShjb25zdCBTZXJpYWxpemVkU2NyaXB0VmFsdWUm
IHNjcmlwdFZhbHVlKQogICAgIDogbV9kYXRhKFRocmVhZFNhZmVEYXRhQnVmZmVyOjpjb3B5VmVj
dG9yKHNjcmlwdFZhbHVlLmRhdGEoKSkpCisgICAgLCBtX2Jsb2JVUkxzKHNjcmlwdFZhbHVlLmJs
b2JVUkxzSXNvbGF0ZWRDb3B5KCkpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCA1Mjk0
YTE3Li5mOTBlNGY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC01MCw2ICs1MCwxMyBAQCBlbnVt
IGNsYXNzIEluZGV4UmVjb3JkVHlwZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NsYXNz
IElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICB2aXJ0
dWFsIH5JREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcigpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBwcmVwYXJlRm9yQWNjZXNzVG9UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShj
b25zdCBTdHJpbmcmIHBhdGgpID0gMDsKK307CisKIGNsYXNzIElEQkJhY2tpbmdTdG9yZSB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+SURCQmFja2luZ1N0b3JlKCkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCmluZGV4
IDk5YTNkNDcuLmQxODk4ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0zOSwyNCArMzksMjYgQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBJREJTZXJ2ZXIgewogCi1SZWY8SURCU2VydmVyPiBJ
REJTZXJ2ZXI6OmNyZWF0ZSgpCitSZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6OmNyZWF0ZShJREJC
YWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKCkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IElEQlNlcnZlcihmaWxlSGFuZGxlcikpOwogfQogCi1SZWY8SURCU2VydmVyPiBJREJTZXJ2ZXI6
OmNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkKK1JlZjxJREJTZXJ2
ZXI+IElEQlNlcnZlcjo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSURCU2VydmVyKGRhdGFiYXNlRGlyZWN0b3J5UGF0aCkp
OworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IElEQlNlcnZlcihkYXRhYmFzZURpcmVjdG9yeVBh
dGgsIGZpbGVIYW5kbGVyKSk7CiB9CiAKLUlEQlNlcnZlcjo6SURCU2VydmVyKCkKK0lEQlNlcnZl
cjo6SURCU2VydmVyKElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFu
ZGxlcikKKyAgICA6IG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRs
ZXIpCiB7CiAgICAgTG9ja2VyPExvY2s+IGxvY2tlcihtX2RhdGFiYXNlVGhyZWFkQ3JlYXRpb25M
b2NrKTsKICAgICBtX3RocmVhZElEID0gY3JlYXRlVGhyZWFkKElEQlNlcnZlcjo6ZGF0YWJhc2VU
aHJlYWRFbnRyeSwgdGhpcywgIkluZGV4ZWREYXRhYmFzZSBTZXJ2ZXIiKTsKIH0KIAotSURCU2Vy
dmVyOjpJREJTZXJ2ZXIoY29uc3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgpCitJREJT
ZXJ2ZXI6OklEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCwgSURC
QmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyKQogICAgIDogbV9k
YXRhYmFzZURpcmVjdG9yeVBhdGgoZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQorICAgICwgbV9iYWNr
aW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiSURCU2VydmVyIGNyZWF0ZWQgYXQgcGF0aCAlcyIsIGRhdGFiYXNlRGlyZWN0b3J5
UGF0aC51dGY4KCkuZGF0YSgpKTsKIApAQCAtMTIwLDcgKzEyMiw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwog
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVu
dGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQg
SURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRh
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNl
cnZlci5oCmluZGV4IDk0NTQ5YzguLjY1YTAyYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKQEAgLTQ5LDEwICs0OSwxMiBA
QCBjbGFzcyBJREJWYWx1ZTsKIAogbmFtZXNwYWNlIElEQlNlcnZlciB7CiAKK2NsYXNzIElEQkJh
Y2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyOworCiBjbGFzcyBJREJTZXJ2ZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxJREJTZXJ2ZXI+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPElEQlNl
cnZlcj4gY3JlYXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxJREJTZXJ2ZXI+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CisgICAgc3RhdGlj
IFJlZjxJREJTZXJ2ZXI+IGNyZWF0ZShJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxl
ciYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8SURCU2VydmVyPiBjcmVhdGUoY29u
c3QgU3RyaW5nJiBkYXRhYmFzZURpcmVjdG9yeVBhdGgsIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFy
eUZpbGVIYW5kbGVyJik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlZ2lzdGVyQ29ubmVj
dGlvbihJREJDb25uZWN0aW9uVG9DbGllbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVu
cmVnaXN0ZXJDb25uZWN0aW9uKElEQkNvbm5lY3Rpb25Ub0NsaWVudCYpOwpAQCAtOTMsOCArOTUs
OCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gY3JlYXRl
QmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYpOwogCiBwcml2YXRlOgot
ICAgIElEQlNlcnZlcigpOwotICAgIElEQlNlcnZlcihjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCk7CisgICAgSURCU2VydmVyKElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVI
YW5kbGVyJik7CisgICAgSURCU2VydmVyKGNvbnN0IFN0cmluZyYgZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwogCiAgICAgVW5pcXVl
SURCRGF0YWJhc2UmIGdldE9yQ3JlYXRlVW5pcXVlSURCRGF0YWJhc2UoY29uc3QgSURCRGF0YWJh
c2VJZGVudGlmaWVyJik7CiAKQEAgLTExNyw2ICsxMTksNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8SURCUmVzb3VyY2VJZGVudGlmaWVyLCBVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uKj4g
bV90cmFuc2FjdGlvbnM7CiAKICAgICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGg7Cisg
ICAgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIG1fYmFja2luZ1N0b3JlVGVt
cG9yYXJ5RmlsZUhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJC
YWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggZTU1N2EwZS4uOGRiYTU0YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJh
Y2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTE2MCw5ICsxNjAsNDMgQEAgc3RhdGlj
IGNvbnN0IFN0cmluZyYgdjJJbmRleFJlY29yZHNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpCiAgICAg
cmV0dXJuIHYySW5kZXhSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmc7CiB9CiAKK3N0YXRpYyBjb25z
dCBTdHJpbmcgYmxvYlJlY29yZHNUYWJsZVNjaGVtYShjb25zdCBTdHJpbmcmIHRhYmxlTmFtZSkK
K3sKKyAgICByZXR1cm4gbWFrZVN0cmluZygiQ1JFQVRFIFRBQkxFICIsIHRhYmxlTmFtZSwgIiAo
b2JqZWN0U3RvcmVSb3cgSU5URUdFUiBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMLCBibG9iVVJM
IFRFWFQgTk9UIE5VTEwgT04gQ09ORkxJQ1QgRkFJTCkiKTsKK30KKworc3RhdGljIGNvbnN0IFN0
cmluZyYgYmxvYlJlY29yZHNUYWJsZVNjaGVtYSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gYmxvYlJlY29yZHNUYWJsZVNjaGVtYVN0cmluZyhibG9iUmVjb3Jkc1RhYmxl
U2NoZW1hKCJCbG9iUmVjb3JkcyIpKTsKKyAgICByZXR1cm4gYmxvYlJlY29yZHNUYWJsZVNjaGVt
YVN0cmluZzsKK30KKworc3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYlJlY29yZHNUYWJsZVNjaGVt
YUFsdGVybmF0ZSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gYmxvYlJl
Y29yZHNUYWJsZVNjaGVtYVN0cmluZyhibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCJcIkJsb2JSZWNv
cmRzXCIiKSk7CisgICAgcmV0dXJuIGJsb2JSZWNvcmRzVGFibGVTY2hlbWFTdHJpbmc7Cit9CisK
K3N0YXRpYyBjb25zdCBTdHJpbmcgYmxvYkZpbGVzVGFibGVTY2hlbWEoY29uc3QgU3RyaW5nJiB0
YWJsZU5hbWUpCit7CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoIkNSRUFURSBUQUJMRSAiLCB0YWJs
ZU5hbWUsICIgKGJsb2JVUkwgVEVYVCBOT1QgTlVMTCBPTiBDT05GTElDVCBGQUlMIFVOSVFVRSBP
TiBDT05GTElDVCBGQUlMLCBmaWxlTmFtZSBURVhUIE5PVCBOVUxMIE9OIENPTkZMSUNUIEZBSUwg
VU5JUVVFIE9OIENPTkZMSUNUIEZBSUwpIik7Cit9CiAKLVNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
U1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRp
ZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnkpCitzdGF0aWMgY29uc3Qg
U3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYSgpCit7CisgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmcoYmxvYkZpbGVzVGFibGVTY2hl
bWEoIkJsb2JGaWxlcyIpKTsKKyAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7
Cit9CisKK3N0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0ZXJuYXRl
KCkKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBibG9iRmlsZXNUYWJsZVNj
aGVtYVN0cmluZyhibG9iRmlsZXNUYWJsZVNjaGVtYSgiXCJCbG9iRmlsZXNcIiIpKTsKKyAgICBy
ZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7Cit9CisKK1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYg
aWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tp
bmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlcikKICAgICA6IG1faWRlbnRp
ZmllcihpZGVudGlmaWVyKQorICAgICwgbV90ZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxl
cikKIHsKICAgICBtX2Fic29sdXRlRGF0YWJhc2VEaXJlY3RvcnkgPSBpZGVudGlmaWVyLmRhdGFi
YXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3QoZGF0YWJhc2VSb290RGlyZWN0b3J5KTsKIH0KQEAg
LTI3NSw2ICszMDksNzggQEAgc3RhdGljIGJvb2wgY3JlYXRlT3JNaWdyYXRlUmVjb3Jkc1RhYmxl
SWZOZWNlc3NhcnkoU1FMaXRlRGF0YWJhc2UmIGRhdGFiYXNlKQogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRCbG9iVGFibGVzKCkK
K3sKKyAgICBBU1NFUlQobV9zcWxpdGVEQik7CisgICAgQVNTRVJUKG1fc3FsaXRlREItPmlzT3Bl
bigpKTsKKworICAgIFN0cmluZyBjdXJyZW50U2NoZW1hOworICAgIHsKKyAgICAgICAgLy8gRmV0
Y2ggdGhlIHNjaGVtYSBmb3IgYW4gZXhpc3RpbmcgYmxvYiByZWNvcmQgdGFibGUuCisgICAgICAg
IFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3Fs
IEZST00gc3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYlJlY29yZHMnIik7CisgICAg
ICAgIGlmIChzdGF0ZW1lbnQucHJlcGFyZSgpICE9IFNRTElURV9PSykgeworICAgICAgICAgICAg
TE9HX0VSUk9SKCJVbmFibGUgdG8gcHJlcGFyZSBzdGF0ZW1lbnQgdG8gZmV0Y2ggc2NoZW1hIGZv
ciB0aGUgQmxvYlJlY29yZHMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgc3FsaXRlUmVzdWx0ID0gc3RhdGVtZW50LnN0ZXAoKTsK
KworICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBCbG9iUmVjb3JkcyB0YWJsZSBhdCBhbGwsIGNy
ZWF0ZSBpdC4uCisgICAgICAgIGlmIChzcWxpdGVSZXN1bHQgPT0gU1FMSVRFX0RPTkUpIHsKKyAg
ICAgICAgICAgIGlmICghbV9zcWxpdGVEQi0+ZXhlY3V0ZUNvbW1hbmQoYmxvYlJlY29yZHNUYWJs
ZVNjaGVtYSgpKSkgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGNyZWF0
ZSBCbG9iUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3VycmVudFNjaGVt
YSA9IGJsb2JSZWNvcmRzVGFibGVTY2hlbWEoKTsKKyAgICAgICAgfSBlbHNlIGlmIChzcWxpdGVS
ZXN1bHQgIT0gU1FMSVRFX1JPVykgeworICAgICAgICAgICAgTE9HX0VSUk9SKCJFcnJvciBleGVj
dXRpbmcgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJsb2JSZWNvcmRzIHRhYmxl
LiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGN1cnJlbnRTY2hlbWEgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uVGV4dCgxKTsKKyAgICB9CisK
KyAgICBpZiAoY3VycmVudFNjaGVtYSAhPSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hKCkgJiYgY3Vy
cmVudFNjaGVtYSAhPSBibG9iUmVjb3Jkc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJJbnZhbGlkIEJsb2JSZWNvcmRzIHRhYmxlIHNjaGVtYSBmb3VuZCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgeworICAgICAgICAvLyBGZXRjaCB0
aGUgc2NoZW1hIGZvciBhbiBleGlzdGluZyBibG9iIGZpbGUgdGFibGUuCisgICAgICAgIFNRTGl0
ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKm1fc3FsaXRlREIsICJTRUxFQ1QgdHlwZSwgc3FsIEZST00g
c3FsaXRlX21hc3RlciBXSEVSRSB0YmxfbmFtZT0nQmxvYkZpbGVzJyIpOworICAgICAgICBpZiAo
c3RhdGVtZW50LnByZXBhcmUoKSAhPSBTUUxJVEVfT0spIHsKKyAgICAgICAgICAgIExPR19FUlJP
UigiVW5hYmxlIHRvIHByZXBhcmUgc3RhdGVtZW50IHRvIGZldGNoIHNjaGVtYSBmb3IgdGhlIEJs
b2JGaWxlcyB0YWJsZS4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGludCBzcWxpdGVSZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOworCisgICAgICAg
IC8vIElmIHRoZXJlIGlzIG5vIEJsb2JGaWxlcyB0YWJsZSBhdCBhbGwsIGNyZWF0ZSBpdCBhbmQg
dGhlbiBiYWlsLgorICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ID09IFNRTElURV9ET05FKSB7Cisg
ICAgICAgICAgICBpZiAoIW1fc3FsaXRlREItPmV4ZWN1dGVDb21tYW5kKGJsb2JGaWxlc1RhYmxl
U2NoZW1hKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRl
IEJsb2JGaWxlcyB0YWJsZSBpbiBkYXRhYmFzZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoc3FsaXRlUmVzdWx0ICE9IFNRTElURV9ST1cpIHsKKyAg
ICAgICAgICAgIExPR19FUlJPUigiRXJyb3IgZXhlY3V0aW5nIHN0YXRlbWVudCB0byBmZXRjaCBz
Y2hlbWEgZm9yIHRoZSBCbG9iRmlsZXMgdGFibGUuIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKworICAgICAgICBjdXJyZW50U2NoZW1hID0gc3RhdGVtZW50LmdldENv
bHVtblRleHQoMSk7CisgICAgfQorCisgICAgaWYgKGN1cnJlbnRTY2hlbWEgIT0gYmxvYkZpbGVz
VGFibGVTY2hlbWEoKSAmJiBjdXJyZW50U2NoZW1hICE9IGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKCkpIHsKKyAgICAgICAgTE9HX0VSUk9SKCJJbnZhbGlkIEJsb2JGaWxlcyB0YWJsZSBz
Y2hlbWEgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCiBib29sIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZW5zdXJlVmFsaWRSZWNv
cmRzVGFibGUoKQogewogICAgIEFTU0VSVChtX3NxbGl0ZURCKTsKQEAgLTYxMiw2ICs3MTgsMTIg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpnZXRPckVzdGFibGlzaERhdGFiYXNl
SW5mbyhJREJEYXRhYmFzZUluZm8mIGluZm8KICAgICAgICAgcmV0dXJuIHsgSURCRGF0YWJhc2VF
eGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJFcnJvciBjcmVhdGluZyBvciBt
aWdyYXRpbmcgSW5kZXggUmVjb3JkcyB0YWJsZSBpbiBkYXRhYmFzZSIpIH07CiAgICAgfQogCisg
ICAgaWYgKCFlbnN1cmVWYWxpZEJsb2JUYWJsZXMoKSkgeworICAgICAgICBMT0dfRVJST1IoIkVy
cm9yIGNyZWF0aW5nIG9yIGNvbmZpcm1pbmcgQmxvYiBSZWNvcmRzIHRhYmxlcyBpbiBkYXRhYmFz
ZSIpOworICAgICAgICBtX3NxbGl0ZURCID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIHsgSURC
RGF0YWJhc2VFeGNlcHRpb246OlVua25vd25FcnJvciwgQVNDSUlMaXRlcmFsKCJFcnJvciBjcmVh
dGluZyBvciBjb25maXJtaW5nIEJsb2IgUmVjb3JkcyB0YWJsZXMgaW4gZGF0YWJhc2UiKSB9Owor
ICAgIH0KKwogICAgIGF1dG8gZGF0YWJhc2VJbmZvID0gZXh0cmFjdEV4aXN0aW5nRGF0YWJhc2VJ
bmZvKCk7CiAgICAgaWYgKCFkYXRhYmFzZUluZm8pCiAgICAgICAgIGRhdGFiYXNlSW5mbyA9IGNy
ZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5mbygpOwpAQCAtMTMwMCwxMyArMTQxMiwx
NCBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVwZGF0ZUFsbEluZGV4ZXNGb3JB
ZGRSZWNvcmQoY29uc3QgSURCT2JqZWN0U3RvcgogICAgIHJldHVybiBlcnJvcjsKIH0KIAotSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0IElEQk9iamVjdFN0b3JlSW5m
byYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBrZXlEYXRhLCBjb25zdCBUaHJl
YWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVj
dG9yPFN0cmluZz4mKQorSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGlvbklkZW50aWZpZXIsIGNvbnN0
IElEQk9iamVjdFN0b3JlSW5mbyYgb2JqZWN0U3RvcmVJbmZvLCBjb25zdCBJREJLZXlEYXRhJiBr
ZXlEYXRhLCBjb25zdCBUaHJlYWRTYWZlRGF0YUJ1ZmZlciYgdmFsdWUsIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBibG9iVVJMcywgY29uc3QgVmVjdG9yPFN0cmluZz4mIGJsb2JGaWxlcykKIHsKICAg
ICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQgLSBrZXkg
JXMsIG9iamVjdCBzdG9yZSAlIiBQUkl1NjQsIGtleURhdGEubG9nZ2luZ1N0cmluZygpLnV0Zjgo
KS5kYXRhKCksIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCkpOwogCiAgICAgQVNTRVJUKG1f
c3FsaXRlREIpOwogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5pc09wZW4oKSk7CiAgICAgQVNTRVJU
KHZhbHVlLmRhdGEoKSk7CisgICAgQVNTRVJUKGJsb2JVUkxzLnNpemUoKSA9PSBibG9iRmlsZXMu
c2l6ZSgpKTsKIAogICAgIGF1dG8qIHRyYW5zYWN0aW9uID0gbV90cmFuc2FjdGlvbnMuZ2V0KHRy
YW5zYWN0aW9uSWRlbnRpZmllcik7CiAgICAgaWYgKCF0cmFuc2FjdGlvbiB8fCAhdHJhbnNhY3Rp
b24tPmluUHJvZ3Jlc3MoKSkgewpAQCAtMTMyMyw2ICsxNDM2LDggQEAgSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0
cmFuc2FjdGkKICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gc2VyaWFsaXplIElEQktleSB0
byBiZSBzdG9yZWQgaW4gYW4gb2JqZWN0IHN0b3JlIik7CiAgICAgICAgIHJldHVybiB7IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHNl
cmlhbGl6ZSBJREJLZXkgdG8gYmUgc3RvcmVkIGluIGFuIG9iamVjdCBzdG9yZSIpIH07CiAgICAg
fQorCisgICAgaW50NjRfdCByZWNvcmRJRCA9IDA7CiAgICAgewogICAgICAgICBTUUxpdGVTdGF0
ZW1lbnQgc3FsKCptX3NxbGl0ZURCLCBBU0NJSUxpdGVyYWwoIklOU0VSVCBJTlRPIFJlY29yZHMg
VkFMVUVTICg/LCBDQVNUKD8gQVMgVEVYVCksID8sIE5VTEwpOyIpKTsKICAgICAgICAgaWYgKHNx
bC5wcmVwYXJlKCkgIT0gU1FMSVRFX09LCkBAIC0xMzMzLDYgKzE0NDgsOCBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHV0IHJlY29y
ZCBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiIGluIFJlY29yZHMgdGFibGUgKCVpKSAtICVz
Iiwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCks
IG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKICAgICAgICAgICAgIHJldHVybiB7IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIHN0
b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiKSB9OwogICAgICAgICB9CisKKyAgICAgICAgcmVj
b3JkSUQgPSBtX3NxbGl0ZURCLT5sYXN0SW5zZXJ0Um93SUQoKTsKICAgICB9CiAKICAgICBhdXRv
IGVycm9yID0gdXBkYXRlQWxsSW5kZXhlc0ZvckFkZFJlY29yZChvYmplY3RTdG9yZUluZm8sIGtl
eURhdGEsIHZhbHVlKTsKQEAgLTEzNDgsNiArMTQ2NSw1NSBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5z
YWN0aQogICAgICAgICB9CiAgICAgfQogCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9i
VVJMcy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiB1cmwgPSBibG9iVVJMc1tpXTsKKyAg
ICAgICAgeworICAgICAgICAgICAgU1FMaXRlU3RhdGVtZW50IHNxbCgqbV9zcWxpdGVEQiwgQVND
SUlMaXRlcmFsKCJJTlNFUlQgSU5UTyBCbG9iUmVjb3JkcyBWQUxVRVMgKD8sID8pOyIpKTsKKyAg
ICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHNxbC5iaW5kSW50NjQoMSwgcmVjb3JkSUQpICE9IFNRTElURV9PSworICAgICAgICAgICAg
ICAgIHx8IHNxbC5iaW5kVGV4dCgyLCB1cmwpICE9IFNRTElURV9PSworICAgICAgICAgICAgICAg
IHx8IHNxbC5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKKyAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJ
SUxpdGVyYWwoIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2UiKSB9Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGludDY0X3QgcG90ZW50aWFsRmlsZU5h
bWVJbnRlZ2VyID0gbV9zcWxpdGVEQi0+bGFzdEluc2VydFJvd0lEKCk7CisKKyAgICAgICAgLy8g
SWYgd2UgYWxyZWFkeSBoYXZlIGEgZmlsZSBmb3IgdGhpcyBibG9iVVJMLCBub3RoaW5nIGxlZnQg
dG8gZG8uCisgICAgICAgIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzcWwoKm1fc3Fs
aXRlREIsIEFTQ0lJTGl0ZXJhbCgiU0VMRUNUIGZpbGVOYW1lIEZST00gQmxvYkZpbGVzIFdIRVJF
IGJsb2JVUkwgPSA/OyIpKTsKKyAgICAgICAgICAgIGlmIChzcWwucHJlcGFyZSgpICE9IFNRTElU
RV9PSworICAgICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCB1cmwpICE9IFNRTElURV9P
SykgeworICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBm
aWxlbmFtZXMgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byBleGFt
aW5lIEJsb2IgZmlsZW5hbWVzIGluIGRhdGFiYXNlIikgfTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IHNxbC5zdGVwKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0
ICE9IFNRTElURV9ST1cgJiYgcmVzdWx0ICE9IFNRTElURV9ET05FKSB7CisgICAgICAgICAgICAg
ICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gZXhhbWluZSBCbG9iIGZpbGVuYW1lcyBpbiBkYXRhYmFz
ZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpVbmtu
b3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGV4YW1pbmUgQmxvYiBmaWxlbmFtZXMg
aW4gZGF0YWJhc2UiKSB9OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocmVzdWx0
ID09IFNRTElURV9ST1cpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBXZSBkb24ndCBhbHJlYWR5IGhhdmUgYSBmaWxlIGZvciB0aGlzIGJsb2JVUkws
IHNvIGNvbW1pdCBvdXIgZmlsZSBhcyBhIHVuaXF1ZSBmaWxlbmFtZQorICAgICAgICBTdHJpbmcg
c3RvcmVkRmlsZW5hbWUgPSBTdHJpbmc6OmZvcm1hdCgiJSIgUFJJZDY0ICIuYmxvYiIsIHBvdGVu
dGlhbEZpbGVOYW1lSW50ZWdlcik7CisgICAgICAgIHsKKyAgICAgICAgICAgIFNRTGl0ZVN0YXRl
bWVudCBzcWwoKm1fc3FsaXRlREIsIEFTQ0lJTGl0ZXJhbCgiSU5TRVJUIElOVE8gQmxvYkZpbGVz
IFZBTFVFUyAoPywgPyk7IikpOworICAgICAgICAgICAgaWYgKHNxbC5wcmVwYXJlKCkgIT0gU1FM
SVRFX09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIHVybCkgIT0gU1FMSVRF
X09LCisgICAgICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDIsIHN0b3JlZEZpbGVuYW1lKSAh
PSBTUUxJVEVfT0sKKyAgICAgICAgICAgICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05F
KSB7CisgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmls
ZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4geyBJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9yLCBBU0NJSUxpdGVyYWwoIlVuYWJsZSB0byByZWNv
cmQgQmxvYiBmaWxlIHJlY29yZCBpbiBkYXRhYmFzZSIpIH07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICB0cmFuc2FjdGlvbi0+YWRkQmxvYkZpbGUoYmxvYkZpbGVzW2ldLCBz
dG9yZWRGaWxlbmFtZSk7CisgICAgfQorCiAgICAgdHJhbnNhY3Rpb24tPm5vdGlmeUN1cnNvcnNP
ZkNoYW5nZXMob2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSk7CiAKICAgICByZXR1cm4gZXJy
b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
U1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5kZXggN2YyMzkyYS4uOGU5MTUxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBT
UUxpdGVJREJDdXJzb3I7CiAKIGNsYXNzIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJ
REJCYWNraW5nU3RvcmUgewogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25z
dCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVj
dG9yeSk7CisgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRp
ZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3Rv
cmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwogICAgIAogICAgIH5TUUxpdGVJREJCYWNraW5nU3Rv
cmUoKSBmaW5hbDsKIApAQCAtODEsMTMgKzgxLDE3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdW5y
ZWdpc3RlckN1cnNvcihTUUxpdGVJREJDdXJzb3ImKTsKIAorICAgIFN0cmluZyBmdWxsRGF0YWJh
c2VEaXJlY3RvcnkoKSBjb25zdDsKKworICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVI
YW5kbGVyJiB0ZW1wb3JhcnlGaWxlSGFuZGxlcigpIGNvbnN0IHsgcmV0dXJuIG1fdGVtcG9yYXJ5
RmlsZUhhbmRsZXI7IH0KKwogcHJpdmF0ZToKICAgICBTdHJpbmcgZmlsZW5hbWVGb3JEYXRhYmFz
ZU5hbWUoKSBjb25zdDsKLSAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5KCkgY29uc3Q7
CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKIAogICAgIGJvb2wgZW5zdXJl
VmFsaWRSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFi
bGUoKTsKKyAgICBib29sIGVuc3VyZVZhbGlkQmxvYlRhYmxlcygpOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxJREJEYXRhYmFzZUluZm8+IGNyZWF0ZUFuZFBvcHVsYXRlSW5pdGlhbERhdGFiYXNlSW5m
bygpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxJREJEYXRhYmFzZUluZm8+IGV4dHJhY3RFeGlzdGlu
Z0RhdGFiYXNlSW5mbygpOwogCkBAIC0xMTgsNiArMTIyLDggQEAgcHJpdmF0ZToKIAogICAgIFJl
ZlB0cjxKU0M6OlZNPiBtX3ZtOwogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNHbG9iYWxPYmplY3Q+
IG1fZ2xvYmFsT2JqZWN0OworCisgICAgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRs
ZXImIG1fdGVtcG9yYXJ5RmlsZUhhbmRsZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2
ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IGRjYmUzMzEuLmE2YTBjMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJUcmFuc2FjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9uLmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAj
aW5jbHVkZSAiSURCQ3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIkluZGV4ZWREQi5oIgogI2luY2x1
ZGUgIlNRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIgpAQCAtNzUsMTIgKzc2LDM2IEBAIElEQkVycm9y
IFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjpjb21taXQoKQogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0
aW9uLT5pblByb2dyZXNzKCkpCiAgICAgICAgIHJldHVybiB7IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpVbmtub3duRXJyb3IsIEFTQ0lJTGl0ZXJhbCgiVW5hYmxlIHRvIGNvbW1pdCBTUUxpdGUgdHJh
bnNhY3Rpb24gaW4gZGF0YWJhc2UgYmFja2VuZCIpIH07CiAKKyAgICBtb3ZlQmxvYkZpbGVzSWZO
ZWNlc3NhcnkoKTsKKwogICAgIHJlc2V0KCk7CiAgICAgcmV0dXJuIHsgfTsKIH0KIAordm9pZCBT
UUxpdGVJREJUcmFuc2FjdGlvbjo6bW92ZUJsb2JGaWxlc0lmTmVjZXNzYXJ5KCkKK3sKKyAgICBT
dHJpbmcgZGF0YWJhc2VEaXJlY3RvcnkgPSBtX2JhY2tpbmdTdG9yZS5mdWxsRGF0YWJhc2VEaXJl
Y3RvcnkoKTsKKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVk
RmlsZW5hbWVzKSB7CisgICAgICAgIG1fYmFja2luZ1N0b3JlLnRlbXBvcmFyeUZpbGVIYW5kbGVy
KCkucHJlcGFyZUZvckFjY2Vzc1RvVGVtcG9yYXJ5RmlsZShlbnRyeS5maXJzdCk7CisKKyAgICAg
ICAgaWYgKCFoYXJkTGlua09yQ29weUZpbGUoZW50cnkuZmlyc3QsIHBhdGhCeUFwcGVuZGluZ0Nv
bXBvbmVudChkYXRhYmFzZURpcmVjdG9yeSwgZW50cnkuc2Vjb25kKSkpCisgICAgICAgICAgICBM
T0dfRVJST1IoIkZhaWxlZCB0byBsaW5rL2NvcHkgdGVtcG9yYXJ5IGJsb2IgZmlsZSAnJXMnIHRv
IGxvY2F0aW9uICclcyciLCBlbnRyeS5maXJzdC51dGY4KCkuZGF0YSgpLCBwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoZGF0YWJhc2VEaXJlY3RvcnksIGVudHJ5LnNlY29uZCkudXRmOCgpLmRhdGEo
KSk7CisKKyAgICAgICAgbV9iYWNraW5nU3RvcmUudGVtcG9yYXJ5RmlsZUhhbmRsZXIoKS5hY2Nl
c3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShlbnRyeS5maXJzdCk7CisgICAgfQorCisgICAgbV9i
bG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmNsZWFyKCk7Cit9CisKIElEQkVycm9yIFNR
TGl0ZUlEQlRyYW5zYWN0aW9uOjphYm9ydCgpCiB7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
YmxvYlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lcykgeworICAgICAgICBtX2JhY2tpbmdTdG9y
ZS50ZW1wb3JhcnlGaWxlSGFuZGxlcigpLnByZXBhcmVGb3JBY2Nlc3NUb1RlbXBvcmFyeUZpbGUo
ZW50cnkuZmlyc3QpOworICAgICAgICBtX2JhY2tpbmdTdG9yZS50ZW1wb3JhcnlGaWxlSGFuZGxl
cigpLmFjY2Vzc1RvVGVtcG9yYXJ5RmlsZUNvbXBsZXRlKGVudHJ5LmZpcnN0KTsKKyAgICB9CisK
KyAgICBtX2Jsb2JUZW1wb3JhcnlBbmRTdG9yZWRGaWxlbmFtZXMuY2xlYXIoKTsKKwogICAgIGlm
ICghbV9zcWxpdGVUcmFuc2FjdGlvbiB8fCAhbV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVz
cygpKQogICAgICAgICByZXR1cm4geyBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VW5rbm93bkVycm9y
LCBBU0NJSUxpdGVyYWwoIk5vIFNRTGl0ZSB0cmFuc2FjdGlvbiBpbiBwcm9ncmVzcyB0byBhYm9y
dCIpIH07CiAKQEAgLTk3LDYgKzEyMiw3IEBAIHZvaWQgU1FMaXRlSURCVHJhbnNhY3Rpb246OnJl
c2V0KCkKIHsKICAgICBtX3NxbGl0ZVRyYW5zYWN0aW9uID0gbnVsbHB0cjsKICAgICBjbGVhckN1
cnNvcnMoKTsKKyAgICBBU1NFUlQobV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmlz
RW1wdHkoKSk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJzb3I+IFNRTGl0ZUlE
QlRyYW5zYWN0aW9uOjptYXliZU9wZW5CYWNraW5nU3RvcmVDdXJzb3IodWludDY0X3Qgb2JqZWN0
U3RvcmVJRCwgdWludDY0X3QgaW5kZXhJRCwgY29uc3QgSURCS2V5UmFuZ2VEYXRhJiByYW5nZSkK
QEAgLTE3MSw2ICsxOTcsMTEgQEAgYm9vbCBTUUxpdGVJREJUcmFuc2FjdGlvbjo6aW5Qcm9ncmVz
cygpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rpb24gJiYgbV9zcWxpdGVUcmFu
c2FjdGlvbi0+aW5Qcm9ncmVzcygpOwogfQogCit2b2lkIFNRTGl0ZUlEQlRyYW5zYWN0aW9uOjph
ZGRCbG9iRmlsZShjb25zdCBTdHJpbmcmIHRlbXBvcmFyeVBhdGgsIGNvbnN0IFN0cmluZyYgc3Rv
cmVkRmlsZW5hbWUpCit7CisgICAgbV9ibG9iVGVtcG9yYXJ5QW5kU3RvcmVkRmlsZW5hbWVzLmFw
cGVuZCh7IHRlbXBvcmFyeVBhdGgsIHN0b3JlZEZpbGVuYW1lIH0pOworfQorCiB9IC8vIG5hbWVz
cGFjZSBJREJTZXJ2ZXIKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQlRyYW5zYWN0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJh
bnNhY3Rpb24uaAppbmRleCAwZWZlNzQ0Li45OGY4MzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNhY3Rpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCVHJhbnNh
Y3Rpb24uaApAQCAtNzEsMTYgKzcxLDIxIEBAIHB1YmxpYzoKIAogICAgIFNRTGl0ZVRyYW5zYWN0
aW9uKiBzcWxpdGVUcmFuc2FjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3FsaXRlVHJhbnNhY3Rp
b24uZ2V0KCk7IH0KIAorICAgIHZvaWQgYWRkQmxvYkZpbGUoY29uc3QgU3RyaW5nJiB0ZW1wb3Jh
cnlQYXRoLCBjb25zdCBTdHJpbmcmIHN0b3JlZEZpbGVuYW1lKTsKKwogcHJpdmF0ZToKICAgICB2
b2lkIGNsZWFyQ3Vyc29ycygpOwogICAgIHZvaWQgcmVzZXQoKTsKIAorICAgIHZvaWQgbW92ZUJs
b2JGaWxlc0lmTmVjZXNzYXJ5KCk7CisKICAgICBJREJUcmFuc2FjdGlvbkluZm8gbV9pbmZvOwog
CiAgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlJiBtX2JhY2tpbmdTdG9yZTsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U1FMaXRlVHJhbnNhY3Rpb24+IG1fc3FsaXRlVHJhbnNhY3Rpb247CiAgICAgSGFz
aE1hcDxJREJSZXNvdXJjZUlkZW50aWZpZXIsIHN0ZDo6dW5pcXVlX3B0cjxTUUxpdGVJREJDdXJz
b3I+PiBtX2N1cnNvcnM7CiAgICAgSGFzaFNldDxTUUxpdGVJREJDdXJzb3IqPiBtX2JhY2tpbmdT
dG9yZUN1cnNvcnM7CisgICAgVmVjdG9yPHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4+IG1fYmxv
YlRlbXBvcmFyeUFuZFN0b3JlZEZpbGVuYW1lczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNl
cnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVk
L0luUHJvY2Vzc0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zaGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcAppbmRleCA2YTUzMTgzLi41ZGM4M2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9j
ZXNzSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
aGFyZWQvSW5Qcm9jZXNzSURCU2VydmVyLmNwcApAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVk
ZSAiSURCQ29ubmVjdGlvblRvQ2xpZW50LmgiCiAjaW5jbHVkZSAiSURCQ29ubmVjdGlvblRvU2Vy
dmVyLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29ySW5mby5oIgpAQCAtNTYsNyArNTcsNyBAQCBSZWY8
SW5Qcm9jZXNzSURCU2VydmVyPiBJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIGRhdGFiYXNlRGlyZWN0bwogfQogCiBJblByb2Nlc3NJREJTZXJ2ZXI6OkluUHJvY2Vzc0lE
QlNlcnZlcigpCi0gICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKCkp
CisgICAgOiBtX3NlcnZlcihJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKCp0aGlzKSkKIHsK
ICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZl
ciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwpAQCAt
NjQsNyArNjUsNyBAQCBJblByb2Nlc3NJREJTZXJ2ZXI6OkluUHJvY2Vzc0lEQlNlcnZlcigpCiB9
CiAKIEluUHJvY2Vzc0lEQlNlcnZlcjo6SW5Qcm9jZXNzSURCU2VydmVyKGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VEaXJlY3RvcnlQYXRoKQotICAgIDogbV9zZXJ2ZXIoSURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNyZWF0ZShkYXRhYmFzZURpcmVjdG9yeVBhdGgpKQorICAgIDogbV9zZXJ2ZXIoSURCU2Vy
dmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZShkYXRhYmFzZURpcmVjdG9yeVBhdGgsICp0aGlzKSkKIHsK
ICAgICByZWxheEFkb3B0aW9uUmVxdWlyZW1lbnQoKTsKICAgICBtX2Nvbm5lY3Rpb25Ub1NlcnZl
ciA9IElEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyOjpjcmVhdGUoKnRoaXMpOwpAQCAt
NDAwLDYgKzQwMSwxMSBAQCB2b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6ZGlkRmlyZVZlcnNpb25D
aGFuZ2VFdmVudCh1aW50NjRfdCBkYXRhYmFzZUNvbm5lY3Rpb25JZAogICAgIH0pOwogfQogCit2
b2lkIEluUHJvY2Vzc0lEQlNlcnZlcjo6YWNjZXNzVG9UZW1wb3JhcnlGaWxlQ29tcGxldGUoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIGRlbGV0ZUZpbGUocGF0aCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0luUHJvY2Vz
c0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2hhcmVkL0lu
UHJvY2Vzc0lEQlNlcnZlci5oCmluZGV4IDgyYTIwOTEuLmZlMjg0YzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NoYXJlZC9JblByb2Nlc3NJREJTZXJ2ZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zaGFyZWQvSW5Qcm9jZXNz
SURCU2VydmVyLmgKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIElEQlNlcnZlciB7CiBjbGFz
cyBJREJTZXJ2ZXI7CiB9CiAKLWNsYXNzIEluUHJvY2Vzc0lEQlNlcnZlciBmaW5hbCA6IHB1Ymxp
YyBJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlckRlbGVnYXRlLCBwdWJsaWMgSURCU2Vy
dmVyOjpJREJDb25uZWN0aW9uVG9DbGllbnREZWxlZ2F0ZSwgcHVibGljIFJlZkNvdW50ZWQ8SW5Q
cm9jZXNzSURCU2VydmVyPiB7CitjbGFzcyBJblByb2Nlc3NJREJTZXJ2ZXIgZmluYWwgOiBwdWJs
aWMgSURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXJEZWxlZ2F0ZSwgcHVibGljIElEQlNl
cnZlcjo6SURCQ29ubmVjdGlvblRvQ2xpZW50RGVsZWdhdGUsIHB1YmxpYyBSZWZDb3VudGVkPElu
UHJvY2Vzc0lEQlNlcnZlcj4sIHB1YmxpYyBJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZVRlbXBv
cmFyeUZpbGVIYW5kbGVyIHsKIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVm
PEluUHJvY2Vzc0lEQlNlcnZlcj4gY3JlYXRlKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZjxJblByb2Nlc3NJREJTZXJ2ZXI+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGRhdGFiYXNlRGly
ZWN0b3J5UGF0aCk7CkBAIC0xMDAsNiArMTAwLDkgQEAgcHVibGljOgogICAgIHZvaWQgcmVmKCkg
b3ZlcnJpZGUgeyBSZWZDb3VudGVkPEluUHJvY2Vzc0lEQlNlcnZlcj46OnJlZigpOyB9CiAgICAg
dm9pZCBkZXJlZigpIG92ZXJyaWRlIHsgUmVmQ291bnRlZDxJblByb2Nlc3NJREJTZXJ2ZXI+Ojpk
ZXJlZigpOyB9CiAKKyAgICB2b2lkIHByZXBhcmVGb3JBY2Nlc3NUb1RlbXBvcmFyeUZpbGUoY29u
c3QgU3RyaW5nJikgb3ZlcnJpZGUgeyB9CisgICAgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVD
b21wbGV0ZShjb25zdCBTdHJpbmcmIHBhdGgpIG92ZXJyaWRlOworCiBwcml2YXRlOgogICAgIElu
UHJvY2Vzc0lEQlNlcnZlcigpOwogICAgIEluUHJvY2Vzc0lEQlNlcnZlcihjb25zdCBTdHJpbmcm
IGRhdGFiYXNlRGlyZWN0b3J5UGF0aCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA3MzAzMjlkLi41ZTgzNmQwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRW
YWx1ZS5jcHAKQEAgLTI3NDgsNiArMjc0OCwxNiBAQCB1aW50MzJfdCBTZXJpYWxpemVkU2NyaXB0
VmFsdWU6OndpcmVGb3JtYXRWZXJzaW9uKCkKIH0KIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQorVmVjdG9yPFN0cmluZz4gU2VyaWFsaXplZFNjcmlwdFZhbHVlOjpibG9iVVJMc0lzb2xh
dGVkQ29weSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIHJlc3Vs
dC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fYmxvYlVSTHMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1
dG8mIHVybCA6IG1fYmxvYlVSTHMpCisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBlbmQodXJs
Lmlzb2xhdGVkQ29weSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgU2VyaWFs
aXplZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKHN0ZDo6ZnVuY3Rp
b248dm9pZCAoY29uc3QgSURCVmFsdWUmKT4gY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKQEAgLTI3NjksNiArMjc3OSw2IEBAIHZvaWQgU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlOjp3cml0ZUJsb2JzVG9EaXNrRm9ySW5kZXhlZERCKHN0ZDo6ZnVuY3Rpb248
dm9pZCAoY29uCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgKnRoaXMsIG1fYmxvYlVSTHMs
IGJsb2JGaWxlUGF0aHMgfSk7CiAgICAgfSk7CiB9Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUo
SU5ERVhFRF9EQVRBQkFTRSkKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuaAppbmRleCA2NDVk
Y2I4Li4xNWNiZjhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJp
YWxpemVkU2NyaXB0VmFsdWUuaApAQCAtODQsOSArODQsMTEgQEAgcHVibGljOgogCiAgICAgY29u
c3QgVmVjdG9yPHVpbnQ4X3Q+JiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CiAgICAg
Ym9vbCBoYXNCbG9iVVJMcygpIGNvbnN0IHsgcmV0dXJuICFtX2Jsb2JVUkxzLmlzRW1wdHkoKTsg
fQorCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCisgICAgVmVjdG9yPFN0cmluZz4gYmxv
YlVSTHNJc29sYXRlZENvcHkoKSBjb25zdDsKICAgICB2b2lkIHdyaXRlQmxvYnNUb0Rpc2tGb3JJ
bmRleGVkREIoc3RkOjpmdW5jdGlvbjx2b2lkIChjb25zdCBJREJWYWx1ZSYpPiBjb21wbGV0aW9u
SGFuZGxlcik7Ci0jZW5kaWYKKyNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAog
ICAgIHN0YXRpYyBSZWY8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBjcmVhdGVGcm9tV2lyZUJ5dGVz
KFZlY3Rvcjx1aW50OF90PiYmIGRhdGEpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRmlsZVN5
c3RlbS5oCmluZGV4IDAzYWZmZmUuLmYxYTc4ZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0ZpbGVTeXN0ZW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9GaWxl
U3lzdGVtLmgKQEAgLTE4MSw2ICsxODEsOSBAQCBpbnQgcmVhZEZyb21GaWxlKFBsYXRmb3JtRmls
ZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CiAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHdyaXRlIHdhcyBzdWNjZXNzZnVsLCBmYWxzZSBpZiBpdCB3YXMgbm90LgogYm9vbCBhcHBlbmRG
aWxlQ29udGVudHNUb0ZpbGVIYW5kbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBQbGF0Zm9ybUZpbGVI
YW5kbGUmKTsKIAorLy8gSGFyZCBsaW5rcyBhIGZpbGUgaWYgcG9zc2libGUsIGNvcGllcyBpdCBp
ZiBub3QuCitib29sIGhhcmRMaW5rT3JDb3B5RmlsZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29u
c3QgU3RyaW5nJiBkZXN0aW5hdGlvbik7CisKICNpZiBVU0UoRklMRV9MT0NLKQogYm9vbCBsb2Nr
RmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIEZpbGVMb2NrTW9kZSk7CiBib29sIHVubG9ja0ZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxl
U3lzdGVtR3RrLmNwcAppbmRleCA5MTVlYTY5Li4xZDhlZDdkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwCkBAIC0zNjQsNCArMzY0LDExIEBAIGJv
b2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlIG1vZHVsZSkKICAgICByZXR1cm4gZ19tb2R1
bGVfY2xvc2UobW9kdWxlKTsKICNlbmRpZgogfQorCitib29sIGhhcmRMaW5rT3JDb3B5RmlsZShj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9wb3NpeC9GaWxlU3lzdGVtUE9TSVguY3BwCmluZGV4IGZlMjc2YjAuLmY5MjA3MWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Bvc2l4L0ZpbGVTeXN0ZW1QT1NJWC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcG9zaXgvRmlsZVN5c3RlbVBPU0lYLmNwcApA
QCAtMzQ2LDQgKzM0NiwzNSBAQCBlbmQ6CiB9CiAjZW5kaWYKIAorYm9vbCBoYXJkTGlua09yQ29w
eUZpbGUoY29uc3QgU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFN0cmluZyYgZGVzdGluYXRpb24pCit7
CisgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkgfHwgZGVzdGluYXRpb24uaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBDU3RyaW5nIGZzU291cmNlID0gZmlsZVN5c3RlbVJl
cHJlc2VudGF0aW9uKHNvdXJjZSk7CisgICAgaWYgKCFmc1NvdXJjZS5kYXRhKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIENTdHJpbmcgZnNEZXN0aW5hdGlvbiA9IGZpbGVTeXN0ZW1S
ZXByZXNlbnRhdGlvbihkZXN0aW5hdGlvbik7CisgICAgaWYgKCFmc0Rlc3RpbmF0aW9uLmRhdGEo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFsaW5rKGZzU291cmNlLmRhdGEo
KSwgZnNEZXN0aW5hdGlvbi5kYXRhKCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8v
IEhhcmQgbGluayBmYWlsZWQuIFBlcmZvcm0gYSBjb3B5IGluc3RlYWQuCisgICAgYXV0byBoYW5k
bGUgPSBvcGVuKGZzRGVzdGluYXRpb24uZGF0YSgpLCBPX1dST05MWSB8IE9fQ1JFQVQgfCBPX0VY
Q0wpOworICAgIGlmIChoYW5kbGUgPT0gLTEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGJvb2wgYXBwZW5kUmVzdWx0ID0gYXBwZW5kRmlsZUNvbnRlbnRzVG9GaWxlSGFuZGxlKHNvdXJj
ZSwgaGFuZGxlKTsKKyAgICBjbG9zZShoYW5kbGUpOworCisgICAgLy8gSWYgdGhlIGNvcHkgZmFp
bGVkLCBkZWxldGUgdGhlIHVudXNhYmxlIGZpbGUuCisgICAgaWYgKCFhcHBlbmRSZXN1bHQpCisg
ICAgICAgIHVubGluayhmc0Rlc3RpbmF0aW9uLmRhdGEoKSk7CisKKyAgICByZXR1cm4gYXBwZW5k
UmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNmQwM2Fm
NS4uZTE1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE2LTA0LTA3ICBCcmFk
eSBFaWRzb24gIDxiZWlkc29uQGFwcGxlLmNvbT4KKworICAgICAgICBNb2Rlcm4gSURCIChCbG9i
IHN1cHBvcnQpOiBXcml0ZSBibG9icyB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIG1vdmUgdGhlbSB0
byB0aGUgY29ycmVjdCBsb2NhdGlvbiB3aGVuIHN0b3JpbmcgdGhlbS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjMyMQorCisgICAgICAgIFJldmll
d2VkIGJ5IEFsZXggQ2hyaXN0ZW5zZW4sIEFuZHkgRXN0ZXMsIGFuZCBEYXJpbiBBZGxlci4KKwor
ICAgICAgICBUaGUgTmV0d29ya1Byb2Nlc3Mgd3JpdGVzIGEgYmxvYiB0byBhIHRlbXBvcmFyeSBm
aWxlLCB0aGVuIHRlbGxzIHRoZSBVSVByb2Nlc3MgdG8gZ3JhbnQgdGhlIERhdGFiYXNlUHJvY2Vz
cworICAgICAgICBhIFNhbmRib3ggRXh0ZW5zaW9uIHRvIHRoYXQgcGF0aC4KKyAgICAgICAgCisg
ICAgICAgIEl0IHRoZW4gdGVsbHMgdGhlIFdlYlByb2Nlc3MgdGhlIHBhdGhzIGZvciB0aGUgdGVt
cG9yYXJ5IGZpbGVzLCB3aGljaCB0aGVuIHRlbGxzIHRoZSBEYXRhYmFzZVByb2Nlc3MgdG8gc3Rv
cmUKKyAgICAgICAgdGhlIGNvbnRlbnRzIG9mIHRob3NlIGZpbGVzIGFzIGJsb2IgcmVmZXJlbmNl
cyBpbiB0aGUgZGF0YWJhc2UuCisgICAgICAgIAorICAgICAgICBTaW5jZSB0aGUgVUlQcm9jZXNz
IGhhZCBhbHJlYWR5IGdyYW50ZWQgaXQgYSBTYW5kYm94IEV4dGVuc2lvbiwgaXQgaXMgYWJsZSB0
byBkbyBzby4KKworICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpEYXRhYmFzZVByb2Nlc3M6OmlkYlNlcnZlcik6CisgICAgICAg
IChXZWJLaXQ6OkRhdGFiYXNlUHJvY2Vzczo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2Jz
KToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjpwcmVwYXJlRm9yQWNjZXNzVG9U
ZW1wb3JhcnlGaWxlKToKKyAgICAgICAgKFdlYktpdDo6RGF0YWJhc2VQcm9jZXNzOjphY2Nlc3NU
b1RlbXBvcmFyeUZpbGVDb21wbGV0ZSk6CisgICAgICAgICogRGF0YWJhc2VQcm9jZXNzL0RhdGFi
YXNlUHJvY2Vzcy5oOgorICAgICAgICAqIERhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3Mu
bWVzc2FnZXMuaW46CisKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlv
blRvV2ViUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtDb25uZWN0aW9uVG9X
ZWJQcm9jZXNzOjp3cml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlcyk6CisKKyAgICAgICAgKiBOZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQ
cm9jZXNzOjpncmFudFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyk6
CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjpkaWRHcmFudFNhbmRib3hFeHRlbnNp
b25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyk6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaDoKKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5tZXNzYWdlcy5pbjoKKworICAgICAgICAqIFVJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9j
ZXNzUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzc1Byb3h5OjpncmFu
dFNhbmRib3hFeHRlbnNpb25zVG9EYXRhYmFzZVByb2Nlc3NGb3JCbG9icyk6CisgICAgICAgICog
VUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW46CisKIDIwMTYtMDQt
MDUgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBNYWtlIENNYWtlLWdlbmVyYXRlZCBiaW5hcmllcyBvbiBNYWMgYWJsZSB0byBydW4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuY3Bw
IGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKaW5k
ZXggOWM2YWUwMi4uMWJlZDU4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQ
cm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5jcHAKQEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBEYXRhYmFz
ZVByb2Nlc3M6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OlN0cmluZ1JlZmUKIElEQlNlcnZlcjo6SURCU2VydmVyJiBEYXRhYmFzZVByb2Nlc3M6OmlkYlNl
cnZlcigpCiB7CiAgICAgaWYgKCFtX2lkYlNlcnZlcikKLSAgICAgICAgbV9pZGJTZXJ2ZXIgPSBJ
REJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSgpKTsK
KyAgICAgICAgbV9pZGJTZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKGluZGV4
ZWREYXRhYmFzZURpcmVjdG9yeSgpLCBEYXRhYmFzZVByb2Nlc3M6OnNpbmdsZXRvbigpKTsKIAog
ICAgIHJldHVybiAqbV9pZGJTZXJ2ZXI7CiB9CkBAIC0zMDUsNiArMzA1LDMzIEBAIHZvaWQgRGF0
YWJhc2VQcm9jZXNzOjpkZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vzc2lv
bklELCBPcHRpb25TZXQ8CiAjZW5kaWYKIH0KIAordm9pZCBEYXRhYmFzZVByb2Nlc3M6OmdyYW50
U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMsIGNv
bnN0IFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5JiBoYW5kbGVzKQoreworICAgIEFTU0VS
VChwYXRocy5zaXplKCkgPT0gaGFuZGxlcy5zaXplKCkpOworCisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwYXRocy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IG1fYmxv
YlRlbXBvcmFyeUZpbGVTYW5kYm94RXh0ZW5zaW9ucy5hZGQocGF0aHNbaV0sIFNhbmRib3hFeHRl
bnNpb246OmNyZWF0ZShoYW5kbGVzW2ldKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0
LCByZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgfQorfQorCit2b2lkIERhdGFiYXNlUHJvY2Vzczo6
cHJlcGFyZUZvckFjY2Vzc1RvVGVtcG9yYXJ5RmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgaWYgKGF1dG8gZXh0ZW5zaW9uID0gbV9ibG9iVGVtcG9yYXJ5RmlsZVNhbmRib3hFeHRlbnNp
b25zLmdldChwYXRoKSkKKyAgICAgICAgZXh0ZW5zaW9uLT5jb25zdW1lKCk7Cit9CisKK3ZvaWQg
RGF0YWJhc2VQcm9jZXNzOjphY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShjb25zdCBTdHJp
bmcmIHBhdGgpCit7CisgICAgLy8gV2UndmUgZWl0aGVyIGhhcmQgbGlua2VkIHRoZSB0ZW1wb3Jh
cnkgYmxvYiBmaWxlIHRvIHRoZSBkYXRhYmFzZSBkaXJlY3RvcnksIGNvcGllZCBpdCB0aGVyZSwK
KyAgICAvLyBvciB0aGUgdHJhbnNhY3Rpb24gaXMgYmVpbmcgYWJvcnRlZC4KKyAgICAvLyBJbiBh
bnkgb2YgdGhvc2UgY2FzZXMsIHdlIGNhbiBkZWxldGUgdGhlIHRlbXBvcmFyeSBibG9iIGZpbGUg
bm93LgorICAgIGRlbGV0ZUZpbGUocGF0aCk7CisKKyAgICBpZiAoYXV0byBleHRlbnNpb24gPSBt
X2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnMudGFrZShwYXRoKSkKKyAgICAgICAg
ZXh0ZW5zaW9uLT5yZXZva2UoKTsKK30KKwogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
VmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IERhdGFiYXNlUHJvY2Vzczo6
aW5kZXhlZERhdGFiYXNlT3JpZ2lucygpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9E
YXRhYmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFz
ZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLmgKaW5kZXggNjg5MjU0Zi4uNGY4NWRiOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvRGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJvY2Vzcy9EYXRhYmFzZVByb2Nlc3MuaApAQCAt
MjksNiArMjksOCBAQAogI2lmIEVOQUJMRShEQVRBQkFTRV9QUk9DRVNTKQogCiAjaW5jbHVkZSAi
Q2hpbGRQcm9jZXNzLmgiCisjaW5jbHVkZSAiU2FuZGJveEV4dGVuc2lvbi5oIgorI2luY2x1ZGUg
PFdlYkNvcmUvSURCQmFja2luZ1N0b3JlLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JREJTZXJ2ZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL1VuaXF1ZUlEQkRhdGFiYXNlLmg+CiAjaW5jbHVkZSA8d3Rm
L05ldmVyRGVzdHJveWVkLmg+CkBAIC00NSw3ICs0Nyw3IEBAIGNsYXNzIERhdGFiYXNlVG9XZWJQ
cm9jZXNzQ29ubmVjdGlvbjsKIGVudW0gY2xhc3MgV2Vic2l0ZURhdGFUeXBlOwogc3RydWN0IERh
dGFiYXNlUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVyczsKIAotY2xhc3MgRGF0YWJhc2VQcm9jZXNz
IDogcHVibGljIENoaWxkUHJvY2VzcyB7CitjbGFzcyBEYXRhYmFzZVByb2Nlc3MgOiBwdWJsaWMg
Q2hpbGRQcm9jZXNzLCBwdWJsaWMgV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5nU3RvcmVU
ZW1wb3JhcnlGaWxlSGFuZGxlciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGF0YWJhc2VQ
cm9jZXNzKTsKICAgICBmcmllbmQgY2xhc3MgTmV2ZXJEZXN0cm95ZWQ8RGF0YWJhc2VQcm9jZXNz
PjsKIHB1YmxpYzoKQEAgLTY1LDYgKzY3LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcG9zdERh
dGFiYXNlVGFzayhzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrPik7CiAK
KyAgICAvLyBXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVyCisg
ICAgdm9pZCBwcmVwYXJlRm9yQWNjZXNzVG9UZW1wb3JhcnlGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkgZmluYWw7CisgICAgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShjb25zdCBT
dHJpbmcmIHBhdGgpIGZpbmFsOworCiBwcml2YXRlOgogICAgIERhdGFiYXNlUHJvY2VzcygpOwog
CkBAIC05MCw2ICs5Niw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmZXRjaFdlYnNpdGVEYXRhKFdl
YkNvcmU6OlNlc3Npb25JRCwgT3B0aW9uU2V0PFdlYnNpdGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFU
eXBlcywgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YShX
ZWJDb3JlOjpTZXNzaW9uSUQsIE9wdGlvblNldDxXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRh
VHlwZXMsIHN0ZDo6Y2hyb25vOjpzeXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5j
ZSwgdWludDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBkZWxldGVXZWJzaXRlRGF0YUZvck9y
aWdpbnMoV2ViQ29yZTo6U2Vzc2lvbklELCBPcHRpb25TZXQ8V2Vic2l0ZURhdGFUeXBlPiB3ZWJz
aXRlRGF0YVR5cGVzLCBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiYg
b3JpZ2lucywgdWludDY0X3QgY2FsbGJhY2tJRCk7CisgICAgdm9pZCBncmFudFNhbmRib3hFeHRl
bnNpb25zRm9yQmxvYnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzLCBjb25zdCBTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSYpOwogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAgICAgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpTZWN1cml0eU9yaWdpbj4+IGluZGV4ZWREYXRh
YmFzZU9yaWdpbnMoKTsKQEAgLTEwOSw2ICsxMTYsOCBAQCBwcml2YXRlOgogICAgIFN0cmluZyBt
X2luZGV4ZWREYXRhYmFzZURpcmVjdG9yeTsKIAogICAgIFJlZlB0cjxXZWJDb3JlOjpJREJTZXJ2
ZXI6OklEQlNlcnZlcj4gbV9pZGJTZXJ2ZXI7CisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFNhbmRib3hFeHRlbnNpb24+PiBtX2Jsb2JUZW1wb3JhcnlGaWxlU2FuZGJveEV4dGVuc2lvbnM7
CiAjZW5kaWYKIAogICAgIERlcXVlPHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpDcm9zc1RocmVh
ZFRhc2s+PiBtX2RhdGFiYXNlVGFza3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9EYXRh
YmFzZVByb2Nlc3MvRGF0YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIv
RGF0YWJhc2VQcm9jZXNzL0RhdGFiYXNlUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCA0Y2I5ZGEw
Li44MmUyNzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9EYXRhYmFzZVByb2Nlc3MvRGF0
YWJhc2VQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL0RhdGFiYXNlUHJv
Y2Vzcy9EYXRhYmFzZVByb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTMyLDYgKzMyLDcgQEAgbWVzc2Fn
ZXMgLT4gRGF0YWJhc2VQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBGZXRjaFdlYnNpdGVE
YXRhKFdlYkNvcmU6OlNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlvblNldDxXZWJLaXQ6OldlYnNp
dGVEYXRhVHlwZT4gd2Vic2l0ZURhdGFUeXBlcywgdWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBE
ZWxldGVXZWJzaXRlRGF0YShXZWJDb3JlOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBPcHRpb25TZXQ8
V2ViS2l0OjpXZWJzaXRlRGF0YVR5cGU+IHdlYnNpdGVEYXRhVHlwZXMsIHN0ZDo6Y2hyb25vOjpz
eXN0ZW1fY2xvY2s6OnRpbWVfcG9pbnQgbW9kaWZpZWRTaW5jZSwgdWludDY0X3QgY2FsbGJhY2tJ
RCkKICAgICBEZWxldGVXZWJzaXRlRGF0YUZvck9yaWdpbnMoV2ViQ29yZTo6U2Vzc2lvbklEIHNl
c3Npb25JRCwgT3B0aW9uU2V0PFdlYktpdDo6V2Vic2l0ZURhdGFUeXBlPiB3ZWJzaXRlRGF0YVR5
cGVzLCBWZWN0b3I8V2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhPiBvcmlnaW5zLCB1aW50NjRf
dCBjYWxsYmFja0lEKQorICAgIEdyYW50U2FuZGJveEV4dGVuc2lvbnNGb3JCbG9icyhWZWN0b3I8
U3RyaW5nPiBwYXRocywgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGVBcnJheSBleHRl
bnNpb25zKQogfQogCiAjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFX1BST0NFU1MpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVjdGlvblRvV2Vi
UHJvY2Vzcy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKaW5kZXggODg3MzU0N2QuLjk4ODczZGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtDb25uZWN0aW9uVG9XZWJQcm9j
ZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrQ29ubmVj
dGlvblRvV2ViUHJvY2Vzcy5jcHAKQEAgLTI5NiwxMCArMjk2LDEyIEBAIHZvaWQgTmV0d29ya0Nv
bm5lY3Rpb25Ub1dlYlByb2Nlc3M6OndyaXRlQmxvYnNUb1RlbXBvcmFyeUZpbGVzKGNvbnN0IFZl
Y3RvcjxTdHJpCiAgICAgICAgIGZvciAoYXV0byYgZmlsZSA6IGZpbGVSZWZlcmVuY2VzKQogICAg
ICAgICAgICAgZmlsZS0+cmV2b2tlRmlsZUFjY2VzcygpOwogCi0gICAgICAgIGlmICghbV9jb25u
ZWN0aW9uIHx8ICFtX2Nvbm5lY3Rpb24tPmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgTmV0d29ya1Byb2Nlc3M6OnNpbmdsZXRvbigpLmdyYW50U2FuZGJveEV4dGVuc2lv
bnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKGZpbGVOYW1lcywgW3RoaXMsIHByb3RlY3Rvciwg
cmVxdWVzdElkZW50aWZpZXIsIGZpbGVOYW1lc10oKSB7CisgICAgICAgICAgICBpZiAoIW1fY29u
bmVjdGlvbiB8fCAhbV9jb25uZWN0aW9uLT5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOwogCi0gICAgICAgIG1fY29ubmVjdGlvbi0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nl
c3NDb25uZWN0aW9uOjpEaWRXcml0ZUJsb2JzVG9UZW1wb3JhcnlGaWxlcyhyZXF1ZXN0SWRlbnRp
ZmllciwgZmlsZU5hbWVzKSwgMCk7CisgICAgICAgICAgICBtX2Nvbm5lY3Rpb24tPnNlbmQoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGlkV3JpdGVCbG9ic1RvVGVtcG9yYXJ5
RmlsZXMocmVxdWVzdElkZW50aWZpZXIsIGZpbGVOYW1lcyksIDApOworICAgICAgICB9KTsKICAg
ICB9KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCmluZGV4IDRiMzdmYWMuLjg4NTY1MzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTI5Myw2ICsyOTMsMjEgQEAg
dm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGVzdHJveVByaXZhdGVCcm93c2luZ1Nlc3Npb24oU2Vzc2lv
bklEIHNlc3Npb25JRCkKICAgICBTZXNzaW9uVHJhY2tlcjo6ZGVzdHJveVNlc3Npb24oc2Vzc2lv
bklEKTsKIH0KIAordm9pZCBOZXR3b3JrUHJvY2Vzczo6Z3JhbnRTYW5kYm94RXh0ZW5zaW9uc1Rv
RGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcywg
c3RkOjpmdW5jdGlvbjx2b2lkICgpPiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBzdGF0aWMg
dWludDY0X3QgbGFzdFJlcXVlc3RJRDsKKworICAgIHVpbnQ2NF90IHJlcXVlc3RJRCA9ICsrbGFz
dFJlcXVlc3RJRDsKKyAgICBtX3NhbmRib3hFeHRlbnNpb25Gb3JCbG9ic0NvbXBsZXRpb25IYW5k
bGVycy5zZXQocmVxdWVzdElELCBjb21wbGV0aW9uSGFuZGxlcik7CisgICAgcGFyZW50UHJvY2Vz
c0Nvbm5lY3Rpb24oKS0+c2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3NQcm94eTo6R3JhbnRT
YW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnMocmVxdWVzdElELCBmaWxl
bmFtZXMpLCAwKTsKK30KKwordm9pZCBOZXR3b3JrUHJvY2Vzczo6ZGlkR3JhbnRTYW5kYm94RXh0
ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElEKQorewor
ICAgIGlmIChhdXRvIGhhbmRsZXIgPSBtX3NhbmRib3hFeHRlbnNpb25Gb3JCbG9ic0NvbXBsZXRp
b25IYW5kbGVycy50YWtlKHJlcXVlc3RJRCkpCisgICAgICAgIGhhbmRsZXIoKTsKK30KKwogc3Rh
dGljIHZvaWQgZmV0Y2hEaXNrQ2FjaGVFbnRyaWVzKFNlc3Npb25JRCBzZXNzaW9uSUQsIE9wdGlv
blNldDxXZWJzaXRlRGF0YUZldGNoT3B0aW9uPiBmZXRjaE9wdGlvbnMsIHN0ZDo6ZnVuY3Rpb248
dm9pZCAoVmVjdG9yPFdlYnNpdGVEYXRhOjpFbnRyeT4pPiBjb21wbGV0aW9uSGFuZGxlcikKIHsK
ICNpZiBFTkFCTEUoTkVUV09SS19DQUNIRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmggYi9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJv
Y2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4IGUwNzU4M2QuLmMyODBmOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291
cmNlL1dlYktpdDIvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMTEyLDYgKzEx
Miw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZW5zdXJlUHJpdmF0ZUJyb3dzaW5nU2Vzc2lvbihX
ZWJDb3JlOjpTZXNzaW9uSUQpOwogCisgICAgdm9pZCBncmFudFNhbmRib3hFeHRlbnNpb25zVG9E
YXRhYmFzZVByb2Nlc3NGb3JCbG9icyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzLCBz
dGQ6OmZ1bmN0aW9uPHZvaWQgKCk+IGNvbXBsZXRpb25IYW5kbGVyKTsKKwogcHJpdmF0ZToKICAg
ICBOZXR3b3JrUHJvY2VzcygpOwogICAgIH5OZXR3b3JrUHJvY2VzcygpOwpAQCAtMTc4LDYgKzE4
MCw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZXROZXR3b3JrUHJvY2Vzc1N0YXRpc3RpY3ModWlu
dDY0X3QgY2FsbGJhY2tJRCk7CiAgICAgdm9pZCBjbGVhckNhY2hlRm9yQWxsT3JpZ2lucyh1aW50
MzJfdCBjYWNoZXNUb0NsZWFyKTsKIAorICAgIHZvaWQgZGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9u
c1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElEKTsKKwogI2lmIFVT
RShTT1VQKQogICAgIHZvaWQgc2V0SWdub3JlVExTRXJyb3JzKGJvb2wpOwogICAgIHZvaWQgdXNl
clByZWZlcnJlZExhbmd1YWdlc0NoYW5nZWQoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKQEAgLTIw
MCw2ICsyMDQsOCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBjaGFyKiwg
c3RkOjp1bmlxdWVfcHRyPE5ldHdvcmtQcm9jZXNzU3VwcGxlbWVudD4sIFB0ckhhc2g8Y29uc3Qg
Y2hhcio+PiBOZXR3b3JrUHJvY2Vzc1N1cHBsZW1lbnRNYXA7CiAgICAgTmV0d29ya1Byb2Nlc3NT
dXBwbGVtZW50TWFwIG1fc3VwcGxlbWVudHM7CiAKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBzdGQ6
OmZ1bmN0aW9uPHZvaWQgKCk+PiBtX3NhbmRib3hFeHRlbnNpb25Gb3JCbG9ic0NvbXBsZXRpb25I
YW5kbGVyczsKKwogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHZvaWQgcGxhdGZvcm1Jbml0aWFs
aXplTmV0d29ya1Byb2Nlc3NDb2NvYShjb25zdCBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1l
dGVycyYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9OZXR3b3JrUHJvY2Vzcy9OZXR3
b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05l
dHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IDNjNDk5OTEuLjg5ZjI0M2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCkBAIC02Nyw0ICs2Nyw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExl
Z2FjeVJlY2VpdmVyIHsKICAgICBQcmVwYXJlVG9TdXNwZW5kKCkKICAgICBDYW5jZWxQcmVwYXJl
VG9TdXNwZW5kKCkKICAgICBQcm9jZXNzRGlkUmVzdW1lKCkKKworICAgIERpZEdyYW50U2FuZGJv
eEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCkK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29y
a1Byb2Nlc3NQcm94eS5jcHAKaW5kZXggYmIwNDgyMi4uNDk1OTMyNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5j
cHAKQEAgLTI4LDkgKzI4LDExIEBACiAKICNpbmNsdWRlICJBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZVByb3h5LmgiCiAjaW5jbHVkZSAiQ3VzdG9tUHJvdG9jb2xNYW5hZ2VyUHJveHlNZXNzYWdlcy5o
IgorI2luY2x1ZGUgIkRhdGFiYXNlUHJvY2Vzc01lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiRG93bmxv
YWRQcm94eU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFt
ZXRlcnMuaCIKICNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAi
U2FuZGJveEV4dGVuc2lvbi5oIgogI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNzYWdlcy5oIgogI2lu
Y2x1ZGUgIldlYlByb2Nlc3NQb29sLmgiCiAjaW5jbHVkZSAiV2Vic2l0ZURhdGEuaCIKQEAgLTI2
OSw2ICsyNzEsMTkgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzc1Byb3h5OjpkaWREZWxldGVXZWJzaXRl
RGF0YUZvck9yaWdpbnModWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBjYWxsYmFjaygpOwogfQog
Cit2b2lkIE5ldHdvcmtQcm9jZXNzUHJveHk6OmdyYW50U2FuZGJveEV4dGVuc2lvbnNUb0RhdGFi
YXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhdGhzKQoreworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZUFycmF5IGV4dGVuc2lv
bnM7CisgICAgZXh0ZW5zaW9ucy5hbGxvY2F0ZShwYXRocy5zaXplKCkpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcGF0aHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gUmVhZFdyaXRl
IGlzIHJlcXVpcmVkIGZvciBjcmVhdGluZyBoYXJkIGxpbmtzIGFzIHdlbGwgYXMgZGVsZXRpbmcg
dGhlIHRlbXBvcmFyeSBmaWxlLCB3aGljaCB0aGUgRGF0YWJhc2VQcm9jZXNzIHdpbGwgZG8uCisg
ICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZShwYXRoc1tpXSwgU2FuZGJveEV4
dGVuc2lvbjo6UmVhZFdyaXRlLCBleHRlbnNpb25zW2ldKTsKKyAgICB9CisKKyAgICBtX3Byb2Nl
c3NQb29sLnNlbmRUb0RhdGFiYXNlUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNlc3NhcnkoTWVzc2Fn
ZXM6OkRhdGFiYXNlUHJvY2Vzczo6R3JhbnRTYW5kYm94RXh0ZW5zaW9uc0ZvckJsb2JzKHBhdGhz
LCBleHRlbnNpb25zKSk7CisgICAgY29ubmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6RGlkR3JhbnRTYW5kYm94RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxv
YnMocmVxdWVzdElEKSwgMCk7Cit9CisKIHZvaWQgTmV0d29ya1Byb2Nlc3NQcm94eTo6ZGlkRmlu
aXNoTGF1bmNoaW5nKFByb2Nlc3NMYXVuY2hlciogbGF1bmNoZXIsIElQQzo6Q29ubmVjdGlvbjo6
SWRlbnRpZmllciBjb25uZWN0aW9uSWRlbnRpZmllcikKIHsKICAgICBDaGlsZFByb2Nlc3NQcm94
eTo6ZGlkRmluaXNoTGF1bmNoaW5nKGxhdW5jaGVyLCBjb25uZWN0aW9uSWRlbnRpZmllcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0d29yay9OZXR3b3JrUHJvY2Vz
c1Byb3h5LmgKaW5kZXggNmFlNTQ3NC4uMDkzMDk3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL05ldHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQcm9jZXNzUHJveHkuaApAQCAtMTA2LDYg
KzEwNiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBkaWRGZXRjaFdlYnNpdGVEYXRhKHVpbnQ2NF90
IGNhbGxiYWNrSUQsIGNvbnN0IFdlYnNpdGVEYXRhJik7CiAgICAgdm9pZCBkaWREZWxldGVXZWJz
aXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKTsKICAgICB2b2lkIGRpZERlbGV0ZVdlYnNpdGVE
YXRhRm9yT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKTsKKyAgICB2b2lkIGdyYW50U2FuZGJv
eEV4dGVuc2lvbnNUb0RhdGFiYXNlUHJvY2Vzc0ZvckJsb2JzKHVpbnQ2NF90IHJlcXVlc3RJRCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKTsKICAgICB2b2lkIGxvZ1NhbXBsZWREaWFnbm9z
dGljTWVzc2FnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29uc3Qg
U3RyaW5nJiBkZXNjcmlwdGlvbik7CiAgICAgdm9pZCBsb2dTYW1wbGVkRGlhZ25vc3RpY01lc3Nh
Z2VXaXRoUmVzdWx0KHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25z
dCBTdHJpbmcmIGRlc2NyaXB0aW9uLCB1aW50MzJfdCByZXN1bHQpOwogICAgIHZvaWQgbG9nU2Ft
cGxlZERpYWdub3N0aWNNZXNzYWdlV2l0aFZhbHVlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgU3Ry
aW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBTdHJpbmcmIHZh
bHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdv
cmtQcm9jZXNzUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTmV0
d29yay9OZXR3b3JrUHJvY2Vzc1Byb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGRjOTNiODQuLjQ3ZWY2
NzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9OZXR3b3JrL05ldHdvcmtQ
cm9jZXNzUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL05l
dHdvcmsvTmV0d29ya1Byb2Nlc3NQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjksNiArMjksOCBAQCBt
ZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2Vzc1Byb3h5IExlZ2FjeVJlY2VpdmVyIHsKICAgICBEaWRE
ZWxldGVXZWJzaXRlRGF0YSh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIERpZERlbGV0ZVdlYnNp
dGVEYXRhRm9yT3JpZ2lucyh1aW50NjRfdCBjYWxsYmFja0lEKQogCisgICAgR3JhbnRTYW5kYm94
RXh0ZW5zaW9uc1RvRGF0YWJhc2VQcm9jZXNzRm9yQmxvYnModWludDY0X3QgcmVxdWVzdElELCBW
ZWN0b3I8U3RyaW5nPiBwYXRocykKKwogICAgIFByb2Nlc3NSZWFkeVRvU3VzcGVuZCgpCiAgICAg
U2V0SXNIb2xkaW5nTG9ja2VkRmlsZXMoYm9vbCBpc0hvbGRpbmdMb2NrZWRGaWxlcykKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>