<?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>196545</bug_id>
          
          <creation_ts>2019-04-03 09:57:50 -0700</creation_ts>
          <short_desc>Remove IDB-specific quota</short_desc>
          <delta_ts>2020-06-22 14:46:17 -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>Service Workers</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=200697</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=53983</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jsbell</cc>
    
    <cc>mkwst</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sihui_liu</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1523751</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-03 09:57:50 -0700</bug_when>
    <thetext>IDB quota is replaced by storage-generic quota.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523758</commentid>
    <comment_count>1</comment_count>
      <attachid>366619</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-03 10:02:22 -0700</bug_when>
    <thetext>Created attachment 366619
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523770</commentid>
    <comment_count>2</comment_count>
      <attachid>366621</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-03 10:20:57 -0700</bug_when>
    <thetext>Created attachment 366621
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1523972</commentid>
    <comment_count>3</comment_count>
      <attachid>366650</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-03 15:11:31 -0700</bug_when>
    <thetext>Created attachment 366650
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524020</commentid>
    <comment_count>4</comment_count>
      <attachid>366665</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-03 16:19:15 -0700</bug_when>
    <thetext>Created attachment 366665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524717</commentid>
    <comment_count>5</comment_count>
      <attachid>366665</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-04-05 09:29:21 -0700</bug_when>
    <thetext>Comment on attachment 366665
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No change of behavior as IDB specific quota is no longer used.

State what is used instead.  We&apos;re not just allowing unlimited IDB storage, right?

&gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:-1045
&gt; -            if (m_sqliteDB-&gt;lastError() == SQLITE_FULL)
&gt; -                return IDBError { QuotaExceededError, &quot;Could not seed initial key generator value for object store because no enough space for domain&quot;_s };

Aren&apos;t these still necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524832</commentid>
    <comment_count>6</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-05 14:41:02 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #5)
&gt; Comment on attachment 366665 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=366665&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:8
&gt; &gt; +        No change of behavior as IDB specific quota is no longer used.
&gt; 
&gt; State what is used instead.  We&apos;re not just allowing unlimited IDB storage,
&gt; right?

We are defining a global quota limit. Currently this includes IDB and Cache API but should include more in the future.

&gt; &gt; Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp:-1045
&gt; &gt; -            if (m_sqliteDB-&gt;lastError() == SQLITE_FULL)
&gt; &gt; -                return IDBError { QuotaExceededError, &quot;Could not seed initial key generator value for object store because no enough space for domain&quot;_s };
&gt; 
&gt; Aren&apos;t these still necessary?

No, these checks are per database/per thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524833</commentid>
    <comment_count>7</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-05 14:41:20 -0700</bug_when>
    <thetext>Need to fix windows compilation issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1524846</commentid>
    <comment_count>8</comment_count>
      <attachid>366847</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-04-05 14:56:32 -0700</bug_when>
    <thetext>Created attachment 366847
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1525738</commentid>
    <comment_count>9</comment_count>
      <attachid>366847</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-04-09 13:11:39 -0700</bug_when>
    <thetext>Comment on attachment 366847
Patch

Rejecting attachment 366847 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 366847, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=366847&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=196545&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Processing patch 366847 from bug 196545.
Fetching: https://bugs.webkit.org/attachment.cgi?id=366847
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Alex Christensen&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 40 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/mac/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/win/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/IDBServer.cpp
Hunk #1 succeeded at 134 (offset -4 lines).
Hunk #2 FAILED at 690.
1 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/IDBServer.cpp.rej
patching file Source/WebCore/Modules/indexeddb/server/IDBServer.h
Hunk #1 FAILED at 112.
Hunk #2 FAILED at 192.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/IDBServer.h.rej
patching file Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp
Hunk #1 succeeded at 230 (offset -1 lines).
Hunk #2 succeeded at 873 (offset -1 lines).
Hunk #3 succeeded at 890 (offset -1 lines).
Hunk #4 succeeded at 898 (offset -1 lines).
Hunk #5 succeeded at 914 (offset -1 lines).
Hunk #6 succeeded at 998 (offset -1 lines).
Hunk #7 succeeded at 1008 (offset -1 lines).
Hunk #8 succeeded at 1133 (offset -1 lines).
Hunk #9 succeeded at 1216 (offset -1 lines).
Hunk #10 succeeded at 1364 (offset -1 lines).
Hunk #11 succeeded at 1453 (offset -1 lines).
Hunk #12 succeeded at 1792 (offset -3 lines).
Hunk #13 succeeded at 1824 (offset -3 lines).
Hunk #14 succeeded at 1857 (offset -3 lines).
Hunk #15 succeeded at 2393 (offset -17 lines).
patching file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
Hunk #1 FAILED at 2267.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp.rej
patching file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
Hunk #1 succeeded at 125 with fuzz 2.
patching file Source/WebCore/storage/StorageQuotaManager.h
patching file Source/WebKit/NetworkProcess/NetworkProcess.cpp
Hunk #1 succeeded at 2118 (offset -3 lines).
Hunk #2 succeeded at 2123 with fuzz 2 (offset -7 lines).
Hunk #3 succeeded at 2218 (offset -7 lines).
patching file Source/WebKit/NetworkProcess/NetworkProcess.h
Hunk #1 succeeded at 277 (offset -1 lines).
Hunk #2 succeeded at 512 (offset -1 lines).
patching file Source/WebKit/NetworkProcess/NetworkProcess.messages.in
patching file Source/WebKit/UIProcess/API/C/WKContext.cpp
patching file Source/WebKit/UIProcess/API/C/WKContextPrivate.h
patching file Source/WebKit/UIProcess/WebProcessPool.cpp
Hunk #1 succeeded at 1763 (offset -6 lines).
patching file Source/WebKit/UIProcess/WebProcessPool.h
Hunk #1 succeeded at 300 (offset -2 lines).
patching file Source/WebKitLegacy/Storage/WebDatabaseProvider.cpp
patching file Source/WebKitLegacy/Storage/WebDatabaseProvider.h
patching file Source/WebKitLegacy/mac/Storage/WebDatabaseManager.mm
patching file Source/WebKitLegacy/mac/Storage/WebDatabaseManagerPrivate.h
patching file Source/WebKitLegacy/win/Interfaces/IWebDatabaseManager.idl
patching file Source/WebKitLegacy/win/WebDatabaseManager.cpp
patching file Source/WebKitLegacy/win/WebDatabaseManager.h
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/DumpRenderTree/TestRunner.cpp
patching file Tools/DumpRenderTree/TestRunner.h
patching file Tools/DumpRenderTree/mac/DumpRenderTree.mm
Hunk #1 succeeded at 2027 (offset 1 line).
patching file Tools/DumpRenderTree/mac/TestRunnerMac.mm
patching file Tools/DumpRenderTree/win/TestRunnerWin.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
patching file Tools/WebKitTestRunner/TestController.cpp
Hunk #1 succeeded at 915 (offset 8 lines).
Hunk #2 succeeded at 2999 (offset 8 lines).
patching file Tools/WebKitTestRunner/TestController.h
patching file Tools/WebKitTestRunner/TestInvocation.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Alex Christensen&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/11821236</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551691</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2019-07-10 09:27:14 -0700</bug_when>
    <thetext>This patch has not been landed yet, has it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1551697</commentid>
    <comment_count>11</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-07-10 09:44:14 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #10)
&gt; This patch has not been landed yet, has it?

Nope. This patch is just removing some no longer needed code since we are checking quota in a different way now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559176</commentid>
    <comment_count>12</comment_count>
      <attachid>375711</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-07 10:33:03 -0700</bug_when>
    <thetext>Created attachment 375711
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559206</commentid>
    <comment_count>13</comment_count>
      <attachid>375711</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-07 11:21:37 -0700</bug_when>
    <thetext>Comment on attachment 375711
Patch for landing

Rejecting attachment 375711 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;land-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, &apos;--parent-command=commit-queue&apos;, 375711, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Last 5000 characters of output:
atching file Tools/DumpRenderTree/mac/DumpRenderTree.mm
patching file Tools/DumpRenderTree/mac/TestRunnerMac.mm
patching file Tools/DumpRenderTree/win/TestRunnerWin.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
patching file Tools/WebKitTestRunner/TestController.cpp
patching file Tools/WebKitTestRunner/TestController.h
patching file Tools/WebKitTestRunner/TestInvocation.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 39 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/ChangeLog
patching file Source/WebKitLegacy/mac/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/win/ChangeLog
patching file Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/IDBServer.cpp
Hunk #1 FAILED at 135.
1 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/IDBServer.cpp.rej
patching file Source/WebCore/Modules/indexeddb/server/IDBServer.h
patching file Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp
Hunk #1 FAILED at 228.
Hunk #2 succeeded at 872 (offset 1 line).
Hunk #3 succeeded at 889 (offset 1 line).
Hunk #4 succeeded at 897 (offset 1 line).
Hunk #5 succeeded at 913 (offset 1 line).
Hunk #6 succeeded at 996 (offset 1 line).
Hunk #7 succeeded at 1006 (offset 1 line).
Hunk #8 succeeded at 1129 (offset 1 line).
Hunk #9 succeeded at 1210 (offset 1 line).
Hunk #10 succeeded at 1358 (offset 1 line).
Hunk #11 succeeded at 1443 (offset 1 line).
Hunk #12 succeeded at 1780 (offset 1 line).
Hunk #13 succeeded at 1812 (offset 1 line).
Hunk #14 succeeded at 1845 (offset 1 line).
1 out of 15 hunks FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp.rej
patching file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h
Hunk #1 FAILED at 48.
Hunk #3 succeeded at 108 (offset 3 lines).
Hunk #4 succeeded at 207 (offset 4 lines).
1 out of 4 hunks FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h.rej
patching file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
patching file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
patching file Source/WebKit/NetworkProcess/NetworkProcess.cpp
patching file Source/WebKit/NetworkProcess/NetworkProcess.h
patching file Source/WebKit/NetworkProcess/NetworkProcess.messages.in
patching file Source/WebKit/UIProcess/API/C/WKContext.cpp
patching file Source/WebKit/UIProcess/API/C/WKContextPrivate.h
patching file Source/WebKit/UIProcess/WebProcessPool.cpp
patching file Source/WebKit/UIProcess/WebProcessPool.h
patching file Source/WebKitLegacy/Storage/WebDatabaseProvider.cpp
patching file Source/WebKitLegacy/Storage/WebDatabaseProvider.h
patching file Source/WebKitLegacy/mac/Storage/WebDatabaseManager.mm
patching file Source/WebKitLegacy/mac/Storage/WebDatabaseManagerPrivate.h
patching file Source/WebKitLegacy/win/Interfaces/IWebDatabaseManager.idl
patching file Source/WebKitLegacy/win/WebDatabaseManager.cpp
patching file Source/WebKitLegacy/win/WebDatabaseManager.h
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/DumpRenderTree/TestRunner.cpp
patching file Tools/DumpRenderTree/TestRunner.h
patching file Tools/DumpRenderTree/mac/DumpRenderTree.mm
patching file Tools/DumpRenderTree/mac/TestRunnerMac.mm
patching file Tools/DumpRenderTree/win/TestRunnerWin.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
patching file Tools/WebKitTestRunner/TestController.cpp
patching file Tools/WebKitTestRunner/TestController.h
patching file Tools/WebKitTestRunner/TestInvocation.cpp

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit
Updating OpenSource
From https://git.webkit.org/git/WebKit
   f77acd0e8b0..779da35e28e  master     -&gt; origin/master
Partial-rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 248376 = f77acd0e8b0ba4fea9f0663394e6bd072d12f159
r248377 = 9e6c4c992e37832d4bdd09fd83d16451e7b11b32
r248378 = 779da35e28e45f9964fff9bc7b8611644c36bda2
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: https://webkit-queues.webkit.org/results/12874388</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560367</commentid>
    <comment_count>14</comment_count>
      <attachid>376052</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2019-08-12 01:16:54 -0700</bug_when>
    <thetext>Created attachment 376052
Rebasing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560374</commentid>
    <comment_count>15</comment_count>
      <attachid>376052</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-12 03:07:36 -0700</bug_when>
    <thetext>Comment on attachment 376052
Rebasing

Clearing flags on attachment: 376052

Committed r248526: &lt;https://trac.webkit.org/changeset/248526&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560375</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-12 03:07:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1560377</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-12 03:08:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/54201783&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561399</commentid>
    <comment_count>18</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-08-14 17:30:58 -0700</bug_when>
    <thetext>Reverted r248526 for reason:

Caused two IndexedDB perf tests to fail

Committed r248699: &lt;https://trac.webkit.org/changeset/248699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1561401</commentid>
    <comment_count>19</comment_count>
    <who name="Ryan Haddad">ryanhaddad</who>
    <bug_when>2019-08-14 17:31:38 -0700</bug_when>
    <thetext>(In reply to Ryan Haddad from comment #18)
&gt; Reverted r248526 for reason:
&gt; 
&gt; Caused two IndexedDB perf tests to fail
&gt; 
&gt; Committed r248699: &lt;https://trac.webkit.org/changeset/248699&gt;
Details in https://bugs.webkit.org/show_bug.cgi?id=200697</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562318</commentid>
    <comment_count>20</comment_count>
      <attachid>376569</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-16 17:04:29 -0700</bug_when>
    <thetext>Created attachment 376569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562336</commentid>
    <comment_count>21</comment_count>
      <attachid>376569</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2019-08-16 17:43:55 -0700</bug_when>
    <thetext>Comment on attachment 376569
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Re-land r248526 with fix for performance tests.

What was the fix?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562430</commentid>
    <comment_count>22</comment_count>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-16 23:34:45 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #21)
&gt; Comment on attachment 376569 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=376569&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Re-land r248526 with fix for performance tests.
&gt; 
&gt; What was the fix?

Removing the setIDBPerOriginQuota.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562681</commentid>
    <comment_count>23</comment_count>
      <attachid>376569</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-19 01:23:12 -0700</bug_when>
    <thetext>Comment on attachment 376569
Patch

Rejecting attachment 376569 from commit-queue.

Failed to run &quot;[&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-queues.webkit.org&apos;, &apos;--bot-id=webkit-cq-03&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 376569, &apos;--port=mac&apos;]&quot; exit_code: 2 cwd: /Volumes/Data/EWS/WebKit

Logging in as commit-queue@webkit.org...
Fetching: https://bugs.webkit.org/attachment.cgi?id=376569&amp;action=edit
Fetching: https://bugs.webkit.org/show_bug.cgi?id=196545&amp;ctype=xml&amp;excludefield=attachmentdata
Processing 1 patch from 1 bug.
Processing patch 376569 from bug 196545.
Fetching: https://bugs.webkit.org/attachment.cgi?id=376569
Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Youenn Fablet&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Parsed 42 diffs from patch file(s).
patching file Source/WebCore/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/mac/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKitLegacy/win/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebCore/Modules/indexeddb/server/IDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/IDBServer.cpp
Hunk #1 FAILED at 135.
1 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/Modules/indexeddb/server/IDBServer.cpp.rej
patching file Source/WebCore/Modules/indexeddb/server/IDBServer.h
patching file Source/WebCore/Modules/indexeddb/server/MemoryIDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.cpp
patching file Source/WebCore/Modules/indexeddb/server/SQLiteIDBBackingStore.h
patching file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
Hunk #1 succeeded at 2298 (offset -1 lines).
patching file Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
patching file Source/WebKit/NetworkProcess/NetworkProcess.cpp
patching file Source/WebKit/NetworkProcess/NetworkProcess.h
patching file Source/WebKit/NetworkProcess/NetworkProcess.messages.in
patching file Source/WebKit/UIProcess/API/C/WKContext.cpp
patching file Source/WebKit/UIProcess/API/C/WKContextPrivate.h
patching file Source/WebKit/UIProcess/WebProcessPool.cpp
patching file Source/WebKit/UIProcess/WebProcessPool.h
patching file Source/WebKitLegacy/Storage/WebDatabaseProvider.cpp
patching file Source/WebKitLegacy/Storage/WebDatabaseProvider.h
patching file Source/WebKitLegacy/mac/Storage/WebDatabaseManager.mm
patching file Source/WebKitLegacy/mac/Storage/WebDatabaseManagerPrivate.h
patching file Source/WebKitLegacy/win/Interfaces/IWebDatabaseManager.idl
patching file Source/WebKitLegacy/win/WebDatabaseManager.cpp
patching file Source/WebKitLegacy/win/WebDatabaseManager.h
patching file Tools/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Tools/DumpRenderTree/TestRunner.cpp
Hunk #1 succeeded at 894 (offset 1 line).
Hunk #2 succeeded at 2207 (offset 1 line).
patching file Tools/DumpRenderTree/TestRunner.h
patching file Tools/DumpRenderTree/mac/DumpRenderTree.mm
Hunk #1 succeeded at 2036 (offset 1 line).
patching file Tools/DumpRenderTree/mac/TestRunnerMac.mm
patching file Tools/DumpRenderTree/win/TestRunnerWin.cpp
patching file Tools/WebKitTestRunner/InjectedBundle/Bindings/TestRunner.idl
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
Hunk #1 succeeded at 375 (offset 1 line).
patching file Tools/WebKitTestRunner/InjectedBundle/TestRunner.h
patching file Tools/WebKitTestRunner/TestController.cpp
Hunk #1 succeeded at 940 (offset 1 line).
Hunk #2 succeeded at 3065 (offset 1 line).
patching file Tools/WebKitTestRunner/TestController.h
patching file Tools/WebKitTestRunner/TestInvocation.cpp
patching file PerformanceTests/ChangeLog
patching file PerformanceTests/IndexedDB/large-binary-keys.html
patching file PerformanceTests/IndexedDB/large-string-keys.html

Failed to run &quot;[u&apos;/Volumes/Data/EWS/WebKit/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, u&apos;Youenn Fablet&apos;]&quot; exit_code: 1 cwd: /Volumes/Data/EWS/WebKit

Full output: https://webkit-queues.webkit.org/results/12939594</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562736</commentid>
    <comment_count>24</comment_count>
      <attachid>376693</attachid>
    <who name="Sihui Liu">sihui_liu</who>
    <bug_when>2019-08-19 09:38:24 -0700</bug_when>
    <thetext>Created attachment 376693
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562745</commentid>
    <comment_count>25</comment_count>
      <attachid>376693</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-19 10:12:43 -0700</bug_when>
    <thetext>Comment on attachment 376693
Patch for landing

Clearing flags on attachment: 376693

Committed r248856: &lt;https://trac.webkit.org/changeset/248856&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1562746</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-08-19 10:12:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366619</attachid>
            <date>2019-04-03 10:02:22 -0700</date>
            <delta_ts>2019-04-03 10:20:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196545-20190403100221.patch</filename>
            <type>text/plain</type>
            <size>23985</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDBiMGI4NGFjZWQwNGE1YjQ5
NDc3MzdiMTdjNDljNzE1YTQ2MmU4MjUuLjUxZWEyNjg4MDIzYTgzYjc1Yjc3MjE5ZTRhYmU2MmNh
ZGEwMjZkZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTktMDQtMDMgIFlvdWVubiBG
YWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMg
cXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NjU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1By
b2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3
b3JrUHJvY2Vzczo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE5l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQcm9jZXNzUG9vbDo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAq
IFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorCiAyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0
ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIHN0b3JhZ2UgcXVvdGEgcGFyYW1l
dGVycyBmcm9tIFVJUHJvY2VzcyB0byBOZXR3b3JrUHJvY2VzcyBhcyBwYXJ0IG9mIFdlYnNpdGVE
YXRhU3RvcmUgcGFyYW1ldGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCAyNWZlMzViMDNlNTUw
YjcyYzA4ZDQ2NjczZmRmYjlkYzE5YjVhMmYxLi45MTM4MTFhMTE5YTE5OGZmNGM4YjA5MjkwZDhk
NGZkYzJhN2QwYjE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5
LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1v
dmUgSURCLXNwZWNpZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHA6CisgICAgICAg
IChXZWJEYXRhYmFzZVByb3ZpZGVyOjppZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKToK
KyAgICAgICAgKFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcyk6CisgICAg
ICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQu
CisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg6CisKIDIwMTktMDMtMTMg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIENoZWNrIElEQiBx
dW90YSB1c2FnZSB0aHJvdWdoIFF1b3RhTWFuYWdlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CmluZGV4IGQxOWRjZGFmNGE1Mzg4ZTQzZGFjODQwMmU3OTYzNTMwZmRlNDRjMjQuLmUwZWNmOTAz
MTYxZGRlZmE1NDhlNzRmZDJiMWMzZDAwNzBmMGQ3NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTdG9yYWdlL1dlYkRh
dGFiYXNlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2VyIHNldElEQlBl
ck9yaWdpblF1b3RhOl0pOiBEZWxldGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VN
YW5hZ2VyUHJpdmF0ZS5oOgorCiAyMDE5LTAzLTMxICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgbW9yZSBpMzg2IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25z
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmlu
ZGV4IDFjYjRiNjc0YmFmM2MwMmEzY2YyZWMyYjZjOTI3NWUyZDk0OWNkZmIuLmU5MzIzNzcxNzEw
YjQ0ZjdjMjBiNzg0ZjdhOTlhYThjYTNhMGNjOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCkBAIC0yMTE4LDcgKzIxMTgsNyBAQCBSZWY8
SURCU2VydmVyOjpJREJTZXJ2ZXI+IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbgogICAgICAgICBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdl
dChzZXNzaW9uSUQpOwogICAgIH0KIAotICAgIGF1dG8gc2VydmVyID0gSURCU2VydmVyOjpJREJT
ZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsICp0aGlzLCBbdGhpcywgd2Vha1RoaXMgPSBt
YWtlV2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBv
cmlnaW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKKyAgICByZXR1cm4gSURCU2VydmVyOjpJ
REJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsICp0aGlzLCBbdGhpcywgd2Vha1RoaXMg
PSBtYWtlV2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRv
JiBvcmlnaW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKICAgICAgICAgaWYgKCF3ZWFrVGhp
cykKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gJnRoaXMtPnN0
b3JhZ2VRdW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOwpAQCAtMjEyNyw4ICsyMTI3LDYg
QEAgUmVmPElEQlNlcnZlcjo6SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2Vy
dmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb24KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
dGhpcy0+bm90aWZ5SG9sZGluZ0xvY2tlZEZpbGVzKGlzSG9sZGluZ0xvY2tlZEZpbGVzKTsKICAg
ICB9KTsKLSAgICBzZXJ2ZXItPnNldFBlck9yaWdpblF1b3RhKG1faWRiUGVyT3JpZ2luUXVvdGEp
OwotICAgIHJldHVybiBzZXJ2ZXI7CiB9CiAKIElEQlNlcnZlcjo6SURCU2VydmVyJiBOZXR3b3Jr
UHJvY2Vzczo6aWRiU2VydmVyKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKQEAgLTIyMjQsMTQg
KzIyMjIsNiBAQCB2b2lkIE5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9u
KFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgU3RyaW5nJgogICAgICAgICAgICAgcG9zdFN0b3Jh
Z2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFzaygqdGhpcywgJk5ldHdvcmtQcm9jZXNzOjplbnN1
cmVQYXRoRXhpc3RzLCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkpKTsKICAgICB9CiB9Ci0KLXZv
aWQgTmV0d29ya1Byb2Nlc3M6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQot
ewotICAgIG1faWRiUGVyT3JpZ2luUXVvdGEgPSBxdW90YTsKLSAgICAKLSAgICBmb3IgKGF1dG8m
IHNlcnZlciA6IG1faWRiU2VydmVycy52YWx1ZXMoKSkKLSAgICAgICAgc2VydmVyLT5zZXRQZXJP
cmlnaW5RdW90YShxdW90YSk7Ci19CiAjZW5kaWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0Up
CiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JU
ZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgQ2xpZW50T3JpZ2luJiBvcmln
aW4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKaW5k
ZXggNjM0N2MxOGM3ZGRmZGIzZDhmMmUxZjYzZmNlZDg0ODczNDE3OGY5My4uMDBlOWUzNjg1MmMx
OTA5MmM1OTZkMWEyOTE3MTg0MjBiZDc5MDQxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApAQCAtMjc3LDcgKzI3Nyw2IEBAIHB1YmxpYzoKICAg
ICBXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlciYgaWRiU2VydmVyKFBBTDo6U2Vzc2lvbklE
KTsKICAgICAvLyBXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQkJhY2tpbmdTdG9yZUZpbGVIYW5kbGVy
LgogICAgIHZvaWQgYWNjZXNzVG9UZW1wb3JhcnlGaWxlQ29tcGxldGUoY29uc3QgU3RyaW5nJiBw
YXRoKSBmaW5hbDsKLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKICNl
bmRpZgogICAgIHZvaWQgdXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IFdlYkNvcmU6OkNsaWVudE9yaWdpbiYpOwogCkBAIC01MTQsNyAr
NTEzLDYgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBTdHJpbmc+IG1faWRiRGF0YWJhc2VQYXRoczsKICAgICBIYXNo
TWFwPFBBTDo6U2Vzc2lvbklELCBSZWZQdHI8V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI+
PiBtX2lkYlNlcnZlcnM7Ci0gICAgdWludDY0X3QgbV9pZGJQZXJPcmlnaW5RdW90YSB7IFdlYkNv
cmU6OklEQlNlcnZlcjo6ZGVmYXVsdFBlck9yaWdpblF1b3RhIH07CiAjZW5kaWYKIAogICAgIERl
cXVlPENyb3NzVGhyZWFkVGFzaz4gbV9zdG9yYWdlVGFza3M7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgppbmRleCBk
YmYzY2E3YWUyZTViMDhmMDhkNjVhODhkYzU2MDBmY2FlNTNkNmJkLi5kZTQwNjAwYzkwYzc2NDcw
OTk5YmNhZGVlMTdkMmFhZjA5NjY3MGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KQEAgLTE2MSw5ICsxNjEs
NiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lSZWNlaXZlciB7CiAgICAgRGlz
YWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSgpCiAjZW5kaWYKIAotI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2
NF90IHF1b3RhKQotI2VuZGlmCiAgICAgVXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRl
c3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBzdHJ1Y3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luIG9yaWdpbikKIAogICAgIFN0b3JlQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgV2ViQ29yZTo6QWRDbGlja0F0dHJpYnV0aW9uIGFkQ2xpY2tBdHRyaWJ1dGlv
bikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCmluZGV4IDkz
Zjc2YTc5NjEwN2Q3YzQyNWFhMTMzOTA4OTA1MTJhMGZhY2FmZDUuLjZiODk2MTAzYWUwZjI2ZTE3
ODk3MzE0ZTAzOGEwNDY1NzM5NWUzNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcApAQCAtNjU5LDExICs2NTksNiBAQCB2b2lkIFdLQ29udGV4dENsZWFy
U3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKICNlbmRpZgogfQogCi12
b2lkIFdLQ29udGV4dFNldElEQlBlck9yaWdpblF1b3RhKFdLQ29udGV4dFJlZiBjb250ZXh0UmVm
LCB1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+c2V0
SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQotCiB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVu
dE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogewogICAg
IFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9y
VGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCmluZGV4IGY5YzdkMzI5NmU1YzBjZDdmMzM2N2RlMzlhMDMxZDI4M2ZiZTY2NjYu
LjBjMTdiMWExMTJjMmVjMWYyZTg1MDIxN2FiNTFmNjY0YTUxOGFlYTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKQEAgLTExNiw4ICsx
MTYsNiBAQCBXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0d29ya1Byb2Nlc3NJ
ZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0KQogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0
QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0cmluZ1JlZiBkb21h
aW4sIFdLU3RyaW5nUmVmIG5hbWUsIFdLQXJyYXlSZWYgbWltZVR5cGVzLCBXS0FycmF5UmVmIGV4
dGVuc2lvbnMpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5z
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0U2V0SURC
UGVyT3JpZ2luUXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHQsIHVpbnQ2NF90IHF1b3RhKTsKLQog
V0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rp
bmcoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCA0YzNmMWU3NGFhY2UzNGE1
YTc0ZmU1Yjg3MmRmNTBjNTI0N2E5YWMzLi45MzJhZjYwNjkyMzc0NDMyZGE2YjhjYTliM2QyMDBm
ODJiZTFhOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3Bw
CkBAIC0xNzU0LDEzICsxNzU0LDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6c3luY05ldHdvcmtQ
cm9jZXNzQ29va2llcygpCiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zeW5jQWxsQ29va2ll
cygpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50
NjRfdCBxdW90YSkKLXsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTZXRJREJQZXJP
cmlnaW5RdW90YShxdW90YSksIDApOwotI2VuZGlmCi19Ci0KIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChjb25zdCBXZWJDZXJ0aWZpY2F0
ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3QpCiB7CiAgICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBy
b2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmlu
ZGV4IDIxNTdiNmIwOWFjYzBjYTUwZTg2MTI4MjgyMWIxOWVhYTVlYWQ4NjYuLjM0ZGM0YjEyZDY2
YWU3OWQwOGNlNzY4MzM3ZTRlNjU3Mzc0YTIxZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaApAQCAtMjk5LDggKzI5OSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
c3luY05ldHdvcmtQcm9jZXNzQ29va2llcygpOwogCi0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5R
dW90YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nl
c3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CiAgICAgYm9vbCBzaG91bGRNYWtlTmV4
dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxk
TWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmc7IH0KICAgICB2b2lkIHNldFNo
b3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVl
KSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0g
dmFsdWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRh
YmFzZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFz
ZVByb3ZpZGVyLmNwcAppbmRleCA1ZWU1YTdiMjliZWY0NTM5OWRmZDc4YjMxMjNjMGUwYjJmYzlh
Y2ExLi4yZWI3MDUzNjI2ZGYyZTc3YjliMjM2ODgwMjA5ZWVhYjUxY2U1YTk3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCkBA
IC00NSwxNyArNDUsOSBAQCBXZWJEYXRhYmFzZVByb3ZpZGVyOjp+V2ViRGF0YWJhc2VQcm92aWRl
cigpCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiBXZWJDb3JlOjpJREJDbGllbnQ6OklE
QkNvbm5lY3Rpb25Ub1NlcnZlciYgV2ViRGF0YWJhc2VQcm92aWRlcjo6aWRiQ29ubmVjdGlvblRv
U2VydmVyRm9yU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYgc2Vzc2lvbklEKQogewotICAg
IGF1dG8gcmVzdWx0ID0gbV9pZGJTZXJ2ZXJNYXAuYWRkKHNlc3Npb25JRC5zZXNzaW9uSUQoKSwg
bnVsbHB0cik7Ci0gICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Ci0gICAgICAgIGlmIChzZXNz
aW9uSUQuaXNFcGhlbWVyYWwoKSkKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViQ29yZTo6SW5Q
cm9jZXNzSURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBpbmRleGVkRGF0YWJhc2VEaXJlY3Rv
cnlQYXRoKCkpOwotICAgIH0KLQotICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmlkYlNlcnZl
cigpLnNldFBlck9yaWdpblF1b3RhKG1faWRiUGVyT3JpZ2luUXVvdGEpOwotCi0gICAgcmV0dXJu
IHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPmNvbm5lY3Rpb25Ub1NlcnZlcigpOworICAgIHJldHVy
biBtX2lkYlNlcnZlck1hcC5lbnN1cmUoc2Vzc2lvbklELnNlc3Npb25JRCgpLCBbJnNlc3Npb25J
RF0geworICAgICAgICByZXR1cm4gc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkgPyBXZWJDb3JlOjpJ
blByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQpIDogV2ViQ29yZTo6SW5Qcm9jZXNz
SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBpbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlQYXRo
KCkpOworICAgIH0pLml0ZXJhdG9yLT52YWx1ZS0+Y29ubmVjdGlvblRvU2VydmVyKCk7CiB9CiAK
IHZvaWQgV2ViRGF0YWJhc2VQcm92aWRlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkKQEAgLTYzLDEz
ICs1NSw0IEBAIHZvaWQgV2ViRGF0YWJhc2VQcm92aWRlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKCkK
ICAgICBmb3IgKGF1dG8mIHNlcnZlciA6IG1faWRiU2VydmVyTWFwLnZhbHVlcygpKQogICAgICAg
ICBzZXJ2ZXItPmlkYlNlcnZlcigpLmNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5j
ZSgtV2FsbFRpbWU6OmluZmluaXR5KCksIFtdIHsgfSk7CiB9Ci0KLXZvaWQgV2ViRGF0YWJhc2VQ
cm92aWRlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9p
ZGJQZXJPcmlnaW5RdW90YSA9IHF1b3RhOwotCi0gICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2lk
YlNlcnZlck1hcC52YWx1ZXMoKSkKLSAgICAgICAgc2VydmVyLT5pZGJTZXJ2ZXIoKS5zZXRQZXJP
cmlnaW5RdW90YShxdW90YSk7Ci19Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKaW5kZXggNTIyMjMzMDliMzliZTNlY2Fj
ZWI2OWZjNjlmMjAwN2UyYzliM2VkYS4uM2Y1MDZkNzZjM2JmNzQ1MzRmMzYzZGYyYTQ3ZmVjYmUz
N2UxMDEyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFi
YXNlUHJvdmlkZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJh
c2VQcm92aWRlci5oCkBAIC00NCw4ICs0NCw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpJREJD
bGllbnQ6OklEQkNvbm5lY3Rpb25Ub1NlcnZlciYgaWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vz
c2lvbihjb25zdCBQQUw6OlNlc3Npb25JRCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkZWxldGVB
bGxEYXRhYmFzZXMoKTsKLQotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3Qp
OwogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC01NSw2ICs1Myw1IEBAIHByaXZhdGU6CiAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2Vi
Q29yZTo6SW5Qcm9jZXNzSURCU2VydmVyPj4gbV9pZGJTZXJ2ZXJNYXA7Ci0gICAgdWludDY0X3Qg
bV9pZGJQZXJPcmlnaW5RdW90YSB7IFdlYkNvcmU6OklEQlNlcnZlcjo6ZGVmYXVsdFBlck9yaWdp
blF1b3RhIH07CiAjZW5kaWYKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCmluZGV4IDZkNjJhOThiOTdmMmVjMjQxNGM3
ZGIxYWQzZTcwZjJkMGRmMTNlZTQuLjczZTIzMzFlYmI2Y2ZhZWRlZWE0YzFkMmYxMmFkMGJhZDUy
MjY1M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0
YWJhc2VNYW5hZ2VyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2Vi
RGF0YWJhc2VNYW5hZ2VyLm1tCkBAIC0xNTcsMTMgKzE1Nyw2IEBAIHN0YXRpYyBOU1N0cmluZyAq
ZGF0YWJhc2VzRGlyZWN0b3J5UGF0aCgpOwogI2VuZGlmCiB9CiAKLS0gKHZvaWQpc2V0SURCUGVy
T3JpZ2luUXVvdGE6KHVpbnQ2NF90KXF1b3RhCi17Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0gICAgV2ViRGF0YWJhc2VQcm92aWRlcjo6c2luZ2xldG9uKCkuc2V0SURCUGVyT3JpZ2lu
UXVvdGEocXVvdGEpOwotI2VuZGlmCi19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCiBz
dGF0aWMgYm9vbCBpc0ZpbGVIaWRkZW4oTlNTdHJpbmcgKmZpbGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0
ZS5oCmluZGV4IDIxNzI0MTYyYjk1Mzg4YTRhMjZiYTllYzRkNmM1MDRmNDVmNjQwNGEuLjkzOWI0
Y2Y3ZTA1NzQyZDM2ZTEzMDc3YzBjYTY2MzJmZjNlNWRjZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0
ZS5oCkBAIC03MCw3ICs3MCw2IEBAIGV4dGVybiBDRlN0cmluZ1JlZiBXZWJEYXRhYmFzZU9yaWdp
bnNEaWRDaGFuZ2VOb3RpZmljYXRpb247CiAKIC8vIEZvciBEdW1wUmVuZGVyVHJlZSBzdXBwb3J0
IG9ubHkKIC0gKHZvaWQpZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlczsKLS0gKHZvaWQpc2V0SURC
UGVyT3JpZ2luUXVvdGE6KHVpbnQ2NF90KXF1b3RhOwogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQog
KyAodm9pZClzY2hlZHVsZUVtcHR5RGF0YWJhc2VSZW1vdmFsOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDExN2RhZWFmZDI0NGFjMDcxOWRjNGEx
ZTZiZGU5OTI0NTc5ZjEzNjYuLmI4YzU5YWIyYjQ3YmZiMzVjYzdjNzUyN2IwNWFiMmUxYTNjOGZm
MjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOSBAQAorMjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVu
bmVyLmNwcDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAg
IChzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRJREJQ
ZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxOS0wNC0w
MyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUGFzcyBzdG9y
YWdlIHF1b3RhIHBhcmFtZXRlcnMgZnJvbSBVSVByb2Nlc3MgdG8gTmV0d29ya1Byb2Nlc3MgYXMg
cGFydCBvZiBXZWJzaXRlRGF0YVN0b3JlIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1
bm5lci5jcHAKaW5kZXggNjIyMjI0MmEwYTg5MDMxZDZkYTFiOGEzOGY5MDg3YTE1ZjdlMWFkYS4u
NWFiNzE2OGE0OTQxNmIzZWNiOGM3OWI1MjVmNTEyODY4OGFiYTI2NCAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5jcHAKQEAgLTkzNCwyMCArOTM0LDYgQEAgc3RhdGljIEpTVmFsdWVSZWYg
c2V0RGF0YWJhc2VRdW90YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW4KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXN0
YXRpYyBKU1ZhbHVlUmVmIHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAgIGF1dG8qIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKLSAgICAKLSAgICBkb3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBudWxscHRyKTsKLSAgICBpZiAoIXN0ZDo6aXNuYW4ocXVvdGEp
KQotICAgICAgICBjb250cm9sbGVyLT5zZXRJREJQZXJPcmlnaW5RdW90YShzdGF0aWNfY2FzdDx1
aW50NjRfdD4ocXVvdGEpKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlUmVmIHNldERlZmVyc0xvYWRpbmdDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVm
IHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3Vt
ZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQg
PCAxKQpAQCAtMjIyNSw3ICsyMjExLDYgQEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6
c3RhdGljRnVuY3Rpb25zKCkKICAgICAgICAgeyAic2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFu
ZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgc2V0UmVqZWN0c1Byb3RlY3Rp
b25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAic2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNl
dEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJzZXRJY29uRGF0YWJhc2VFbmFibGVkIiwgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZENhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldElEQlBlck9yaWdpblF1b3RhIiwgc2V0SURCUGVy
T3JpZ2luUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRBdXRvbWF0aWNMaW5r
RGV0ZWN0aW9uRW5hYmxlZCIsIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKICAgICAgICAgeyAic2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsIHNl
dE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJz
ZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb25DYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDQyMDkxOTBiMzYyZGMw
ZGZhMjcyZjgzZjUzNzViMGFhYjA1MTlmMGUuLmJiNjNlZDVmMTgwOGIwYTk2MjFkZjdhNDc1ZWNh
YTYzYTgxYmFjZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
aAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTEwNiw3ICsxMDYs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJM
U2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpOwogICAgIHZvaWQgc2V0
RGVmZXJzTG9hZGluZyhib29sKTsKICAgICB2b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9v
bCk7Ci0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAgICAgdm9pZCBz
ZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7CiAgICAgdm9pZCBzZXRB
dXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0TWFp
bkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IDY2YzNmYjk4NDNhY2FjYWNhM2FlMzMyY2NmODli
MmRlMGUwZjJhNDUuLjgyODYyMDAyZmMwZjczMjIzZDJhM2ZlN2ZmZGUzMTIzYzhlNjY2NWYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTIwMjYsNyAr
MjAyNiw2IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAg
ICAgZ1Rlc3RSdW5uZXItPmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKTsKIAogICAgIGdUZXN0
UnVubmVyLT5jbGVhckFsbERhdGFiYXNlcygpOwotICAgIGdUZXN0UnVubmVyLT5zZXRJREJQZXJP
cmlnaW5RdW90YSg1MCAqIE1CKTsKIAogICAgIGlmIChkaXNhbGxvd2VkVVJMcykKICAgICAgICAg
Q0ZTZXRSZW1vdmVBbGxWYWx1ZXMoZGlzYWxsb3dlZFVSTHMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCA3NDI1MTdjZmY3MTA1MjBiZGFhYTE3YWYyMmVh
N2I5OTg0YTlkZTMzLi4wYmNkNTU1Njc3YmNkMDIyNGE2ZWU2NTc2MzM1MWY5YzE3NWMxYjI3IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDMzLDExICs0
MzMsNiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKQogICAgIFtvcmlnaW4gcmVsZWFzZV07CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6
c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgW1tXZWJEYXRhYmFz
ZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJhc2VNYW5hZ2VyXSBzZXRJREJQZXJPcmlnaW5RdW90YTpx
dW90YV07Ci19Ci0KIHZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKICAgICBbW21haW5GcmFt
ZSB3ZWJWaWV3XSBnb0JhY2tdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5kZXggMDg3ZGE4
NDY1MjU3ZmJlNjlkMzU4YmY1NzcwZWY3MjMyYzY5NTViMC4uODY4YWY1ZWQ1YzdiNGFiYjA4NjY2
Mjc0NWQ5ODkzNGU2MGIwNzIzMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBAIC0xMzgs
OSArMTM4LDYgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIGF0dHJpYnV0ZSBkb3VibGUg
ZGF0YWJhc2VEZWZhdWx0UXVvdGE7CiAgICAgYXR0cmlidXRlIGRvdWJsZSBkYXRhYmFzZU1heFF1
b3RhOwogCi0gICAgLy8gSW5kZXhlZERCIEFQSQotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVv
dGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKLQogICAgIC8vIEFwcGxpY2F0aW9uIENhY2hl
IEFQSQogICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwogICAgIHZvaWQgc2V0
QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRl
eCAxYzlhZjMzMTk3MGJlNGM0Njc1ZmI2OTM5Zjk0N2Q4OWExMWMxZTQ2Li42MGJjOWFlYTZkMWVm
MWQxNTAwYzVmM2E2MDMzOTI3YzQ5OGY3MDcwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQxNiwxMyArNDE2LDYg
QEAgdm9pZCBUZXN0UnVubmVyOjpkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1
b3RhKCkKICAgICBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEgPSB0
cnVlOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90
IHF1b3RhKQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9w
dFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SURCUGVyT3JpZ2luUXVvdGEi
KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdL
VUludDY0Q3JlYXRlKHF1b3RhKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdl
KEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCks
IG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKLX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVl
UmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJheVJlZiBzdHJp
bmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHN0cmluZ3Mp
OwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuaAppbmRleCA4NGFiMjE5MzMzNjZkM2Q3ZTY3YzkxNjhlZDhkMDY2YzE2MTQxNjE1Li4xNTkx
YWM4NWQ4ZTU4NDcyNDRlZTI4MzIyYzdhZWM1N2Y4YTVjYTUyIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtMTc2LDkgKzE3
Niw2IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBkb21DYWNoZVNpemUoSlNTdHJpbmdSZWYgb3Jp
Z2luKTsKICAgICB2b2lkIHNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbCk7CiAKLSAg
ICAvLyBJbmRleGVkREIKLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsK
LQogICAgIC8vIEZhaWxlZCBsb2FkIGNvbmRpdGlvbiB0ZXN0aW5nCiAgICAgdm9pZCBmb3JjZUlt
bWVkaWF0ZUNvbXBsZXRpb24oKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAppbmRleCA1M2QxMzQ3MTQzM2MwZjEzMmZhODViMTVjNDdlN2Y4NThiNWRhNTRhLi40
N2E2M2NiYjYyMGI3Yzg1ZGVjZmZlMWE2ZDIzYTY4ZGNhMjU4NWQzIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtOTAxLDcgKzkwMSw2IEBAIGJvb2wgVGVz
dENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlv
bnMmIG9wdGlvbnMsIFJlCiAgICAgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhUZXN0
Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIENsZWFySW5kZXhlZERh
dGFiYXNlcygpOwotICAgIHNldElEQlBlck9yaWdpblF1b3RhKDUwICogTUIpOwogCiAgICAgY2xl
YXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAgIGNsZWFyRE9NQ2FjaGVzKCk7CkBA
IC0yOTg2LDExICsyOTg1LDYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJET01DYWNoZXMo
KQogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAotdm9pZCBUZXN0
Q29udHJvbGxlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAg
V0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEocGxhdGZvcm1Db250ZXh0KCksIHF1b3RhKTsK
LX0KLQogc3RydWN0IFJlbW92ZUFsbEluZGV4ZWREYXRhYmFzZXNDYWxsYmFja0NvbnRleHQgewog
ICAgIGV4cGxpY2l0IFJlbW92ZUFsbEluZGV4ZWREYXRhYmFzZXNDYWxsYmFja0NvbnRleHQoVGVz
dENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCiAgICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJv
bGxlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
aCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBhY2U2YTU0
MTAyYzg5YmRhZWM2YWEzZTNjYzA2NTZjNTkzNThkNTljLi5mMmNhNTQ0YWNjZGJkMDE2YTcwNjE3
N2Q5YWQ5MTNmMmEzNzk4ZTM4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCkBAIC0yNjcsOCArMjY3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRBbGxvd1N0b3Jh
Z2VRdW90YUluY3JlYXNlKGJvb2wpOwogCi0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1
aW50NjRfdCk7Ci0KICAgICBib29sIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0
Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOyB9CiAgICAgdm9pZCBjbGVhckRpZFJlY2VpdmVTZXJ2
ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIHsgbV9kaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24gPSBmYWxzZTsgfQogCmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IDRjNzAzN2I3ZjU3NzVjNjY3ZGYz
OGIwMzEzYzFkYWMwMDRhYmU1MjAuLmNlNWE5YzNmMDUzMWZiNDMzN2FmMWY5NGJkM2YxYzJjZDFi
MTQ1ZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0x
NDkzLDEzICsxNDkzLDYgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6
ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJTZXRJREJQZXJPcmlnaW5RdW90YSIpKSB7Ci0gICAgICAgIEFTU0VSVChX
S0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAg
IFdLVUludDY0UmVmIHF1b3RhID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5
KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElEQlBlck9yaWdpblF1
b3RhKFdLVUludDY0R2V0VmFsdWUocXVvdGEpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgfQotCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJJbmplY3RVc2VyU2NyaXB0IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgc2Ny
aXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366621</attachid>
            <date>2019-04-03 10:20:57 -0700</date>
            <delta_ts>2019-04-03 15:11:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196545-20190403102057.patch</filename>
            <type>text/plain</type>
            <size>43955</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmI5ZDZkN2VlOTRhMzNm
YWU2NjkyOTBiMGY2NTI4Mjg1ZTdiM2JjMi4uNzg2MGQyMjliMjhmZmJiNDJmOGRjZTczYWYzYmMw
NjQ0NzljMzJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE5LTA0LTAzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNp
ZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IgYXMgSURCIHNwZWNpZmljIHF1b3RhIGlzIG5vIGxvbmdl
ciB1c2VkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6c2V0UGVyT3Jp
Z2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwZXJP
cmlnaW5RdW90YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVn
aW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5j
aGVja2VkUHV0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFNldEtleUdlbmVy
YXRvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpxdW90YUZvck9yaWdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWF4aW11bVNpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6c2V0UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorCiAyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIHN0b3JhZ2UgcXVvdGEgcGFyYW1ldGVy
cyBmcm9tIFVJUHJvY2VzcyB0byBOZXR3b3JrUHJvY2VzcyBhcyBwYXJ0IG9mIFdlYnNpdGVEYXRh
U3RvcmUgcGFyYW1ldGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwYjBiODRhY2VkMDRhNWI0OTQ3NzM3YjE3YzQ5
YzcxNWE0NjJlODI1Li41MWVhMjY4ODAyM2E4M2I3NWI3NzIxOWU0YWJlNjJjYWRhMDI2ZGQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNpZmljIHF1b3RhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNyZWF0ZUlEQlNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
OgorICAgICAgICAoV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaDoKKwogMjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgUGFzcyBzdG9yYWdlIHF1b3RhIHBhcmFtZXRlcnMgZnJvbSBV
SVByb2Nlc3MgdG8gTmV0d29ya1Byb2Nlc3MgYXMgcGFydCBvZiBXZWJzaXRlRGF0YVN0b3JlIHBh
cmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggMjVmZTM1YjAzZTU1MGI3MmMwOGQ0NjY3
M2ZkZmI5ZGMxOWI1YTJmMS4uOTEzODExYTExOWExOThmZjRjOGIwOTI5MGQ4ZDRmZGMyYTdkMGIx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wNC0wMyAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVj
aWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViRGF0YWJh
c2VQcm92aWRlcjo6aWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lvbik6CisgICAgICAgIChX
ZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAgICAoV2ViRGF0
YWJhc2VQcm92aWRlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAq
IFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oOgorCiAyMDE5LTAzLTEzICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBJREIgcXVvdGEgdXNhZ2Ug
dGhyb3VnaCBRdW90YU1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBkMTlk
Y2RhZjRhNTM4OGU0M2RhYzg0MDJlNzk2MzUzMGZkZTQ0YzI0Li5lMGVjZjkwMzE2MWRkZWZhNTQ4
ZTc0ZmQyYjFjM2QwMDcwZjBkNzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTktMDQtMDMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFn
ZXIubW06CisgICAgICAgICgtW1dlYkRhdGFiYXNlTWFuYWdlciBzZXRJREJQZXJPcmlnaW5RdW90
YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZh
dGUuaDoKKwogMjAxOS0wMy0zMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIG1vcmUgaTM4NiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oCmluZGV4IGM2ZDdkNDNmOWViYWRkMjkyNDgwY2Y0ZWFjNDA3ODc1MTAwOWE0MDEuLjM0
ZjFlMzU3NTJjN2E5NmZmYTgzMWNkYjgzMTQ1NWI5YzVlYWVmNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3Jl
LmgKQEAgLTEwMCw3ICsxMDAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRXBoZW1l
cmFsKCkgPSAwOwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9yT3JpZ2lu
KCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRRdW90YSh1aW50NjRfdCkgPSAwOwor
CiBwcm90ZWN0ZWQ6CiAgICAgSURCQmFja2luZ1N0b3JlKCkgeyBSRUxFQVNFX0FTU0VSVCghaXNN
YWluVGhyZWFkKCkpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA2MmYzMjBjZmIwM2NkZGIzZjczMjJk
M2I0OGE0OTE3OGM3Mzk4NzdiLi4wOGI1ZTU5OTM0ZDAxNTE0M2IyOThkNjEwMTQ4ZTVkMDQ0MzY3
NTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmNwcApAQCAtMTM4LDcgKzEzOCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJC
YWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwogCi0gICAg
cmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVy
LCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlciwgbV9wZXJPcmlnaW5RdW90YSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FM
aXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwg
bV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2VydmVy
OjpvcGVuRGF0YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpAQCAtNjk0
LDE0ICs2OTQsNiBAQCB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzKHVpbnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAotdm9pZCBJ
REJTZXJ2ZXI6OnNldFBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1fcGVy
T3JpZ2luUXVvdGEgPSBxdW90YTsKLQotICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBtX3VuaXF1
ZUlEQkRhdGFiYXNlTWFwLnZhbHVlcygpKQotICAgICAgICBkYXRhYmFzZS0+c2V0UXVvdGEocXVv
dGEpOwotfQotCiB2b2lkIElEQlNlcnZlcjo6Y2xvc2VEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFz
ZSogZGF0YWJhc2UpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAz
M2MzMzEzMWMyMDVlOWEzYjRlM2ZkODBiY2VmMDlkNjZhYTI4NjJhLi5hNjU0ZjIzN2UyYzk5NTc0
ODc2ODM3ZmUxMTVmMDBhNThhYzhlNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMTMsOSArMTEzLDYgQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2Rp
ZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVy
KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3Jp
Z2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+
JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdWludDY0X3QgcGVyT3JpZ2luUXVvdGEoKSBj
b25zdCB7IHJldHVybiBtX3Blck9yaWdpblF1b3RhOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBzZXRQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIGNsb3NlRGF0YWJhc2Uo
VW5pcXVlSURCRGF0YWJhc2UqKTsKICAgICB2b2lkIGRpZENsb3NlRGF0YWJhc2UoVW5pcXVlSURC
RGF0YWJhc2UqKTsKICAgICB2b2lkIGh5c3RlcmVzaXNVcGRhdGVkKFBBTDo6SHlzdGVyZXNpc1N0
YXRlKTsKQEAgLTE5Niw4ICsxOTMsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFiYXNl
RGlyZWN0b3J5UGF0aDsKICAgICBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYg
bV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcjsKIAotICAgIHVpbnQ2NF90IG1fcGVy
T3JpZ2luUXVvdGEgeyBkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsKLQogICAgIFdURjo6RnVuY3Rp
b248dm9pZChib29sKT4gbV9pc0Nsb3NpbmdEYXRhYmFzZUNhbGxiYWNrOwogICAgIFBBTDo6SHlz
dGVyZXNpc0FjdGl2aXR5IG1faXNDbG9zaW5nRGF0YWJhc2VIeXN0ZXJlc2lzOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFj
a2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVt
b3J5SURCQmFja2luZ1N0b3JlLmgKaW5kZXggNjRlNmNjN2RlMGNhNjc2N2VjMThkNTE0YmNhYWY0
YmQ4YTU2MmM3Zi4uNGViZGU1MzZjZjMzNzRhYjQ1MjMzZjM3MTViMmQ1OWEwNGQzNzEyMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlE
QkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaApAQCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1RyYW5zYWN0aW9ucygpIGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KICAgICBib29sIGlzRXBoZW1lcmFsKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
Ci0gICAgdm9pZCBzZXRRdW90YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBVTlVTRURfUEFSQU0o
cXVvdGEpOyB9OwogICAgIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCBm
aW5hbDsKIAogICAgIHZvaWQgcmVtb3ZlT2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQo
TWVtb3J5T2JqZWN0U3RvcmUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5k
ZXggNjI0OTk3NjVhYjlkNGFiZDEzZjU5NzBkMmNmZTU1ZjNiMmMxOTNhMC4uYmI4MjFmNzM1Nzg3
NWUzOTg5MjAxYzAzMDdiNGUwNjRlNGQ4MGNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5jcHAKQEAgLTIzMCwxMSArMjMwLDEwIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JG
aWxlc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKICAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hl
bWFTdHJpbmc7CiB9CiAKLVNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0
b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5k
bGVyJiBmaWxlSGFuZGxlciwgdWludDY0X3QgcXVvdGEpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6
OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50
aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3Rv
cmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2lkZW50aWZpZXIo
aWRlbnRpZmllcikKICAgICAsIG1fZGF0YWJhc2VSb290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERp
cmVjdG9yeSkKICAgICAsIG1fdGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCi0gICAg
LCBtX3F1b3RhKHF1b3RhKQogewogICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJh
c2VEaXJlY3RvcnlXaXRoVXBncmFkZSgpOwogfQpAQCAtODc0LDE0ICs4NzMsNiBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRh
dGFiYXNlSW5mbyYgaW5mbwogICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLXVpbnQ2NF90
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cXVvdGFGb3JPcmlnaW4oKSBjb25zdAotewotICAgIEFT
U0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIHVpbnQ2NF90IGRpc2tGcmVlU3BhY2VTaXplID0g
MDsKLSAgICBGaWxlU3lzdGVtOjpnZXRWb2x1bWVGcmVlU3BhY2UobV9pZGVudGlmaWVyLmRhdGFi
YXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3QobV9kYXRhYmFzZVJvb3REaXJlY3RvcnkpLCBkaXNr
RnJlZVNwYWNlU2l6ZSk7Ci0gICAgcmV0dXJuIHN0ZDo6bWluKGRpc2tGcmVlU3BhY2VTaXplIC8g
MiwgbV9xdW90YSk7Ci19Ci0KIHVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJh
c2VzU2l6ZUZvckZvbGRlcihjb25zdCBTdHJpbmcmIGZvbGRlcikKIHsKICAgICB1aW50NjRfdCBk
aXNrVXNhZ2UgPSAwOwpAQCAtODk5LDI0ICs4OTAsNiBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdAogICAgIHJldHVybiBkYXRh
YmFzZXNTaXplRm9yRm9sZGVyKG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgZGF0YWJhc2Vz
U2l6ZUZvckZvbGRlcihuZXdWZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAotdWludDY0X3Qg
U1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBvbmUgZGF0
YWJhc2UgZmlsZSBpcyB0aGUgcXVvdGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHNpemUgb2YgYWxs
IGRhdGFiYXNlcyB3aXRoaW4gdGhhdCBvcmlnaW4sCi0gICAgLy8gYW5kIHBsdXMgY3VycmVudCBz
aXplIG9mIHRoZSBkYXRhYmFzZSBmaWxlLgotICAgIHVpbnQ2NF90IGRhdGFiYXNlRmlsZVNpemUg
PSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFzZUZpbGVTaXplKGZ1bGxEYXRhYmFzZVBhdGgo
KSk7Ci0gICAgdWludDY0X3QgcXVvdGEgPSBxdW90YUZvck9yaWdpbigpOwotCi0gICAgdWludDY0
X3QgZGlza1VzYWdlID0gZGF0YWJhc2VzU2l6ZUZvck9yaWdpbigpOwotICAgIEFTU0VSVChkaXNr
VXNhZ2UgPj0gZGF0YWJhc2VGaWxlU2l6ZSk7Ci0KLSAgICBpZiAocXVvdGEgPCBkaXNrVXNhZ2Up
Ci0gICAgICAgIHJldHVybiBkYXRhYmFzZUZpbGVTaXplOwotCi0gICAgcmV0dXJuIHF1b3RhIC0g
ZGlza1VzYWdlICsgZGF0YWJhc2VGaWxlU2l6ZTsKLX0KLQogSURCRXJyb3IgU1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5m
bykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRy
YW5zYWN0aW9uIC0gJXMiLCBpbmZvLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CkBAIC05MjUsNyArODk4LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAg
ICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5m
byk7CiAKLSAgICBtX3NxbGl0ZURCLT5zZXRNYXhpbXVtU2l6ZShtYXhpbXVtU2l6ZSgpKTsKICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdHJhbnNhY3Rpb25zLmFkZChpbmZvLmlkZW50aWZpZXIoKSwg
bnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBMT0df
RVJST1IoIkF0dGVtcHQgdG8gZXN0YWJsaXNoIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBh
bHJlYWR5IGV4aXN0cyIpOwpAQCAtOTQyLDEwICs5MTQsNyBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBp
bmZvKQogICAgICAgICBpZiAoc3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
IHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJpbmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9
IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewot
ICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQot
ICAgICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJG
YWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UgYmVjYXVzZSBu
byBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3Rv
cmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3MgfTsKKyAgICAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFi
YXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3MgfTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAy
OSw4ICs5OTgsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50NjQoNSwgaW5mby5tYXhJbmRleElEKCkpICE9IFNRTElURV9PSwogICAgICAgICAg
ICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJP
UigiQ291bGQgbm90IGFkZCBvYmplY3Qgc3RvcmUgJyVzJyB0byBPYmplY3RTdG9yZUluZm8gdGFi
bGUgKCVpKSAtICVzIiwgaW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFz
dEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmICht
X3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9i
amVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3QgY3JlYXRl
IG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAtMTA0MSw4ICsxMDA4LDYg
QEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0
KDEsIGluZm8uaWRlbnRpZmllcigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBzZWVkIGluaXRpYWwga2V5IGdlbmVyYXRvciB2YWx1ZSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRh
YmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0g
U1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNl
ZWRlZEVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZv
ciBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9Owog
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IHNl
ZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUiX3MgfTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTExNjgsOCArMTEzMyw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZp
ZXIpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBv
YmplY3Qgc3RvcmUgaWQgJSIgUFJJaTY0ICIgaW4gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkg
LSAlcyIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1f
c3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSBi
ZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1
cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9y
ZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAtMTI1Myw4ICsxMjE2LDYgQEAgSURCRXJyb3Ig
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHRyYW5zYWMKICAgICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8ubXVsdGlFbnRy
eSgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJ
bmZvIHRhYmxlICglaSkgLSAlcyIsIGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlm
IChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5k
ZXggaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9Owog
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRl
IGluZGV4IGluIGRhdGFiYXNlIl9zIH07CiAgICAgfQogCkBAIC0xNDAzLDggKzEzNjQsNiBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGlu
dDY0X3Qgb2JqZWN0U3RvcmVJRCwgaQogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwg
cmVjb3JkSUQpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FM
SVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBpbmRleCBy
ZWNvcmQgZm9yIGluZGV4ICUiIFBSSWk2NCAiIGluIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBp
biBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiRXJyb3IgcHV0
dGluZyBpbmRleCByZWNvcmQgaW50byBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBm
b3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJy
b3IsICJFcnJvciBwdXR0aW5nIGluZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIl9zIH07CiAgICAg
ICAgIH0KICAgICB9CkBAIC0xNDk0LDggKzE0NTMsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnJlbmFtZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNh
YwogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMywgaW5kZXhJZGVudGlmaWVyKSAhPSBT
UUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAg
ICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUgbmFtZSBmb3IgaW5kZXggaWQg
KCUiIFBSSWk2NCAiLCAlIiBQUklpNjQgIikgaW4gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIs
IG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1f
c3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJl
dHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5k
ZXggYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAg
cmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCJf
cyB9OwogICAgICAgICB9CiAgICAgfQpAQCAtMTgzNSw4ICsxNzkyLDYgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0cmFuc2FjdGkKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywgdmFsdWUuZGF0YSgp
LmRhdGEoKS0+ZGF0YSgpLCB2YWx1ZS5kYXRhKCkuZGF0YSgpLT5zaXplKCkpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCByZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQ
UklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSW5mby5pZGVu
dGlmaWVyKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRF
X0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVy
cm9yLCAiVW5hYmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBl
bm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUi
X3MgfTsKICAgICAgICAgfQogCkBAIC0xODY5LDggKzE4MjQsNiBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRy
YW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgdXJsKSAhPSBTUUxJ
VEVfT0sKICAgICAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBp
biBkYXRhYmFzZSIpOwotICAgICAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsg
UXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRh
YmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBC
bG9iIHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC0xOTA0LDggKzE4NTcsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZFRleHQoMiwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9PSwogICAg
ICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0
YWJhc2UiKTsKLSAgICAgICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0g
U1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIGluIGRhdGFiYXNlIGJl
Y2F1c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmls
ZSByZWNvcmQgaW4gZGF0YWJhc2UiX3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
MjQ0Miw4ICsyMzkzLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNr
ZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZShpbnQ2NF90IG9iamVjdFN0b3IKICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50NjQoMiwgdmFsdWUpICE9IFNRTElURV9PSwogICAgICAgICB8fCBzcWwtPnN0ZXAo
KSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUg
a2V5IGdlbmVyYXRvciB2YWx1ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFz
dEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBR
dW90YUV4Y2VlZGVkRXJyb3IsICJFcnJvciBzdG9yaW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVl
IGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgQ29uc3RyYWludEVycm9yLCAiRXJyb3Igc3RvcmluZyBu
ZXcga2V5IGdlbmVyYXRvciB2YWx1ZSBpbiBkYXRhYmFzZSIgfTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA1NmI1MTdjMmE2MTA3NDRiZGVmMjBlMTg4OWMwNjMx
YzMwYWFmYjU4Li40OTI2MmI5MzVhODc2ZjI4NTVkZDdmNGU0MGJhYzFiZDY3M2M5Zjk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURC
QmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNRTGl0
ZUlEQkN1cnNvcjsKIGNsYXNzIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNr
aW5nU3RvcmUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5Rmls
ZUhhbmRsZXImLCB1aW50NjRfdCBxdW90YSk7CisgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGly
ZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwogICAgIAogICAg
IH5TUUxpdGVJREJCYWNraW5nU3RvcmUoKSBmaW5hbDsKIApAQCAtODEsNyArODEsNiBAQCBwdWJs
aWM6CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qg
b2JqZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9y
ZSgpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRRdW90YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBt
X3F1b3RhID0gcXVvdGE7IH0KICAgICB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9yT3JpZ2luKCkg
Y29uc3QgZmluYWw7CiAKICAgICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25z
KCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTEwNSw5ICsxMDQsNiBAQCBwcml2YXRlOgog
ICAgIFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRh
YmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKCk7CiAKLSAgICB1aW50NjRfdCBxdW90YUZvck9yaWdp
bigpIGNvbnN0OwotICAgIHVpbnQ2NF90IG1heGltdW1TaXplKCkgY29uc3Q7Ci0KICAgICBib29s
IGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVj
b3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CkBA
IC0yMDYsOCArMjAyLDYgQEAgcHJpdmF0ZToKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTR2xvYmFs
T2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKIAogICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZp
bGVIYW5kbGVyJiBtX3RlbXBvcmFyeUZpbGVIYW5kbGVyOwotICAgIAotICAgIHVpbnQ2NF90IG1f
cXVvdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuY3BwCmluZGV4IDlhZTQ5MjI4MTdmYWJjYTc0ZmM1NDA4YjFjNWYzN2U3ZjkxYTk1M2IuLjc3
Y2Q2ZTJlMjllM2E0ZjU5YTA5NDFkM2UwYTVhNDZmZWU5MjBmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcApAQCAtMjI5OSwxMiArMjI5OSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6
OmZvcmdldEVycm9yQ2FsbGJhY2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogICAgIG1f
ZXJyb3JDYWxsYmFja3MucmVtb3ZlKGNhbGxiYWNrSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgVW5p
cXVlSURCRGF0YWJhc2U6OnNldFF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIGlmIChtX2Jh
Y2tpbmdTdG9yZSkKLSAgICAgICAgbV9iYWNraW5nU3RvcmUtPnNldFF1b3RhKHF1b3RhKTsKLX0K
LQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6bm90aWZ5U2VydmVyQWJvdXRDbG9zZShDbG9zZVN0
YXRlIHN0YXRlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oCmluZGV4IGJjZTY3NDVhNmEzYTMxOGJiZTkyMjQ2N2NhMzY5Y2MwZmE4ZThhZTYuLjBk
ZTNjOTBlMTc5NTY1OGY4YjliMTA5ZDYwYzNmMmNkODViNjUxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oCkBAIC0xMjUsOCArMTI1LDYgQEAgcHVibGljOgogCiAgICAgdWludDY0X3Qgc3BhY2VV
c2VkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KTsKLQogcHJpdmF0ZToK
ICAgICBlbnVtIGNsYXNzIENsb3NlU3RhdGUgeyBTdGFydCwgRG9uZSB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDQ4NjJhYzE2YzJhMTQw
ZGI1MTI5ZTkwODY5MjFjOTRmMDg2NDYyMTQuLmU4YWY3NjA5MWEyNTcyNDMyYzRkNDQwODhlMGE3
ZGZkZjgxNTIwZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1
b3RhTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFu
YWdlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1
ZGUgPHd0Zi9XZWFrUHRyLmg+CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1By
b2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggMWNiNGI2NzRiYWYzYzAyYTNjZjJlYzJiNmM5Mjc1ZTJk
OTQ5Y2RmYi4uZTkzMjM3NzE3MTBiNDRmN2MyMGI3ODRmN2E5OWFhOGNhM2EwY2M5MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIx
MTgsNyArMjExOCw3IEBAIFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6
OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBt
X2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgYXV0byBzZXJ2
ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgKnRoaXMs
IFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogeworICAg
IHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgKnRo
aXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogewog
ICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAg
ICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7
CkBAIC0yMTI3LDggKzIxMjcsNiBAQCBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IE5ldHdvcmtQ
cm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbgogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB0aGlzLT5ub3RpZnlIb2xkaW5nTG9ja2VkRmlsZXMoaXNIb2xk
aW5nTG9ja2VkRmlsZXMpOwogICAgIH0pOwotICAgIHNlcnZlci0+c2V0UGVyT3JpZ2luUXVvdGEo
bV9pZGJQZXJPcmlnaW5RdW90YSk7Ci0gICAgcmV0dXJuIHNlcnZlcjsKIH0KIAogSURCU2VydmVy
OjpJREJTZXJ2ZXImIE5ldHdvcmtQcm9jZXNzOjppZGJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vz
c2lvbklEKQpAQCAtMjIyNCwxNCArMjIyMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZElu
ZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAg
ICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAm
TmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9y
eSkpOwogICAgIH0KIH0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SURCUGVyT3JpZ2luUXVv
dGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9pZGJQZXJPcmlnaW5RdW90YSA9IHF1b3RhOwot
ICAgIAotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJzLnZhbHVlcygpKQotICAg
ICAgICBzZXJ2ZXItPnNldFBlck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KICNlbmRpZiAvLyBFTkFC
TEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFC
YXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25z
dCBDbGllbnRPcmlnaW4mIG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuaAppbmRleCA2MzQ3YzE4YzdkZGZkYjNkOGYyZTFmNjNmY2VkODQ4NzM0
MTc4ZjkzLi4wMGU5ZTM2ODUyYzE5MDkyYzU5NmQxYTI5MTcxODQyMGJkNzkwNDE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yNzcsNyAr
Mjc3LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOwogICAgIC8vIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFj
a2luZ1N0b3JlRmlsZUhhbmRsZXIuCiAgICAgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21w
bGV0ZShjb25zdCBTdHJpbmcmIHBhdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2lu
UXVvdGEodWludDY0X3QpOwogI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFj
ZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3Jp
Z2luJik7CiAKQEAgLTUxNCw3ICs1MTMsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTkRFWEVE
X0RBVEFCQVNFKQogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0cmluZz4gbV9pZGJEYXRh
YmFzZVBhdGhzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJDb3JlOjpJ
REJTZXJ2ZXI6OklEQlNlcnZlcj4+IG1faWRiU2VydmVyczsKLSAgICB1aW50NjRfdCBtX2lkYlBl
ck9yaWdpblF1b3RhIHsgV2ViQ29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEg
fTsKICNlbmRpZgogCiAgICAgRGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNz
Lm1lc3NhZ2VzLmluCmluZGV4IGRiZjNjYTdhZTJlNWIwOGYwOGQ2NWE4OGRjNTYwMGZjYWU1M2Q2
YmQuLmRlNDA2MDBjOTBjNzY0NzA5OTliY2FkZWUxN2QyYWFmMDk2NjcwYjcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdl
cy5pbgpAQCAtMTYxLDkgKzE2MSw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2Fj
eVJlY2VpdmVyIHsKICAgICBEaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5KCkKICNlbmRpZgogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2V0SURC
UGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi0jZW5kaWYKICAgICBVcGRhdGVRdW90YUJh
c2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0cnVj
dCBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKQogCiAgICAgU3RvcmVBZENsaWNrQXR0cmli
dXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRp
b24gYWRDbGlja0F0dHJpYnV0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
Q29udGV4dC5jcHAKaW5kZXggOTNmNzZhNzk2MTA3ZDdjNDI1YWExMzM5MDg5MDUxMmEwZmFjYWZk
NS4uNmI4OTYxMDNhZTBmMjZlMTc4OTczMTRlMDM4YTA0NjU3Mzk1ZTM0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCkBAIC02NTksMTEgKzY1OSw2IEBA
IHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQogI2VuZGlmCiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEoV0tD
b250ZXh0UmVmIGNvbnRleHRSZWYsIHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdlYktpdDo6dG9J
bXBsKGNvbnRleHRSZWYpLT5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci19Ci0KIHZvaWQg
V0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVm
IGNvbnRleHRSZWYpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFyQ3Vy
cmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggZjljN2QzMjk2ZTVjMGNkN2YzMzY3
ZGUzOWEwMzFkMjgzZmJlNjY2Ni4uMGMxN2IxYTExMmMyZWMxZjJlODUwMjE3YWI1MWY2NjRhNTE4
YWVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFBy
aXZhdGUuaApAQCAtMTE2LDggKzExNiw2IEBAIFdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRl
eHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpCiBXS19F
WFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRl
eHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1l
VHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRD
bGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCi1XS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShXS0NvbnRleHRSZWYgY29udGV4dCwg
dWludDY0X3QgcXVvdGEpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRN
b2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKICNpZmRlZiBf
X2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vz
c1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmlu
ZGV4IDRjM2YxZTc0YWFjZTM0YTVhNzRmZTViODcyZGY1MGM1MjQ3YTlhYzMuLjkzMmFmNjA2OTIz
NzQ0MzJkYTZiOGNhOWIzZDIwMGY4MmJlMWE5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE3NTQsMTMgKzE3NTQsNiBAQCB2b2lkIFdlYlByb2Nl
c3NQb29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKCkKICAgICBlbnN1cmVOZXR3b3JrUHJv
Y2VzcygpLnN5bmNBbGxDb29raWVzKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElE
QlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29y
a1Byb2Nlc3M6OlNldElEQlBlck9yaWdpblF1b3RhKHF1b3RhKSwgMCk7Ci0jZW5kaWYKLX0KLQog
dm9pZCBXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0
KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9z
dCkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmgKaW5kZXggMjE1N2I2YjA5YWNjMGNhNTBlODYxMjgyODIxYjE5ZWFh
NWVhZDg2Ni4uMzRkYzRiMTJkNjZhZTc5ZDA4Y2U3NjgzMzdlNGU2NTczNzRhMjFmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC0yOTksOCArMjk5LDYgQEAg
cHVibGljOgogCiAgICAgdm9pZCBzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKCk7CiAKLSAgICB2
b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIHZvaWQgc2V0U2hvdWxk
TWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3No
b3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAg
ICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29u
c3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGlu
ZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1
bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCmluZGV4IDVlZTVhN2IyOWJlZjQ1Mzk5
ZGZkNzhiMzEyM2MwZTBiMmZjOWFjYTEuLjJlYjcwNTM2MjZkZjJlNzdiOWIyMzY4ODAyMDllZWFi
NTFjZTVhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRh
YmFzZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0
YWJhc2VQcm92aWRlci5jcHAKQEAgLTQ1LDE3ICs0NSw5IEBAIFdlYkRhdGFiYXNlUHJvdmlkZXI6
On5XZWJEYXRhYmFzZVByb3ZpZGVyKCkKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIFdl
YkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBXZWJEYXRhYmFzZVByb3Zp
ZGVyOjppZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklE
JiBzZXNzaW9uSUQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2lkYlNlcnZlck1hcC5hZGQoc2Vz
c2lvbklELnNlc3Npb25JRCgpLCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKLSAgICAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgcmVz
dWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRl
KHNlc3Npb25JRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+
dmFsdWUgPSBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeVBhdGgoKSk7Ci0gICAgfQotCi0gICAgcmVzdWx0Lml0ZXJh
dG9yLT52YWx1ZS0+aWRiU2VydmVyKCkuc2V0UGVyT3JpZ2luUXVvdGEobV9pZGJQZXJPcmlnaW5R
dW90YSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Y29ubmVjdGlvblRv
U2VydmVyKCk7CisgICAgcmV0dXJuIG1faWRiU2VydmVyTWFwLmVuc3VyZShzZXNzaW9uSUQuc2Vz
c2lvbklEKCksIFsmc2Vzc2lvbklEXSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uSUQuaXNFcGhl
bWVyYWwoKSA/IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCkg
OiBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeVBhdGgoKSk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5jb25uZWN0
aW9uVG9TZXJ2ZXIoKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxldGVBbGxE
YXRhYmFzZXMoKQpAQCAtNjMsMTMgKzU1LDQgQEAgdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpk
ZWxldGVBbGxEYXRhYmFzZXMoKQogICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJN
YXAudmFsdWVzKCkpCiAgICAgICAgIHNlcnZlci0+aWRiU2VydmVyKCkuY2xvc2VBbmREZWxldGVE
YXRhYmFzZXNNb2RpZmllZFNpbmNlKC1XYWxsVGltZTo6aW5maW5pdHkoKSwgW10geyB9KTsKIH0K
LQotdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRf
dCBxdW90YSkKLXsKLSAgICBtX2lkYlBlck9yaWdpblF1b3RhID0gcXVvdGE7Ci0KLSAgICBmb3Ig
KGF1dG8mIHNlcnZlciA6IG1faWRiU2VydmVyTWFwLnZhbHVlcygpKQotICAgICAgICBzZXJ2ZXIt
PmlkYlNlcnZlcigpLnNldFBlck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KLQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaAppbmRl
eCA1MjIyMzMwOWIzOWJlM2VjYWNlYjY5ZmM2OWYyMDA3ZTJjOWIzZWRhLi4zZjUwNmQ3NmMzYmY3
NDUzNGYzNjNkZjJhNDdmZWNiZTM3ZTEwMTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKQEAgLTQ0LDggKzQ0LDYgQEAgcHVibGlj
OgogICAgIFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBpZGJDb25u
ZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGRlbGV0ZUFsbERhdGFiYXNlcygpOwotCi0gICAgdm9pZCBzZXRJREJQZXJP
cmlnaW5RdW90YSh1aW50NjRfdCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU1LDYgKzUzLDUg
QEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI+PiBtX2lkYlNlcnZl
ck1hcDsKLSAgICB1aW50NjRfdCBtX2lkYlBlck9yaWdpblF1b3RhIHsgV2ViQ29yZTo6SURCU2Vy
dmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KaW5kZXgg
NmQ2MmE5OGI5N2YyZWMyNDE0YzdkYjFhZDNlNzBmMmQwZGYxM2VlNC4uNzNlMjMzMWViYjZjZmFl
ZGVlYTRjMWQyZjEyYWQwYmFkNTIyNjUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KQEAgLTE1NywxMyArMTU3LDYg
QEAgc3RhdGljIE5TU3RyaW5nICpkYXRhYmFzZXNEaXJlY3RvcnlQYXRoKCk7CiAjZW5kaWYKIH0K
IAotLSAodm9pZClzZXRJREJQZXJPcmlnaW5RdW90YToodWludDY0X3QpcXVvdGEKLXsKLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0
b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCiAKIHN0YXRpYyBib29sIGlzRmlsZUhpZGRlbihOU1N0cmluZyAqZmls
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJh
c2VNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJE
YXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKaW5kZXggMjE3MjQxNjJiOTUzODhhNGEyNmJhOWVjNGQ2
YzUwNGY0NWY2NDA0YS4uOTM5YjRjZjdlMDU3NDJkMzZlMTMwNzdjMGNhNjYzMmZmM2U1ZGNmMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1h
bmFnZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJE
YXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKQEAgLTcwLDcgKzcwLDYgQEAgZXh0ZXJuIENGU3RyaW5n
UmVmIFdlYkRhdGFiYXNlT3JpZ2luc0RpZENoYW5nZU5vdGlmaWNhdGlvbjsKIAogLy8gRm9yIER1
bXBSZW5kZXJUcmVlIHN1cHBvcnQgb25seQogLSAodm9pZClkZWxldGVBbGxJbmRleGVkRGF0YWJh
c2VzOwotLSAodm9pZClzZXRJREJQZXJPcmlnaW5RdW90YToodWludDY0X3QpcXVvdGE7CiAKICNp
ZiBUQVJHRVRfT1NfSVBIT05FCiArICh2b2lkKXNjaGVkdWxlRW1wdHlEYXRhYmFzZVJlbW92YWw7
CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMTE3
ZGFlYWZkMjQ0YWMwNzE5ZGM0YTFlNmJkZTk5MjQ1NzlmMTM2Ni4uYjhjNTlhYjJiNDdiZmIzNWNj
N2M3NTI3YjA1YWIyZTFhM2M4ZmYyNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBi
L1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE5LTA0LTAzICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNpZmljIHF1
b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1
NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c3RhdGlj
RnVuY3Rpb25zKToKKyAgICAgICAgKHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2spOiBEZWxl
dGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChydW5UZXN0KToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbToKKyAgICAgICAg
KFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6
CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
aDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxl
dGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUpOgorCiAyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBQYXNzIHN0b3JhZ2UgcXVvdGEgcGFyYW1ldGVycyBmcm9tIFVJUHJvY2VzcyB0
byBOZXR3b3JrUHJvY2VzcyBhcyBwYXJ0IG9mIFdlYnNpdGVEYXRhU3RvcmUgcGFyYW1ldGVycwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAppbmRleCA2MjIyMjQyYTBhODkwMzFkNmRhMWI4
YTM4ZjkwODdhMTVmN2UxYWRhLi41YWI3MTY4YTQ5NDE2YjNlY2I4Yzc5YjUyNWY1MTI4Njg4YWJh
MjY0IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcApAQCAtOTM0LDIwICs5MzQsNiBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBzZXREYXRhYmFzZVF1b3RhQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bgogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KIAotc3RhdGljIEpTVmFsdWVSZWYgc2V0SURCUGVyT3JpZ2luUXVvdGFD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCi17Ci0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPCAxKQotICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
Ci0gICAgCi0gICAgYXV0byogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PFRlc3RSdW5uZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwotICAgIAotICAgIGRvdWJsZSBxdW90YSA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIG51bGxwdHIpOwotICAgIGlm
ICghc3RkOjppc25hbihxdW90YSkpCi0gICAgICAgIGNvbnRyb2xsZXItPnNldElEQlBlck9yaWdp
blF1b3RhKHN0YXRpY19jYXN0PHVpbnQ2NF90PihxdW90YSkpOwotICAgIAotICAgIHJldHVybiBK
U1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLX0KLQogc3RhdGljIEpTVmFsdWVSZWYgc2V0
RGVmZXJzTG9hZGluZ0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAg
ICBpZiAoYXJndW1lbnRDb3VudCA8IDEpCkBAIC0yMjI1LDcgKzIyMTEsNiBAQCBKU1N0YXRpY0Z1
bmN0aW9uKiBUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJzZXRSZWpl
Y3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMi
LCBzZXRSZWplY3RzUHJvdGVjdGlvblNwYWNlQW5kQ29udGludWVGb3JBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRIYW5kbGVzQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VzIiwgc2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlc0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldEljb25EYXRhYmFzZUVuYWJsZWQiLCBzZXRJY29u
RGF0YWJhc2VFbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKLSAgICAgICAgeyAic2V0SURCUGVyT3Jp
Z2luUXVvdGEiLCBzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgInNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkIiwgc2V0QXV0b21hdGljTGlua0Rl
dGVjdGlvbkVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNYWluRnJhbWVJ
c0ZpcnN0UmVzcG9uZGVyIiwgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlckNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgInNldE1vY2tEZXZpY2VPcmllbnRhdGlvbiIsIHNldE1vY2tEZXZp
Y2VPcmllbnRhdGlvbkNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9UZXN0UnVubmVyLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgK
aW5kZXggNDIwOTE5MGIzNjJkYzBkZmEyNzJmODNmNTM3NWIwYWFiMDUxOWYwZS4uYmI2M2VkNWYx
ODA4YjBhOTYyMWRmN2E0NzVlY2FhNjNhODFiYWNmYSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5u
ZXIuaApAQCAtMTA2LDcgKzEwNiw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERvbWFpblJlbGF4
YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hlbWUoYm9vbCBmb3JiaWRkZW4sIEpTU3RyaW5nUmVmIHNj
aGVtZSk7CiAgICAgdm9pZCBzZXREZWZlcnNMb2FkaW5nKGJvb2wpOwogICAgIHZvaWQgc2V0SWNv
bkRhdGFiYXNlRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVp
bnQ2NF90KTsKICAgICB2b2lkIHNldEphdmFTY3JpcHRDYW5BY2Nlc3NDbGlwYm9hcmQoYm9vbCBm
bGFnKTsKICAgICB2b2lkIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKGJvb2wgZmxh
Zyk7CiAgICAgdm9pZCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyKGJvb2wgZmxhZyk7CmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggNjZjM2ZiOTg0
M2FjYWNhY2EzYWUzMzJjY2Y4OWIyZGUwZTBmMmE0NS4uODI4NjIwMDJmYzBmNzMyMjNkMmEzZmU3
ZmZkZTMxMjNjOGU2NjY1ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQpAQCAtMjAyNiw3ICsyMDI2LDYgQEAgc3RhdGljIHZvaWQgcnVuVGVzdChjb25zdCBz
dHJpbmcmIGlucHV0TGluZSkKICAgICBnVGVzdFJ1bm5lci0+Y2xlYXJBbGxBcHBsaWNhdGlvbkNh
Y2hlcygpOwogCiAgICAgZ1Rlc3RSdW5uZXItPmNsZWFyQWxsRGF0YWJhc2VzKCk7Ci0gICAgZ1Rl
c3RSdW5uZXItPnNldElEQlBlck9yaWdpblF1b3RhKDUwICogTUIpOwogCiAgICAgaWYgKGRpc2Fs
bG93ZWRVUkxzKQogICAgICAgICBDRlNldFJlbW92ZUFsbFZhbHVlcyhkaXNhbGxvd2VkVVJMcyk7
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tCmluZGV4IDc0MjUxN2Nm
ZjcxMDUyMGJkYWFhMTdhZjIyZWE3Yjk5ODRhOWRlMzMuLjBiY2Q1NTU2NzdiY2QwMjI0YTZlZTY1
NzYzMzUxZjljMTc1YzFiMjcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9U
ZXN0UnVubmVyTWFjLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVy
TWFjLm1tCkBAIC00MzMsMTEgKzQzMyw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6c2V0RGF0YWJhc2VR
dW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCiAgICAgW29yaWdpbiByZWxlYXNlXTsKIH0K
IAotdm9pZCBUZXN0UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkK
LXsKLSAgICBbW1dlYkRhdGFiYXNlTWFuYWdlciBzaGFyZWRXZWJEYXRhYmFzZU1hbmFnZXJdIHNl
dElEQlBlck9yaWdpblF1b3RhOnF1b3RhXTsKLX0KLQogdm9pZCBUZXN0UnVubmVyOjpnb0JhY2so
KQogewogICAgIFtbbWFpbkZyYW1lIHdlYlZpZXddIGdvQmFja107CmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVu
bmVyLmlkbAppbmRleCAwODdkYTg0NjUyNTdmYmU2OWQzNThiZjU3NzBlZjcyMzJjNjk1NWIwLi44
NjhhZjVlZDVjN2I0YWJiMDg2NjYyNzQ1ZDk4OTM0ZTYwYjA3MjMzIDEwMDY0NAotLS0gYS9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVz
dFJ1bm5lci5pZGwKQEAgLTEzOCw5ICsxMzgsNiBAQCBpbnRlcmZhY2UgVGVzdFJ1bm5lciB7CiAg
ICAgYXR0cmlidXRlIGRvdWJsZSBkYXRhYmFzZURlZmF1bHRRdW90YTsKICAgICBhdHRyaWJ1dGUg
ZG91YmxlIGRhdGFiYXNlTWF4UXVvdGE7CiAKLSAgICAvLyBJbmRleGVkREIgQVBJCi0gICAgdm9p
ZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwotCiAgICAg
Ly8gQXBwbGljYXRpb24gQ2FjaGUgQVBJCiAgICAgdm9pZCBjbGVhckFsbEFwcGxpY2F0aW9uQ2Fj
aGVzKCk7CiAgICAgdm9pZCBzZXRBcHBDYWNoZU1heGltdW1TaXplKHVuc2lnbmVkIGxvbmcgbG9u
ZyBzaXplKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuY3BwCmluZGV4IDFjOWFmMzMxOTcwYmU0YzQ2NzVmYjY5MzlmOTQ3ZDg5YTEx
YzFlNDYuLjYwYmM5YWVhNmQxZWYxZDE1MDBjNWYzYTYwMzM5MjdjNDk4ZjcwNzAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNw
cApAQCAtNDE2LDEzICs0MTYsNiBAQCB2b2lkIFRlc3RSdW5uZXI6OmRpc2FsbG93SW5jcmVhc2VG
b3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEoKQogICAgIG1fZGlzYWxsb3dJbmNyZWFzZUZvckFwcGxp
Y2F0aW9uQ2FjaGVRdW90YSA9IHRydWU7CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SURCUGVy
T3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRJREJQZXJPcmlnaW5RdW90YSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVz
c2FnZUJvZHkoQWRvcHRXSywgV0tVSW50NjRDcmVhdGUocXVvdGEpKTsKLSAgICBXS0J1bmRsZVBv
c3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5kbGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgp
LCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCksIG51bGxwdHIpOwotfQotCiBz
dGF0aWMgaW5saW5lIEpTVmFsdWVSZWYgc3RyaW5nQXJyYXlUb0pTKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3MpCiB7CiAgICAgY29uc3Qgc2l6ZV90IGNvdW50ID0gV0tB
cnJheUdldFNpemUoc3RyaW5ncyk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IDg0YWIyMTkzMzM2NmQzZDdlNjdjOTE2OGVk
OGQwNjZjMTYxNDE2MTUuLjE1OTFhYzg1ZDhlNTg0NzI0NGVlMjgzMjJjN2FlYzU3ZjhhNWNhNTIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1
bm5lci5oCkBAIC0xNzYsOSArMTc2LDYgQEAgcHVibGljOgogICAgIHVpbnQ2NF90IGRvbUNhY2hl
U2l6ZShKU1N0cmluZ1JlZiBvcmlnaW4pOwogICAgIHZvaWQgc2V0QWxsb3dTdG9yYWdlUXVvdGFJ
bmNyZWFzZShib29sKTsKIAotICAgIC8vIEluZGV4ZWREQgotICAgIHZvaWQgc2V0SURCUGVyT3Jp
Z2luUXVvdGEodWludDY0X3QpOwotCiAgICAgLy8gRmFpbGVkIGxvYWQgY29uZGl0aW9uIHRlc3Rp
bmcKICAgICB2b2lkIGZvcmNlSW1tZWRpYXRlQ29tcGxldGlvbigpOwogCmRpZmYgLS1naXQgYS9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDUzZDEzNDcxNDMzYzBmMTMyZmE4NWIx
NWM0N2U3Zjg1OGI1ZGE1NGEuLjQ3YTYzY2JiNjIwYjdjODVkZWNmZmUxYTZkMjNhNjhkY2EyNTg1
ZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC05MDEs
NyArOTAxLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZh
bHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywgUmUKICAgICBXS0NvbnRleHRDbGVhckNh
Y2hlZENyZWRlbnRpYWxzKFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5jb250ZXh0KCkpOwog
CiAgICAgQ2xlYXJJbmRleGVkRGF0YWJhc2VzKCk7Ci0gICAgc2V0SURCUGVyT3JpZ2luUXVvdGEo
NTAgKiBNQik7CiAKICAgICBjbGVhclNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKCk7CiAgICAg
Y2xlYXJET01DYWNoZXMoKTsKQEAgLTI5ODYsMTEgKzI5ODUsNiBAQCB2b2lkIFRlc3RDb250cm9s
bGVyOjpjbGVhckRPTUNhY2hlcygpCiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1RpbWVv
dXQpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50
NjRfdCBxdW90YSkKLXsKLSAgICBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShwbGF0Zm9y
bUNvbnRleHQoKSwgcXVvdGEpOwotfQotCiBzdHJ1Y3QgUmVtb3ZlQWxsSW5kZXhlZERhdGFiYXNl
c0NhbGxiYWNrQ29udGV4dCB7CiAgICAgZXhwbGljaXQgUmVtb3ZlQWxsSW5kZXhlZERhdGFiYXNl
c0NhbGxiYWNrQ29udGV4dChUZXN0Q29udHJvbGxlciYgY29udHJvbGxlcikKICAgICAgICAgOiB0
ZXN0Q29udHJvbGxlcihjb250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5oCmluZGV4IGFjZTZhNTQxMDJjODliZGFlYzZhYTNlM2NjMDY1NmM1OTM1OGQ1OWMuLmYy
Y2E1NDRhY2NkYmQwMTZhNzA2MTc3ZDlhZDkxM2YyYTM3OThlMzggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTI2Nyw4ICsyNjcsNiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbCk7CiAKLSAgICB2b2lkIHNl
dElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIGJvb2wgZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb247IH0KICAgICB2b2lk
IGNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkg
eyBtX2RpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9IGZh
bHNlOyB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRp
b24uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXgg
NGM3MDM3YjdmNTc3NWM2NjdkZjM4YjAzMTNjMWRhYzAwNGFiZTUyMC4uY2U1YTljM2YwNTMxZmI0
MzM3YWYxZjk0YmQzZjFjMmNkMWIxNDVkYiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHAKQEAgLTE0OTMsMTMgKzE0OTMsNiBAQCBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVj
dGVkQgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldElEQlBlck9yaWdpblF1b3RhIikp
IHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2NEdl
dFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgcXVvdGEgPSBzdGF0aWNfY2FzdDxXS1VJ
bnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9u
KCkuc2V0SURCUGVyT3JpZ2luUXVvdGEoV0tVSW50NjRHZXRWYWx1ZShxdW90YSkpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4
Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluamVjdFVzZXJTY3JpcHQiKSkgewogICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwogICAg
ICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2Fn
ZUJvZHkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366650</attachid>
            <date>2019-04-03 15:11:31 -0700</date>
            <delta_ts>2019-04-03 16:19:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196545-20190403151131.patch</filename>
            <type>text/plain</type>
            <size>159141</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmI5ZDZkN2VlOTRhMzNm
YWU2NjkyOTBiMGY2NTI4Mjg1ZTdiM2JjMi4uNzg2MGQyMjliMjhmZmJiNDJmOGRjZTczYWYzYmMw
NjQ0NzljMzJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE5LTA0LTAzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNp
ZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IgYXMgSURCIHNwZWNpZmljIHF1b3RhIGlzIG5vIGxvbmdl
ciB1c2VkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6c2V0UGVyT3Jp
Z2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwZXJP
cmlnaW5RdW90YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVn
aW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5j
aGVja2VkUHV0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFNldEtleUdlbmVy
YXRvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpxdW90YUZvck9yaWdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWF4aW11bVNpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6c2V0UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorCiAyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIHN0b3JhZ2UgcXVvdGEgcGFyYW1ldGVy
cyBmcm9tIFVJUHJvY2VzcyB0byBOZXR3b3JrUHJvY2VzcyBhcyBwYXJ0IG9mIFdlYnNpdGVEYXRh
U3RvcmUgcGFyYW1ldGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwYjBiODRhY2VkMDRhNWI0OTQ3NzM3YjE3YzQ5
YzcxNWE0NjJlODI1Li41MWVhMjY4ODAyM2E4M2I3NWI3NzIxOWU0YWJlNjJjYWRhMDI2ZGQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNpZmljIHF1b3RhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNyZWF0ZUlEQlNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
OgorICAgICAgICAoV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaDoKKwogMjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgUGFzcyBzdG9yYWdlIHF1b3RhIHBhcmFtZXRlcnMgZnJvbSBV
SVByb2Nlc3MgdG8gTmV0d29ya1Byb2Nlc3MgYXMgcGFydCBvZiBXZWJzaXRlRGF0YVN0b3JlIHBh
cmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggMjVmZTM1YjAzZTU1MGI3MmMwOGQ0NjY3
M2ZkZmI5ZGMxOWI1YTJmMS4uOTEzODExYTExOWExOThmZjRjOGIwOTI5MGQ4ZDRmZGMyYTdkMGIx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wNC0wMyAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVj
aWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViRGF0YWJh
c2VQcm92aWRlcjo6aWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lvbik6CisgICAgICAgIChX
ZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAgICAoV2ViRGF0
YWJhc2VQcm92aWRlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAq
IFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oOgorCiAyMDE5LTAzLTEzICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBJREIgcXVvdGEgdXNhZ2Ug
dGhyb3VnaCBRdW90YU1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBkMTlk
Y2RhZjRhNTM4OGU0M2RhYzg0MDJlNzk2MzUzMGZkZTQ0YzI0Li5lMGVjZjkwMzE2MWRkZWZhNTQ4
ZTc0ZmQyYjFjM2QwMDcwZjBkNzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTktMDQtMDMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFn
ZXIubW06CisgICAgICAgICgtW1dlYkRhdGFiYXNlTWFuYWdlciBzZXRJREJQZXJPcmlnaW5RdW90
YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZh
dGUuaDoKKwogMjAxOS0wMy0zMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIG1vcmUgaTM4NiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCmluZGV4IDY3MTUwZDg0YzZmZGVlYWJkZTIyMGZiYjUwZTIxZDc4NGVh
NDQ4MzIuLjI5NWU3ODhjOGJhMTE3YWEzMzRjYTJjM2YxNzU3OTdlMDA1ODk2YmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wNC0wMyAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZp
YyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBJbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsOgorICAgICAgICAqIFdlYkRhdGFi
YXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJEYXRhYmFzZU1hbmFnZXI6OnNldElEQlBlck9y
aWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJEYXRhYmFzZU1hbmFnZXIuaDoKKwog
MjAxOS0wMy0yOSAgQ2F0aGllIENoZW4gIDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgSW1wbGVtZW50IFJlc2l6ZU9ic2VydmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGM2ZDdk
NDNmOWViYWRkMjkyNDgwY2Y0ZWFjNDA3ODc1MTAwOWE0MDEuLjM0ZjFlMzU3NTJjN2E5NmZmYTgz
MWNkYjgzMTQ1NWI5YzVlYWVmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTEwMCw3ICsxMDAs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRXBoZW1lcmFsKCkgPSAwOwogCiAgICAg
dmlydHVhbCB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9yT3JpZ2luKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRRdW90YSh1aW50NjRfdCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAg
SURCQmFja2luZ1N0b3JlKCkgeyBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOyB9CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAppbmRleCA2MmYzMjBjZmIwM2NkZGIzZjczMjJkM2I0OGE0OTE3OGM3Mzk4Nzdi
Li4wOGI1ZTU5OTM0ZDAxNTE0M2IyOThkNjEwMTQ4ZTVkMDQ0MzY3NTgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApA
QCAtMTM4LDcgKzEzOCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNl
cnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0
YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciwgbV9wZXJPcmlnaW5R
dW90YSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3Jl
PihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1w
b3JhcnlGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpAQCAtNjk0LDE0ICs2OTQsNiBAQCB2b2lk
IElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OnNldFBlck9y
aWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1fcGVyT3JpZ2luUXVvdGEgPSBxdW90
YTsKLQotICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwLnZh
bHVlcygpKQotICAgICAgICBkYXRhYmFzZS0+c2V0UXVvdGEocXVvdGEpOwotfQotCiB2b2lkIElE
QlNlcnZlcjo6Y2xvc2VEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAzM2MzMzEzMWMyMDVlOWEzYjRl
M2ZkODBiY2VmMDlkNjZhYTI4NjJhLi5hNjU0ZjIzN2UyYzk5NTc0ODc2ODM3ZmUxMTVmMDBhNThh
YzhlNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oCkBAIC0xMTMsOSArMTEzLDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1l
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgdWludDY0X3QgcGVyT3JpZ2luUXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3Bl
ck9yaWdpblF1b3RhOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQZXJPcmlnaW5RdW90
YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2Uq
KTsKICAgICB2b2lkIGRpZENsb3NlRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2UqKTsKICAgICB2
b2lkIGh5c3RlcmVzaXNVcGRhdGVkKFBBTDo6SHlzdGVyZXNpc1N0YXRlKTsKQEAgLTE5Niw4ICsx
OTMsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKICAg
ICBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgbV9iYWNraW5nU3RvcmVUZW1w
b3JhcnlGaWxlSGFuZGxlcjsKIAotICAgIHVpbnQ2NF90IG1fcGVyT3JpZ2luUXVvdGEgeyBkZWZh
dWx0UGVyT3JpZ2luUXVvdGEgfTsKLQogICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gbV9p
c0Nsb3NpbmdEYXRhYmFzZUNhbGxiYWNrOwogICAgIFBBTDo6SHlzdGVyZXNpc0FjdGl2aXR5IG1f
aXNDbG9zaW5nRGF0YWJhc2VIeXN0ZXJlc2lzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggNjRlNmNjN2RlMGNhNjc2N2VjMThkNTE0YmNhYWY0YmQ4YTU2MmM3Zi4uNGViZGU1
MzZjZjMzNzRhYjQ1MjMzZjM3MTViMmQ1OWEwNGQzNzEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNr
aW5nU3RvcmUuaApAQCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c1Np
bXVsdGFuZW91c1RyYW5zYWN0aW9ucygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29s
IGlzRXBoZW1lcmFsKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBzZXRRdW90
YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBVTlVTRURfUEFSQU0ocXVvdGEpOyB9OwogICAgIHVp
bnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQg
cmVtb3ZlT2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNjI0OTk3NjVhYjlkNGFi
ZDEzZjU5NzBkMmNmZTU1ZjNiMmMxOTNhMC4uYmI4MjFmNzM1Nzg3NWUzOTg5MjAxYzAzMDdiNGUw
NjRlNGQ4MGNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzMCwx
MSArMjMwLDEwIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKCkKICAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7CiB9CiAKLVNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJl
Y3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlciwg
dWludDY0X3QgcXVvdGEpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAs
IG1fZGF0YWJhc2VSb290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1f
dGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCi0gICAgLCBtX3F1b3RhKHF1b3RhKQog
ewogICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBn
cmFkZSgpOwogfQpAQCAtODc0LDE0ICs4NzMsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwog
ICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLXVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6cXVvdGFGb3JPcmlnaW4oKSBjb25zdAotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwotICAgIHVpbnQ2NF90IGRpc2tGcmVlU3BhY2VTaXplID0gMDsKLSAgICBGaWxlU3lzdGVt
OjpnZXRWb2x1bWVGcmVlU3BhY2UobV9pZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRp
dmVUb1Jvb3QobV9kYXRhYmFzZVJvb3REaXJlY3RvcnkpLCBkaXNrRnJlZVNwYWNlU2l6ZSk7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWluKGRpc2tGcmVlU3BhY2VTaXplIC8gMiwgbV9xdW90YSk7Ci19Ci0K
IHVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihj
b25zdCBTdHJpbmcmIGZvbGRlcikKIHsKICAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSAwOwpAQCAt
ODk5LDI0ICs4OTAsNiBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNl
c1NpemVGb3JPcmlnaW4oKSBjb25zdAogICAgIHJldHVybiBkYXRhYmFzZXNTaXplRm9yRm9sZGVy
KG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihuZXdW
ZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBvbmUgZGF0YWJhc2UgZmlsZSBpcyB0aGUg
cXVvdGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHNpemUgb2YgYWxsIGRhdGFiYXNlcyB3aXRoaW4g
dGhhdCBvcmlnaW4sCi0gICAgLy8gYW5kIHBsdXMgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFz
ZSBmaWxlLgotICAgIHVpbnQ2NF90IGRhdGFiYXNlRmlsZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVt
OjpnZXREYXRhYmFzZUZpbGVTaXplKGZ1bGxEYXRhYmFzZVBhdGgoKSk7Ci0gICAgdWludDY0X3Qg
cXVvdGEgPSBxdW90YUZvck9yaWdpbigpOwotCi0gICAgdWludDY0X3QgZGlza1VzYWdlID0gZGF0
YWJhc2VzU2l6ZUZvck9yaWdpbigpOwotICAgIEFTU0VSVChkaXNrVXNhZ2UgPj0gZGF0YWJhc2VG
aWxlU2l6ZSk7Ci0KLSAgICBpZiAocXVvdGEgPCBkaXNrVXNhZ2UpCi0gICAgICAgIHJldHVybiBk
YXRhYmFzZUZpbGVTaXplOwotCi0gICAgcmV0dXJuIHF1b3RhIC0gZGlza1VzYWdlICsgZGF0YWJh
c2VGaWxlU2l6ZTsKLX0KLQogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRy
YW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uIC0gJXMiLCBp
bmZvLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC05MjUs
NyArODk4LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0
aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBBU1NFUlQobV9zcWxpdGVE
Qi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAKLSAgICBtX3NxbGl0
ZURCLT5zZXRNYXhpbXVtU2l6ZShtYXhpbXVtU2l6ZSgpKTsKICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHJhbnNhY3Rpb25zLmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8g
ZXN0YWJsaXNoIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwpA
QCAtOTQyLDEwICs5MTQsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2lu
VHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwogICAgICAg
ICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKG1f
c3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3
IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9y
IGRvbWFpbiJfcyB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yID0g
SURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZl
cnNpb24gaW4gZGF0YWJhc2UiX3MgfTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0
YWJhc2UiX3MgfTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAyOSw4ICs5OTgsNiBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgaW5m
by5tYXhJbmRleElEKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFkZCBv
YmplY3Qgc3RvcmUgJyVzJyB0byBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5m
by5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBR
dW90YUV4Y2VlZGVkRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSBiZWNhdXNl
IG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSJfcyB9
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTA0MSw4ICsxMDA4LDYgQEAgSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHQKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRpZmll
cigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZWVkIGluaXRpYWwga2V5
IGdlbmVyYXRvciB2YWx1ZSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiQ291bGQg
bm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUgYmVj
YXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJu
IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2Vu
ZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogICAgIH0KQEAg
LTExNjgsOCArMTEzMyw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1l
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8
fCBzcWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwog
ICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBvYmplY3Qgc3RvcmUgaWQgJSIg
UFJJaTY0ICIgaW4gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJ
VEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVk
RXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBz
cGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9
CiAgICAgfQpAQCAtMTI1Myw4ICsxMjE2LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAg
ICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8ubXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sK
ICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAl
cyIsIGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1
b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UgYmVj
YXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNl
Il9zIH07CiAgICAgfQogCkBAIC0xNDAzLDggKzEzNjQsNiBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaQogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgcmVjb3JkSUQpICE9IFNRTElU
RV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBpbmRleCByZWNvcmQgZm9yIGluZGV4ICUi
IFBSSWk2NCAiIGluIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICgl
aSkgLSAlcyIsIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiRXJyb3IgcHV0dGluZyBpbmRleCByZWNvcmQg
aW50byBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAg
ICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBwdXR0aW5n
IGluZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIl9zIH07CiAgICAgICAgIH0KICAgICB9CkBAIC0x
NDk0LDggKzE0NTMsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUlu
ZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICAgICAgfHwg
c3FsLT5iaW5kSW50NjQoMywgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCB1cGRhdGUgbmFtZSBmb3IgaW5kZXggaWQgKCUiIFBSSWk2NCAiLCAlIiBQ
UklpNjQgIikgaW4gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJv
cigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1
b3RhRXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5kZXggYmVjYXVzZSBubyBlbm91
Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsg
VW5rbm93bkVycm9yLCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCJfcyB9OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTgzNSw4ICsxNzkyLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAg
ICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywgdmFsdWUuZGF0YSgpLmRhdGEoKS0+ZGF0YSgpLCB2
YWx1ZS5kYXRhKCkuZGF0YSgpLT5zaXplKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IHB1dCByZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIHN0
b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRv
bWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAi
VW5hYmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQog
CkBAIC0xODY5LDggKzE4MjQsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFk
ZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAg
ICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
ICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpOwotICAg
ICAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9y
LCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVu
b3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRh
YmFzZSJfcyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xOTA0LDggKzE4NTcsNiBA
QCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRl
eHQoMiwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9PSwogICAgICAgICAgICAgICAgIHx8IHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVu
YWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNw
YWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJh
c2UiX3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ0Miw4ICsyMzkzLDYgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JW
YWx1ZShpbnQ2NF90IG9iamVjdFN0b3IKICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgdmFs
dWUpICE9IFNRTElURV9PSwogICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUga2V5IGdlbmVyYXRvciB2YWx1
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRF
X0ZVTEwpCi0gICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3Is
ICJFcnJvciBzdG9yaW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVlIGluIGRhdGFiYXNlIGJlY2F1
c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgQ29uc3RyYWludEVycm9yLCAiRXJyb3Igc3RvcmluZyBuZXcga2V5IGdlbmVyYXRvciB2
YWx1ZSBpbiBkYXRhYmFzZSIgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aAppbmRleCA1NmI1MTdjMmE2MTA3NDRiZGVmMjBlMTg4OWMwNjMxYzMwYWFmYjU4Li40OTI2MmI5
MzVhODc2ZjI4NTVkZDdmNGU0MGJhYzFiZDY3M2M5Zjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNz
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9v
dERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImLCB1aW50NjRf
dCBxdW90YSk7CisgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRl
bnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5n
U3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwogICAgIAogICAgIH5TUUxpdGVJREJCYWNraW5n
U3RvcmUoKSBmaW5hbDsKIApAQCAtODEsNyArODEsNiBAQCBwdWJsaWM6CiAgICAgSURCT2JqZWN0
U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKSBmaW5hbDsKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCi0gICAg
dm9pZCBzZXRRdW90YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBtX3F1b3RhID0gcXVvdGE7IH0K
ICAgICB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9yT3JpZ2luKCkgY29uc3QgZmluYWw7CiAKICAg
ICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTEwNSw5ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBmdWxsRGF0
YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhV
cGdyYWRlKCk7CiAKLSAgICB1aW50NjRfdCBxdW90YUZvck9yaWdpbigpIGNvbnN0OwotICAgIHVp
bnQ2NF90IG1heGltdW1TaXplKCkgY29uc3Q7Ci0KICAgICBib29sIGVuc3VyZVZhbGlkUmVjb3Jk
c1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCk7CiAgICAg
Ym9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CkBAIC0yMDYsOCArMjAyLDYgQEAg
cHJpdmF0ZToKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9i
amVjdDsKIAogICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBtX3RlbXBv
cmFyeUZpbGVIYW5kbGVyOwotICAgIAotICAgIHVpbnQ2NF90IG1fcXVvdGE7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDlhZTQ5
MjI4MTdmYWJjYTc0ZmM1NDA4YjFjNWYzN2U3ZjkxYTk1M2IuLjc3Y2Q2ZTJlMjllM2E0ZjU5YTA5
NDFkM2UwYTVhNDZmZWU5MjBmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMjI5
OSwxMiArMjI5OSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJh
Y2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogICAgIG1fZXJyb3JDYWxsYmFja3MucmVt
b3ZlKGNhbGxiYWNrSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNl
dFF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPnNldFF1b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6bm90aWZ5U2VydmVyQWJvdXRDbG9zZShDbG9zZVN0YXRlIHN0YXRlKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGJjZTY3
NDVhNmEzYTMxOGJiZTkyMjQ2N2NhMzY5Y2MwZmE4ZThhZTYuLjBkZTNjOTBlMTc5NTY1OGY4Yjli
MTA5ZDYwYzNmMmNkODViNjUxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMjUsOCAr
MTI1LDYgQEAgcHVibGljOgogCiAgICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KTsKLQogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIENs
b3NlU3RhdGUgeyBTdGFydCwgRG9uZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDQ4NjJhYzE2YzJhMTQwZGI1MTI5ZTkwODY5MjFjOTRm
MDg2NDYyMTQuLmU4YWY3NjA5MWEyNTcyNDMyYzRkNDQwODhlMGE3ZGZkZjgxNTIwZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
aW5kZXggMWNiNGI2NzRiYWYzYzAyYTNjZjJlYzJiNmM5Mjc1ZTJkOTQ5Y2RmYi4uZTkzMjM3NzE3
MTBiNDRmN2MyMGI3ODRmN2E5OWFhOGNhM2EwY2M5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIxMTgsNyArMjExOCw3IEBAIFJl
ZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMu
Z2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgYXV0byBzZXJ2ZXIgPSBJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8m
IG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1
dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogewogICAgICAgICBpZiAoIXdlYWtU
aGlzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiAmdGhpcy0+
c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CkBAIC0yMTI3LDggKzIxMjcs
NiBAQCBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB0aGlzLT5ub3RpZnlIb2xkaW5nTG9ja2VkRmlsZXMoaXNIb2xkaW5nTG9ja2VkRmlsZXMpOwog
ICAgIH0pOwotICAgIHNlcnZlci0+c2V0UGVyT3JpZ2luUXVvdGEobV9pZGJQZXJPcmlnaW5RdW90
YSk7Ci0gICAgcmV0dXJuIHNlcnZlcjsKIH0KIAogSURCU2VydmVyOjpJREJTZXJ2ZXImIE5ldHdv
cmtQcm9jZXNzOjppZGJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtMjIyNCwx
NCArMjIyMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgICAgICBwb3N0U3Rv
cmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVu
c3VyZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOwogICAgIH0KIH0KLQot
dm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEp
Ci17Ci0gICAgbV9pZGJQZXJPcmlnaW5RdW90YSA9IHF1b3RhOwotICAgIAotICAgIGZvciAoYXV0
byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJzLnZhbHVlcygpKQotICAgICAgICBzZXJ2ZXItPnNldFBl
ck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZv
clRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApp
bmRleCA2MzQ3YzE4YzdkZGZkYjNkOGYyZTFmNjNmY2VkODQ4NzM0MTc4ZjkzLi4wMGU5ZTM2ODUy
YzE5MDkyYzU5NmQxYTI5MTcxODQyMGJkNzkwNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yNzcsNyArMjc3LDYgQEAgcHVibGljOgog
ICAgIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQpOwogICAgIC8vIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhhbmRs
ZXIuCiAgICAgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShjb25zdCBTdHJpbmcm
IHBhdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwog
I2VuZGlmCiAgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAKQEAgLTUxNCw3
ICs1MTMsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0cmluZz4gbV9pZGJEYXRhYmFzZVBhdGhzOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cj4+IG1faWRiU2VydmVyczsKLSAgICB1aW50NjRfdCBtX2lkYlBlck9yaWdpblF1b3RhIHsgV2Vi
Q29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsKICNlbmRpZgogCiAgICAg
RGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4
IGRiZjNjYTdhZTJlNWIwOGYwOGQ2NWE4OGRjNTYwMGZjYWU1M2Q2YmQuLmRlNDA2MDBjOTBjNzY0
NzA5OTliY2FkZWUxN2QyYWFmMDk2NjcwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTYxLDkgKzE2
MSw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBE
aXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KCkKICNlbmRpZgogCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2V0SURCUGVyT3JpZ2luUXVvdGEodWlu
dDY0X3QgcXVvdGEpCi0jZW5kaWYKICAgICBVcGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9y
VGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4gb3JpZ2luKQogCiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXgg
OTNmNzZhNzk2MTA3ZDdjNDI1YWExMzM5MDg5MDUxMmEwZmFjYWZkNS4uNmI4OTYxMDNhZTBmMjZl
MTc4OTczMTRlMDM4YTA0NjU3Mzk1ZTM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCkBAIC02NTksMTEgKzY1OSw2IEBAIHZvaWQgV0tDb250ZXh0Q2xl
YXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogI2VuZGlmCiB9CiAK
LXZvaWQgV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5z
ZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKaW5kZXggZjljN2QzMjk2ZTVjMGNkN2YzMzY3ZGUzOWEwMzFkMjgzZmJlNjY2
Ni4uMGMxN2IxYTExMmMyZWMxZjJlODUwMjE3YWI1MWY2NjRhNTE4YWVhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAtMTE2LDgg
KzExNiw2IEBAIFdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vz
c0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRl
eHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRv
bWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYg
ZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdp
bnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJ
REJQZXJPcmlnaW5RdW90YShXS0NvbnRleHRSZWYgY29udGV4dCwgdWludDY0X3QgcXVvdGEpOwot
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGZkMDMyY2M1M2ZiOTM2
OTc1ZGU3MWYzODI2ZTQxY2FkZTJiN2E5YjEuLjNjZmJjNDNlNDBjOGI0MTZiMzMxZGU2ZmY2ZTk3
ZDczYmE2NmFhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKQEAgLTE3NjAsMTMgKzE3NjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29y
a1Byb2Nlc3NDb29raWVzKCkKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29r
aWVzKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElEQlBlck9yaWdpblF1b3RhKHVp
bnQ2NF90IHF1b3RhKQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElEQlBl
ck9yaWdpblF1b3RhKHF1b3RhKSwgMCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmlj
YXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwLm9yaWcgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAub3JpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDAzMmNjNTNmYjkzNjk3NWRlNzFmMzgyNmU0MWNh
ZGUyYjdhOWIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwLm9yaWcKQEAgLTAsMCArMSwyNTgxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwLTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzc1Bvb2wuaCIKKworI2lu
Y2x1ZGUgIkFQSUFycmF5LmgiCisjaW5jbHVkZSAiQVBJQXV0b21hdGlvbkNsaWVudC5oIgorI2lu
Y2x1ZGUgIkFQSUN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudC5oIgorI2luY2x1ZGUgIkFQSURv
d25sb2FkQ2xpZW50LmgiCisjaW5jbHVkZSAiQVBJSFRUUENvb2tpZVN0b3JlLmgiCisjaW5jbHVk
ZSAiQVBJSW5qZWN0ZWRCdW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJBUElMZWdhY3lDb250ZXh0
SGlzdG9yeUNsaWVudC5oIgorI2luY2x1ZGUgIkFQSU5hdmlnYXRpb24uaCIKKyNpbmNsdWRlICJB
UElQYWdlQ29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIkFQSVByb2Nlc3NQb29sQ29uZmlndXJh
dGlvbi5oIgorI2luY2x1ZGUgIkF1eGlsaWFyeVByb2Nlc3NNZXNzYWdlcy5oIgorI2luY2x1ZGUg
IkRvd25sb2FkUHJveHkuaCIKKyNpbmNsdWRlICJEb3dubG9hZFByb3h5TWVzc2FnZXMuaCIKKyNp
bmNsdWRlICJHYW1lcGFkRGF0YS5oIgorI2luY2x1ZGUgIkhpZ2hQZXJmb3JtYW5jZUdyYXBoaWNz
VXNhZ2VTYW1wbGVyLmgiCisjaW5jbHVkZSAiTG9nSW5pdGlhbGl6YXRpb24uaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTmV0d29ya1Byb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMu
aCIKKyNpbmNsdWRlICJOZXR3b3JrUHJvY2Vzc01lc3NhZ2VzLmgiCisjaW5jbHVkZSAiTmV0d29y
a1Byb2Nlc3NQcm94eS5oIgorI2luY2x1ZGUgIlBlckFjdGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBs
ZXIuaCIKKyNpbmNsdWRlICJQbHVnaW5Qcm9jZXNzTWFuYWdlci5oIgorI2luY2x1ZGUgIlNhbmRi
b3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJTZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LmgiCisj
aW5jbHVkZSAiU3RhdGlzdGljc0RhdGEuaCIKKyNpbmNsdWRlICJUZXh0Q2hlY2tlci5oIgorI2lu
Y2x1ZGUgIlVJR2FtZXBhZC5oIgorI2luY2x1ZGUgIlVJR2FtZXBhZFByb3ZpZGVyLmgiCisjaW5j
bHVkZSAiV0tDb250ZXh0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYkF1dG9tYXRpb25TZXNzaW9u
LmgiCisjaW5jbHVkZSAiV2ViQmFja0ZvcndhcmRMaXN0LmgiCisjaW5jbHVkZSAiV2ViQmFja0Zv
cndhcmRMaXN0SXRlbS5oIgorI2luY2x1ZGUgIldlYkNlcnRpZmljYXRlSW5mby5oIgorI2luY2x1
ZGUgIldlYkNvbnRleHRTdXBwbGVtZW50LmgiCisjaW5jbHVkZSAiV2ViQ29va2llTWFuYWdlclBy
b3h5LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSAiV2Vi
R2VvbG9jYXRpb25NYW5hZ2VyUHJveHkuaCIKKyNpbmNsdWRlICJXZWJJbnNwZWN0b3JVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJXZWJLaXQySW5pdGlhbGl6ZS5oIgorI2luY2x1ZGUgIldlYk1lbW9y
eVNhbXBsZXIuaCIKKyNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKKyNp
bmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJXZWJQcmVmZXJlbmNlcy5oIgorI2lu
Y2x1ZGUgIldlYlByZWZlcmVuY2VzS2V5cy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NDYWNoZS5o
IgorI2luY2x1ZGUgIldlYlByb2Nlc3NDcmVhdGlvblBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NNZXNz
YWdlcy5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3NQb29sTWVzc2FnZXMuaCIKKyNpbmNsdWRlICJX
ZWJQcm9jZXNzUHJveHkuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5jbHVk
ZSAiV2Vic2l0ZURhdGFTdG9yZVBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvTG9nSW5pdGlhbGl6YXRpb24uaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL01vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmg+CisjaW5jbHVkZSA8V2ViQ29y
ZS9OZXR3b3JrU3RvcmFnZVNlc3Npb24uaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtU2Ny
ZWVuLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9Qcm9jZXNzSWRlbnRpZmllci5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvUHJvY2Vzc1dhcm1pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVx
dWVzdC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg+CisjaW5jbHVkZSA8cGFs
L1Nlc3Npb25JRC5oPgorI2luY2x1ZGUgPHd0Zi9MYW5ndWFnZS5oPgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8
d3RmL1Byb2Nlc3NQcml2aWxlZ2UuaD4KKyNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgorI2luY2x1
ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9VUkxQYXJzZXIuaD4KKyNpbmNsdWRlIDx3
dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CisKKyNpZiBFTkFCTEUo
TEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9NQU5BR0VSKQorI2luY2x1ZGUgIkxlZ2FjeUN1c3RvbVBy
b3RvY29sTWFuYWdlck1lc3NhZ2VzLmgiCisjZW5kaWYKKworI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorI2luY2x1ZGUgIlNlcnZpY2VzQ29udHJvbGxlci5oIgorI2VuZGlmCisKKyNpZiBF
TkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZW1vdGVJ
bnNwZWN0b3IuaD4KKyNlbmRpZgorCisjaWYgT1MoTElOVVgpCisjaW5jbHVkZSAiTWVtb3J5UHJl
c3N1cmVNb25pdG9yLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdBWUxBTkQpCisjaW5jbHVk
ZSAiV2F5bGFuZENvbXBvc2l0b3IuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtRGlzcGxh
eS5oPgorI2VuZGlmCisKKyNpZiBQTEFURk9STShDT0NPQSkKKyNpbmNsdWRlICJWZXJzaW9uQ2hl
Y2tzLmgiCisjZW5kaWYKKworI2lmbmRlZiBOREVCVUcKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7Cit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworREVGSU5FX0RFQlVHX09OTFlfR0xPQkFMKFdURjo6UmVmQ291bnRl
ZExlYWtDb3VudGVyLCBwcm9jZXNzUG9vbENvdW50ZXIsICgiV2ViUHJvY2Vzc1Bvb2wiKSk7CisK
K2NvbnN0IFNlY29uZHMgc2VydmljZVdvcmtlclRlcm1pbmF0aW9uRGVsYXkgeyA1X3MgfTsKKwor
c3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlTGlzdGVuZXJJZGVudGlmaWVyKCkKK3sKKyAgICBzdGF0
aWMgdWludDY0X3QgbmV4dElkZW50aWZpZXIgPSAxOworICAgIHJldHVybiBuZXh0SWRlbnRpZmll
cisrOworfQorCitzdGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rpb248dm9pZChXZWJQcm9j
ZXNzUG9vbCYpPj4mIHByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKCkKK3sK
KyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8SGFzaE1hcDx1aW50NjRfdCwgRnVuY3Rpb248dm9p
ZChXZWJQcm9jZXNzUG9vbCYpPj4+IG1hcDsKKyAgICByZXR1cm4gbWFwOworfQorCit1aW50NjRf
dCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJQcm9jZXNzUG9vbENyZWF0aW9uTGlzdGVuZXIoRnVu
Y3Rpb248dm9pZChXZWJQcm9jZXNzUG9vbCYpPiYmIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChm
dW5jdGlvbik7CisKKyAgICBhdXRvIGlkZW50aWZpZXIgPSBnZW5lcmF0ZUxpc3RlbmVySWRlbnRp
ZmllcigpOworICAgIHByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lckZ1bmN0aW9uTWFwKCkuc2V0
KGlkZW50aWZpZXIsIFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICByZXR1cm4gaWRlbnRpZmllcjsK
K30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6dW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lcih1aW50NjRfdCBpZGVudGlmaWVyKQoreworICAgIHByb2Nlc3NQb29sQ3JlYXRpb25M
aXN0ZW5lckZ1bmN0aW9uTWFwKCkucmVtb3ZlKGlkZW50aWZpZXIpOworfQorCitSZWY8V2ViUHJv
Y2Vzc1Bvb2w+IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoQVBJOjpQcm9jZXNzUG9vbENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgSW5pdGlhbGl6ZVdlYktpdDIoKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJQcm9jZXNzUG9vbChjb25maWd1cmF0aW9uKSk7Cit9CisK
K3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5vdGlmeVRoaXNXZWJQcm9jZXNzUG9vbFdhc0NyZWF0ZWQo
KQoreworICAgIGF1dG8mIGxpc3RlbmVyTWFwID0gcHJvY2Vzc1Bvb2xDcmVhdGlvbkxpc3RlbmVy
RnVuY3Rpb25NYXAoKTsKKworICAgIFZlY3Rvcjx1aW50NjRfdD4gaWRlbnRpZmllcnM7CisgICAg
aWRlbnRpZmllcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShsaXN0ZW5lck1hcC5zaXplKCkpOwor
ICAgIGZvciAoYXV0byBpZGVudGlmaWVyIDogbGlzdGVuZXJNYXAua2V5cygpKQorICAgICAgICBp
ZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQoaWRlbnRpZmllcik7CisKKyAgICBmb3IgKGF1dG8g
aWRlbnRpZmllciA6IGlkZW50aWZpZXJzKSB7CisgICAgICAgIGF1dG8gaXRlcmF0b3IgPSBsaXN0
ZW5lck1hcC5maW5kKGlkZW50aWZpZXIpOworICAgICAgICBpZiAoaXRlcmF0b3IgPT0gbGlzdGVu
ZXJNYXAuZW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBUbyBtYWtl
IHN1cmUgdGhlIEZ1bmN0aW9uIG9iamVjdCBzdGF5cyBhbGl2ZSB1bnRpbCBhZnRlciB0aGUgZnVu
Y3Rpb24gY2FsbCBoYXMgYmVlbiBtYWRlLAorICAgICAgICAvLyB3ZSB0ZW1wb3JhcmlseSBtb3Zl
IGl0IG91dCBvZiB0aGUgbWFwLgorICAgICAgICAvLyBUaGlzIHByb3RlY3RzIGl0IGZyb20gdGhl
IEZ1bmN0aW9uIGNhbGxpbmcgdW5yZWdpc3RlclByb2Nlc3NQb29sQ3JlYXRpb25MaXN0ZW5lciB0
aGVyZWJ5CisgICAgICAgIC8vIHJlbW92aW5nIGl0c2VsZiBmcm9tIHRoZSBtYXAgb2YgbGlzdGVu
ZXJzLgorICAgICAgICAvLyBJZiB0aGUgaWRlbnRpZmllciBzdGlsbCBleGlzdHMgaW4gdGhlIG1h
cCBsYXRlciwgd2UgbW92ZSBpdCBiYWNrIGluLgorICAgICAgICBGdW5jdGlvbjx2b2lkKFdlYlBy
b2Nlc3NQb29sJik+IGZ1bmN0aW9uID0gV1RGTW92ZShpdGVyYXRvci0+dmFsdWUpOworICAgICAg
ICBmdW5jdGlvbigqdGhpcyk7CisKKyAgICAgICAgaXRlcmF0b3IgPSBsaXN0ZW5lck1hcC5maW5k
KGlkZW50aWZpZXIpOworICAgICAgICBpZiAoaXRlcmF0b3IgIT0gbGlzdGVuZXJNYXAuZW5kKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVCghaXRlcmF0b3ItPnZhbHVlKTsKKyAgICAgICAgICAgIGl0
ZXJhdG9yLT52YWx1ZSA9IFdURk1vdmUoZnVuY3Rpb24pOworICAgICAgICB9CisgICAgfQorfQor
CitzdGF0aWMgVmVjdG9yPFdlYlByb2Nlc3NQb29sKj4mIHByb2Nlc3NQb29scygpCit7CisgICAg
c3RhdGljIE5ldmVyRGVzdHJveWVkPFZlY3RvcjxXZWJQcm9jZXNzUG9vbCo+PiBwcm9jZXNzUG9v
bHM7CisgICAgcmV0dXJuIHByb2Nlc3NQb29sczsKK30KKworY29uc3QgVmVjdG9yPFdlYlByb2Nl
c3NQb29sKj4mIFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKQoreworICAgIHJldHVy
biBwcm9jZXNzUG9vbHMoKTsKK30KKworc3RhdGljIFJlZjxXZWJzaXRlRGF0YVN0b3JlQ29uZmln
dXJhdGlvbj4gbGVnYWN5V2Vic2l0ZURhdGFTdG9yZUNvbmZpZ3VyYXRpb24oQVBJOjpQcm9jZXNz
UG9vbENvbmZpZ3VyYXRpb24mIHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbikKK3sKKyAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSBXZWJzaXRlRGF0YVN0b3JlQ29uZmlndXJhdGlvbjo6Y3JlYXRlKCk7
CisKKyAgICBjb25maWd1cmF0aW9uLT5zZXRDYWNoZVN0b3JhZ2VEaXJlY3RvcnkoU3RyaW5nKEFQ
STo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdENhY2hlU3RvcmFnZURpcmVjdG9yeSgpKSk7Cisg
ICAgY29uZmlndXJhdGlvbi0+c2V0U2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeShT
dHJpbmcoQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0U2VydmljZVdvcmtlclJlZ2lzdHJh
dGlvbkRpcmVjdG9yeSgpKSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0TG9jYWxTdG9yYWdlRGly
ZWN0b3J5KFN0cmluZyhwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubG9jYWxTdG9yYWdlRGlyZWN0
b3J5KCkpKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeShT
dHJpbmcocHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5KCkp
KTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KFN0cmlu
Zyhwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpKSk7
CisgICAgY29uZmlndXJhdGlvbi0+c2V0QXBwbGljYXRpb25DYWNoZUZsYXRGaWxlU3ViZGlyZWN0
b3J5TmFtZShTdHJpbmcocHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVG
bGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKSkpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldE1lZGlh
Q2FjaGVEaXJlY3RvcnkoU3RyaW5nKHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5tZWRpYUNhY2hl
RGlyZWN0b3J5KCkpKTsKKyAgICBjb25maWd1cmF0aW9uLT5zZXRNZWRpYUtleXNTdG9yYWdlRGly
ZWN0b3J5KFN0cmluZyhwcm9jZXNzUG9vbENvbmZpZ3VyYXRpb24ubWVkaWFLZXlzU3RvcmFnZURp
cmVjdG9yeSgpKSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0SW5kZXhlZERCRGF0YWJhc2VEaXJl
Y3RvcnkoU3RyaW5nKHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5pbmRleGVkREJEYXRhYmFzZURp
cmVjdG9yeSgpKSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0UmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0RpcmVjdG9yeShTdHJpbmcocHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLnJlc291cmNlTG9hZFN0
YXRpc3RpY3NEaXJlY3RvcnkoKSkpOworICAgIGNvbmZpZ3VyYXRpb24tPnNldE5ldHdvcmtDYWNo
ZURpcmVjdG9yeShTdHJpbmcocHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uLmRpc2tDYWNoZURpcmVj
dG9yeSgpKSk7CisgICAgY29uZmlndXJhdGlvbi0+c2V0SmF2YVNjcmlwdENvbmZpZ3VyYXRpb25E
aXJlY3RvcnkoU3RyaW5nKHByb2Nlc3NQb29sQ29uZmlndXJhdGlvbi5qYXZhU2NyaXB0Q29uZmln
dXJhdGlvbkRpcmVjdG9yeSgpKSk7CisKKyAgICByZXR1cm4gY29uZmlndXJhdGlvbjsKK30KKwor
c3RhdGljIEhhc2hTZXQ8U3RyaW5nLCBBU0NJSUNhc2VJbnNlbnNpdGl2ZUhhc2g+JiBnbG9iYWxV
UkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKQoreworICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxIYXNoU2V0PFN0cmluZywgQVNDSUlDYXNlSW5zZW5zaXRpdmVIYXNoPj4gc2V0
OworICAgIHJldHVybiBzZXQ7Cit9CisKK1dlYlByb2Nlc3NQb29sOjpXZWJQcm9jZXNzUG9vbChB
UEk6OlByb2Nlc3NQb29sQ29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKKyAgICA6IG1fY29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uLmNvcHkoKSkKKyAgICAsIG1fZGVmYXVsdFBhZ2VHcm91
cChXZWJQYWdlR3JvdXA6OmNyZWF0ZSgpKQorICAgICwgbV9pbmplY3RlZEJ1bmRsZUNsaWVudChz
dGQ6Om1ha2VfdW5pcXVlPEFQSTo6SW5qZWN0ZWRCdW5kbGVDbGllbnQ+KCkpCisgICAgLCBtX2F1
dG9tYXRpb25DbGllbnQoc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkF1dG9tYXRpb25DbGllbnQ+KCkp
CisgICAgLCBtX2Rvd25sb2FkQ2xpZW50KHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpEb3dubG9hZENs
aWVudD4oKSkKKyAgICAsIG1faGlzdG9yeUNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6TGVn
YWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCkpCisgICAgLCBtX2N1c3RvbVByb3RvY29sTWFuYWdl
ckNsaWVudChzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50
PigpKQorICAgICwgbV92aXNpdGVkTGlua1N0b3JlKFZpc2l0ZWRMaW5rU3RvcmU6OmNyZWF0ZSgp
KQorI2lmIFBMQVRGT1JNKE1BQykKKyAgICAsIG1faGlnaFBlcmZvcm1hbmNlR3JhcGhpY3NVc2Fn
ZVNhbXBsZXIoc3RkOjptYWtlX3VuaXF1ZTxIaWdoUGVyZm9ybWFuY2VHcmFwaGljc1VzYWdlU2Ft
cGxlcj4oKnRoaXMpKQorICAgICwgbV9wZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VTYW1wbGVyKHN0
ZDo6bWFrZV91bmlxdWU8UGVyQWN0aXZpdHlTdGF0ZUNQVVVzYWdlU2FtcGxlcj4oKnRoaXMpKQor
I2VuZGlmCisgICAgLCBtX2Fsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eShtX2NvbmZpZ3Vy
YXRpb24tPmFsd2F5c1J1bnNBdEJhY2tncm91bmRQcmlvcml0eSgpKQorICAgICwgbV9zaG91bGRU
YWtlVUlCYWNrZ3JvdW5kQXNzZXJ0aW9uKG1fY29uZmlndXJhdGlvbi0+c2hvdWxkVGFrZVVJQmFj
a2dyb3VuZEFzc2VydGlvbigpKQorICAgICwgbV91c2VyT2JzZXJ2YWJsZVBhZ2VDb3VudGVyKFt0
aGlzXShSZWZDb3VudGVyRXZlbnQpIHsgdXBkYXRlUHJvY2Vzc1N1cHByZXNzaW9uU3RhdGUoKTsg
fSkKKyAgICAsIG1fcHJvY2Vzc1N1cHByZXNzaW9uRGlzYWJsZWRGb3JQYWdlQ291bnRlcihbdGhp
c10oUmVmQ291bnRlckV2ZW50KSB7IHVwZGF0ZVByb2Nlc3NTdXBwcmVzc2lvblN0YXRlKCk7IH0p
CisgICAgLCBtX2hpZGRlblBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50ZXIoW3RoaXNd
KFJlZkNvdW50ZXJFdmVudCkgeyBtX2hpZGRlblBhZ2VUaHJvdHRsaW5nVGltZXIuc3RhcnRPbmVT
aG90KDBfcyk7IH0pCisgICAgLCBtX2hpZGRlblBhZ2VUaHJvdHRsaW5nVGltZXIoUnVuTG9vcDo6
bWFpbigpLCB0aGlzLCAmV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0ZUhpZGRlblBhZ2VUaHJvdHRsaW5n
QXV0b0luY3JlYXNlTGltaXQpCisgICAgLCBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXNUZXJtaW5h
dGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJldlYlByb2Nlc3NQb29sOjp0ZXJtaW5h
dGVTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzKQorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
LCBtX2ZvcmVncm91bmRXZWJQcm9jZXNzQ291bnRlcihbdGhpc10oUmVmQ291bnRlckV2ZW50KSB7
IHVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCk7IH0pCisgICAgLCBtX2JhY2tncm91bmRXZWJQcm9j
ZXNzQ291bnRlcihbdGhpc10oUmVmQ291bnRlckV2ZW50KSB7IHVwZGF0ZVByb2Nlc3NBc3NlcnRp
b25zKCk7IH0pCisjZW5kaWYKKyAgICAsIG1fd2ViUHJvY2Vzc0NhY2hlKG1ha2VVbmlxdWVSZWY8
V2ViUHJvY2Vzc0NhY2hlPigqdGhpcykpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIFdURjo6
c2V0UHJvY2Vzc1ByaXZpbGVnZXMoYWxsUHJpdmlsZWdlcygpKTsKKyAgICAgICAgV2ViQ29yZTo6
TmV0d29ya1N0b3JhZ2VTZXNzaW9uOjpwZXJtaXRQcm9jZXNzVG9Vc2VDb29raWVBUEkodHJ1ZSk7
CisgICAgICAgIFByb2Nlc3M6OnNldElkZW50aWZpZXIoV2ViQ29yZTo6UHJvY2Vzc0lkZW50aWZp
ZXI6OmdlbmVyYXRlKCkpOworICAgIH0pOworCisgICAgaWYgKG1fY29uZmlndXJhdGlvbi0+c2hv
dWxkSGF2ZUxlZ2FjeURhdGFTdG9yZSgpKQorICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBB
UEk6OldlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZUxlZ2FjeShsZWdhY3lXZWJzaXRlRGF0YVN0b3Jl
Q29uZmlndXJhdGlvbihtX2NvbmZpZ3VyYXRpb24pKTsKKworICAgIGlmICghbV93ZWJzaXRlRGF0
YVN0b3JlICYmIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygp
KQorICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRl
ZmF1bHREYXRhU3RvcmUoKTsKKworICAgIGZvciAoYXV0byYgc2NoZW1lIDogbV9jb25maWd1cmF0
aW9uLT5hbHdheXNSZXZhbGlkYXRlZFVSTFNjaGVtZXMoKSkKKyAgICAgICAgbV9zY2hlbWVzVG9S
ZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQuYWRkKHNjaGVtZSk7CisKKyAgICBmb3IgKGNvbnN0
IGF1dG8mIHVybFNjaGVtZSA6IG1fY29uZmlndXJhdGlvbi0+Y2FjaGVQYXJ0aXRpb25lZFVSTFNj
aGVtZXMoKSkKKyAgICAgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQ2FjaGVQYXJ0aXRpb25lZC5h
ZGQodXJsU2NoZW1lKTsKKworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZSgpOworCisjaWYgT1MoTElO
VVgpCisgICAgTWVtb3J5UHJlc3N1cmVNb25pdG9yOjpzaW5nbGV0b24oKS5zdGFydCgpOworI2Vu
ZGlmCisKKyAgICBhZGRNZXNzYWdlUmVjZWl2ZXIoTWVzc2FnZXM6OldlYlByb2Nlc3NQb29sOjpt
ZXNzYWdlUmVjZWl2ZXJOYW1lKCksICp0aGlzKTsKKworICAgIC8vIE5PVEU6IFRoZXNlIHN1Yi1v
YmplY3RzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYWZ0ZXIgbV9tZXNzYWdlUmVjZWl2ZXJNYXAuLgor
ICAgIGFkZFN1cHBsZW1lbnQ8V2ViQ29va2llTWFuYWdlclByb3h5PigpOworICAgIGFkZFN1cHBs
ZW1lbnQ8V2ViR2VvbG9jYXRpb25NYW5hZ2VyUHJveHk+KCk7CisgICAgYWRkU3VwcGxlbWVudDxX
ZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCk7CisjaWYgRU5BQkxFKE1FRElBX1NFU1NJT04p
CisgICAgYWRkU3VwcGxlbWVudDxXZWJNZWRpYVNlc3Npb25Gb2N1c01hbmFnZXI+KCk7CisjZW5k
aWYKKworICAgIHByb2Nlc3NQb29scygpLmFwcGVuZCh0aGlzKTsKKworICAgIGFkZExhbmd1YWdl
Q2hhbmdlT2JzZXJ2ZXIodGhpcywgbGFuZ3VhZ2VDaGFuZ2VkKTsKKworICAgIHJlc29sdmVQYXRo
c0ZvclNhbmRib3hFeHRlbnNpb25zKCk7CisKKyNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIFdlYkNvcmU6OmluaXRpYWxpemVMb2dDaGFubmVsc0lmTmVjZXNz
YXJ5KCk7CisgICAgV2ViS2l0Ojppbml0aWFsaXplTG9nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOwor
I2VuZGlmIC8vICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyNpZm5k
ZWYgTkRFQlVHCisgICAgcHJvY2Vzc1Bvb2xDb3VudGVyLmluY3JlbWVudCgpOworI2VuZGlmCisK
KyAgICBub3RpZnlUaGlzV2ViUHJvY2Vzc1Bvb2xXYXNDcmVhdGVkKCk7CisKKyAgICB1cGRhdGVN
YXhTdXNwZW5kZWRQYWdlQ291bnQoKTsKK30KKworV2ViUHJvY2Vzc1Bvb2w6On5XZWJQcm9jZXNz
UG9vbCgpCit7CisgICAgbV93ZWJQcm9jZXNzQ2FjaGUtPmNsZWFyKCk7CisKKyAgICBib29sIHJl
bW92ZWQgPSBwcm9jZXNzUG9vbHMoKS5yZW1vdmVGaXJzdCh0aGlzKTsKKyAgICBBU1NFUlRfVU5V
U0VEKHJlbW92ZWQsIHJlbW92ZWQpOworCisgICAgcmVtb3ZlTGFuZ3VhZ2VDaGFuZ2VPYnNlcnZl
cih0aGlzKTsKKworICAgIG1fbWVzc2FnZVJlY2VpdmVyTWFwLmludmFsaWRhdGUoKTsKKworICAg
IGZvciAoYXV0byYgc3VwcGxlbWVudCA6IG1fc3VwcGxlbWVudHMudmFsdWVzKCkpIHsKKyAgICAg
ICAgc3VwcGxlbWVudC0+cHJvY2Vzc1Bvb2xEZXN0cm95ZWQoKTsKKyAgICAgICAgc3VwcGxlbWVu
dC0+Y2xlYXJQcm9jZXNzUG9vbCgpOworICAgIH0KKworICAgIGludmFsaWRhdGVDYWxsYmFja01h
cChtX2RpY3Rpb25hcnlDYWxsYmFja3MsIENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52
YWxpZGF0ZWQpOworCisgICAgcGxhdGZvcm1JbnZhbGlkYXRlQ29udGV4dCgpOworCisjaWZuZGVm
IE5ERUJVRworICAgIHByb2Nlc3NQb29sQ291bnRlci5kZWNyZW1lbnQoKTsKKyNlbmRpZgorCisg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNodXRE
b3duUHJvY2VzcygpOworCisjaWYgRU5BQkxFKEdBTUVQQUQpCisgICAgaWYgKCFtX3Byb2Nlc3Nl
c1VzaW5nR2FtZXBhZHMuaXNFbXB0eSgpKQorICAgICAgICBVSUdhbWVwYWRQcm92aWRlcjo6c2lu
Z2xldG9uKCkucHJvY2Vzc1Bvb2xTdG9wcGVkVXNpbmdHYW1lcGFkcygqdGhpcyk7CisjZW5kaWYK
KworICAgIC8vIE9ubHkgcmVtYWluaW5nIHByb2Nlc3NlcyBzaG91bGQgYmUgcHJlLXdhcm1lZCBv
bmVzIGFzIG90aGVyIGtlZXAgdGhlIHByb2Nlc3MgcG9vbCBhbGl2ZS4KKyAgICB3aGlsZSAoIW1f
cHJvY2Vzc2VzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvJiBwcm9jZXNzID0gbV9wcm9jZXNz
ZXMuZmlyc3QoKTsKKworICAgICAgICBBU1NFUlQocHJvY2Vzcy0+aXNQcmV3YXJtZWQoKSk7Cisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gYmUgdGhlIG9ubHkgb25lIGhvbGRpbmcgYSByZWZlcmVuY2Ug
dG8gdGhlIHByZS13YXJtZWQgcHJvY2VzcyBzbyB0aGF0IGl0IGdldHMgZGVzdHJveWVkLgorICAg
ICAgICAvLyBXZWJQcm9jZXNzUHJveGllcyBjdXJyZW50bHkgYWx3YXlzIGV4cGVjdCB0byBoYXZl
IGEgV2ViUHJvY2Vzc1Bvb2wuCisgICAgICAgIEFTU0VSVChwcm9jZXNzLT5oYXNPbmVSZWYoKSk7
CisKKyAgICAgICAgcHJvY2Vzcy0+c2h1dERvd24oKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OmluaXRpYWxpemVDbGllbnQoY29uc3QgV0tDb250ZXh0Q2xpZW50QmFzZSogY2xp
ZW50KQoreworICAgIG1fY2xpZW50LmluaXRpYWxpemUoY2xpZW50KTsKK30KKwordm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0SW5qZWN0ZWRCdW5kbGVDbGllbnQoc3RkOjp1bmlxdWVfcHRyPEFQSTo6
SW5qZWN0ZWRCdW5kbGVDbGllbnQ+JiYgY2xpZW50KQoreworICAgIGlmICghY2xpZW50KQorICAg
ICAgICBtX2luamVjdGVkQnVuZGxlQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6OkluamVj
dGVkQnVuZGxlQ2xpZW50PigpOworICAgIGVsc2UKKyAgICAgICAgbV9pbmplY3RlZEJ1bmRsZUNs
aWVudCA9IFdURk1vdmUoY2xpZW50KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6aW5pdGlh
bGl6ZUNvbm5lY3Rpb25DbGllbnQoY29uc3QgV0tDb250ZXh0Q29ubmVjdGlvbkNsaWVudEJhc2Uq
IGNsaWVudCkKK3sKKyAgICBtX2Nvbm5lY3Rpb25DbGllbnQuaW5pdGlhbGl6ZShjbGllbnQpOwor
fQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRIaXN0b3J5Q2xpZW50KHN0ZDo6dW5pcXVlX3B0
cjxBUEk6OkxlZ2FjeUNvbnRleHRIaXN0b3J5Q2xpZW50PiYmIGhpc3RvcnlDbGllbnQpCit7Cisg
ICAgaWYgKCFoaXN0b3J5Q2xpZW50KQorICAgICAgICBtX2hpc3RvcnlDbGllbnQgPSBzdGQ6Om1h
a2VfdW5pcXVlPEFQSTo6TGVnYWN5Q29udGV4dEhpc3RvcnlDbGllbnQ+KCk7CisgICAgZWxzZQor
ICAgICAgICBtX2hpc3RvcnlDbGllbnQgPSBXVEZNb3ZlKGhpc3RvcnlDbGllbnQpOworfQorCit2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXREb3dubG9hZENsaWVudChzdGQ6OnVuaXF1ZV9wdHI8QVBJ
OjpEb3dubG9hZENsaWVudD4mJiBkb3dubG9hZENsaWVudCkKK3sKKyAgICBpZiAoIWRvd25sb2Fk
Q2xpZW50KQorICAgICAgICBtX2Rvd25sb2FkQ2xpZW50ID0gc3RkOjptYWtlX3VuaXF1ZTxBUEk6
OkRvd25sb2FkQ2xpZW50PigpOworICAgIGVsc2UKKyAgICAgICAgbV9kb3dubG9hZENsaWVudCA9
IFdURk1vdmUoZG93bmxvYWRDbGllbnQpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRB
dXRvbWF0aW9uQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkF1dG9tYXRpb25DbGllbnQ+JiYg
YXV0b21hdGlvbkNsaWVudCkKK3sKKyAgICBpZiAoIWF1dG9tYXRpb25DbGllbnQpCisgICAgICAg
IG1fYXV0b21hdGlvbkNsaWVudCA9IHN0ZDo6bWFrZV91bmlxdWU8QVBJOjpBdXRvbWF0aW9uQ2xp
ZW50PigpOworICAgIGVsc2UKKyAgICAgICAgbV9hdXRvbWF0aW9uQ2xpZW50ID0gV1RGTW92ZShh
dXRvbWF0aW9uQ2xpZW50KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0TGVnYWN5Q3Vz
dG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50KHN0ZDo6dW5pcXVlX3B0cjxBUEk6OkN1c3RvbVByb3Rv
Y29sTWFuYWdlckNsaWVudD4mJiBjdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQpCit7CisjaWYg
RU5BQkxFKExFR0FDWV9DVVNUT01fUFJPVE9DT0xfTUFOQUdFUikKKyAgICBpZiAoIWN1c3RvbVBy
b3RvY29sTWFuYWdlckNsaWVudCkKKyAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGll
bnQgPSBzdGQ6Om1ha2VfdW5pcXVlPEFQSTo6Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyQ2xpZW50Pigp
OworICAgIGVsc2UKKyAgICAgICAgbV9jdXN0b21Qcm90b2NvbE1hbmFnZXJDbGllbnQgPSBXVEZN
b3ZlKGN1c3RvbVByb3RvY29sTWFuYWdlckNsaWVudCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQ
cm9jZXNzUG9vbDo6c2V0Q3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgY3VzdG9tV2ViQ29udGVudFNlcnZpY2VCdW5kbGVJZGVudGlmaWVyKQorewor
ICAgIC8vIEd1YXJkIGFnYWluc3QgQVBJIG1pc3VzZS4KKyAgICBpZiAoIWN1c3RvbVdlYkNvbnRl
bnRTZXJ2aWNlQnVuZGxlSWRlbnRpZmllci5pc0FsbEFTQ0lJKCkpCisgICAgICAgIENSQVNIKCk7
CisKKyAgICBtX2NvbmZpZ3VyYXRpb24tPnNldEN1c3RvbVdlYkNvbnRlbnRTZXJ2aWNlQnVuZGxl
SWRlbnRpZmllcihjdXN0b21XZWJDb250ZW50U2VydmljZUJ1bmRsZUlkZW50aWZpZXIpOworfQor
CitJUEM6OkNvbm5lY3Rpb24qIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JraW5nUHJvY2Vzc0Nvbm5l
Y3Rpb24oKQoreworICAgIHJldHVybiBtX25ldHdvcmtQcm9jZXNzLT5jb25uZWN0aW9uKCk7Cit9
CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6Omxhbmd1YWdlQ2hhbmdlZCh2b2lkKiBjb250ZXh0KQor
eworICAgIHN0YXRpY19jYXN0PFdlYlByb2Nlc3NQb29sKj4oY29udGV4dCktPmxhbmd1YWdlQ2hh
bmdlZCgpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpsYW5ndWFnZUNoYW5nZWQoKQorewor
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6VXNlclByZWZlcnJl
ZExhbmd1YWdlc0NoYW5nZWQodXNlclByZWZlcnJlZExhbmd1YWdlcygpKSk7CisjaWYgVVNFKFNP
VVApCisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpVc2VyUHJlZmVycmVkTGFuZ3VhZ2VzQ2hh
bmdlZCh1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCkpLCAwKTsKKyNlbmRpZgorfQorCit2b2lkIFdl
YlByb2Nlc3NQb29sOjpmdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChib29sIGZ1bGxLZXli
b2FyZEFjY2Vzc0VuYWJsZWQpCit7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzOjpGdWxsS2V5Ym9hcmRBY2Nlc3NNb2RlQ2hhbmdlZChmdWxsS2V5Ym9hcmRBY2Nl
c3NFbmFibGVkKSk7Cit9CisKKyNpZiBPUyhMSU5VWCkKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNl
bmRNZW1vcnlQcmVzc3VyZUV2ZW50KGJvb2wgaXNDcml0aWNhbCkKK3sKKyAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OkF1eGlsaWFyeVByb2Nlc3M6OkRpZFJlY2VpdmVNZW1vcnlQcmVz
c3VyZUV2ZW50KGlzQ3JpdGljYWwpKTsKKyAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2VzcyhNZXNz
YWdlczo6QXV4aWxpYXJ5UHJvY2Vzczo6RGlkUmVjZWl2ZU1lbW9yeVByZXNzdXJlRXZlbnQoaXND
cml0aWNhbCkpOworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIFBsdWdpblBy
b2Nlc3NNYW5hZ2VyOjpzaW5nbGV0b24oKS5zZW5kTWVtb3J5UHJlc3N1cmVFdmVudChpc0NyaXRp
Y2FsKTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnRleHRDaGVj
a2VyU3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OlNldFRleHRDaGVja2VyU3RhdGUoVGV4dENoZWNrZXI6OnN0YXRlKCkpKTsKK30K
Kwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXBwbGljYXRpb25Jc0FjdGl2ZShib29sIGlzQWN0
aXZlKQoreworICAgIG1fd2ViUHJvY2Vzc0NhY2hlLT5zZXRBcHBsaWNhdGlvbklzQWN0aXZlKGlz
QWN0aXZlKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2NyZWVuUHJvcGVydGllc1N0YXRl
Q2hhbmdlZCgpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIGF1dG8gc2NyZWVuUHJvcGVydGll
cyA9IFdlYkNvcmU6OmNvbGxlY3RTY3JlZW5Qcm9wZXJ0aWVzKCk7CisgICAgc2VuZFRvQWxsUHJv
Y2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRTY3JlZW5Qcm9wZXJ0aWVzKHNjcmVlblBy
b3BlcnRpZXMpKTsKKyNlbmRpZgorfQorCitOZXR3b3JrUHJvY2Vzc1Byb3h5JiBXZWJQcm9jZXNz
UG9vbDo6ZW5zdXJlTmV0d29ya1Byb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2l0aFdlYnNpdGVE
YXRhU3RvcmUpCit7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgaWYgKHdp
dGhXZWJzaXRlRGF0YVN0b3JlKSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKG1ha2VSZWYoKndpdGhXZWJzaXRlRGF0YVN0b3JlKSk7CisgICAgICAgICAgICB3aXRo
V2Vic2l0ZURhdGFTdG9yZS0+Y2xlYXJQZW5kaW5nQ29va2llcygpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiAqbV9uZXR3b3JrUHJvY2VzczsKKyAgICB9CisKKyAgICBtX25ldHdvcmtQcm9j
ZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxOZXR3b3JrUHJvY2Vzc1Byb3h5PigqdGhpcyk7CisKKyAg
ICBOZXR3b3JrUHJvY2Vzc0NyZWF0aW9uUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworCisgICAgaWYg
KG1fd2Vic2l0ZURhdGFTdG9yZSkgeworICAgICAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3Rv
cmVQYXJhbWV0ZXJzLnBlbmRpbmdDb29raWVzID0gY29weVRvVmVjdG9yKG1fd2Vic2l0ZURhdGFT
dG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnBlbmRpbmdDb29raWVzKCkpOworICAgICAgICBtX3dl
YnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5jbGVhclBlbmRpbmdDb29raWVzKCk7
CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9y
ZVBhcmFtZXRlcnMubmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzLnNvdXJjZUFwcGxpY2F0aW9uQnVu
ZGxlSWRlbnRpZmllciA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnNv
dXJjZUFwcGxpY2F0aW9uQnVuZGxlSWRlbnRpZmllcigpOworICAgICAgICBwYXJhbWV0ZXJzLmRl
ZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5zb3VyY2VB
cHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNp
dGVEYXRhU3RvcmUoKS5zb3VyY2VBcHBsaWNhdGlvblNlY29uZGFyeUlkZW50aWZpZXIoKTsKKyNl
bmRpZgorICAgICAgICBtX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5maW5h
bGl6ZUFwcGxpY2F0aW9uSWRlbnRpZmllcnMoKTsKKyAgICB9CisKKyAgICBwYXJhbWV0ZXJzLmNh
Y2hlTW9kZWwgPSBjYWNoZU1vZGVsKCk7CisgICAgcGFyYW1ldGVycy5jYW5IYW5kbGVIVFRQU1Nl
cnZlclRydXN0RXZhbHVhdGlvbiA9IG1fY2FuSGFuZGxlSFRUUFNTZXJ2ZXJUcnVzdEV2YWx1YXRp
b247CisKKyAgICBmb3IgKGF1dG8mIHNjaGVtZSA6IGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9t
UHJvdG9jb2xIYW5kbGVycygpKQorICAgICAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3Rl
cmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVuZChzY2hlbWUpOworCisgICAgZm9yIChhdXRvJiBz
Y2hlbWUgOiBtX3VybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzKQorICAgICAg
ICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFwcGVu
ZChzY2hlbWUpOworCisgICAgcGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3RvcnkgPSBtX2NvbmZp
Z3VyYXRpb24tPmRpc2tDYWNoZURpcmVjdG9yeSgpOworICAgIGlmICghcGFyYW1ldGVycy5kaXNr
Q2FjaGVEaXJlY3RvcnkuaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVh
dGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJlY3RvcnkocGFyYW1ldGVycy5kaXNrQ2FjaGVEaXJlY3Rv
cnksIHBhcmFtZXRlcnMuZGlza0NhY2hlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyNpZiBF
TkFCTEUoTkVUV09SS19DQUNIRV9TUEVDVUxBVElWRV9SRVZBTElEQVRJT04pCisgICAgcGFyYW1l
dGVycy5zaG91bGRFbmFibGVOZXR3b3JrQ2FjaGVTcGVjdWxhdGl2ZVJldmFsaWRhdGlvbiA9IG1f
Y29uZmlndXJhdGlvbi0+ZGlza0NhY2hlU3BlY3VsYXRpdmVWYWxpZGF0aW9uRW5hYmxlZCgpOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFN0cmluZyBjb29raWVTdG9y
YWdlRGlyZWN0b3J5ID0gdGhpcy0+Y29va2llU3RvcmFnZURpcmVjdG9yeSgpOworICAgIGlmICgh
Y29va2llU3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShjb29raWVTdG9yYWdlRGlyZWN0
b3J5LCBwYXJhbWV0ZXJzLmNvb2tpZVN0b3JhZ2VEaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUpOwor
CisgICAgU3RyaW5nIGNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeSA9IHRoaXMtPm5ldHdvcmtpbmdD
YWNoZXNEaXJlY3RvcnkoKTsKKyAgICBpZiAoIWNvbnRhaW5lckNhY2hlc0RpcmVjdG9yeS5pc0Vt
cHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0
ZURpcmVjdG9yeShjb250YWluZXJDYWNoZXNEaXJlY3RvcnksIHBhcmFtZXRlcnMuY29udGFpbmVy
Q2FjaGVzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKworICAgIFN0cmluZyBwYXJlbnRCdW5k
bGVEaXJlY3RvcnkgPSB0aGlzLT5wYXJlbnRCdW5kbGVEaXJlY3RvcnkoKTsKKyAgICBpZiAoIXBh
cmVudEJ1bmRsZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246
OmNyZWF0ZUhhbmRsZShwYXJlbnRCdW5kbGVEaXJlY3RvcnksIFNhbmRib3hFeHRlbnNpb246OlR5
cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLnBhcmVudEJ1bmRsZURpcmVjdG9yeUV4dGVuc2lvbkhh
bmRsZSk7CisKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKKyAgICBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKGVtcHR5U3RyaW5nKCksIFNhbmRib3hF
eHRlbnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFy
YW1ldGVycy5pbmRleGVkRGF0YWJhc2VUZW1wQmxvYkRpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7
CisjZW5kaWYKKyNlbmRpZgorCisgICAgcGFyYW1ldGVycy5zaG91bGRVc2VUZXN0aW5nTmV0d29y
a1Nlc3Npb24gPSBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbjsKKworICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1ZlY3RvcihtX3NjaGVt
ZXNUb1JlZ2lzdGVyQXNTZWN1cmUpOworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVy
ZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1ZlY3RvcihtX3NjaGVt
ZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kpOworICAgIHBhcmFt
ZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0xvY2FsID0gY29weVRvVmVjdG9yKG1fc2NoZW1l
c1RvUmVnaXN0ZXJBc0xvY2FsKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNOb0FjY2VzcyA9IGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNOb0FjY2Vzcyk7
CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzRGlzcGxheUlzb2xhdGVkID0g
Y29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Rpc3BsYXlJc29sYXRlZCk7CisgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQ09SU0VuYWJsZWQgPSBjb3B5VG9WZWN0
b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzQ09SU0VuYWJsZWQpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0ID0gY29weVRvVmVj
dG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KTsKKwor
I2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQorICAgIC8vICoqKioqKioqKgorICAgIC8vIElN
UE9SVEFOVDogRG8gbm90IGNoYW5nZSB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmb3IgaW5kZXhl
ZCBkYXRhYmFzZXMgb24gZGlzayB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgYSByZXZpZXdlciBm
cm9tIEFwcGxlICg8cmRhcjovL3Byb2JsZW0vMTc0NTQ3MTI+KQorICAgIC8vICoqKioqKioqKgor
ICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5ID0gbV9jb25maWd1cmF0aW9uLT5pbmRleGVkREJEYXRhYmFzZURpcmVjdG9yeSgp
OworICAgIGlmIChwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5ID0gQVBJOjpXZWJzaXRl
RGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKS5wYXJhbWV0
ZXJzKCkuaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5OworICAgIAorICAgIFNhbmRib3hFeHRlbnNp
b246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9yeShwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSwgcGFyYW1ldGVycy5k
ZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnlFeHRlbnNp
b25IYW5kbGUpOworICAgIG1fbmV0d29ya1Byb2Nlc3MtPmNyZWF0ZVN5bUxpbmtGb3JGaWxlVXBn
cmFkZShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLmluZGV4ZWREYXRhYmFz
ZURpcmVjdG9yeSk7CisjZW5kaWYKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBp
ZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBwYXJhbWV0ZXJzLnNlcnZpY2VXb3JrZXJS
ZWdpc3RyYXRpb25EaXJlY3RvcnkgPSBtX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3Rv
cmUoKS5yZXNvbHZlZFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnkoKTsKKyAgICBp
ZiAoIXBhcmFtZXRlcnMuc2VydmljZVdvcmtlclJlZ2lzdHJhdGlvbkRpcmVjdG9yeSkKKyAgICAg
ICAgcGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5ID0gIEFQSTo6
V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkoKTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVGb3JSZWFkV3JpdGVEaXJl
Y3RvcnkocGFyYW1ldGVycy5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5LCBwYXJh
bWV0ZXJzLnNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3RvcnlFeHRlbnNpb25IYW5kbGUp
OworCisgICAgaWYgKCFtX3NjaGVtZXNTZXJ2aWNlV29ya2Vyc0NhbkhhbmRsZS5pc0VtcHR5KCkp
CisgICAgICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlID0g
Y29weVRvVmVjdG9yKG1fc2NoZW1lc1NlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlKTsKKworICAgIHBh
cmFtZXRlcnMuc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxh
eSA9IG1fc2hvdWxkRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheTsK
KyNlbmRpZgorCisgICAgaWYgKG1fd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgcGFyYW1ldGVy
cy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVz
b3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0
ZURhdGFTdG9yZSgpLnJlc29sdmVkUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSgpOwor
ICAgIGlmIChwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNz
aW9uUGFyYW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LmlzRW1wdHkoKSkK
KyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0b3JlUGFyYW1ldGVycy5uZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc0RpcmVjdG9yeSA9IEFQSTo6V2Vi
c2l0ZURhdGFTdG9yZTo6ZGVmYXVsdFJlc291cmNlTG9hZFN0YXRpc3RpY3NEaXJlY3RvcnkoKTsK
KworICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0ZUhhbmRsZUZvclJlYWRXcml0ZURpcmVjdG9y
eShwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGlyZWN0b3J5LCBwYXJhbWV0ZXJzLmRlZmF1
bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5yZXNvdXJjZUxv
YWRTdGF0aXN0aWNzRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKworICAgIGJvb2wgZW5hYmxl
UmVzb3VyY2VMb2FkU3RhdGlzdGljcyA9IGZhbHNlOworICAgIGJvb2wgc2hvdWxkSW5jbHVkZUxv
Y2FsaG9zdCA9IHRydWU7CisgICAgYm9vbCBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzRGVi
dWdNb2RlID0gZmFsc2U7CisgICAgV2ViQ29yZTo6UmVnaXN0cmFibGVEb21haW4gbWFudWFsUHJl
dmFsZW50UmVzb3VyY2UgeyB9OworICAgIGlmICh3aXRoV2Vic2l0ZURhdGFTdG9yZSkgeworICAg
ICAgICBlbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKCk7CisgICAgICAgIGlmIChlbmFibGVSZXNv
dXJjZUxvYWRTdGF0aXN0aWNzKSB7CisgICAgICAgICAgICBhdXRvIG5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVycyA9IHdpdGhXZWJzaXRlRGF0YVN0b3JlLT5wYXJhbWV0ZXJzKCkubmV0d29ya1Nlc3Np
b25QYXJhbWV0ZXJzOworICAgICAgICAgICAgc2hvdWxkSW5jbHVkZUxvY2FsaG9zdCA9IG5ldHdv
cmtTZXNzaW9uUGFyYW1ldGVycy5zaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRT
dGF0aXN0aWNzOworICAgICAgICAgICAgZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVn
TW9kZSA9IG5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0
aWNzRGVidWdNb2RlOworICAgICAgICAgICAgbWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBuZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMucmVzb3VyY2VMb2FkU3RhdGlzdGljc01hbnVhbFByZXZhbGVu
dFJlc291cmNlOworICAgICAgICB9CisKKyAgICAgICAgcGFyYW1ldGVycy5kZWZhdWx0RGF0YVN0
b3JlUGFyYW1ldGVycy5wZXJPcmlnaW5TdG9yYWdlUXVvdGEgPSB3aXRoV2Vic2l0ZURhdGFTdG9y
ZS0+cGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7CisgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERh
dGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VRdW90YSA9IHdpdGhX
ZWJzaXRlRGF0YVN0b3JlLT5wZXJUaGlyZFBhcnR5T3JpZ2luU3RvcmFnZVF1b3RhKCk7CisgICAg
fSBlbHNlIGlmIChtX3dlYnNpdGVEYXRhU3RvcmUpIHsKKyAgICAgICAgZW5hYmxlUmVzb3VyY2VM
b2FkU3RhdGlzdGljcyA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+cmVzb3VyY2VMb2FkU3RhdGlzdGlj
c0VuYWJsZWQoKTsKKyAgICAgICAgaWYgKGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3MpIHsK
KyAgICAgICAgICAgIGF1dG8gbmV0d29ya1Nlc3Npb25QYXJhbWV0ZXJzID0gbV93ZWJzaXRlRGF0
YVN0b3JlLT53ZWJzaXRlRGF0YVN0b3JlKCkucGFyYW1ldGVycygpLm5ldHdvcmtTZXNzaW9uUGFy
YW1ldGVyczsKKyAgICAgICAgICAgIHNob3VsZEluY2x1ZGVMb2NhbGhvc3QgPSBuZXR3b3JrU2Vz
c2lvblBhcmFtZXRlcnMuc2hvdWxkSW5jbHVkZUxvY2FsaG9zdEluUmVzb3VyY2VMb2FkU3RhdGlz
dGljczsKKyAgICAgICAgICAgIGVuYWJsZVJlc291cmNlTG9hZFN0YXRpc3RpY3NEZWJ1Z01vZGUg
PSBuZXR3b3JrU2Vzc2lvblBhcmFtZXRlcnMuZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0Rl
YnVnTW9kZTsKKyAgICAgICAgICAgIG1hbnVhbFByZXZhbGVudFJlc291cmNlID0gbmV0d29ya1Nl
c3Npb25QYXJhbWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NNYW51YWxQcmV2YWxlbnRSZXNv
dXJjZTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtZXRlcnMuZGVmYXVsdERhdGFTdG9yZVBh
cmFtZXRlcnMucGVyT3JpZ2luU3RvcmFnZVF1b3RhID0gbV93ZWJzaXRlRGF0YVN0b3JlLT53ZWJz
aXRlRGF0YVN0b3JlKCkucGVyT3JpZ2luU3RvcmFnZVF1b3RhKCk7CisgICAgICAgIHBhcmFtZXRl
cnMuZGVmYXVsdERhdGFTdG9yZVBhcmFtZXRlcnMucGVyVGhpcmRQYXJ0eU9yaWdpblN0b3JhZ2VR
dW90YSA9IG1fd2Vic2l0ZURhdGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpLnBlclRoaXJkUGFy
dHlPcmlnaW5TdG9yYWdlUXVvdGEoKTsKKyAgICB9CisKKyAgICBwYXJhbWV0ZXJzLmRlZmF1bHRE
YXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJj
ZUxvYWRTdGF0aXN0aWNzID0gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljczsKKyAgICBwYXJh
bWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVy
cy5zaG91bGRJbmNsdWRlTG9jYWxob3N0SW5SZXNvdXJjZUxvYWRTdGF0aXN0aWNzID0gc2hvdWxk
SW5jbHVkZUxvY2FsaG9zdDsKKyAgICBwYXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0
ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1ldGVycy5lbmFibGVSZXNvdXJjZUxvYWRTdGF0aXN0aWNz
RGVidWdNb2RlID0gZW5hYmxlUmVzb3VyY2VMb2FkU3RhdGlzdGljc0RlYnVnTW9kZTsKKyAgICBw
YXJhbWV0ZXJzLmRlZmF1bHREYXRhU3RvcmVQYXJhbWV0ZXJzLm5ldHdvcmtTZXNzaW9uUGFyYW1l
dGVycy5yZXNvdXJjZUxvYWRTdGF0aXN0aWNzTWFudWFsUHJldmFsZW50UmVzb3VyY2UgPSBtYW51
YWxQcmV2YWxlbnRSZXNvdXJjZTsKKworICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMg
cGFyYW1ldGVycworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZU5ldHdvcmtQcm9jZXNzKHBhcmFtZXRl
cnMpOworCisgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmV0d29yayBwcm9jZXNzLgorICAgIG1fbmV0
d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpJbml0aWFsaXplTmV0
d29ya1Byb2Nlc3MocGFyYW1ldGVycyksIDApOworCisgICAgaWYgKFdlYlByZWZlcmVuY2VzOjph
bnlQYWdlc0FyZVVzaW5nUHJpdmF0ZUJyb3dzaW5nKCkpCisgICAgICAgIG1fbmV0d29ya1Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlKFdl
YnNpdGVEYXRhU3RvcmVQYXJhbWV0ZXJzOjpsZWdhY3lQcml2YXRlU2Vzc2lvblBhcmFtZXRlcnMo
KSksIDApOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldFFPUyhuZXR3b3JrUHJvY2Vzc0xhdGVuY3lR
T1MoKSwgbmV0d29ya1Byb2Nlc3NUaHJvdWdocHV0UU9TKCkpLCAwKTsKKyNlbmRpZgorCisgICAg
aWYgKG1fZGlkTmV0d29ya1Byb2Nlc3NDcmFzaCkgeworICAgICAgICBtX2RpZE5ldHdvcmtQcm9j
ZXNzQ3Jhc2ggPSBmYWxzZTsKKyAgICAgICAgcmVpbnN0YXRlTmV0d29ya1Byb2Nlc3NBc3NlcnRp
b25TdGF0ZSgqbV9uZXR3b3JrUHJvY2Vzcyk7CisgICAgfQorCisgICAgaWYgKHdpdGhXZWJzaXRl
RGF0YVN0b3JlKSB7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPmFkZFNlc3Npb24obWFrZVJl
Zigqd2l0aFdlYnNpdGVEYXRhU3RvcmUpKTsKKyAgICAgICAgd2l0aFdlYnNpdGVEYXRhU3RvcmUt
PmNsZWFyUGVuZGluZ0Nvb2tpZXMoKTsKKyAgICB9CisKKyAgICAvLyBNYWtlIHN1cmUgdGhlIG5l
dHdvcmsgcHJvY2VzcyBrbm93cyBhYm91dCBhbGwgdGhlIHNlc3Npb25zIHRoYXQgaGF2ZSBiZWVu
IHJlZ2lzdGVyZWQgYmVmb3JlIGl0IHN0YXJ0ZWQuCisgICAgZm9yIChhdXRvJiBzZXNzaW9uSUQg
OiBtX3Nlc3Npb25Ub1BhZ2VJRHNNYXAua2V5cygpKSB7CisgICAgICAgIGlmIChhdXRvKiB3ZWJz
aXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6ZXhpc3RpbmdOb25EZWZhdWx0RGF0YVN0
b3JlRm9yU2Vzc2lvbklEKHNlc3Npb25JRCkpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNz
LT5hZGRTZXNzaW9uKCp3ZWJzaXRlRGF0YVN0b3JlKTsKKyAgICB9CisKKyAgICByZXR1cm4gKm1f
bmV0d29ya1Byb2Nlc3M7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6Om5ldHdvcmtQcm9jZXNz
Q3Jhc2hlZChOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXR3b3JrUHJvY2Vzc1Byb3h5LCBWZWN0b3I8
c3RkOjpwYWlyPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+LCBNZXNzYWdlczo6V2ViUHJvY2Vzc1By
b3h5OjpHZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb246OkRlbGF5ZWRSZXBseT4+JiYgcGVuZGlu
Z1JlcGxpZXMpCit7CisgICAgQVNTRVJUKG1fbmV0d29ya1Byb2Nlc3MpOworICAgIEFTU0VSVCgm
bmV0d29ya1Byb2Nlc3NQcm94eSA9PSBtX25ldHdvcmtQcm9jZXNzLmdldCgpKTsKKyAgICBtX2Rp
ZE5ldHdvcmtQcm9jZXNzQ3Jhc2ggPSB0cnVlOworCisgICAgZm9yIChhdXRvJiBzdXBwbGVtZW50
IDogbV9zdXBwbGVtZW50cy52YWx1ZXMoKSkKKyAgICAgICAgc3VwcGxlbWVudC0+cHJvY2Vzc0Rp
ZENsb3NlKCZuZXR3b3JrUHJvY2Vzc1Byb3h5KTsKKworICAgIG1fY2xpZW50Lm5ldHdvcmtQcm9j
ZXNzRGlkQ3Jhc2godGhpcyk7CisKKyAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikKKyAgICAg
ICAgbV9hdXRvbWF0aW9uU2Vzc2lvbi0+dGVybWluYXRlKCk7CisKKyAgICAvLyBMZWF2ZSB0aGUg
cHJvY2VzcyBwcm94eSBhcm91bmQgZHVyaW5nIGNsaWVudCBjYWxsLCBzbyB0aGF0IHRoZSBjbGll
bnQgY291bGQgcXVlcnkgdGhlIHByb2Nlc3MgaWRlbnRpZmllci4KKyAgICBtX25ldHdvcmtQcm9j
ZXNzID0gbnVsbHB0cjsKKworICAgIC8vIEF0dGVtcHQgdG8gcmUtbGF1bmNoLgorICAgIGlmIChw
ZW5kaW5nUmVwbGllcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvJiBuZXdO
ZXR3b3JrUHJvY2VzcyA9IGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CisgICAgZm9yIChhdXRvJiBy
ZXBseSA6IHBlbmRpbmdSZXBsaWVzKQorICAgICAgICBuZXdOZXR3b3JrUHJvY2Vzcy5nZXROZXR3
b3JrUHJvY2Vzc0Nvbm5lY3Rpb24oKnJlcGx5LmZpcnN0LCBXVEZNb3ZlKHJlcGx5LnNlY29uZCkp
OworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
V2ViUHJvY2Vzc1Byb3h5JiB3ZWJQcm9jZXNzUHJveHksIE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJv
eHk6OkdldE5ldHdvcmtQcm9jZXNzQ29ubmVjdGlvbjo6RGVsYXllZFJlcGx5JiYgcmVwbHkpCit7
CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBBU1NFUlQobV9uZXR3b3JrUHJvY2Vz
cyk7CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT5nZXROZXR3b3JrUHJvY2Vzc0Nvbm5lY3Rpb24o
d2ViUHJvY2Vzc1Byb3h5LCBXVEZNb3ZlKHJlcGx5KSk7Cit9CisKKyNpZiBFTkFCTEUoU0VSVklD
RV9XT1JLRVIpCit2b2lkIFdlYlByb2Nlc3NQb29sOjplc3RhYmxpc2hXb3JrZXJDb250ZXh0Q29u
bmVjdGlvblRvTmV0d29ya1Byb2Nlc3MoTmV0d29ya1Byb2Nlc3NQcm94eSYgcHJveHksIFJlZ2lz
dHJhYmxlRG9tYWluJiYgcmVnaXN0cmFibGVEb21haW4sIE9wdGlvbmFsPFBBTDo6U2Vzc2lvbklE
PiBzZXNzaW9uSUQpCit7CisgICAgQVNTRVJUX1VOVVNFRChwcm94eSwgJnByb3h5ID09IG1fbmV0
d29ya1Byb2Nlc3MuZ2V0KCkpOworCisgICAgaWYgKG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5j
b250YWlucyhyZWdpc3RyYWJsZURvbWFpbikpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbWF5
SGF2ZVJlZ2lzdGVyZWRTZXJ2aWNlV29ya2Vycy5jbGVhcigpOworCisgICAgV2Vic2l0ZURhdGFT
dG9yZSogd2Vic2l0ZURhdGFTdG9yZSA9IG51bGxwdHI7CisgICAgaWYgKHNlc3Npb25JRCkKKyAg
ICAgICAgd2Vic2l0ZURhdGFTdG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmV4aXN0aW5nTm9uRGVm
YXVsdERhdGFTdG9yZUZvclNlc3Npb25JRCgqc2Vzc2lvbklEKTsKKworICAgIGlmICghd2Vic2l0
ZURhdGFTdG9yZSkgeworICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAg
ICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERh
dGFTdG9yZSgpLnB0cigpOworICAgICAgICB3ZWJzaXRlRGF0YVN0b3JlID0gJm1fd2Vic2l0ZURh
dGFTdG9yZS0+d2Vic2l0ZURhdGFTdG9yZSgpOworICAgIH0KKworICAgIGlmIChtX3NlcnZpY2VX
b3JrZXJQcm9jZXNzZXMuaXNFbXB0eSgpKQorICAgICAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyU2VydmljZVdvcmtlckNsaWVudHMgeyB9KTsKKwor
ICAgIGF1dG8gc2VydmljZVdvcmtlclByb2Nlc3NQcm94eSA9IFNlcnZpY2VXb3JrZXJQcm9jZXNz
UHJveHk6OmNyZWF0ZSgqdGhpcywgcmVnaXN0cmFibGVEb21haW4sICp3ZWJzaXRlRGF0YVN0b3Jl
KTsKKyAgICBtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuYWRkKFdURk1vdmUocmVnaXN0cmFibGVE
b21haW4pLCBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5LnB0cigpKTsKKworICAgIHVwZGF0ZVBy
b2Nlc3NBc3NlcnRpb25zKCk7CisgICAgaW5pdGlhbGl6ZU5ld1dlYlByb2Nlc3Moc2VydmljZVdv
cmtlclByb2Nlc3NQcm94eSwgd2Vic2l0ZURhdGFTdG9yZSk7CisKKyAgICBhdXRvKiBzZXJ2aWNl
V29ya2VyUHJvY2Vzc1Byb3h5UHRyID0gc2VydmljZVdvcmtlclByb2Nlc3NQcm94eS5wdHIoKTsK
KyAgICBtX3Byb2Nlc3Nlcy5hcHBlbmQoV1RGTW92ZShzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5
KSk7CisKKyAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5UHRyLT5zdGFydChtX3NlcnZpY2VX
b3JrZXJQcmVmZXJlbmNlcyA/IG1fc2VydmljZVdvcmtlclByZWZlcmVuY2VzLnZhbHVlKCkgOiBt
X2RlZmF1bHRQYWdlR3JvdXAtPnByZWZlcmVuY2VzKCkuc3RvcmUoKSwgc2Vzc2lvbklEKTsKKyAg
ICBpZiAoIW1fc2VydmljZVdvcmtlclVzZXJBZ2VudC5pc051bGwoKSkKKyAgICAgICAgc2Vydmlj
ZVdvcmtlclByb2Nlc3NQcm94eVB0ci0+c2V0VXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJB
Z2VudCk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSgpCit7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQorICAgIGlmIChtX3Nob3VsZERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0
aW9uRGVsYXkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2hvdWxkRGlzYWJsZVNlcnZpY2VX
b3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxheSA9IHRydWU7CisgICAgaWYgKG1fbmV0d29ya1By
b2Nlc3MpCisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpEaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KCksIDAp
OworI2VuZGlmCit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OndpbGxTdGFydFVzaW5nUHJpdmF0
ZUJyb3dzaW5nKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxsUHJvY2Vzc1Bv
b2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXRBbnlQYWdlR3JvdXBNaWdodEhhdmVQcml2
YXRlQnJvd3NpbmdFbmFibGVkKHRydWUpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjp3aWxs
U3RvcFVzaW5nUHJpdmF0ZUJyb3dzaW5nKCkKK3sKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29s
IDogYWxsUHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5zZXRBbnlQYWdlR3Jv
dXBNaWdodEhhdmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGZhbHNlKTsKK30KKwordm9pZCBXZWJQ
cm9jZXNzUG9vbDo6d2luZG93U2VydmVyQ29ubmVjdGlvblN0YXRlQ2hhbmdlZCgpCit7CisgICAg
c2l6ZV90IHByb2Nlc3NDb3VudCA9IG1fcHJvY2Vzc2VzLnNpemUoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHByb2Nlc3NDb3VudDsgKytpKQorICAgICAgICBtX3Byb2Nlc3Nlc1tpXS0+
d2luZG93U2VydmVyQ29ubmVjdGlvblN0YXRlQ2hhbmdlZCgpOworfQorCit2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRBbnlQYWdlR3JvdXBNaWdodEhhdmVQcml2YXRlQnJvd3NpbmdFbmFibGVkKGJv
b2wgcHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCkKK3sKKyAgICBpZiAocHJpdmF0ZUJyb3dzaW5nRW5h
YmxlZCkgeworICAgICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpBZGRXZWJzaXRlRGF0YVN0b3JlKFdlYnNpdGVEYXRhU3RvcmVQYXJhbWV0
ZXJzOjpsZWdhY3lQcml2YXRlU2Vzc2lvblBhcmFtZXRlcnMoKSksIDApOworICAgIH0gZWxzZSB7
CisgICAgICAgIGlmIChhdXRvKiBuZXR3b3JrUHJvY2VzcyA9IHRoaXMtPm5ldHdvcmtQcm9jZXNz
KCkpCisgICAgICAgICAgICBuZXR3b3JrUHJvY2Vzcy0+cmVtb3ZlU2Vzc2lvbihQQUw6OlNlc3Np
b25JRDo6bGVnYWN5UHJpdmF0ZVNlc3Npb25JRCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgKCpzX2lu
dmFsaWRNZXNzYWdlQ2FsbGJhY2spKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lKTsKKwordm9pZCBX
ZWJQcm9jZXNzUG9vbDo6c2V0SW52YWxpZE1lc3NhZ2VDYWxsYmFjayh2b2lkICgqaW52YWxpZE1l
c3NhZ2VDYWxsYmFjaykoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUpKQoreworICAgIHNfaW52YWxp
ZE1lc3NhZ2VDYWxsYmFjayA9IGludmFsaWRNZXNzYWdlQ2FsbGJhY2s7Cit9CisKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OmRpZFJlY2VpdmVJbnZhbGlkTWVzc2FnZShjb25zdCBJUEM6OlN0cmluZ1Jl
ZmVyZW5jZSYgbWVzc2FnZVJlY2VpdmVyTmFtZSwgY29uc3QgSVBDOjpTdHJpbmdSZWZlcmVuY2Um
IG1lc3NhZ2VOYW1lKQoreworICAgIGlmICghc19pbnZhbGlkTWVzc2FnZUNhbGxiYWNrKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTdHJpbmdCdWlsZGVyIG1lc3NhZ2VOYW1lU3RyaW5nQnVpbGRl
cjsKKyAgICBtZXNzYWdlTmFtZVN0cmluZ0J1aWxkZXIuYXBwZW5kKG1lc3NhZ2VSZWNlaXZlck5h
bWUuZGF0YSgpLCBtZXNzYWdlUmVjZWl2ZXJOYW1lLnNpemUoKSk7CisgICAgbWVzc2FnZU5hbWVT
dHJpbmdCdWlsZGVyLmFwcGVuZCgnLicpOworICAgIG1lc3NhZ2VOYW1lU3RyaW5nQnVpbGRlci5h
cHBlbmQobWVzc2FnZU5hbWUuZGF0YSgpLCBtZXNzYWdlTmFtZS5zaXplKCkpOworCisgICAgc19p
bnZhbGlkTWVzc2FnZUNhbGxiYWNrKHRvQVBJKEFQSTo6U3RyaW5nOjpjcmVhdGUobWVzc2FnZU5h
bWVTdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCkpLnB0cigpKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnByb2Nlc3NEaWRDYWNoZVBhZ2UoV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQorewor
ICAgIGlmIChtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlICYmIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUg
IT0gcHJvY2VzcykKKyAgICAgICAgbV9wcm9jZXNzV2l0aFBhZ2VDYWNoZS0+cmVsZWFzZVBhZ2VD
YWNoZSgpOworICAgIG1fcHJvY2Vzc1dpdGhQYWdlQ2FjaGUgPSBwcm9jZXNzOworfQorCit2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZXNvbHZlUGF0aHNGb3JTYW5kYm94RXh0ZW5zaW9ucygpCit7Cisg
ICAgbV9yZXNvbHZlZFBhdGhzLmluamVjdGVkQnVuZGxlUGF0aCA9IHJlc29sdmVQYXRoRm9yU2Fu
ZGJveEV4dGVuc2lvbihpbmplY3RlZEJ1bmRsZVBhdGgoKSk7CisgICAgbV9yZXNvbHZlZFBhdGhz
LmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRlUmVhZFdyaXRlRGly
ZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2Fj
aGVEaXJlY3RvcnkoKSk7CisgICAgbV9yZXNvbHZlZFBhdGhzLndlYlNRTERhdGFiYXNlRGlyZWN0
b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNp
b24obV9jb25maWd1cmF0aW9uLT53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpKTsKKyAgICBtX3Jl
c29sdmVkUGF0aHMubWVkaWFDYWNoZURpcmVjdG9yeSA9IHJlc29sdmVBbmRDcmVhdGVSZWFkV3Jp
dGVEaXJlY3RvcnlGb3JTYW5kYm94RXh0ZW5zaW9uKG1fY29uZmlndXJhdGlvbi0+bWVkaWFDYWNo
ZURpcmVjdG9yeSgpKTsKKyAgICBtX3Jlc29sdmVkUGF0aHMubWVkaWFLZXlTdG9yYWdlRGlyZWN0
b3J5ID0gcmVzb2x2ZUFuZENyZWF0ZVJlYWRXcml0ZURpcmVjdG9yeUZvclNhbmRib3hFeHRlbnNp
b24obV9jb25maWd1cmF0aW9uLT5tZWRpYUtleXNTdG9yYWdlRGlyZWN0b3J5KCkpOworICAgIG1f
cmVzb2x2ZWRQYXRocy5pbmRleGVkRGF0YWJhc2VEaXJlY3RvcnkgPSByZXNvbHZlQW5kQ3JlYXRl
UmVhZFdyaXRlRGlyZWN0b3J5Rm9yU2FuZGJveEV4dGVuc2lvbihtX2NvbmZpZ3VyYXRpb24tPmlu
ZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCkpOworCisgICAgbV9yZXNvbHZlZFBhdGhzLmFkZGl0
aW9uYWxXZWJQcm9jZXNzU2FuZGJveEV4dGVuc2lvblBhdGhzLnJlc2VydmVDYXBhY2l0eShtX2Nv
bmZpZ3VyYXRpb24tPmFkZGl0aW9uYWxSZWFkQWNjZXNzQWxsb3dlZFBhdGhzKCkuc2l6ZSgpKTsK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIHBhdGggOiBtX2NvbmZpZ3VyYXRpb24tPmFkZGl0aW9uYWxS
ZWFkQWNjZXNzQWxsb3dlZFBhdGhzKCkpCisgICAgICAgIG1fcmVzb2x2ZWRQYXRocy5hZGRpdGlv
bmFsV2ViUHJvY2Vzc1NhbmRib3hFeHRlbnNpb25QYXRocy51bmNoZWNrZWRBcHBlbmQocmVzb2x2
ZVBhdGhGb3JTYW5kYm94RXh0ZW5zaW9uKHBhdGguZGF0YSgpKSk7CisKKyAgICBwbGF0Zm9ybVJl
c29sdmVQYXRoc0ZvclNhbmRib3hFeHRlbnNpb25zKCk7Cit9CisKK1dlYlByb2Nlc3NQcm94eSYg
V2ViUHJvY2Vzc1Bvb2w6OmNyZWF0ZU5ld1dlYlByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSogd2Vi
c2l0ZURhdGFTdG9yZSwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCBpc1ByZXdhcm1lZCkK
K3sKKyAgICBhdXRvIHByb2Nlc3NQcm94eSA9IFdlYlByb2Nlc3NQcm94eTo6Y3JlYXRlKCp0aGlz
LCB3ZWJzaXRlRGF0YVN0b3JlLCBpc1ByZXdhcm1lZCk7CisgICAgYXV0byYgcHJvY2VzcyA9IHBy
b2Nlc3NQcm94eS5nZXQoKTsKKyAgICBpbml0aWFsaXplTmV3V2ViUHJvY2Vzcyhwcm9jZXNzLCB3
ZWJzaXRlRGF0YVN0b3JlLCBpc1ByZXdhcm1lZCk7CisgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdU
Rk1vdmUocHJvY2Vzc1Byb3h5KSk7CisKKyAgICBpZiAobV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
VGVybWluYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXNUZXJtaW5hdGlvblRpbWVyLnN0b3AoKTsKKworICAgIHJldHVybiBwcm9jZXNzOworfQor
CitSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5PiBXZWJQcm9jZXNzUG9vbDo6dHJ5VGFrZVByZXdhcm1l
ZFByb2Nlc3MoV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKK3sKKyAgICBpZiAo
IW1fcHJld2FybWVkUHJvY2VzcykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NF
UlQobV9wcmV3YXJtZWRQcm9jZXNzLT5pc1ByZXdhcm1lZCgpKTsKKyAgICBtX3ByZXdhcm1lZFBy
b2Nlc3MtPm1hcmtJc05vTG9uZ2VySW5QcmV3YXJtZWRQb29sKCk7CisKKyAgICBtX3ByZXdhcm1l
ZFByb2Nlc3MtPnNldFdlYnNpdGVEYXRhU3RvcmUod2Vic2l0ZURhdGFTdG9yZSk7CisgICAgc2Vu
ZFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzKCptX3ByZXdhcm1lZFByb2Nlc3MsIHdlYnNp
dGVEYXRhU3RvcmUpOworCisgICAgcmV0dXJuIHN0ZDo6ZXhjaGFuZ2UobV9wcmV3YXJtZWRQcm9j
ZXNzLCBudWxscHRyKTsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKK3N0YXRpYyB2b2lkIGRpc3Bs
YXlSZWNvbmZpZ3VyYXRpb25DYWxsQmFjayhDR0RpcmVjdERpc3BsYXlJRCBkaXNwbGF5LCBDR0Rp
c3BsYXlDaGFuZ2VTdW1tYXJ5RmxhZ3MgZmxhZ3MsIHZvaWQgKnVzZXJJbmZvKQoreworICAgIGF1
dG8gc2NyZWVuUHJvcGVydGllcyA9IFdlYkNvcmU6OmNvbGxlY3RTY3JlZW5Qcm9wZXJ0aWVzKCk7
CisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdlYlByb2Nlc3NQb29sOjphbGxQcm9jZXNz
UG9vbHMoKSkgeworICAgICAgICBwcm9jZXNzUG9vbC0+c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTZXRTY3JlZW5Qcm9wZXJ0aWVzKHNjcmVlblByb3BlcnRpZXMpKTsK
KyNpZiBFTkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCisgICAgICAgIHBy
b2Nlc3NQb29sLT5zZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkRpc3Bs
YXlDb25maWd1cmF0aW9uQ2hhbmdlZChkaXNwbGF5LCBmbGFncykpOworI2VuZGlmCisgICAgfQor
fQorCitzdGF0aWMgdm9pZCByZWdpc3RlckRpc3BsYXlDb25maWd1cmF0aW9uQ2FsbGJhY2soKQor
eworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25j
ZSgKKyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIENHRGlzcGxh
eVJlZ2lzdGVyUmVjb25maWd1cmF0aW9uQ2FsbGJhY2soZGlzcGxheVJlY29uZmlndXJhdGlvbkNh
bGxCYWNrLCBudWxscHRyKTsKKyAgICAgICAgfSk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2VuZFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0ZXJzKFdlYlByb2Nlc3NQcm94
eSYgcHJvY2VzcywgV2Vic2l0ZURhdGFTdG9yZSYgd2Vic2l0ZURhdGFTdG9yZSkKK3sKKyAgICBX
ZWJQcm9jZXNzRGF0YVN0b3JlUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworCisgICAgd2Vic2l0ZURh
dGFTdG9yZS5yZXNvbHZlRGlyZWN0b3JpZXNJZk5lY2Vzc2FyeSgpOworCisgICAgcGFyYW1ldGVy
cy5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5ID0gd2Vic2l0ZURhdGFTdG9yZS5yZXNvbHZlZEFw
cGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKTsKKyAgICBpZiAocGFyYW1ldGVycy5hcHBsaWNhdGlv
bkNhY2hlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgcGFyYW1ldGVycy5hcHBsaWNhdGlv
bkNhY2hlRGlyZWN0b3J5ID0gbV9yZXNvbHZlZFBhdGhzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnk7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuaXNFbXB0
eSgpKQorICAgICAgICBTYW5kYm94RXh0ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2
aW5nUGF0aChwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnksIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRXcml0ZSwgcGFyYW1ldGVycy5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICBwYXJhbWV0ZXJzLmFwcGxpY2F0aW9uQ2FjaGVGbGF0
RmlsZVN1YmRpcmVjdG9yeU5hbWUgPSBtX2NvbmZpZ3VyYXRpb24tPmFwcGxpY2F0aW9uQ2FjaGVG
bGF0RmlsZVN1YmRpcmVjdG9yeU5hbWUoKTsKKworICAgIHBhcmFtZXRlcnMud2ViU1FMRGF0YWJh
c2VEaXJlY3RvcnkgPSB3ZWJzaXRlRGF0YVN0b3JlLnJlc29sdmVkRGF0YWJhc2VEaXJlY3Rvcnko
KTsKKyAgICBpZiAocGFyYW1ldGVycy53ZWJTUUxEYXRhYmFzZURpcmVjdG9yeS5pc0VtcHR5KCkp
CisgICAgICAgIHBhcmFtZXRlcnMud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBtX3Jlc29sdmVk
UGF0aHMud2ViU1FMRGF0YWJhc2VEaXJlY3Rvcnk7CisgICAgaWYgKCFwYXJhbWV0ZXJzLndlYlNR
TERhdGFiYXNlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6
Y3JlYXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGFyYW1ldGVycy53ZWJTUUxEYXRhYmFz
ZURpcmVjdG9yeSwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJz
LndlYlNRTERhdGFiYXNlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKworICAgIHBhcmFtZXRl
cnMubWVkaWFDYWNoZURpcmVjdG9yeSA9IHdlYnNpdGVEYXRhU3RvcmUucmVzb2x2ZWRNZWRpYUNh
Y2hlRGlyZWN0b3J5KCk7CisgICAgaWYgKHBhcmFtZXRlcnMubWVkaWFDYWNoZURpcmVjdG9yeS5p
c0VtcHR5KCkpCisgICAgICAgIHBhcmFtZXRlcnMubWVkaWFDYWNoZURpcmVjdG9yeSA9IG1fcmVz
b2x2ZWRQYXRocy5tZWRpYUNhY2hlRGlyZWN0b3J5OworICAgIGlmICghcGFyYW1ldGVycy5tZWRp
YUNhY2hlRGlyZWN0b3J5LmlzRW1wdHkoKSkKKyAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3Jl
YXRlSGFuZGxlV2l0aG91dFJlc29sdmluZ1BhdGgocGFyYW1ldGVycy5tZWRpYUNhY2hlRGlyZWN0
b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHBhcmFtZXRlcnMubWVkaWFD
YWNoZURpcmVjdG9yeUV4dGVuc2lvbkhhbmRsZSk7CisKKyAgICBwYXJhbWV0ZXJzLm1lZGlhS2V5
U3RvcmFnZURpcmVjdG9yeSA9IHdlYnNpdGVEYXRhU3RvcmUucmVzb2x2ZWRNZWRpYUtleXNEaXJl
Y3RvcnkoKTsKKyAgICBpZiAocGFyYW1ldGVycy5tZWRpYUtleVN0b3JhZ2VEaXJlY3RvcnkuaXNF
bXB0eSgpKQorICAgICAgICBwYXJhbWV0ZXJzLm1lZGlhS2V5U3RvcmFnZURpcmVjdG9yeSA9IG1f
cmVzb2x2ZWRQYXRocy5tZWRpYUtleVN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgaWYgKCFwYXJhbWV0
ZXJzLm1lZGlhS2V5U3RvcmFnZURpcmVjdG9yeS5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hF
eHRlbnNpb246OmNyZWF0ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhcmFtZXRlcnMubWVk
aWFLZXlTdG9yYWdlRGlyZWN0b3J5LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUs
IHBhcmFtZXRlcnMubWVkaWFLZXlTdG9yYWdlRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKwor
ICAgIGlmIChqYXZhU2NyaXB0Q29uZmlndXJhdGlvbkZpbGVFbmFibGVkKCkpIHsKKyAgICAgICAg
cGFyYW1ldGVycy5qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSA9IHdlYnNpdGVEYXRh
U3RvcmUucmVzb2x2ZWRKYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSgpOworICAgICAg
ICBpZiAoIXBhcmFtZXRlcnMuamF2YVNjcmlwdENvbmZpZ3VyYXRpb25EaXJlY3RvcnkuaXNFbXB0
eSgpKQorICAgICAgICAgICAgU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlV2l0aG91dFJl
c29sdmluZ1BhdGgocGFyYW1ldGVycy5qYXZhU2NyaXB0Q29uZmlndXJhdGlvbkRpcmVjdG9yeSwg
U2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBwYXJhbWV0ZXJzLmphdmFTY3JpcHRD
b25maWd1cmF0aW9uRGlyZWN0b3J5RXh0ZW5zaW9uSGFuZGxlKTsKKyAgICB9CisKKyAgICBwYXJh
bWV0ZXJzLnJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkID0gd2Vic2l0ZURhdGFTdG9yZS5y
ZXNvdXJjZUxvYWRTdGF0aXN0aWNzRW5hYmxlZCgpOworCisgICAgcHJvY2Vzcy5zZW5kKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpTZXRXZWJzaXRlRGF0YVN0b3JlUGFyYW1ldGVycyhwYXJhbWV0ZXJz
KSwgMCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmluaXRpYWxpemVOZXdXZWJQcm9jZXNz
KFdlYlByb2Nlc3NQcm94eSYgcHJvY2VzcywgV2Vic2l0ZURhdGFTdG9yZSogd2Vic2l0ZURhdGFT
dG9yZSwgV2ViUHJvY2Vzc1Byb3h5OjpJc1ByZXdhcm1lZCBpc1ByZXdhcm1lZCkKK3sKKyAgICBh
dXRvIGluaXRpYWxpemF0aW9uQWN0aXZpdHlUb2tlbiA9IHByb2Nlc3MudGhyb3R0bGVyKCkuYmFj
a2dyb3VuZEFjdGl2aXR5VG9rZW4oKTsKKyAgICBhdXRvIHNjb3BlRXhpdCA9IG1ha2VTY29wZUV4
aXQoWyZwcm9jZXNzLCBpbml0aWFsaXphdGlvbkFjdGl2aXR5VG9rZW5dIHsKKyAgICAgICAgLy8g
Um91bmQtdHJpcCB0byB0aGUgV2ViIENvbnRlbnQgcHJvY2VzcyBiZWZvcmUgcmVsZWFzaW5nIHRo
ZQorICAgICAgICAvLyBpbml0aWFsaXphdGlvbiBhY3Rpdml0eSB0b2tlbiwgc28gdGhhdCB3ZSdy
ZSBzdXJlIHRoYXQgYWxsCisgICAgICAgIC8vIG1lc3NhZ2VzIHNlbnQgZnJvbSB0aGlzIGZ1bmN0
aW9uIGhhdmUgYmVlbiBoYW5kbGVkLgorICAgICAgICBwcm9jZXNzLmlzUmVzcG9uc2l2ZShbaW5p
dGlhbGl6YXRpb25BY3Rpdml0eVRva2VuXSAoYm9vbCkgeyB9KTsKKyAgICB9KTsKKworICAgIGVu
c3VyZU5ldHdvcmtQcm9jZXNzKCk7CisKKyAgICBXZWJQcm9jZXNzQ3JlYXRpb25QYXJhbWV0ZXJz
IHBhcmFtZXRlcnM7CisKKyAgICBwYXJhbWV0ZXJzLmluamVjdGVkQnVuZGxlUGF0aCA9IG1fcmVz
b2x2ZWRQYXRocy5pbmplY3RlZEJ1bmRsZVBhdGg7CisgICAgaWYgKCFwYXJhbWV0ZXJzLmluamVj
dGVkQnVuZGxlUGF0aC5pc0VtcHR5KCkpCisgICAgICAgIFNhbmRib3hFeHRlbnNpb246OmNyZWF0
ZUhhbmRsZVdpdGhvdXRSZXNvbHZpbmdQYXRoKHBhcmFtZXRlcnMuaW5qZWN0ZWRCdW5kbGVQYXRo
LCBTYW5kYm94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkT25seSwgcGFyYW1ldGVycy5pbmplY3RlZEJ1
bmRsZVBhdGhFeHRlbnNpb25IYW5kbGUpOworCisgICAgcGFyYW1ldGVycy5hZGRpdGlvbmFsU2Fu
ZGJveEV4dGVuc2lvbkhhbmRsZXMuYWxsb2NhdGUobV9yZXNvbHZlZFBhdGhzLmFkZGl0aW9uYWxX
ZWJQcm9jZXNzU2FuZGJveEV4dGVuc2lvblBhdGhzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDAsIHNpemUgPSBtX3Jlc29sdmVkUGF0aHMuYWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94
RXh0ZW5zaW9uUGF0aHMuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGVXaXRob3V0UmVzb2x2aW5nUGF0aChtX3Jlc29sdmVkUGF0aHMu
YWRkaXRpb25hbFdlYlByb2Nlc3NTYW5kYm94RXh0ZW5zaW9uUGF0aHNbaV0sIFNhbmRib3hFeHRl
bnNpb246OlR5cGU6OlJlYWRPbmx5LCBwYXJhbWV0ZXJzLmFkZGl0aW9uYWxTYW5kYm94RXh0ZW5z
aW9uSGFuZGxlc1tpXSk7CisKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgIHNldEphdmFT
Y3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWRGcm9tRGVmYXVsdHMoKTsKKyNlbmRpZgorCisg
ICAgcGFyYW1ldGVycy5jYWNoZU1vZGVsID0gY2FjaGVNb2RlbCgpOworICAgIHBhcmFtZXRlcnMu
bGFuZ3VhZ2VzID0gY29uZmlndXJhdGlvbigpLm92ZXJyaWRlTGFuZ3VhZ2VzKCkuaXNFbXB0eSgp
ID8gdXNlclByZWZlcnJlZExhbmd1YWdlcygpIDogY29uZmlndXJhdGlvbigpLm92ZXJyaWRlTGFu
Z3VhZ2VzKCk7CisKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNFbXB0eURv
Y3VtZW50ID0gY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0VtcHR5RG9jdW1lbnQp
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc1NlY3VyZSA9IGNvcHlUb1Zl
Y3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNTZWN1cmUpOworICAgIHBhcmFtZXRlcnMudXJsU2No
ZW1lc1JlZ2lzdGVyZWRBc0J5cGFzc2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeSA9IGNvcHlUb1Zl
Y3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNCeXBhc3NpbmdDb250ZW50U2VjdXJpdHlQb2xpY3kp
OworICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc0ZvcldoaWNoRG9tYWluUmVsYXhhdGlvbklzRm9y
YmlkZGVuID0gY29weVRvVmVjdG9yKG1fc2NoZW1lc1RvU2V0RG9tYWluUmVsYXhhdGlvbkZvcmJp
ZGRlbkZvcik7CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzTG9jYWwgPSBj
b3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzTG9jYWwpOworICAgIHBhcmFtZXRlcnMu
dXJsU2NoZW1lc1JlZ2lzdGVyZWRBc05vQWNjZXNzID0gY29weVRvVmVjdG9yKG1fc2NoZW1lc1Rv
UmVnaXN0ZXJBc05vQWNjZXNzKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVk
QXNEaXNwbGF5SXNvbGF0ZWQgPSBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzRGlz
cGxheUlzb2xhdGVkKTsKKyAgICBwYXJhbWV0ZXJzLnVybFNjaGVtZXNSZWdpc3RlcmVkQXNDT1JT
RW5hYmxlZCA9IGNvcHlUb1ZlY3RvcihtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDT1JTRW5hYmxlZCk7
CisgICAgcGFyYW1ldGVycy51cmxTY2hlbWVzUmVnaXN0ZXJlZEFzQWx3YXlzUmV2YWxpZGF0ZWQg
PSBjb3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzQWx3YXlzUmV2YWxpZGF0ZWQpOwor
ICAgIHBhcmFtZXRlcnMudXJsU2NoZW1lc1JlZ2lzdGVyZWRBc0NhY2hlUGFydGl0aW9uZWQgPSBj
b3B5VG9WZWN0b3IobV9zY2hlbWVzVG9SZWdpc3RlckFzQ2FjaGVQYXJ0aXRpb25lZCk7CisgICAg
cGFyYW1ldGVycy51cmxTY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGUgPSBjb3B5VG9WZWN0
b3IobV9zY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGUpOworICAgIHBhcmFtZXRlcnMudXJs
U2NoZW1lc1JlZ2lzdGVyZWRBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0ID0gY29weVRvVmVj
dG9yKG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0NhbkRpc3BsYXlPbmx5SWZDYW5SZXF1ZXN0KTsKKwor
ICAgIHBhcmFtZXRlcnMuc2hvdWxkQWx3YXlzVXNlQ29tcGxleFRleHRDb2RlUGF0aCA9IG1fYWx3
YXlzVXNlc0NvbXBsZXhUZXh0Q29kZVBhdGg7CisgICAgcGFyYW1ldGVycy5zaG91bGRVc2VGb250
U21vb3RoaW5nID0gbV9zaG91bGRVc2VGb250U21vb3RoaW5nOworCisgICAgcGFyYW1ldGVycy50
ZXJtaW5hdGlvblRpbWVvdXQgPSAwX3M7CisKKyAgICBwYXJhbWV0ZXJzLnRleHRDaGVja2VyU3Rh
dGUgPSBUZXh0Q2hlY2tlcjo6c3RhdGUoKTsKKworICAgIHBhcmFtZXRlcnMuZnVsbEtleWJvYXJk
QWNjZXNzRW5hYmxlZCA9IFdlYlByb2Nlc3NQcm94eTo6ZnVsbEtleWJvYXJkQWNjZXNzRW5hYmxl
ZCgpOworCisgICAgcGFyYW1ldGVycy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbCA9IEFQ
STo6VVJMUmVxdWVzdDo6ZGVmYXVsdFRpbWVvdXRJbnRlcnZhbCgpOworCisjaWYgRU5BQkxFKE5P
VElGSUNBVElPTlMpCisgICAgLy8gRklYTUU6IFRoZXJlIHNob3VsZCBiZSBhIGdlbmVyaWMgd2F5
IGZvciBzdXBwbGVtZW50cyB0byBhZGQgdG8gdGhlIGludGlhbGl6YXRpb24gcGFyYW1ldGVycy4K
KyAgICBwYXJhbWV0ZXJzLm5vdGlmaWNhdGlvblBlcm1pc3Npb25zID0gc3VwcGxlbWVudDxXZWJO
b3RpZmljYXRpb25NYW5hZ2VyUHJveHk+KCktPm5vdGlmaWNhdGlvblBlcm1pc3Npb25zKCk7Cisj
ZW5kaWYKKworICAgIHBhcmFtZXRlcnMucGx1Z0luQXV0b1N0YXJ0T3JpZ2luSGFzaGVzID0gbV9w
bHVnSW5BdXRvU3RhcnRQcm92aWRlci5hdXRvU3RhcnRPcmlnaW5IYXNoZXNDb3B5KCk7CisgICAg
cGFyYW1ldGVycy5wbHVnSW5BdXRvU3RhcnRPcmlnaW5zID0gY29weVRvVmVjdG9yKG1fcGx1Z0lu
QXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2lucygpKTsKKworICAgIHBhcmFtZXRlcnMu
bWVtb3J5Q2FjaGVEaXNhYmxlZCA9IG1fbWVtb3J5Q2FjaGVEaXNhYmxlZDsKKyAgICBwYXJhbWV0
ZXJzLmF0dHJTdHlsZUVuYWJsZWQgPSBtX2NvbmZpZ3VyYXRpb24tPmF0dHJTdHlsZUVuYWJsZWQo
KTsKKworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIGF1dG8mIHNlcnZpY2VDb250
cm9sbGVyID0gU2VydmljZXNDb250cm9sbGVyOjpzaW5nbGV0b24oKTsKKyAgICBwYXJhbWV0ZXJz
Lmhhc0ltYWdlU2VydmljZXMgPSBzZXJ2aWNlQ29udHJvbGxlci5oYXNJbWFnZVNlcnZpY2VzKCk7
CisgICAgcGFyYW1ldGVycy5oYXNTZWxlY3Rpb25TZXJ2aWNlcyA9IHNlcnZpY2VDb250cm9sbGVy
Lmhhc1NlbGVjdGlvblNlcnZpY2VzKCk7CisgICAgcGFyYW1ldGVycy5oYXNSaWNoQ29udGVudFNl
cnZpY2VzID0gc2VydmljZUNvbnRyb2xsZXIuaGFzUmljaENvbnRlbnRTZXJ2aWNlcygpOworICAg
IHNlcnZpY2VDb250cm9sbGVyLnJlZnJlc2hFeGlzdGluZ1NlcnZpY2VzKCk7CisjZW5kaWYKKwor
I2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIHBhcmFtZXRlcnMucGx1Z2luTG9h
ZENsaWVudFBvbGljaWVzID0gbV9wbHVnaW5Mb2FkQ2xpZW50UG9saWNpZXM7CisjZW5kaWYKKwor
I2lmIE9TKExJTlVYKQorICAgIHBhcmFtZXRlcnMuc2hvdWxkRW5hYmxlTWVtb3J5UHJlc3N1cmVS
ZWxpZWZMb2dnaW5nID0gdHJ1ZTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0FZTEFORCkgJiYg
VVNFKEVHTCkKKyAgICBpZiAoUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudHlwZSgp
ID09IFBsYXRmb3JtRGlzcGxheTo6VHlwZTo6V2F5bGFuZCkKKyAgICAgICAgcGFyYW1ldGVycy53
YXlsYW5kQ29tcG9zaXRvckRpc3BsYXlOYW1lID0gV2F5bGFuZENvbXBvc2l0b3I6OnNpbmdsZXRv
bigpLmRpc3BsYXlOYW1lKCk7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCisg
ICAgcGFyYW1ldGVycy5zaG91bGRDYXB0dXJlQXVkaW9JblVJUHJvY2VzcyA9IG1fY29uZmlndXJh
dGlvbi0+c2hvdWxkQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3MoKTsKKyAgICBwYXJhbWV0ZXJzLnNo
b3VsZENhcHR1cmVWaWRlb0luVUlQcm9jZXNzID0gbV9jb25maWd1cmF0aW9uLT5zaG91bGRDYXB0
dXJlVmlkZW9JblVJUHJvY2VzcygpOworICAgIHBhcmFtZXRlcnMuc2hvdWxkQ2FwdHVyZURpc3Bs
YXlJblVJUHJvY2VzcyA9IG1fY29uZmlndXJhdGlvbi0+c2hvdWxkQ2FwdHVyZURpc3BsYXlJblVJ
UHJvY2VzcygpOworI2VuZGlmCisKKyAgICBwYXJhbWV0ZXJzLnByZXNlbnRpbmdBcHBsaWNhdGlv
blBJRCA9IG1fY29uZmlndXJhdGlvbi0+cHJlc2VudGluZ0FwcGxpY2F0aW9uUElEKCk7CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKKyAgICBwYXJhbWV0ZXJzLm1lZGlhTUlNRVR5cGVzID0gcHJvY2Vz
cy5tZWRpYU1JTUVUeXBlcygpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXUEUpCisgICAgcGFy
YW1ldGVycy5pc1NlcnZpY2VXb3JrZXJQcm9jZXNzID0gcHJvY2Vzcy5pc1NlcnZpY2VXb3JrZXJQ
cm9jZXNzKCk7CisjZW5kaWYKKworICAgIC8vIEFkZCBhbnkgcGxhdGZvcm0gc3BlY2lmaWMgcGFy
YW1ldGVycworICAgIHBsYXRmb3JtSW5pdGlhbGl6ZVdlYlByb2Nlc3MocGFyYW1ldGVycyk7CisK
KyAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IGluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2Vy
RGF0YSA9IG1faW5qZWN0ZWRCdW5kbGVDbGllbnQtPmdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6
YXRpb25Vc2VyRGF0YSgqdGhpcyk7CisgICAgaWYgKCFpbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0
aW9uVXNlckRhdGEpCisgICAgICAgIGluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25Vc2VyRGF0
YSA9IG1faW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhOworICAgIHBhcmFtZXRl
cnMuaW5pdGlhbGl6YXRpb25Vc2VyRGF0YSA9IFVzZXJEYXRhKHByb2Nlc3MudHJhbnNmb3JtT2Jq
ZWN0c1RvSGFuZGxlcyhpbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEuZ2V0KCkp
KTsKKworICAgIHByb2Nlc3Muc2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6SW5pdGlhbGl6ZVdl
YlByb2Nlc3MocGFyYW1ldGVycyksIDApOworCisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgcHJv
Y2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRRT1Mod2ViUHJvY2Vzc0xhdGVuY3lR
T1MoKSwgd2ViUHJvY2Vzc1Rocm91Z2hwdXRRT1MoKSksIDApOworI2VuZGlmCisKKyAgICBpZiAo
d2Vic2l0ZURhdGFTdG9yZSkKKyAgICAgICAgc2VuZFdlYlByb2Nlc3NEYXRhU3RvcmVQYXJhbWV0
ZXJzKHByb2Nlc3MsICp3ZWJzaXRlRGF0YVN0b3JlKTsKKworICAgIGlmIChtX2F1dG9tYXRpb25T
ZXNzaW9uKQorICAgICAgICBwcm9jZXNzLnNlbmQoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkVuc3Vy
ZUF1dG9tYXRpb25TZXNzaW9uUHJveHkobV9hdXRvbWF0aW9uU2Vzc2lvbi0+c2Vzc2lvbklkZW50
aWZpZXIoKSksIDApOworCisgICAgQVNTRVJUKG1fbWVzc2FnZXNUb0luamVjdGVkQnVuZGxlUG9z
dGVkVG9FbXB0eUNvbnRleHQuaXNFbXB0eSgpKTsKKworICAgIGlmIChpc1ByZXdhcm1lZCA9PSBX
ZWJQcm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpZZXMpIHsKKyAgICAgICAgQVNTRVJUKCFtX3By
ZXdhcm1lZFByb2Nlc3MpOworICAgICAgICBtX3ByZXdhcm1lZFByb2Nlc3MgPSAmcHJvY2VzczsK
KyAgICAgICAgcHJvY2Vzcy5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpQcmV3YXJtR2xvYmFs
bHkoKSwgMCk7CisgICAgfQorCisjaWYgUExBVEZPUk0oSU9TKQorICAgIHByb2Nlc3Muc2VuZChN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6QmFja2xpZ2h0TGV2ZWxEaWRDaGFuZ2UoZGlzcGxheUJyaWdo
dG5lc3MoKSksIDApOworI2VuZGlmCisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAg
ICAvLyBJbml0aWFsaXplIHJlbW90ZSBpbnNwZWN0b3IgY29ubmVjdGlvbiBub3cgdGhhdCB3ZSBo
YXZlIGEgc3ViLXByb2Nlc3MgdGhhdCBpcyBob3N0aW5nIG9uZSBvZiBvdXIgd2ViIHZpZXdzLgor
ICAgIEluc3BlY3Rvcjo6UmVtb3RlSW5zcGVjdG9yOjpzaW5nbGV0b24oKTsgCisjZW5kaWYKKwor
I2lmIFBMQVRGT1JNKE1BQykKKyAgICByZWdpc3RlckRpc3BsYXlDb25maWd1cmF0aW9uQ2FsbGJh
Y2soKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcmV3YXJtUHJvY2Vzcygp
Cit7CisgICAgaWYgKG1fcHJld2FybWVkUHJvY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAg
UkVMRUFTRV9MT0coUGVyZm9ybWFuY2VMb2dnaW5nLCAiUHJld2FybWluZyBhIFdlYlByb2Nlc3Mg
Zm9yIHBlcmZvcm1hbmNlIik7CisgICAgY3JlYXRlTmV3V2ViUHJvY2VzcyhudWxscHRyLCBXZWJQ
cm9jZXNzUHJveHk6OklzUHJld2FybWVkOjpZZXMpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29s
OjplbmFibGVQcm9jZXNzVGVybWluYXRpb24oKQoreworICAgIG1fcHJvY2Vzc1Rlcm1pbmF0aW9u
RW5hYmxlZCA9IHRydWU7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJQcm9jZXNzUHJveHk+PiBwcm9j
ZXNzZXMgPSBtX3Byb2Nlc3NlczsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2Nlc3Nl
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoc2hvdWxkVGVybWluYXRlKHByb2Nlc3Nlc1tp
XS5nZXQoKSkpCisgICAgICAgICAgICBwcm9jZXNzZXNbaV0tPnRlcm1pbmF0ZSgpOworICAgIH0K
K30KKworYm9vbCBXZWJQcm9jZXNzUG9vbDo6c2hvdWxkVGVybWluYXRlKFdlYlByb2Nlc3NQcm94
eSogcHJvY2VzcykKK3sKKyAgICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2Vzcykp
OworCisgICAgaWYgKCFtX3Byb2Nlc3NUZXJtaW5hdGlvbkVuYWJsZWQgfHwgbV9jb25maWd1cmF0
aW9uLT5hbHdheXNLZWVwQW5kUmV1c2VTd2FwcGVkUHJvY2Vzc2VzKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpw
cm9jZXNzRGlkRmluaXNoTGF1bmNoaW5nKFdlYlByb2Nlc3NQcm94eSogcHJvY2VzcykKK3sKKyAg
ICBBU1NFUlQobV9wcm9jZXNzZXMuY29udGFpbnMocHJvY2VzcykpOworCisgICAgaWYgKCFtX3Zp
c2l0ZWRMaW5rc1BvcHVsYXRlZCkgeworICAgICAgICBwb3B1bGF0ZVZpc2l0ZWRMaW5rcygpOwor
ICAgICAgICBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCA9IHRydWU7CisgICAgfQorCisgICAgLy8g
U29tZXRpbWVzIHRoZSBtZW1vcnlTYW1wbGVyIGdldHMgaW5pdGlhbGl6ZWQgYWZ0ZXIgcHJvY2Vz
cyBpbml0aWFsaXphdGlvbiBoYXMgaGFwcGVuZWQgYnV0IGJlZm9yZSB0aGUgcHJvY2VzcyBoYXMg
ZmluaXNoZWQgbGF1bmNoaW5nCisgICAgLy8gc28gY2hlY2sgaWYgaXQgbmVlZHMgdG8gYmUgc3Rh
cnRlZCBoZXJlCisgICAgaWYgKG1fbWVtb3J5U2FtcGxlckVuYWJsZWQpIHsKKyAgICAgICAgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGU7ICAgICAgICAKKyAg
ICAgICAgV2FsbFRpbWUgbm93ID0gV2FsbFRpbWU6Om5vdygpOworICAgICAgICBTdHJpbmcgc2Ft
cGxlTG9nRmlsZVBhdGggPSBtYWtlU3RyaW5nKCJXZWJQcm9jZXNzIiwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPihub3cuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpLCAicGlk
IiwgcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIHNhbXBsZUxvZ0ZpbGVQ
YXRoID0gU2FuZGJveEV4dGVuc2lvbjo6Y3JlYXRlSGFuZGxlRm9yVGVtcG9yYXJ5RmlsZShzYW1w
bGVMb2dGaWxlUGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdyaXRlLCBzYW1wbGVM
b2dTYW5kYm94SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHByb2Nlc3MtPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlN0YXJ0TWVtb3J5U2FtcGxlcihzYW1wbGVMb2dTYW5kYm94SGFuZGxl
LCBzYW1wbGVMb2dGaWxlUGF0aCwgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwpLCAwKTsKKyAgICB9
CisKKyAgICBpZiAobV9jb25maWd1cmF0aW9uLT5mdWxseVN5bmNocm9ub3VzTW9kZUlzQWxsb3dl
ZEZvclRlc3RpbmcoKSkKKyAgICAgICAgcHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5hbGxvd0Z1bGx5
U3luY2hyb25vdXNNb2RlRm9yVGVzdGluZygpOworCisgICAgaWYgKG1fY29uZmlndXJhdGlvbi0+
aWdub3JlU3luY2hyb25vdXNNZXNzYWdpbmdUaW1lb3V0c0ZvclRlc3RpbmcoKSkKKyAgICAgICAg
cHJvY2Vzcy0+Y29ubmVjdGlvbigpLT5pZ25vcmVUaW1lb3V0c0ZvclRlc3RpbmcoKTsKKworICAg
IG1fY29ubmVjdGlvbkNsaWVudC5kaWRDcmVhdGVDb25uZWN0aW9uKHRoaXMsIHByb2Nlc3MtPndl
YkNvbm5lY3Rpb24oKSk7CisKKyAgICBpZiAobV93ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICBt
X3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3RvcmUoKS5kaWRDcmVhdGVOZXR3b3JrUHJv
Y2VzcygpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpkaXNjb25uZWN0UHJvY2VzcyhXZWJQ
cm9jZXNzUHJveHkqIHByb2Nlc3MpCit7CisgICAgQVNTRVJUKG1fcHJvY2Vzc2VzLmNvbnRhaW5z
KHByb2Nlc3MpKTsKKworICAgIGlmIChtX3ByZXdhcm1lZFByb2Nlc3MgPT0gcHJvY2Vzcykgewor
ICAgICAgICBBU1NFUlQobV9wcmV3YXJtZWRQcm9jZXNzLT5pc1ByZXdhcm1lZCgpKTsKKyAgICAg
ICAgbV9wcmV3YXJtZWRQcm9jZXNzID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICBpZiAobV9kdW1t
eVByb2Nlc3NQcm94eSA9PSBwcm9jZXNzKQorICAgICAgICBtX2R1bW15UHJvY2Vzc1Byb3h5ID0g
bnVsbHB0cjsKKworICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNzKTogPHJkYXI6Ly9wcm9i
bGVtLzEyMjM5NzY1PiBTb21lIG9mIHRoZSBpbnZhbGlkYXRpb24gY2FsbHMgb2YgdGhlIG90aGVy
IHN1cHBsZW1lbnRzIGFyZSBzdGlsbCBuZWNlc3NhcnkgaW4gbXVsdGktcHJvY2VzcyBtb2RlLCBi
dXQgdGhleSBzaG91bGQgb25seSBhZmZlY3QgZGF0YSBzdHJ1Y3R1cmVzIHBlcnRhaW5pbmcgdG8g
dGhlIHByb2Nlc3MgYmVpbmcgZGlzY29ubmVjdGVkLgorICAgIC8vIENsZWFyaW5nIGV2ZXJ5dGhp
bmcgY2F1c2VzIGFzc2VydGlvbiBmYWlsdXJlcywgc28gaXQncyBsZXNzIHRyb3VibGUgdG8gc2tp
cCB0aGF0IGZvciBub3cuCisgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvdGVjdChwcm9j
ZXNzKTsKKyAgICBpZiAobV9wcm9jZXNzV2l0aFBhZ2VDYWNoZSA9PSBwcm9jZXNzKQorICAgICAg
ICBtX3Byb2Nlc3NXaXRoUGFnZUNhY2hlID0gbnVsbHB0cjsKKworICAgIG1fc3VzcGVuZGVkUGFn
ZXMucmVtb3ZlQWxsTWF0Y2hpbmcoW3Byb2Nlc3NdKGF1dG8mIHN1c3BlbmRlZFBhZ2UpIHsKKyAg
ICAgICAgcmV0dXJuICZzdXNwZW5kZWRQYWdlLT5wcm9jZXNzKCkgPT0gcHJvY2VzczsKKyAgICB9
KTsKKworI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBpZiAoaXM8U2VydmljZVdvcmtl
clByb2Nlc3NQcm94eT4oKnByb2Nlc3MpKSB7CisgICAgICAgIGF1dG8qIHJlbW92ZWRQcm9jZXNz
ID0gbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnRha2UoZG93bmNhc3Q8U2VydmljZVdvcmtlclBy
b2Nlc3NQcm94eT4oKnByb2Nlc3MpLnJlZ2lzdHJhYmxlRG9tYWluKCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHJlbW92ZWRQcm9jZXNzLCByZW1vdmVkUHJvY2VzcyA9PSBwcm9jZXNzKTsKKyAg
ICAgICAgdXBkYXRlUHJvY2Vzc0Fzc2VydGlvbnMoKTsKKyAgICB9CisjZW5kaWYKKworICAgIHN0
YXRpY19jYXN0PFdlYkNvbnRleHRTdXBwbGVtZW50Kj4oc3VwcGxlbWVudDxXZWJHZW9sb2NhdGlv
bk1hbmFnZXJQcm94eT4oKSktPnByb2Nlc3NEaWRDbG9zZShwcm9jZXNzKTsKKworICAgIG1fcHJv
Y2Vzc2VzLnJlbW92ZUZpcnN0KHByb2Nlc3MpOworCisjaWYgRU5BQkxFKEdBTUVQQUQpCisgICAg
aWYgKG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5jb250YWlucyhwcm9jZXNzKSkKKyAgICAgICAg
cHJvY2Vzc1N0b3BwZWRVc2luZ0dhbWVwYWRzKCpwcm9jZXNzKTsKKyNlbmRpZgorCisgICAgcmVt
b3ZlUHJvY2Vzc0Zyb21PcmlnaW5DYWNoZVNldCgqcHJvY2Vzcyk7CisKKyNpZiBFTkFCTEUoU0VS
VklDRV9XT1JLRVIpCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBiZXR0ZXIgdGhhbiB0aGlz
LiBGb3Igbm93LCB3ZSBqdXN0IGRlc3Ryb3kgdGhlIFNlcnZpY2VXb3JrZXIgcHJvY2VzcworICAg
IC8vIHdoZW5ldmVyIHRoZXJlIGlzIG5vIHJlZ3VsYXIgV2ViQ29udGVudCBwcm9jZXNzIHJlbWFp
bmluZy4KKyAgICBpZiAobV9wcm9jZXNzZXMuc2l6ZSgpID09IG1fc2VydmljZVdvcmtlclByb2Nl
c3Nlcy5zaXplKCkpIHsKKyAgICAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXNUZXJt
aW5hdGlvblRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcm9j
ZXNzZXNUZXJtaW5hdGlvblRpbWVyLnN0YXJ0T25lU2hvdChzZXJ2aWNlV29ya2VyVGVybWluYXRp
b25EZWxheSk7CisgICAgfQorI2VuZGlmCit9CisKK1dlYlByb2Nlc3NQcm94eSYgV2ViUHJvY2Vz
c1Bvb2w6OnByb2Nlc3NGb3JSZWdpc3RyYWJsZURvbWFpbihXZWJzaXRlRGF0YVN0b3JlJiB3ZWJz
aXRlRGF0YVN0b3JlLCBXZWJQYWdlUHJveHkqIHBhZ2UsIGNvbnN0IFJlZ2lzdHJhYmxlRG9tYWlu
JiByZWdpc3RyYWJsZURvbWFpbikKK3sKKyAgICBpZiAoIXJlZ2lzdHJhYmxlRG9tYWluLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAoYXV0byBwcm9jZXNzID0gd2ViUHJvY2Vzc0NhY2hlKCkudGFr
ZVByb2Nlc3MocmVnaXN0cmFibGVEb21haW4sIHdlYnNpdGVEYXRhU3RvcmUpKQorICAgICAgICAg
ICAgcmV0dXJuICpwcm9jZXNzOworCisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBzdXNw
ZW5kZWQgcGFnZSBmb3IgdGhlIGdpdmVuIHJlZ2lzdHJhYmxlIGRvbWFpbiBhbmQgdXNlIGl0cyBw
cm9jZXNzIGlmIHdlIGRvLCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAgaWYgKGF1
dG8gcHJvY2VzcyA9IHBhZ2UgPyBmaW5kUmV1c2FibGVTdXNwZW5kZWRQYWdlUHJvY2VzcyhyZWdp
c3RyYWJsZURvbWFpbiwgKnBhZ2UsIHdlYnNpdGVEYXRhU3RvcmUpIDogbnVsbHB0cikgeworICAg
ICAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N3YXBwaW5nLCAiVXNpbmcgV2ViUHJvY2VzcyAl
aSBmcm9tIGEgU3VzcGVuZGVkUGFnZSIsIHByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCkpOwor
ICAgICAgICAgICAgcmV0dXJuICpwcm9jZXNzOworICAgICAgICB9CisgICAgfQorCisgICAgaWYg
KGF1dG8gcHJvY2VzcyA9IHRyeVRha2VQcmV3YXJtZWRQcm9jZXNzKHdlYnNpdGVEYXRhU3RvcmUp
KSB7CisgICAgICAgIFJFTEVBU0VfTE9HKFByb2Nlc3NTd2FwcGluZywgIlVzaW5nIHByZXdhcm1l
ZCBwcm9jZXNzICVpIiwgcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisgICAgICAgIGlm
ICghcmVnaXN0cmFibGVEb21haW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgdHJ5UHJld2FybVdp
dGhEb21haW5JbmZvcm1hdGlvbigqcHJvY2VzcywgcmVnaXN0cmFibGVEb21haW4pOworICAgICAg
ICByZXR1cm4gKnByb2Nlc3M7CisgICAgfQorCisgICAgaWYgKCF1c2VzU2luZ2xlV2ViUHJvY2Vz
cygpKQorICAgICAgICByZXR1cm4gY3JlYXRlTmV3V2ViUHJvY2Vzcygmd2Vic2l0ZURhdGFTdG9y
ZSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBib29sIG11c3RNYXRjaERhdGFTdG9yZSA9
IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdERhdGFTdG9yZUV4aXN0cygpICYmICZ3ZWJz
aXRlRGF0YVN0b3JlICE9ICZBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHREYXRhU3RvcmUo
KS0+d2Vic2l0ZURhdGFTdG9yZSgpOworI2Vsc2UKKyAgICBib29sIG11c3RNYXRjaERhdGFTdG9y
ZSA9IGZhbHNlOworI2VuZGlmCisKKyAgICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBtX3Byb2Nlc3Nl
cykgeworICAgICAgICBpZiAocHJvY2VzcyA9PSBtX3ByZXdhcm1lZFByb2Nlc3MgfHwgcHJvY2Vz
cyA9PSBtX2R1bW15UHJvY2Vzc1Byb3h5KQorICAgICAgICAgICAgY29udGludWU7CisjaWYgRU5B
QkxFKFNFUlZJQ0VfV09SS0VSKQorICAgICAgICBpZiAoaXM8U2VydmljZVdvcmtlclByb2Nlc3NQ
cm94eT4oKnByb2Nlc3MpKQorICAgICAgICAgICAgY29udGludWU7CisjZW5kaWYKKyAgICAgICAg
aWYgKG11c3RNYXRjaERhdGFTdG9yZSAmJiAmcHJvY2Vzcy0+d2Vic2l0ZURhdGFTdG9yZSgpICE9
ICZ3ZWJzaXRlRGF0YVN0b3JlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHJldHVy
biAqcHJvY2VzczsKKyAgICB9CisgICAgcmV0dXJuIGNyZWF0ZU5ld1dlYlByb2Nlc3MoJndlYnNp
dGVEYXRhU3RvcmUpOworfQorCitSZWY8V2ViUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6Y3Jl
YXRlV2ViUGFnZShQYWdlQ2xpZW50JiBwYWdlQ2xpZW50LCBSZWY8QVBJOjpQYWdlQ29uZmlndXJh
dGlvbj4mJiBwYWdlQ29uZmlndXJhdGlvbikKK3sKKyAgICBpZiAoIXBhZ2VDb25maWd1cmF0aW9u
LT5wYWdlR3JvdXAoKSkKKyAgICAgICAgcGFnZUNvbmZpZ3VyYXRpb24tPnNldFBhZ2VHcm91cCht
X2RlZmF1bHRQYWdlR3JvdXAucHRyKCkpOworICAgIGlmICghcGFnZUNvbmZpZ3VyYXRpb24tPnBy
ZWZlcmVuY2VzKCkpCisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9uLT5zZXRQcmVmZXJlbmNlcygm
cGFnZUNvbmZpZ3VyYXRpb24tPnBhZ2VHcm91cCgpLT5wcmVmZXJlbmNlcygpKTsKKyAgICBpZiAo
IXBhZ2VDb25maWd1cmF0aW9uLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSkKKyAgICAgICAgcGFn
ZUNvbmZpZ3VyYXRpb24tPnNldFVzZXJDb250ZW50Q29udHJvbGxlcigmcGFnZUNvbmZpZ3VyYXRp
b24tPnBhZ2VHcm91cCgpLT51c2VyQ29udGVudENvbnRyb2xsZXIoKSk7CisgICAgaWYgKCFwYWdl
Q29uZmlndXJhdGlvbi0+dmlzaXRlZExpbmtTdG9yZSgpKQorICAgICAgICBwYWdlQ29uZmlndXJh
dGlvbi0+c2V0VmlzaXRlZExpbmtTdG9yZShtX3Zpc2l0ZWRMaW5rU3RvcmUucHRyKCkpOworCisg
ICAgaWYgKCFwYWdlQ29uZmlndXJhdGlvbi0+d2Vic2l0ZURhdGFTdG9yZSgpKSB7CisgICAgICAg
IC8vIFdlIHRyeSB0byBhdm9pZCBjcmVhdGluZyB0aGUgZGVmYXVsdCBkYXRhIHN0b3JlIGFzIGxv
bmcgYXMgcG9zc2libGUuCisgICAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBhbiBhdHRlbXB0IHRv
IGNyZWF0ZSBhIHdlYiBwYWdlIHdpdGhvdXQgYW55IHNwZWNpZmllZCBkYXRhIHN0b3JlLCB0aGVu
IHdlIGhhdmUgdG8gY3JlYXRlIGl0LgorICAgICAgICBpZiAoIW1fd2Vic2l0ZURhdGFTdG9yZSkK
KyAgICAgICAgICAgIG1fd2Vic2l0ZURhdGFTdG9yZSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6
ZGVmYXVsdERhdGFTdG9yZSgpLnB0cigpOworCisgICAgICAgIEFTU0VSVCghcGFnZUNvbmZpZ3Vy
YXRpb24tPnNlc3Npb25JRCgpLmlzVmFsaWQoKSk7CisgICAgICAgIHBhZ2VDb25maWd1cmF0aW9u
LT5zZXRXZWJzaXRlRGF0YVN0b3JlKG1fd2Vic2l0ZURhdGFTdG9yZS5nZXQoKSk7CisgICAgICAg
IHBhZ2VDb25maWd1cmF0aW9uLT5zZXRTZXNzaW9uSUQocGFnZUNvbmZpZ3VyYXRpb24tPnByZWZl
cmVuY2VzKCktPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKSA/IFBBTDo6U2Vzc2lvbklEOjpsZWdh
Y3lQcml2YXRlU2Vzc2lvbklEKCkgOiBtX3dlYnNpdGVEYXRhU3RvcmUtPndlYnNpdGVEYXRhU3Rv
cmUoKS5zZXNzaW9uSUQoKSk7CisgICAgfQorCisgICAgUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4g
cHJvY2VzczsKKyAgICBpZiAocGFnZUNvbmZpZ3VyYXRpb24tPnJlbGF0ZWRQYWdlKCkpIHsKKyAg
ICAgICAgLy8gU2hhcmluZyBwcm9jZXNzZXMsIGUuZy4gd2hlbiBjcmVhdGluZyB0aGUgcGFnZSB2
aWEgd2luZG93Lm9wZW4oKS4KKyAgICAgICAgcHJvY2VzcyA9ICZwYWdlQ29uZmlndXJhdGlvbi0+
cmVsYXRlZFBhZ2UoKS0+cHJvY2VzcygpOworICAgICAgICAvLyBXZSBkbyBub3Qgc3VwcG9ydCBz
ZXZlcmFsIFdlYnNpdGVEYXRhU3RvcmVzIHNoYXJpbmcgYSBzaW5nbGUgcHJvY2Vzcy4KKyAgICAg
ICAgQVNTRVJUKHByb2Nlc3MuZ2V0KCkgPT0gbV9kdW1teVByb2Nlc3NQcm94eSB8fCAmcGFnZUNv
bmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFTdG9yZSgpID09ICZw
cm9jZXNzLT53ZWJzaXRlRGF0YVN0b3JlKCkpOworICAgICAgICBBU1NFUlQoJnBhZ2VDb25maWd1
cmF0aW9uLT5yZWxhdGVkUGFnZSgpLT53ZWJzaXRlRGF0YVN0b3JlKCkgPT0gJnBhZ2VDb25maWd1
cmF0aW9uLT53ZWJzaXRlRGF0YVN0b3JlKCktPndlYnNpdGVEYXRhU3RvcmUoKSk7CisgICAgfSBl
bHNlIGlmICghbV9pc0RlbGF5ZWRXZWJQcm9jZXNzTGF1bmNoRGlzYWJsZWQpIHsKKyAgICAgICAg
Ly8gSW4gdGhlIGNvbW1vbiBjYXNlLCB3ZSBkZWxheSBwcm9jZXNzIGxhdW5jaCB1bnRpbCBzb21l
dGhpbmcgaXMgYWN0dWFsbHkgbG9hZGVkIGluIHRoZSBwYWdlLgorICAgICAgICBpZiAoIW1fZHVt
bXlQcm9jZXNzUHJveHkpIHsKKyAgICAgICAgICAgIGF1dG8gZHVtbXlQcm9jZXNzUHJveHkgPSBX
ZWJQcm9jZXNzUHJveHk6OmNyZWF0ZSgqdGhpcywgbnVsbHB0ciwgV2ViUHJvY2Vzc1Byb3h5OjpJ
c1ByZXdhcm1lZDo6Tm8sIFdlYlByb2Nlc3NQcm94eTo6U2hvdWxkTGF1bmNoUHJvY2Vzczo6Tm8p
OworICAgICAgICAgICAgbV9kdW1teVByb2Nlc3NQcm94eSA9IGR1bW15UHJvY2Vzc1Byb3h5LnB0
cigpOworICAgICAgICAgICAgbV9wcm9jZXNzZXMuYXBwZW5kKFdURk1vdmUoZHVtbXlQcm9jZXNz
UHJveHkpKTsKKyAgICAgICAgfQorICAgICAgICBwcm9jZXNzID0gbV9kdW1teVByb2Nlc3NQcm94
eTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJvY2VzcyA9ICZwcm9jZXNzRm9yUmVnaXN0cmFibGVE
b21haW4ocGFnZUNvbmZpZ3VyYXRpb24tPndlYnNpdGVEYXRhU3RvcmUoKS0+d2Vic2l0ZURhdGFT
dG9yZSgpLCBudWxscHRyLCB7IH0pOworCisgICAgQVNTRVJUKHByb2Nlc3MpOworCisgICAgYXV0
byBwYWdlID0gcHJvY2Vzcy0+Y3JlYXRlV2ViUGFnZShwYWdlQ2xpZW50LCBXVEZNb3ZlKHBhZ2VD
b25maWd1cmF0aW9uKSk7CisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCisgICAgQVNTRVJU
KCFpczxTZXJ2aWNlV29ya2VyUHJvY2Vzc1Byb3h5PigqcHJvY2VzcykpOworCisgICAgaWYgKCFt
X3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcykgeworICAgICAgICBtX3NlcnZpY2VXb3JrZXJQcmVm
ZXJlbmNlcyA9IHBhZ2UtPnByZWZlcmVuY2VzU3RvcmUoKTsKKyAgICAgICAgZm9yIChhdXRvKiBz
ZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy52YWx1ZXMoKSkK
KyAgICAgICAgICAgIHNlcnZpY2VXb3JrZXJQcm9jZXNzLT51cGRhdGVQcmVmZXJlbmNlc1N0b3Jl
KCptX3NlcnZpY2VXb3JrZXJQcmVmZXJlbmNlcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBib29s
IGVuYWJsZVByb2Nlc3NTd2FwT25Dcm9zc1NpdGVOYXZpZ2F0aW9uID0gcGFnZS0+cHJlZmVyZW5j
ZXMoKS5wcm9jZXNzU3dhcE9uQ3Jvc3NTaXRlTmF2aWdhdGlvbkVuYWJsZWQoKTsKKyNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQorICAgIGlmIChXZWJDb3JlOjpJT1NBcHBsaWNhdGlvbjo6aXNGaXJl
Zm94KCkgJiYgIWxpbmtlZE9uT3JBZnRlcihXZWJLaXQ6OlNES1ZlcnNpb246OkZpcnN0V2l0aFBy
b2Nlc3NTd2FwT25Dcm9zc1NpdGVOYXZpZ2F0aW9uKSkKKyAgICAgICAgZW5hYmxlUHJvY2Vzc1N3
YXBPbkNyb3NzU2l0ZU5hdmlnYXRpb24gPSBmYWxzZTsKKyNlbmRpZgorCisgICAgYm9vbCB3YXNQ
cm9jZXNzU3dhcHBpbmdPbk5hdmlnYXRpb25FbmFibGVkID0gbV9jb25maWd1cmF0aW9uLT5wcm9j
ZXNzU3dhcHNPbk5hdmlnYXRpb24oKTsKKyAgICBtX2NvbmZpZ3VyYXRpb24tPnNldFByb2Nlc3NT
d2Fwc09uTmF2aWdhdGlvbkZyb21FeHBlcmltZW50YWxGZWF0dXJlcyhlbmFibGVQcm9jZXNzU3dh
cE9uQ3Jvc3NTaXRlTmF2aWdhdGlvbik7CisgICAgaWYgKHdhc1Byb2Nlc3NTd2FwcGluZ09uTmF2
aWdhdGlvbkVuYWJsZWQgIT0gbV9jb25maWd1cmF0aW9uLT5wcm9jZXNzU3dhcHNPbk5hdmlnYXRp
b24oKSkKKyAgICAgICAgbV93ZWJQcm9jZXNzQ2FjaGUtPnVwZGF0ZUNhcGFjaXR5KCp0aGlzKTsK
KworICAgIG1fY29uZmlndXJhdGlvbi0+c2V0U2hvdWxkQ2FwdHVyZUF1ZGlvSW5VSVByb2Nlc3Mo
cGFnZS0+cHJlZmVyZW5jZXMoKS5jYXB0dXJlQXVkaW9JblVJUHJvY2Vzc0VuYWJsZWQoKSk7Cisg
ICAgbV9jb25maWd1cmF0aW9uLT5zZXRTaG91bGRDYXB0dXJlVmlkZW9JblVJUHJvY2VzcyhwYWdl
LT5wcmVmZXJlbmNlcygpLmNhcHR1cmVWaWRlb0luVUlQcm9jZXNzRW5hYmxlZCgpKTsKKworICAg
IHJldHVybiBwYWdlOworfQorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQordm9pZCBXZWJQ
cm9jZXNzUG9vbDo6dXBkYXRlU2VydmljZVdvcmtlclVzZXJBZ2VudChjb25zdCBTdHJpbmcmIHVz
ZXJBZ2VudCkKK3sKKyAgICBpZiAobV9zZXJ2aWNlV29ya2VyVXNlckFnZW50ID09IHVzZXJBZ2Vu
dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCA9IHVzZXJB
Z2VudDsKKyAgICBmb3IgKGF1dG8qIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLnZhbHVlcygpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUHJvY2Vzcy0+c2V0
VXNlckFnZW50KG1fc2VydmljZVdvcmtlclVzZXJBZ2VudCk7Cit9CisKK2Jvb2wgV2ViUHJvY2Vz
c1Bvb2w6Om1heUhhdmVSZWdpc3RlcmVkU2VydmljZVdvcmtlcnMoY29uc3QgV2Vic2l0ZURhdGFT
dG9yZSYgc3RvcmUpCit7CisgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQcm9jZXNzZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0cmluZyBzZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9uRGlyZWN0b3J5ID0gc3RvcmUucmVzb2x2ZWRTZXJ2aWNlV29ya2VyUmVnaXN0cmF0
aW9uRGlyZWN0b3J5KCk7CisgICAgaWYgKHNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25EaXJlY3Rv
cnkuaXNFbXB0eSgpKQorICAgICAgICBzZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5
ID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0RGF0YVN0b3JlQ29uZmlndXJhdGlvbigp
LT5zZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9uRGlyZWN0b3J5KCk7CisKKyAgICByZXR1cm4gbV9t
YXlIYXZlUmVnaXN0ZXJlZFNlcnZpY2VXb3JrZXJzLmVuc3VyZShzZXJ2aWNlV29ya2VyUmVnaXN0
cmF0aW9uRGlyZWN0b3J5LCBbJl0geworICAgICAgICAvLyBGSVhNRTogTWFrZSB0aGlzIGNvbXB1
dGF0aW9uIG9uIGEgYmFja2dyb3VuZCB0aHJlYWQuCisgICAgICAgIHJldHVybiBTZXJ2aWNlV29y
a2VyUHJvY2Vzc1Byb3h5OjpoYXNSZWdpc3RlcmVkU2VydmljZVdvcmtlcnMoc2VydmljZVdvcmtl
clJlZ2lzdHJhdGlvbkRpcmVjdG9yeSk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlOworfQorI2Vu
ZGlmCisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBhZ2VCZWdpblVzaW5nV2Vic2l0ZURhdGFTdG9y
ZSh1aW50NjRfdCBwYWdlSUQsIFdlYnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkKK3sKKyAgICBh
dXRvIHJlc3VsdCA9IG1fc2Vzc2lvblRvUGFnZUlEc01hcC5hZGQoZGF0YVN0b3JlLnNlc3Npb25J
RCgpLCBIYXNoU2V0PHVpbnQ2NF90PigpKS5pdGVyYXRvci0+dmFsdWUuYWRkKHBhZ2VJRCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5pc05ld0VudHJ5KTsKKworICAgIGF1dG8g
c2Vzc2lvbklEID0gZGF0YVN0b3JlLnNlc3Npb25JRCgpOworICAgIGlmIChzZXNzaW9uSUQuaXNF
cGhlbWVyYWwoKSkgeworICAgICAgICBBU1NFUlQoZGF0YVN0b3JlLnBhcmFtZXRlcnMoKS5uZXR3
b3JrU2Vzc2lvblBhcmFtZXRlcnMuc2Vzc2lvbklEID09IHNlc3Npb25JRCk7CisgICAgICAgIGlm
IChtX25ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5hZGRT
ZXNzaW9uKG1ha2VSZWYoZGF0YVN0b3JlKSk7CisgICAgICAgICAgICBkYXRhU3RvcmUuY2xlYXJQ
ZW5kaW5nQ29va2llcygpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzZXNzaW9uSUQgIT0g
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKSkgeworICAgICAgICBpZiAobV9uZXR3
b3JrUHJvY2VzcykgeworICAgICAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+YWRkU2Vzc2lvbiht
YWtlUmVmKGRhdGFTdG9yZSkpOworICAgICAgICAgICAgZGF0YVN0b3JlLmNsZWFyUGVuZGluZ0Nv
b2tpZXMoKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cGFn
ZUVuZFVzaW5nV2Vic2l0ZURhdGFTdG9yZSh1aW50NjRfdCBwYWdlSUQsIFdlYnNpdGVEYXRhU3Rv
cmUmIGRhdGFTdG9yZSkKK3sKKyAgICBhdXRvIHNlc3Npb25JRCA9IGRhdGFTdG9yZS5zZXNzaW9u
SUQoKTsKKyAgICBhdXRvIGl0ZXJhdG9yID0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmZpbmQoc2Vz
c2lvbklEKTsKKyAgICBBU1NFUlQoaXRlcmF0b3IgIT0gbV9zZXNzaW9uVG9QYWdlSURzTWFwLmVu
ZCgpKTsKKworICAgIGF1dG8gdGFrZW5QYWdlSUQgPSBpdGVyYXRvci0+dmFsdWUudGFrZShwYWdl
SUQpOworICAgIEFTU0VSVF9VTlVTRUQodGFrZW5QYWdlSUQsIHRha2VuUGFnZUlEID09IHBhZ2VJ
RCk7CisKKyAgICBpZiAoaXRlcmF0b3ItPnZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBtX3Nl
c3Npb25Ub1BhZ2VJRHNNYXAucmVtb3ZlKGl0ZXJhdG9yKTsKKworICAgICAgICBpZiAoc2Vzc2lv
bklEID09IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0U2Vzc2lvbklEKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgLy8gVGhlIGxhc3QgdXNlciBvZiB0aGlzIG5vbi1kZWZhdWx0IFBB
TDo6U2Vzc2lvbklEIGlzIGdvbmUsIHNvIGNsZWFuIGl0IHVwIGluIHRoZSBjaGlsZCBwcm9jZXNz
ZXMuCisgICAgICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKQorICAgICAgICAgICAgbmV0d29ya1By
b2Nlc3MoKS0+cmVtb3ZlU2Vzc2lvbihzZXNzaW9uSUQpOworCisgICAgICAgIG1fd2ViUHJvY2Vz
c0NhY2hlLT5jbGVhckFsbFByb2Nlc3Nlc0ZvclNlc3Npb24oc2Vzc2lvbklEKTsKKyAgICB9Cit9
CisKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6Omhhc1BhZ2VzVXNpbmdXZWJzaXRlRGF0YVN0b3JlKFdl
YnNpdGVEYXRhU3RvcmUmIGRhdGFTdG9yZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zZXNzaW9u
VG9QYWdlSURzTWFwLmNvbnRhaW5zKGRhdGFTdG9yZS5zZXNzaW9uSUQoKSk7Cit9CisKK0Rvd25s
b2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpkb3dubG9hZChXZWJQYWdlUHJveHkqIGluaXRpYXRp
bmdQYWdlLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN0cmluZyYgc3Vn
Z2VzdGVkRmlsZW5hbWUpCit7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGNyZWF0ZURvd25s
b2FkUHJveHkocmVxdWVzdCwgaW5pdGlhdGluZ1BhZ2UpOworICAgIFBBTDo6U2Vzc2lvbklEIHNl
c3Npb25JRCA9IGluaXRpYXRpbmdQYWdlID8gaW5pdGlhdGluZ1BhZ2UtPnNlc3Npb25JRCgpIDog
UEFMOjpTZXNzaW9uSUQ6OmRlZmF1bHRTZXNzaW9uSUQoKTsKKworICAgIGlmIChpbml0aWF0aW5n
UGFnZSkKKyAgICAgICAgaW5pdGlhdGluZ1BhZ2UtPmhhbmRsZURvd25sb2FkUmVxdWVzdChkb3du
bG9hZFByb3h5KTsKKworICAgIGlmIChuZXR3b3JrUHJvY2VzcygpKSB7CisgICAgICAgIFJlc291
cmNlUmVxdWVzdCB1cGRhdGVkUmVxdWVzdChyZXF1ZXN0KTsKKyAgICAgICAgLy8gUmVxdWVzdCdz
IGZpcnN0UGFydHlGb3JDb29raWVzIHdpbGwgYmUgdXNlZCBhcyBPcmlnaW5hbCBVUkwgb2YgdGhl
IGRvd25sb2FkIHJlcXVlc3QuCisgICAgICAgIC8vIFdlIHNldCB0aGUgdmFsdWUgdG8gdG9wIGxl
dmVsIGRvY3VtZW50J3MgVVJMLgorICAgICAgICBpZiAoaW5pdGlhdGluZ1BhZ2UpIHsKKyAgICAg
ICAgICAgIFVSTCBpbml0aWF0aW5nUGFnZVVSTCA9IFVSTCB7IFVSTCB7IH0sIGluaXRpYXRpbmdQ
YWdlLT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0
LnNldEZpcnN0UGFydHlGb3JDb29raWVzKGluaXRpYXRpbmdQYWdlVVJMKTsKKyAgICAgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoYXJlUmVnaXN0cmFibGVEb21haW5zRXF1YWwo
aW5pdGlhdGluZ1BhZ2VVUkwsIHJlcXVlc3QudXJsKCkpKTsKKyAgICAgICAgICAgIGlmICghdXBk
YXRlZFJlcXVlc3QuaGFzSFRUUEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpVc2VyQWdlbnQp
KQorICAgICAgICAgICAgICAgIHVwZGF0ZWRSZXF1ZXN0LnNldEhUVFBVc2VyQWdlbnQoaW5pdGlh
dGluZ1BhZ2UtPnVzZXJBZ2VudCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHVw
ZGF0ZWRSZXF1ZXN0LnNldEZpcnN0UGFydHlGb3JDb29raWVzKFVSTCgpKTsKKyAgICAgICAgICAg
IHVwZGF0ZWRSZXF1ZXN0LnNldElzU2FtZVNpdGUoZmFsc2UpOworICAgICAgICAgICAgaWYgKCF1
cGRhdGVkUmVxdWVzdC5oYXNIVFRQSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OlVzZXJBZ2Vu
dCkpCisgICAgICAgICAgICAgICAgdXBkYXRlZFJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudChXZWJQ
YWdlUHJveHk6OnN0YW5kYXJkVXNlckFnZW50KCkpOworICAgICAgICB9CisgICAgICAgIHVwZGF0
ZWRSZXF1ZXN0LnNldElzVG9wU2l0ZShmYWxzZSk7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCkt
PnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpEb3dubG9hZFJlcXVlc3Qoc2Vzc2lvbklE
LCBkb3dubG9hZFByb3h5LmRvd25sb2FkSUQoKSwgdXBkYXRlZFJlcXVlc3QsIHN1Z2dlc3RlZEZp
bGVuYW1lKSwgMCk7CisgICAgICAgIHJldHVybiBkb3dubG9hZFByb3h5OworICAgIH0KKworICAg
IHJldHVybiBkb3dubG9hZFByb3h5OworfQorCitEb3dubG9hZFByb3h5JiBXZWJQcm9jZXNzUG9v
bDo6cmVzdW1lRG93bmxvYWQoV2ViUGFnZVByb3h5KiBpbml0aWF0aW5nUGFnZSwgY29uc3QgQVBJ
OjpEYXRhKiByZXN1bWVEYXRhLCBjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgYXV0byYgZG93
bmxvYWRQcm94eSA9IGNyZWF0ZURvd25sb2FkUHJveHkoUmVzb3VyY2VSZXF1ZXN0KCksIGluaXRp
YXRpbmdQYWdlKTsKKyAgICBQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQgPSBpbml0aWF0aW5nUGFn
ZSA/IGluaXRpYXRpbmdQYWdlLT5zZXNzaW9uSUQoKSA6IFBBTDo6U2Vzc2lvbklEOjpkZWZhdWx0
U2Vzc2lvbklEKCk7CisKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVu
c2lvbkhhbmRsZTsKKyAgICBpZiAoIXBhdGguaXNFbXB0eSgpKQorICAgICAgICBTYW5kYm94RXh0
ZW5zaW9uOjpjcmVhdGVIYW5kbGUocGF0aCwgU2FuZGJveEV4dGVuc2lvbjo6VHlwZTo6UmVhZFdy
aXRlLCBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKTsKKworICAgIGlmIChuZXR3b3JrUHJvY2Vzcygp
KSB7CisgICAgICAgIG5ldHdvcmtQcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9j
ZXNzOjpSZXN1bWVEb3dubG9hZChzZXNzaW9uSUQsIGRvd25sb2FkUHJveHkuZG93bmxvYWRJRCgp
LCByZXN1bWVEYXRhLT5kYXRhUmVmZXJlbmNlKCksIHBhdGgsIHNhbmRib3hFeHRlbnNpb25IYW5k
bGUpLCAwKTsKKyAgICAgICAgcmV0dXJuIGRvd25sb2FkUHJveHk7CisgICAgfQorCisgICAgcmV0
dXJuIGRvd25sb2FkUHJveHk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBvc3RNZXNzYWdl
VG9JbmplY3RlZEJ1bmRsZShjb25zdCBTdHJpbmcmIG1lc3NhZ2VOYW1lLCBBUEk6Ok9iamVjdCog
bWVzc2FnZUJvZHkpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXMpIHsK
KyAgICAgICAgLy8gRklYTUU6IFJldHVybiBlYXJseSBpZiB0aGUgbWVzc2FnZSBib2R5IGNvbnRh
aW5zIGFueSByZWZlcmVuY2VzIHRvIFdLUGFnZVJlZnMvV0tGcmFtZVJlZnMgZXRjLiBzaW5jZSB0
aGV5J3JlIGxvY2FsIHRvIGEgcHJvY2Vzcy4KKyAgICAgICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdl
czo6V2ViUHJvY2Vzczo6SGFuZGxlSW5qZWN0ZWRCdW5kbGVNZXNzYWdlKG1lc3NhZ2VOYW1lLCBV
c2VyRGF0YShwcm9jZXNzLT50cmFuc2Zvcm1PYmplY3RzVG9IYW5kbGVzKG1lc3NhZ2VCb2R5KS5n
ZXQoKSkpLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmRpZFJlYWNoR29v
ZFRpbWVUb1ByZXdhcm0oKQoreworICAgIGlmICghY29uZmlndXJhdGlvbigpLmlzQXV0b21hdGlj
UHJvY2Vzc1dhcm1pbmdFbmFibGVkKCkgfHwgIWNvbmZpZ3VyYXRpb24oKS5wcm9jZXNzU3dhcHNP
bk5hdmlnYXRpb24oKSB8fCB1c2VzU2luZ2xlV2ViUHJvY2VzcygpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoTWVtb3J5UHJlc3N1cmVIYW5kbGVyOjpzaW5nbGV0b24oKS5pc1VuZGVyTWVt
b3J5UHJlc3N1cmUoKSkgeworICAgICAgICBpZiAoIW1fcHJld2FybWVkUHJvY2VzcykKKyAgICAg
ICAgICAgIFJFTEVBU0VfTE9HKFBlcmZvcm1hbmNlTG9nZ2luZywgIk5vdCBhdXRvbWF0aWNhbGx5
IHByZXdhcm1pbmcgYSBXZWJQcm9jZXNzIGR1ZSB0byBtZW1vcnkgcHJlc3N1cmUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIHByZXdhcm1Qcm9jZXNzKCk7Cit9CisKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnBvcHVsYXRlVmlzaXRlZExpbmtzKCkKK3sKKyAgICBtX2hpc3RvcnlDbGll
bnQtPnBvcHVsYXRlVmlzaXRlZExpbmtzKCp0aGlzKTsKK30KKworV2ViUHJvY2Vzc1Bvb2w6OlN0
YXRpc3RpY3MmIFdlYlByb2Nlc3NQb29sOjpzdGF0aXN0aWNzKCkKK3sKKyAgICBzdGF0aWMgU3Rh
dGlzdGljcyBzdGF0aXN0aWNzID0gU3RhdGlzdGljcygpOworCisgICAgcmV0dXJuIHN0YXRpc3Rp
Y3M7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmhhbmRsZU1lbW9yeVByZXNzdXJlV2Fybmlu
ZyhDcml0aWNhbCkKK3sKKyAgICBSRUxFQVNFX0xPRyhQZXJmb3JtYW5jZUxvZ2dpbmcsICIlcCAt
IFdlYlByb2Nlc3NQb29sOjpoYW5kbGVNZW1vcnlQcmVzc3VyZVdhcm5pbmciLCB0aGlzKTsKKwor
CisgICAgY2xlYXJTdXNwZW5kZWRQYWdlcyhBbGxvd1Byb2Nlc3NDYWNoaW5nOjpObyk7CisgICAg
bV93ZWJQcm9jZXNzQ2FjaGUtPmNsZWFyKCk7CisKKyAgICBpZiAobV9wcmV3YXJtZWRQcm9jZXNz
KQorICAgICAgICBtX3ByZXdhcm1lZFByb2Nlc3MtPnNodXREb3duKCk7CisgICAgQVNTRVJUKCFt
X3ByZXdhcm1lZFByb2Nlc3MpOworfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkp
Cit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRBZGRpdGlvbmFsUGx1Z2luc0RpcmVjdG9yeShjb25z
dCBTdHJpbmcmIGRpcmVjdG9yeSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBkaXJlY3RvcmllczsK
KyAgICBkaXJlY3Rvcmllcy5hcHBlbmQoZGlyZWN0b3J5KTsKKworICAgIG1fcGx1Z2luSW5mb1N0
b3JlLnNldEFkZGl0aW9uYWxQbHVnaW5zRGlyZWN0b3JpZXMoZGlyZWN0b3JpZXMpOworfQorCit2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWZyZXNoUGx1Z2lucygpCit7CisgICAgbV9wbHVnaW5JbmZv
U3RvcmUucmVmcmVzaCgpOworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6UmVmcmVzaFBsdWdpbnMoKSk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVf
UExVR0lOX0FQSSkKKworUHJvY2Vzc0lEIFdlYlByb2Nlc3NQb29sOjpuZXR3b3JrUHJvY2Vzc0lk
ZW50aWZpZXIoKQoreworICAgIGlmICghbV9uZXR3b3JrUHJvY2VzcykKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gbV9uZXR3b3JrUHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKTsK
K30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6YWN0aXZlUGFnZXNPcmlnaW5zSW5XZWJQcm9jZXNz
Rm9yVGVzdGluZyhQcm9jZXNzSUQgcGlkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3RvcjxT
dHJpbmc+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQoreworICAgIGZvciAoYXV0byYgcHJvY2Vz
cyA6IG1fcHJvY2Vzc2VzKSB7CisgICAgICAgIGlmIChwcm9jZXNzLT5wcm9jZXNzSWRlbnRpZmll
cigpID09IHBpZCkKKyAgICAgICAgICAgIHJldHVybiBwcm9jZXNzLT5hY3RpdmVQYWdlc0RvbWFp
bnNGb3JUZXN0aW5nKFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKKyAgICB9CisgICAgY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QWx3YXlz
VXNlc0NvbXBsZXhUZXh0Q29kZVBhdGgoYm9vbCBhbHdheXNVc2VDb21wbGV4VGV4dCkKK3sKKyAg
ICBtX2Fsd2F5c1VzZXNDb21wbGV4VGV4dENvZGVQYXRoID0gYWx3YXlzVXNlQ29tcGxleFRleHQ7
CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTZXRBbHdheXNV
c2VzQ29tcGxleFRleHRDb2RlUGF0aChhbHdheXNVc2VDb21wbGV4VGV4dCkpOworfQorCit2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRTaG91bGRVc2VGb250U21vb3RoaW5nKGJvb2wgdXNlRm9udFNt
b290aGluZykKK3sKKyAgICBtX3Nob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB1c2VGb250U21vb3Ro
aW5nOworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0U2hv
dWxkVXNlRm9udFNtb290aGluZyh1c2VGb250U21vb3RoaW5nKSk7Cit9CisKK3ZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldFJlc291cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGJvb2wgZW5hYmxlZCkK
K3sKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldFJlc291
cmNlTG9hZFN0YXRpc3RpY3NFbmFibGVkKGVuYWJsZWQpKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
UG9vbDo6Y2xlYXJSZXNvdXJjZUxvYWRTdGF0aXN0aWNzKCkKK3sKKyAgICBzZW5kVG9BbGxQcm9j
ZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OkNsZWFyUmVzb3VyY2VMb2FkU3RhdGlzdGljcygp
KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hlbWVBc0VtcHR5RG9j
dW1lbnQoY29uc3QgU3RyaW5nJiB1cmxTY2hlbWUpCit7CisgICAgbV9zY2hlbWVzVG9SZWdpc3Rl
ckFzRW1wdHlEb2N1bWVudC5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMo
TWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNFbXB0eURvY3VtZW50KHVy
bFNjaGVtZSkpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFz
U2VjdXJlKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAgIG1fc2NoZW1lc1RvUmVnaXN0
ZXJBc1NlY3VyZS5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNTZWN1cmUodXJsU2NoZW1lKSk7Cisg
ICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdp
c3RlclVSTFNjaGVtZUFzU2VjdXJlKHVybFNjaGVtZSkpOworfQorCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQnlwYXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KGNv
bnN0IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0J5cGFz
c2luZ0NvbnRlbnRTZWN1cml0eVBvbGljeS5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNCeXBhc3Np
bmdDb250ZW50U2VjdXJpdHlQb2xpY3kodXJsU2NoZW1lKSk7CisgICAgc2VuZFRvTmV0d29ya2lu
Z1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQnlw
YXNzaW5nQ29udGVudFNlY3VyaXR5UG9saWN5KHVybFNjaGVtZSkpOworfQorCit2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGNvbnN0
IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAgIG1fc2NoZW1lc1RvU2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvci5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVz
c2FnZXM6OldlYlByb2Nlc3M6OlNldERvbWFpblJlbGF4YXRpb25Gb3JiaWRkZW5Gb3JVUkxTY2hl
bWUodXJsU2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldENhbkhhbmRsZUhU
VFBTU2VydmVyVHJ1c3RFdmFsdWF0aW9uKGJvb2wgdmFsdWUpCit7CisgICAgbV9jYW5IYW5kbGVI
VFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbiA9IHZhbHVlOworICAgIGlmIChtX25ldHdvcmtQcm9j
ZXNzKSB7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRDYW5IYW5kbGVIVFRQU1NlcnZlclRydXN0RXZhbHVhdGlvbih2YWx1ZSksIDAp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpwcmVj
b25uZWN0VG9TZXJ2ZXIoY29uc3QgVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgp
IHx8ICF1cmwucHJvdG9jb2xJc0luSFRUUEZhbWlseSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQ
cmVjb25uZWN0VG8odXJsLCBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6VXNlKSwgMCk7Cit9CisK
K3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lQXNMb2NhbChjb25zdCBTdHJp
bmcmIHVybFNjaGVtZSkKK3sKKyAgICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNMb2NhbC5hZGQodXJs
U2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJl
Z2lzdGVyVVJMU2NoZW1lQXNMb2NhbCh1cmxTY2hlbWUpKTsKKyAgICBzZW5kVG9OZXR3b3JraW5n
UHJvY2VzcyhNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNMb2Nh
bCh1cmxTY2hlbWUpKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVnaXN0ZXJVUkxTY2hl
bWVBc05vQWNjZXNzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAgIG1fc2NoZW1lc1Rv
UmVnaXN0ZXJBc05vQWNjZXNzLmFkZCh1cmxTY2hlbWUpOworICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNj
aGVtZSkpOworICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpOZXR3b3JrUHJv
Y2Vzczo6UmVnaXN0ZXJVUkxTY2hlbWVBc05vQWNjZXNzKHVybFNjaGVtZSkpOworfQorCit2b2lk
IFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKGNvbnN0
IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAgIG1fc2NoZW1lc1RvUmVnaXN0ZXJBc0Rpc3BsYXlJ
c29sYXRlZC5hZGQodXJsU2NoZW1lKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6
OldlYlByb2Nlc3M6OlJlZ2lzdGVyVVJMU2NoZW1lQXNEaXNwbGF5SXNvbGF0ZWQodXJsU2NoZW1l
KSk7CisgICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpSZWdpc3RlclVSTFNjaGVtZUFzRGlzcGxheUlzb2xhdGVkKHVybFNjaGVtZSkpOworfQorCit2
b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCit7CisgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQ09SU0VuYWJs
ZWQuYWRkKHVybFNjaGVtZSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQ09SU0VuYWJsZWQodXJsU2NoZW1lKSk7CisgICAg
c2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3Rl
clVSTFNjaGVtZUFzQ09SU0VuYWJsZWQodXJsU2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyR2xvYmFsVVJMU2NoZW1lQXNIYXZpbmdDdXN0b21Qcm90b2NvbEhhbmRs
ZXJzKGNvbnN0IFN0cmluZyYgdXJsU2NoZW1lKQoreworICAgIGlmICghdXJsU2NoZW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBnbG9iYWxVUkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFu
ZGxlcnMoKS5hZGQodXJsU2NoZW1lKTsKKyAgICBmb3IgKGF1dG8qIHByb2Nlc3NQb29sIDogYWxs
UHJvY2Vzc1Bvb2xzKCkpCisgICAgICAgIHByb2Nlc3NQb29sLT5yZWdpc3RlclNjaGVtZUZvckN1
c3RvbVByb3RvY29sKHVybFNjaGVtZSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVn
aXN0ZXJHbG9iYWxVUkxTY2hlbWVBc0hhdmluZ0N1c3RvbVByb3RvY29sSGFuZGxlcnMoY29uc3Qg
U3RyaW5nJiB1cmxTY2hlbWUpCit7CisgICAgaWYgKCF1cmxTY2hlbWUpCisgICAgICAgIHJldHVy
bjsKKworICAgIGdsb2JhbFVSTFNjaGVtZXNXaXRoQ3VzdG9tUHJvdG9jb2xIYW5kbGVycygpLnJl
bW92ZSh1cmxTY2hlbWUpOworICAgIGZvciAoYXV0byogcHJvY2Vzc1Bvb2wgOiBhbGxQcm9jZXNz
UG9vbHMoKSkKKyAgICAgICAgcHJvY2Vzc1Bvb2wtPnVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Q
cm90b2NvbCh1cmxTY2hlbWUpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdpc3RlclVS
TFNjaGVtZUFzQ2FjaGVQYXJ0aXRpb25lZChjb25zdCBTdHJpbmcmIHVybFNjaGVtZSkKK3sKKyAg
ICBtX3NjaGVtZXNUb1JlZ2lzdGVyQXNDYWNoZVBhcnRpdGlvbmVkLmFkZCh1cmxTY2hlbWUpOwor
ICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6UmVnaXN0ZXJVUkxT
Y2hlbWVBc0NhY2hlUGFydGl0aW9uZWQodXJsU2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnJlZ2lzdGVyVVJMU2NoZW1lU2VydmljZVdvcmtlcnNDYW5IYW5kbGUoY29uc3QgU3Ry
aW5nJiB1cmxTY2hlbWUpCit7CisgICAgbV9zY2hlbWVzU2VydmljZVdvcmtlcnNDYW5IYW5kbGUu
YWRkKHVybFNjaGVtZSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpBdXhpbGlh
cnlQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZVNlcnZpY2VXb3JrZXJzQ2FuSGFuZGxlKHVybFNj
aGVtZSkpOworICAgIGlmIChtX25ldHdvcmtQcm9jZXNzKQorICAgICAgICBtX25ldHdvcmtQcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpBdXhpbGlhcnlQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZVNl
cnZpY2VXb3JrZXJzQ2FuSGFuZGxlKHVybFNjaGVtZSksIDApOworfQorCit2b2lkIFdlYlByb2Nl
c3NQb29sOjpyZWdpc3RlclVSTFNjaGVtZUFzQ2FuRGlzcGxheU9ubHlJZkNhblJlcXVlc3QoY29u
c3QgU3RyaW5nJiB1cmxTY2hlbWUpCit7CisgICAgbV9zY2hlbWVzVG9SZWdpc3RlckFzQ2FuRGlz
cGxheU9ubHlJZkNhblJlcXVlc3QuYWRkKHVybFNjaGVtZSk7CisgICAgc2VuZFRvQWxsUHJvY2Vz
c2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQ2FuRGlzcGxheU9u
bHlJZkNhblJlcXVlc3QodXJsU2NoZW1lKSk7CisgICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3Mo
TWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpSZWdpc3RlclVSTFNjaGVtZUFzQ2FuRGlzcGxheU9u
bHlJZkNhblJlcXVlc3QodXJsU2NoZW1lKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVw
ZGF0ZU1heFN1c3BlbmRlZFBhZ2VDb3VudCgpCit7CisgICAgdW5zaWduZWQgZHVtbXkgPSAwOwor
ICAgIFNlY29uZHMgZHVtbXlJbnRlcnZhbDsKKyAgICB1bnNpZ25lZCBwYWdlQ2FjaGVTaXplID0g
MDsKKyAgICBjYWxjdWxhdGVNZW1vcnlDYWNoZVNpemVzKG1fY29uZmlndXJhdGlvbi0+Y2FjaGVN
b2RlbCgpLCBkdW1teSwgZHVtbXksIGR1bW15LCBkdW1teUludGVydmFsLCBwYWdlQ2FjaGVTaXpl
KTsKKworICAgIG1fbWF4U3VzcGVuZGVkUGFnZUNvdW50ID0gcGFnZUNhY2hlU2l6ZTsKKworICAg
IHdoaWxlIChtX3N1c3BlbmRlZFBhZ2VzLnNpemUoKSA+IG1fbWF4U3VzcGVuZGVkUGFnZUNvdW50
KQorICAgICAgICBtX3N1c3BlbmRlZFBhZ2VzLnJlbW92ZUZpcnN0KCk7Cit9CisKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldENhY2hlTW9kZWwoQ2FjaGVNb2RlbCBjYWNoZU1vZGVsKQoreworICAg
IG1fY29uZmlndXJhdGlvbi0+c2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKTsKKyAgICB1cGRhdGVN
YXhTdXNwZW5kZWRQYWdlQ291bnQoKTsKKworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdl
czo6V2ViUHJvY2Vzczo6U2V0Q2FjaGVNb2RlbChjYWNoZU1vZGVsKSk7CisKKyAgICBpZiAobV9u
ZXR3b3JrUHJvY2VzcykKKyAgICAgICAgbV9uZXR3b3JrUHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
TmV0d29ya1Byb2Nlc3M6OlNldENhY2hlTW9kZWwoY2FjaGVNb2RlbCksIDApOworfQorCit2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXREZWZhdWx0UmVxdWVzdFRpbWVvdXRJbnRlcnZhbChkb3VibGUg
dGltZW91dEludGVydmFsKQoreworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2Vi
UHJvY2Vzczo6U2V0RGVmYXVsdFJlcXVlc3RUaW1lb3V0SW50ZXJ2YWwodGltZW91dEludGVydmFs
KSk7Cit9CisKK0Rvd25sb2FkUHJveHkmIFdlYlByb2Nlc3NQb29sOjpjcmVhdGVEb3dubG9hZFBy
b3h5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgV2ViUGFnZVByb3h5KiBvcmlnaW5h
dGluZ1BhZ2UpCit7CisgICAgYXV0byYgZG93bmxvYWRQcm94eSA9IGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuY3JlYXRlRG93bmxvYWRQcm94eShyZXF1ZXN0KTsKKyAgICBkb3dubG9hZFByb3h5LnNl
dE9yaWdpbmF0aW5nUGFnZShvcmlnaW5hdGluZ1BhZ2UpOworICAgIHJldHVybiBkb3dubG9hZFBy
b3h5OworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW50aGVzaXplQXBwSXNCYWNrZ3JvdW5k
KGJvb2wgYmFja2dyb3VuZCkKK3sKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bnRoZXNp
emVBcHBJc0JhY2tncm91bmQoYmFja2dyb3VuZCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmFkZE1lc3NhZ2VSZWNlaXZlcihJUEM6OlN0cmluZ1JlZmVyZW5jZSBtZXNzYWdlUmVjZWl2ZXJO
YW1lLCBJUEM6Ok1lc3NhZ2VSZWNlaXZlciYgbWVzc2FnZVJlY2VpdmVyKQoreworICAgIG1fbWVz
c2FnZVJlY2VpdmVyTWFwLmFkZE1lc3NhZ2VSZWNlaXZlcihtZXNzYWdlUmVjZWl2ZXJOYW1lLCBt
ZXNzYWdlUmVjZWl2ZXIpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRNZXNzYWdlUmVj
ZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJlY2VpdmVyTmFtZSwgdWludDY0X3Qg
ZGVzdGluYXRpb25JRCwgSVBDOjpNZXNzYWdlUmVjZWl2ZXImIG1lc3NhZ2VSZWNlaXZlcikKK3sK
KyAgICBtX21lc3NhZ2VSZWNlaXZlck1hcC5hZGRNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2Vp
dmVyTmFtZSwgZGVzdGluYXRpb25JRCwgbWVzc2FnZVJlY2VpdmVyKTsKK30KKwordm9pZCBXZWJQ
cm9jZXNzUG9vbDo6cmVtb3ZlTWVzc2FnZVJlY2VpdmVyKElQQzo6U3RyaW5nUmVmZXJlbmNlIG1l
c3NhZ2VSZWNlaXZlck5hbWUpCit7CisgICAgbV9tZXNzYWdlUmVjZWl2ZXJNYXAucmVtb3ZlTWVz
c2FnZVJlY2VpdmVyKG1lc3NhZ2VSZWNlaXZlck5hbWUpOworfQorCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpyZW1vdmVNZXNzYWdlUmVjZWl2ZXIoSVBDOjpTdHJpbmdSZWZlcmVuY2UgbWVzc2FnZVJl
Y2VpdmVyTmFtZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCkKK3sKKyAgICBtX21lc3NhZ2VSZWNl
aXZlck1hcC5yZW1vdmVNZXNzYWdlUmVjZWl2ZXIobWVzc2FnZVJlY2VpdmVyTmFtZSwgZGVzdGlu
YXRpb25JRCk7Cit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6OmRpc3BhdGNoTWVzc2FnZShJUEM6
OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIElQQzo6RGVjb2RlciYgZGVjb2RlcikKK3sKKyAgICBy
ZXR1cm4gbV9tZXNzYWdlUmVjZWl2ZXJNYXAuZGlzcGF0Y2hNZXNzYWdlKGNvbm5lY3Rpb24sIGRl
Y29kZXIpOworfQorCitib29sIFdlYlByb2Nlc3NQb29sOjpkaXNwYXRjaFN5bmNNZXNzYWdlKElQ
Qzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbiwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyLCBzdGQ6OnVu
aXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYgcmVwbHlFbmNvZGVyKQoreworICAgIHJldHVybiBtX21l
c3NhZ2VSZWNlaXZlck1hcC5kaXNwYXRjaFN5bmNNZXNzYWdlKGNvbm5lY3Rpb24sIGRlY29kZXIs
IHJlcGx5RW5jb2Rlcik7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEVuaGFuY2VkQWNj
ZXNzaWJpbGl0eShib29sIGZsYWcpCit7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzOjpTZXRFbmhhbmNlZEFjY2Vzc2liaWxpdHkoZmxhZykpOworfQorICAgIAor
dm9pZCBXZWJQcm9jZXNzUG9vbDo6c3RhcnRNZW1vcnlTYW1wbGVyKGNvbnN0IGRvdWJsZSBpbnRl
cnZhbCkKK3sgICAgCisgICAgLy8gRm9yIG5ldyBXZWJQcm9jZXNzZXMgd2Ugd2lsbCBhbHNvIHdh
bnQgdG8gc3RhcnQgdGhlIE1lbW9yeSBTYW1wbGVyCisgICAgbV9tZW1vcnlTYW1wbGVyRW5hYmxl
ZCA9IHRydWU7CisgICAgbV9tZW1vcnlTYW1wbGVySW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICAK
KyAgICAvLyBGb3IgVUlQcm9jZXNzCisjaWYgRU5BQkxFKE1FTU9SWV9TQU1QTEVSKQorICAgIFdl
Yk1lbW9yeVNhbXBsZXI6OnNpbmdsZXRvbigpLT5zdGFydChpbnRlcnZhbCk7CisjZW5kaWYKKyAg
ICAKKyAgICAvLyBGb3IgV2ViUHJvY2VzcworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBz
YW1wbGVMb2dTYW5kYm94SGFuZGxlOyAgICAKKyAgICBXYWxsVGltZSBub3cgPSBXYWxsVGltZTo6
bm93KCk7CisgICAgU3RyaW5nIHNhbXBsZUxvZ0ZpbGVQYXRoID0gbWFrZVN0cmluZygiV2ViUHJv
Y2VzcyIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obm93LnNlY29uZHNTaW5jZUVw
b2NoKCkuc2Vjb25kcygpKSk7CisgICAgc2FtcGxlTG9nRmlsZVBhdGggPSBTYW5kYm94RXh0ZW5z
aW9uOjpjcmVhdGVIYW5kbGVGb3JUZW1wb3JhcnlGaWxlKHNhbXBsZUxvZ0ZpbGVQYXRoLCBTYW5k
Ym94RXh0ZW5zaW9uOjpUeXBlOjpSZWFkV3JpdGUsIHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUpOwor
ICAgIAorICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U3RhcnRN
ZW1vcnlTYW1wbGVyKHNhbXBsZUxvZ1NhbmRib3hIYW5kbGUsIHNhbXBsZUxvZ0ZpbGVQYXRoLCBp
bnRlcnZhbCkpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzdG9wTWVtb3J5U2FtcGxlcigp
Cit7ICAgIAorICAgIC8vIEZvciBXZWJQcm9jZXNzCisgICAgbV9tZW1vcnlTYW1wbGVyRW5hYmxl
ZCA9IGZhbHNlOworICAgIAorICAgIC8vIEZvciBVSVByb2Nlc3MKKyNpZiBFTkFCTEUoTUVNT1JZ
X1NBTVBMRVIpCisgICAgV2ViTWVtb3J5U2FtcGxlcjo6c2luZ2xldG9uKCktPnN0b3AoKTsKKyNl
bmRpZgorCisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpTdG9w
TWVtb3J5U2FtcGxlcigpKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6dXNlVGVzdGluZ05l
dHdvcmtTZXNzaW9uKCkKK3sKKyAgICBBU1NFUlQobV9wcm9jZXNzZXMuaXNFbXB0eSgpKTsKKyAg
ICBBU1NFUlQoIW1fbmV0d29ya1Byb2Nlc3MpOworCisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3Mp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9wcm9jZXNzZXMuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX3Nob3VsZFVzZVRlc3RpbmdOZXR3b3JrU2Vzc2lvbiA9IHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+Cit2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoVCYmIG1lc3NhZ2UsIFUmJiByZXBs
eSkKK3sKKyAgICBpZiAobV9uZXR3b3JrUHJvY2VzcyAmJiBtX25ldHdvcmtQcm9jZXNzLT5jYW5T
ZW5kTWVzc2FnZSgpKQorICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5zZW5kU3luYyhzdGQ6OmZv
cndhcmQ8VD4obWVzc2FnZSksIHN0ZDo6Zm9yd2FyZDxVPihyZXBseSksIDApOworfQorCit2b2lk
IFdlYlByb2Nlc3NQb29sOjpzZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChi
b29sIGFsbG93cykKK3sKKyAgICBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6
Ok5ldHdvcmtQcm9jZXNzOjpTZXRBbGxvd3NBbnlTU0xDZXJ0aWZpY2F0ZUZvcldlYlNvY2tldChh
bGxvd3MpLCBNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldEFsbG93c0FueVNTTENlcnRpZmlj
YXRlRm9yV2ViU29ja2V0OjpSZXBseSgpKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xl
YXJDYWNoZWRDcmVkZW50aWFscygpCit7CisgICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAg
ICAgIG1fbmV0d29ya1Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpDbGVh
ckNhY2hlZENyZWRlbnRpYWxzKCksIDApOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjp0ZXJt
aW5hdGVOZXR3b3JrUHJvY2VzcygpCit7CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgbV9uZXR3b3JrUHJvY2Vzcy0+dGVybWluYXRlKCk7Cisg
ICAgbV9uZXR3b3JrUHJvY2VzcyA9IG51bGxwdHI7CisgICAgbV9kaWROZXR3b3JrUHJvY2Vzc0Ny
YXNoID0gdHJ1ZTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6dGVybWluYXRlU2VydmljZVdv
cmtlclByb2Nlc3NlcygpCit7CisjaWYgRU5BQkxFKFNFUlZJQ0VfV09SS0VSKQorICAgIGF1dG8g
cHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpOworICAgIHdoaWxlICghbV9zZXJ2aWNlV29y
a2VyUHJvY2Vzc2VzLmlzRW1wdHkoKSkKKyAgICAgICAgbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2Vz
LmJlZ2luKCktPnZhbHVlLT5yZXF1ZXN0VGVybWluYXRpb24oUHJvY2Vzc1Rlcm1pbmF0aW9uUmVh
c29uOjpSZXF1ZXN0ZWRCeUNsaWVudCk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQcm9jZXNzUG9v
bDo6c3luY05ldHdvcmtQcm9jZXNzQ29va2llcygpCit7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nl
c3MoKS5zeW5jQWxsQ29va2llcygpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJREJQ
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKK3sKKyNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKKyAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQ
cm9jZXNzOjpTZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSksIDApOworI2VuZGlmCit9CisKK3Zv
aWQgV2ViUHJvY2Vzc1Bvb2w6OmFsbG93U3BlY2lmaWNIVFRQU0NlcnRpZmljYXRlRm9ySG9zdChj
b25zdCBXZWJDZXJ0aWZpY2F0ZUluZm8qIGNlcnRpZmljYXRlLCBjb25zdCBTdHJpbmcmIGhvc3Qp
Cit7CisgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKTsKKyAgICBtX25ldHdvcmtQcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6QWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNh
dGVGb3JIb3N0KGNlcnRpZmljYXRlLT5jZXJ0aWZpY2F0ZUluZm8oKSwgaG9zdCksIDApOworfQor
Cit2b2lkIFdlYlByb2Nlc3NQb29sOjp1cGRhdGVBdXRvbWF0aW9uQ2FwYWJpbGl0aWVzKCkgY29u
c3QKK3sKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikKKyAgICBJbnNwZWN0b3I6OlJlbW90
ZUluc3BlY3Rvcjo6c2luZ2xldG9uKCkuY2xpZW50Q2FwYWJpbGl0aWVzRGlkQ2hhbmdlKCk7Cisj
ZW5kaWYKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0QXV0b21hdGlvblNlc3Npb24oUmVm
UHRyPFdlYkF1dG9tYXRpb25TZXNzaW9uPiYmIGF1dG9tYXRpb25TZXNzaW9uKQoreworICAgIGlm
IChtX2F1dG9tYXRpb25TZXNzaW9uKQorICAgICAgICBtX2F1dG9tYXRpb25TZXNzaW9uLT5zZXRQ
cm9jZXNzUG9vbChudWxscHRyKTsKKyAgICAKKyAgICBtX2F1dG9tYXRpb25TZXNzaW9uID0gV1RG
TW92ZShhdXRvbWF0aW9uU2Vzc2lvbik7CisKKyNpZiBFTkFCTEUoUkVNT1RFX0lOU1BFQ1RPUikK
KyAgICBpZiAobV9hdXRvbWF0aW9uU2Vzc2lvbikgeworICAgICAgICBtX2F1dG9tYXRpb25TZXNz
aW9uLT5pbml0KCk7CisgICAgICAgIG1fYXV0b21hdGlvblNlc3Npb24tPnNldFByb2Nlc3NQb29s
KHRoaXMpOworCisgICAgICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6RW5zdXJlQXV0b21hdGlvblNlc3Npb25Qcm94eShtX2F1dG9tYXRpb25TZXNzaW9uLT5zZXNz
aW9uSWRlbnRpZmllcigpKSk7CisgICAgfSBlbHNlCisgICAgICAgIHNlbmRUb0FsbFByb2Nlc3Nl
cyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6RGVzdHJveUF1dG9tYXRpb25TZXNzaW9uUHJveHkoKSk7
CisjZW5kaWYKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SFRUUFBpcGVsaW5pbmdFbmFi
bGVkKGJvb2wgZW5hYmxlZCkKK3sKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXNvdXJjZVJl
cXVlc3Q6OnNldEhUVFBQaXBlbGluaW5nRW5hYmxlZChlbmFibGVkKTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGVuYWJsZWQpOworI2VuZGlmCit9CisKK2Jvb2wgV2ViUHJvY2Vzc1Bvb2w6Omh0
dHBQaXBlbGluaW5nRW5hYmxlZCgpIGNvbnN0Cit7CisjaWYgUExBVEZPUk0oQ09DT0EpCisgICAg
cmV0dXJuIFJlc291cmNlUmVxdWVzdDo6aHR0cFBpcGVsaW5pbmdFbmFibGVkKCk7CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpnZXRT
dGF0aXN0aWNzKHVpbnQzMl90IHN0YXRpc3RpY3NNYXNrLCBGdW5jdGlvbjx2b2lkIChBUEk6OkRp
Y3Rpb25hcnkqLCBDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQorewor
ICAgIGlmICghc3RhdGlzdGljc01hc2spIHsKKyAgICAgICAgY2FsbGJhY2tGdW5jdGlvbihudWxs
cHRyLCBDYWxsYmFja0Jhc2U6OkVycm9yOjpVbmtub3duKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gcmVxdWVzdCA9IFN0YXRpc3RpY3NSZXF1ZXN0OjpjcmVhdGUoRGljdGlv
bmFyeUNhbGxiYWNrOjpjcmVhdGUoV1RGTW92ZShjYWxsYmFja0Z1bmN0aW9uKSkpOworCisgICAg
aWYgKHN0YXRpc3RpY3NNYXNrICYgU3RhdGlzdGljc1JlcXVlc3RUeXBlV2ViQ29udGVudCkKKyAg
ICAgICAgcmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKHJlcXVlc3QuZ2V0KCkpOworICAgIAor
ICAgIGlmIChzdGF0aXN0aWNzTWFzayAmIFN0YXRpc3RpY3NSZXF1ZXN0VHlwZU5ldHdvcmtpbmcp
CisgICAgICAgIHJlcXVlc3ROZXR3b3JraW5nU3RhdGlzdGljcyhyZXF1ZXN0LmdldCgpKTsKK30K
Kwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVxdWVzdFdlYkNvbnRlbnRTdGF0aXN0aWNzKFN0YXRp
c3RpY3NSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIC8vIEZJWE1FIChNdWx0aS1XZWJQcm9jZXNz
KSA8cmRhcjovL3Byb2JsZW0vMTMyMDAwNTk+OiBNYWtlIGdldHRpbmcgc3RhdGlzdGljcyBmcm9t
IG11bHRpcGxlIFdlYlByb2Nlc3NlcyB3b3JrLgorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpy
ZXF1ZXN0TmV0d29ya2luZ1N0YXRpc3RpY3MoU3RhdGlzdGljc1JlcXVlc3QmIHJlcXVlc3QpCit7
CisgICAgaWYgKCFtX25ldHdvcmtQcm9jZXNzKSB7CisgICAgICAgIExPR19FUlJPUigiQXR0ZW1w
dCB0byBnZXQgTmV0d29ya1Byb2Nlc3Mgc3RhdGlzdGljcyBidXQgdGhlIE5ldHdvcmtQcm9jZXNz
IGlzIHVuYXZhaWxhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB1aW50NjRf
dCByZXF1ZXN0SUQgPSByZXF1ZXN0LmFkZE91dHN0YW5kaW5nUmVxdWVzdCgpOworICAgIG1fc3Rh
dGlzdGljc1JlcXVlc3RzLnNldChyZXF1ZXN0SUQsICZyZXF1ZXN0KTsKKyAgICBtX25ldHdvcmtQ
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6R2V0TmV0d29ya1Byb2Nlc3NT
dGF0aXN0aWNzKHJlcXVlc3RJRCksIDApOworfQorCitzdGF0aWMgV2ViUHJvY2Vzc1Byb3h5KiB3
ZWJQcm9jZXNzUHJveHlGcm9tQ29ubmVjdGlvbihJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24s
IGNvbnN0IFZlY3RvcjxSZWZQdHI8V2ViUHJvY2Vzc1Byb3h5Pj4mIHByb2Nlc3NlcykKK3sKKyAg
ICBmb3IgKGF1dG8mIHByb2Nlc3MgOiBwcm9jZXNzZXMpIHsKKyAgICAgICAgaWYgKHByb2Nlc3Mt
Pmhhc0Nvbm5lY3Rpb24oY29ubmVjdGlvbikpCisgICAgICAgICAgICByZXR1cm4gcHJvY2Vzcy5n
ZXQoKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6aGFuZGxlTWVzc2FnZShJUEM6OkNvbm5l
Y3Rpb24mIGNvbm5lY3Rpb24sIGNvbnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFdlYktp
dDo6VXNlckRhdGEmIG1lc3NhZ2VCb2R5KQoreworICAgIGF1dG8qIHdlYlByb2Nlc3NQcm94eSA9
IHdlYlByb2Nlc3NQcm94eUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24sIG1fcHJvY2Vzc2VzKTsK
KyAgICBpZiAoIXdlYlByb2Nlc3NQcm94eSkKKyAgICAgICAgcmV0dXJuOworICAgIG1faW5qZWN0
ZWRCdW5kbGVDbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKCp0aGlz
LCBtZXNzYWdlTmFtZSwgd2ViUHJvY2Vzc1Byb3h5LT50cmFuc2Zvcm1IYW5kbGVzVG9PYmplY3Rz
KG1lc3NhZ2VCb2R5Lm9iamVjdCgpKS5nZXQoKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmhhbmRsZVN5bmNocm9ub3VzTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mIGNvbm5lY3Rpb24sIGNv
bnN0IFN0cmluZyYgbWVzc2FnZU5hbWUsIGNvbnN0IFVzZXJEYXRhJiBtZXNzYWdlQm9keSwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChVc2VyRGF0YSYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBhdXRvKiB3ZWJQcm9jZXNzUHJveHkgPSB3ZWJQcm9jZXNzUHJveHlGcm9tQ29ubmVjdGlv
bihjb25uZWN0aW9uLCBtX3Byb2Nlc3Nlcyk7CisgICAgaWYgKCF3ZWJQcm9jZXNzUHJveHkpCisg
ICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcih7IH0pOworCisgICAgUmVmUHRyPEFQSTo6
T2JqZWN0PiByZXR1cm5EYXRhOworICAgIG1faW5qZWN0ZWRCdW5kbGVDbGllbnQtPmRpZFJlY2Vp
dmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoKnRoaXMsIG1lc3NhZ2VOYW1l
LCB3ZWJQcm9jZXNzUHJveHktPnRyYW5zZm9ybUhhbmRsZXNUb09iamVjdHMobWVzc2FnZUJvZHku
b2JqZWN0KCkpLmdldCgpLCByZXR1cm5EYXRhKTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihVc2Vy
RGF0YSh3ZWJQcm9jZXNzUHJveHktPnRyYW5zZm9ybU9iamVjdHNUb0hhbmRsZXMocmV0dXJuRGF0
YS5nZXQoKSkpKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6ZGlkR2V0U3RhdGlzdGljcyhj
b25zdCBTdGF0aXN0aWNzRGF0YSYgc3RhdGlzdGljc0RhdGEsIHVpbnQ2NF90IHJlcXVlc3RJRCkK
K3sKKyAgICBSZWZQdHI8U3RhdGlzdGljc1JlcXVlc3Q+IHJlcXVlc3QgPSBtX3N0YXRpc3RpY3NS
ZXF1ZXN0cy50YWtlKHJlcXVlc3RJRCk7CisgICAgaWYgKCFyZXF1ZXN0KSB7CisgICAgICAgIExP
R19FUlJPUigiQ2Fubm90IHJlcG9ydCBuZXR3b3JraW5nIHN0YXRpc3RpY3MuIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICByZXF1ZXN0LT5jb21wbGV0ZWRSZXF1ZXN0KHJlcXVlc3RJ
RCwgc3RhdGlzdGljc0RhdGEpOworfQorCisjaWYgRU5BQkxFKEdBTUVQQUQpCisKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnN0YXJ0ZWRVc2luZ0dhbWVwYWRzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVj
dGlvbikKK3sKKyAgICBhdXRvKiBwcm94eSA9IHdlYlByb2Nlc3NQcm94eUZyb21Db25uZWN0aW9u
KGNvbm5lY3Rpb24sIG1fcHJvY2Vzc2VzKTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1
cm47CisKKyAgICBib29sIHdlcmVBbnlQcm9jZXNzZXNVc2luZ0dhbWVwYWRzID0gIW1fcHJvY2Vz
c2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCk7CisKKyAgICBBU1NFUlQoIW1fcHJvY2Vzc2VzVXNp
bmdHYW1lcGFkcy5jb250YWlucyhwcm94eSkpOworICAgIG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFk
cy5hZGQocHJveHkpOworCisgICAgaWYgKCF3ZXJlQW55UHJvY2Vzc2VzVXNpbmdHYW1lcGFkcykK
KyAgICAgICAgVUlHYW1lcGFkUHJvdmlkZXI6OnNpbmdsZXRvbigpLnByb2Nlc3NQb29sU3RhcnRl
ZFVzaW5nR2FtZXBhZHMoKnRoaXMpOworCisgICAgcHJveHktPnNlbmQoTWVzc2FnZXM6OldlYlBy
b2Nlc3M6OlNldEluaXRpYWxHYW1lcGFkcyhVSUdhbWVwYWRQcm92aWRlcjo6c2luZ2xldG9uKCku
c25hcHNob3RHYW1lcGFkcygpKSwgMCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN0b3Bw
ZWRVc2luZ0dhbWVwYWRzKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlvbikKK3sKKyAgICBhdXRv
KiBwcm94eSA9IHdlYlByb2Nlc3NQcm94eUZyb21Db25uZWN0aW9uKGNvbm5lY3Rpb24sIG1fcHJv
Y2Vzc2VzKTsKKyAgICBpZiAoIXByb3h5KQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bV9wcm9jZXNzZXNVc2luZ0dhbWVwYWRzLmNvbnRhaW5zKHByb3h5KSk7CisgICAgcHJvY2Vzc1N0
b3BwZWRVc2luZ0dhbWVwYWRzKCpwcm94eSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NTdG9wcGVkVXNpbmdHYW1lcGFkcyhXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCit7Cisg
ICAgYm9vbCB3ZXJlQW55UHJvY2Vzc2VzVXNpbmdHYW1lcGFkcyA9ICFtX3Byb2Nlc3Nlc1VzaW5n
R2FtZXBhZHMuaXNFbXB0eSgpOworCisgICAgQVNTRVJUKG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFk
cy5jb250YWlucygmcHJvY2VzcykpOworICAgIG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5yZW1v
dmUoJnByb2Nlc3MpOworCisgICAgaWYgKHdlcmVBbnlQcm9jZXNzZXNVc2luZ0dhbWVwYWRzICYm
IG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcy5pc0VtcHR5KCkpCisgICAgICAgIFVJR2FtZXBhZFBy
b3ZpZGVyOjpzaW5nbGV0b24oKS5wcm9jZXNzUG9vbFN0b3BwZWRVc2luZ0dhbWVwYWRzKCp0aGlz
KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2FtZXBhZENvbm5lY3RlZChjb25zdCBVSUdh
bWVwYWQmIGdhbWVwYWQpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXNV
c2luZ0dhbWVwYWRzKQorICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNz
OjpHYW1lcGFkQ29ubmVjdGVkKGdhbWVwYWQuZnVsbEdhbWVwYWREYXRhKCkpLCAwKTsKK30KKwor
dm9pZCBXZWJQcm9jZXNzUG9vbDo6Z2FtZXBhZERpc2Nvbm5lY3RlZChjb25zdCBVSUdhbWVwYWQm
IGdhbWVwYWQpCit7CisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogbV9wcm9jZXNzZXNVc2luZ0dh
bWVwYWRzKQorICAgICAgICBwcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpHYW1l
cGFkRGlzY29ubmVjdGVkKGdhbWVwYWQuaW5kZXgoKSksIDApOworfQorCit2b2lkIFdlYlByb2Nl
c3NQb29sOjpzZXRJbml0aWFsQ29ubmVjdGVkR2FtZXBhZHMoY29uc3QgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxVSUdhbWVwYWQ+PiYgZ2FtZXBhZHMpCit7CisgICAgVmVjdG9yPEdhbWVwYWREYXRh
PiBnYW1lcGFkRGF0YXM7CisgICAgZ2FtZXBhZERhdGFzLmdyb3coZ2FtZXBhZHMuc2l6ZSgpKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdhbWVwYWRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmICghZ2FtZXBhZHNbaV0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZ2Ft
ZXBhZERhdGFzW2ldID0gZ2FtZXBhZHNbaV0tPmZ1bGxHYW1lcGFkRGF0YSgpOworICAgIH0KKwor
ICAgIGZvciAoYXV0byYgcHJvY2VzcyA6IG1fcHJvY2Vzc2VzVXNpbmdHYW1lcGFkcykKKyAgICAg
ICAgcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0SW5pdGlhbEdhbWVwYWRz
KGdhbWVwYWREYXRhcyksIDApOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEdBTUVQQUQpCisKK3Zv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnNldEphdmFTY3JpcHRDb25maWd1cmF0aW9uRmlsZUVuYWJsZWQo
Ym9vbCBmbGFnKQoreworICAgIG1famF2YVNjcmlwdENvbmZpZ3VyYXRpb25GaWxlRW5hYmxlZCA9
IGZsYWc7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmdhcmJhZ2VDb2xsZWN0SmF2YVNjcmlw
dE9iamVjdHMoKQoreworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vz
czo6R2FyYmFnZUNvbGxlY3RKYXZhU2NyaXB0T2JqZWN0cygpKTsKK30KKwordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6c2V0SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoYm9vbCBm
bGFnKQoreworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0
SmF2YVNjcmlwdEdhcmJhZ2VDb2xsZWN0b3JUaW1lckVuYWJsZWQoZmxhZykpOworfQorCit2b2lk
IFdlYlByb2Nlc3NQb29sOjphZGRQbHVnSW5BdXRvU3RhcnRPcmlnaW5IYXNoKGNvbnN0IFN0cmlu
ZyYgcGFnZU9yaWdpbiwgdW5zaWduZWQgcGx1Z0luT3JpZ2luSGFzaCwgUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklEKQoreworICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYWRkQXV0b1N0YXJ0
T3JpZ2luSGFzaChwYWdlT3JpZ2luLCBwbHVnSW5PcmlnaW5IYXNoLCBzZXNzaW9uSUQpOworfQor
Cit2b2lkIFdlYlByb2Nlc3NQb29sOjpwbHVnSW5EaWRSZWNlaXZlVXNlckludGVyYWN0aW9uKHVu
c2lnbmVkIHBsdWdJbk9yaWdpbkhhc2gsIFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCkKK3sKKyAg
ICBtX3BsdWdJbkF1dG9TdGFydFByb3ZpZGVyLmRpZFJlY2VpdmVVc2VySW50ZXJhY3Rpb24ocGx1
Z0luT3JpZ2luSGFzaCwgc2Vzc2lvbklEKTsKK30KKworUmVmPEFQSTo6RGljdGlvbmFyeT4gV2Vi
UHJvY2Vzc1Bvb2w6OnBsdWdJbkF1dG9TdGFydE9yaWdpbkhhc2hlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuYXV0b1N0YXJ0T3JpZ2luc1RhYmxlQ29w
eSgpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5I
YXNoZXMoQVBJOjpEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIG1fcGx1Z0luQXV0b1N0
YXJ0UHJvdmlkZXIuc2V0QXV0b1N0YXJ0T3JpZ2luc1RhYmxlKGRpY3Rpb25hcnkpOworfQorCit2
b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRQbHVnSW5BdXRvU3RhcnRPcmlnaW5zKEFQSTo6QXJyYXkm
IGFycmF5KQoreworICAgIG1fcGx1Z0luQXV0b1N0YXJ0UHJvdmlkZXIuc2V0QXV0b1N0YXJ0T3Jp
Z2luc0FycmF5KGFycmF5KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0UGx1Z0luQXV0
b1N0YXJ0T3JpZ2luc0ZpbHRlcmluZ091dEVudHJpZXNBZGRlZEFmdGVyVGltZShBUEk6OkRpY3Rp
b25hcnkmIGRpY3Rpb25hcnksIFdhbGxUaW1lIHRpbWUpCit7CisgICAgbV9wbHVnSW5BdXRvU3Rh
cnRQcm92aWRlci5zZXRBdXRvU3RhcnRPcmlnaW5zRmlsdGVyaW5nT3V0RW50cmllc0FkZGVkQWZ0
ZXJUaW1lKGRpY3Rpb25hcnksIHRpbWUpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpyZWdp
c3RlclNjaGVtZUZvckN1c3RvbVByb3RvY29sKGNvbnN0IFN0cmluZyYgc2NoZW1lKQoreworI2lm
IEVOQUJMRShMRUdBQ1lfQ1VTVE9NX1BST1RPQ09MX01BTkFHRVIpCisgICAgaWYgKCFnbG9iYWxV
UkxTY2hlbWVzV2l0aEN1c3RvbVByb3RvY29sSGFuZGxlcnMoKS5jb250YWlucyhzY2hlbWUpKQor
ICAgICAgICBtX3VybFNjaGVtZXNSZWdpc3RlcmVkRm9yQ3VzdG9tUHJvdG9jb2xzLmFkZChzY2hl
bWUpOworICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzKE1lc3NhZ2VzOjpMZWdhY3lDdXN0b21Q
cm90b2NvbE1hbmFnZXI6OlJlZ2lzdGVyU2NoZW1lKHNjaGVtZSkpOworI2VuZGlmCit9CisKK3Zv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnVucmVnaXN0ZXJTY2hlbWVGb3JDdXN0b21Qcm90b2NvbChjb25z
dCBTdHJpbmcmIHNjaGVtZSkKK3sKKyNpZiBFTkFCTEUoTEVHQUNZX0NVU1RPTV9QUk9UT0NPTF9N
QU5BR0VSKQorICAgIG1fdXJsU2NoZW1lc1JlZ2lzdGVyZWRGb3JDdXN0b21Qcm90b2NvbHMucmVt
b3ZlKHNjaGVtZSk7CisgICAgc2VuZFRvTmV0d29ya2luZ1Byb2Nlc3MoTWVzc2FnZXM6OkxlZ2Fj
eUN1c3RvbVByb3RvY29sTWFuYWdlcjo6VW5yZWdpc3RlclNjaGVtZShzY2hlbWUpKTsKKyNlbmRp
ZgorfQorCisjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCit2b2lkIFdlYlByb2Nlc3NQ
b29sOjpzZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWN5KFdlYkNvcmU6OlBsdWdpbkxvYWRDbGllbnRQ
b2xpY3kgcG9saWN5LCBjb25zdCBTdHJpbmcmIGhvc3QsIGNvbnN0IFN0cmluZyYgYnVuZGxlSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uU3RyaW5nKQoreworICAgIGF1dG8mIHBvbGlj
aWVzRm9ySG9zdCA9IG1fcGx1Z2luTG9hZENsaWVudFBvbGljaWVzLmVuc3VyZShob3N0LCBbXSB7
IHJldHVybiBIYXNoTWFwPFN0cmluZywgSGFzaE1hcDxTdHJpbmcsIHVpbnQ4X3Q+PigpOyB9KS5p
dGVyYXRvci0+dmFsdWU7CisgICAgYXV0byYgdmVyc2lvbnNUb1BvbGljaWVzID0gcG9saWNpZXNG
b3JIb3N0LmVuc3VyZShidW5kbGVJZGVudGlmaWVyLCBbXSB7IHJldHVybiBIYXNoTWFwPFN0cmlu
ZywgdWludDhfdD4oKTsgfSkuaXRlcmF0b3ItPnZhbHVlOworICAgIHZlcnNpb25zVG9Qb2xpY2ll
cy5zZXQodmVyc2lvblN0cmluZywgcG9saWN5KTsKKworICAgIHNlbmRUb0FsbFByb2Nlc3NlcyhN
ZXNzYWdlczo6V2ViUHJvY2Vzczo6U2V0UGx1Z2luTG9hZENsaWVudFBvbGljeShwb2xpY3ksIGhv
c3QsIGJ1bmRsZUlkZW50aWZpZXIsIHZlcnNpb25TdHJpbmcpKTsKK30KKwordm9pZCBXZWJQcm9j
ZXNzUG9vbDo6cmVzZXRQbHVnaW5Mb2FkQ2xpZW50UG9saWNpZXMoSGFzaE1hcDxTdHJpbmcsIEhh
c2hNYXA8U3RyaW5nLCBIYXNoTWFwPFN0cmluZywgdWludDhfdD4+PiYmIHBsdWdpbkxvYWRDbGll
bnRQb2xpY2llcykKK3sKKyAgICBtX3BsdWdpbkxvYWRDbGllbnRQb2xpY2llcyA9IFdURk1vdmUo
cGx1Z2luTG9hZENsaWVudFBvbGljaWVzKTsKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2Fn
ZXM6OldlYlByb2Nlc3M6OlJlc2V0UGx1Z2luTG9hZENsaWVudFBvbGljaWVzKG1fcGx1Z2luTG9h
ZENsaWVudFBvbGljaWVzKSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyUGx1Z2lu
Q2xpZW50UG9saWNpZXMoKQoreworICAgIG1fcGx1Z2luTG9hZENsaWVudFBvbGljaWVzLmNsZWFy
KCk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpDbGVhclBs
dWdpbkNsaWVudFBvbGljaWVzKCkpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6
OmFkZFN1cHBvcnRlZFBsdWdpbihTdHJpbmcmJiBtYXRjaGluZ0RvbWFpbiwgU3RyaW5nJiYgbmFt
ZSwgSGFzaFNldDxTdHJpbmc+JiYgbWltZVR5cGVzLCBIYXNoU2V0PFN0cmluZz4gZXh0ZW5zaW9u
cykKK3sKKyNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKKyAgICBtX3BsdWdpbkluZm9T
dG9yZS5hZGRTdXBwb3J0ZWRQbHVnaW4oV1RGTW92ZShtYXRjaGluZ0RvbWFpbiksIFdURk1vdmUo
bmFtZSksIFdURk1vdmUobWltZVR5cGVzKSwgV1RGTW92ZShleHRlbnNpb25zKSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShtYXRjaGluZ0RvbWFpbik7CisgICAgVU5VU0VEX1BBUkFNKG5hbWUp
OworICAgIFVOVVNFRF9QQVJBTShtaW1lVHlwZXMpOworICAgIFVOVVNFRF9QQVJBTShleHRlbnNp
b25zKTsKKyNlbmRpZgorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpjbGVhclN1cHBvcnRlZFBs
dWdpbnMoKQoreworI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQorICAgIG1fcGx1Z2lu
SW5mb1N0b3JlLmNsZWFyU3VwcG9ydGVkUGx1Z2lucygpOworI2VuZGlmCit9CisKK3ZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnNldE1lbW9yeUNhY2hlRGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKK3sKKyAg
ICBtX21lbW9yeUNhY2hlRGlzYWJsZWQgPSBkaXNhYmxlZDsKKyAgICBzZW5kVG9BbGxQcm9jZXNz
ZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldE1lbW9yeUNhY2hlRGlzYWJsZWQoZGlzYWJsZWQp
KTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0Rm9udFdoaXRlbGlzdChBUEk6OkFycmF5
KiBhcnJheSkKK3sKKyAgICBtX2ZvbnRXaGl0ZWxpc3QuY2xlYXIoKTsKKyAgICBpZiAoYXJyYXkp
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheS0+c2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChBUEk6OlN0cmluZyogZm9udCA9IGFycmF5LT5hdDxBUEk6OlN0cmlu
Zz4oaSkpCisgICAgICAgICAgICAgICAgbV9mb250V2hpdGVsaXN0LmFwcGVuZChmb250LT5zdHJp
bmcoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnVwZGF0
ZUhpZGRlblBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlTGltaXQoKQoreworICAgIC8vIFdlJ3Jl
IGVzdGltYXRpbmcgYW4gdXBwZXIgYm91bmQgZm9yIGEgc2V0IG9mIGJhY2tncm91bmQgdGltZXIg
ZmlyZXMgZm9yIGEgcGFnZSB0byBiZSAyMDBtcworICAgIC8vIChpbmNsdWRpbmcgYWxsIHRpbWVy
IGZpcmVzLCBhbGwgcGFnaW5nLWluLCBhbmQgYW55IHJlc3VsdGluZyBHQykuIFRvIGVuc3VyZSB0
aGlzIGRvZXMgbm90CisgICAgLy8gcmVzdWx0IGluIG1vcmUgdGhhbiAxJSBDUFUgbG9hZCBhbGxv
dyBmb3Igb25lIHRpbWVyIGZpcmUgcGVyIDEwMHggdGhpcyBkdXJhdGlvbi4KKyAgICBzdGF0aWMg
aW50IG1heGltdW1UaW1lclRocm90dGxlUGVyUGFnZUluTVMgPSAyMDAgKiAxMDA7CisKKyAgICBp
bnQgbGltaXRJbk1pbGxpc2Vjb25kcyA9IG1heGltdW1UaW1lclRocm90dGxlUGVyUGFnZUluTVMg
KiBtX2hpZGRlblBhZ2VUaHJvdHRsaW5nQXV0b0luY3JlYXNlc0NvdW50ZXIudmFsdWUoKTsKKyAg
ICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlNldEhpZGRlblBhZ2VE
T01UaW1lclRocm90dGxpbmdJbmNyZWFzZUxpbWl0KGxpbWl0SW5NaWxsaXNlY29uZHMpKTsKK30K
Kwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVwb3J0V2ViQ29udGVudENQVVRpbWUoU2Vjb25kcyBj
cHVUaW1lLCB1aW50NjRfdCBhY3Rpdml0eVN0YXRlKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBpZiAobV9wZXJBY3Rpdml0eVN0YXRlQ1BVVXNhZ2VTYW1wbGVyKQorICAgICAgICBtX3BlckFj
dGl2aXR5U3RhdGVDUFVVc2FnZVNhbXBsZXItPnJlcG9ydFdlYkNvbnRlbnRDUFVUaW1lKGNwdVRp
bWUsIHN0YXRpY19jYXN0PFdlYkNvcmU6OkFjdGl2aXR5U3RhdGVGb3JDUFVTYW1wbGluZz4oYWN0
aXZpdHlTdGF0ZSkpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3B1VGltZSk7CisgICAgVU5V
U0VEX1BBUkFNKGFjdGl2aXR5U3RhdGUpOworI2VuZGlmCit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bv
b2w6OnVwZGF0ZVByb2Nlc3NBc3NlcnRpb25zKCkKK3sKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQorI2lmIEVOQUJMRShTRVJWSUNFX1dPUktFUikKKyAgICBhdXRvIHVwZGF0ZVNlcnZpY2VXb3Jr
ZXJQcm9jZXNzQXNzZXJ0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKCFtX3NlcnZpY2VXb3JrZXJQ
cm9jZXNzZXMuaXNFbXB0eSgpICYmIG1fZm9yZWdyb3VuZFdlYlByb2Nlc3NDb3VudGVyLnZhbHVl
KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZG8gYmV0dGVyIHRoYW4gdGhpcyBv
bmNlIHdlIGhhdmUgcHJvY2VzcyBwZXIgb3JpZ2luLgorICAgICAgICAgICAgZm9yIChhdXRvKiBz
ZXJ2aWNlV29ya2VyUHJvY2VzcyA6IG1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy52YWx1ZXMoKSkg
eworICAgICAgICAgICAgICAgIGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluID0gc2VydmljZVdvcmtl
clByb2Nlc3MtPnJlZ2lzdHJhYmxlRG9tYWluKCk7CisgICAgICAgICAgICAgICAgaWYgKCFtX2Zv
cmVncm91bmRUb2tlbnNGb3JTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmNvbnRhaW5zKHJlZ2lzdHJh
YmxlRG9tYWluKSkKKyAgICAgICAgICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5zRm9yU2Vy
dmljZVdvcmtlclByb2Nlc3Nlcy5hZGQocmVnaXN0cmFibGVEb21haW4sIHNlcnZpY2VXb3JrZXJQ
cm9jZXNzLT50aHJvdHRsZXIoKS5mb3JlZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1fYmFja2dyb3VuZFRva2Vuc0ZvclNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMuY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIW1fc2VydmljZVdvcmtlclByb2Nlc3Nlcy5pc0VtcHR5KCkgJiYgbV9iYWNrZ3JvdW5kV2Vi
UHJvY2Vzc0NvdW50ZXIudmFsdWUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBk
byBiZXR0ZXIgdGhhbiB0aGlzIG9uY2Ugd2UgaGF2ZSBwcm9jZXNzIHBlciBvcmlnaW4uCisgICAg
ICAgICAgICBmb3IgKGF1dG8qIHNlcnZpY2VXb3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2Vy
UHJvY2Vzc2VzLnZhbHVlcygpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgcmVnaXN0cmFibGVE
b21haW4gPSBzZXJ2aWNlV29ya2VyUHJvY2Vzcy0+cmVnaXN0cmFibGVEb21haW4oKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIW1fYmFja2dyb3VuZFRva2Vuc0ZvclNlcnZpY2VXb3JrZXJQcm9jZXNz
ZXMuY29udGFpbnMocmVnaXN0cmFibGVEb21haW4pKQorICAgICAgICAgICAgICAgICAgICBtX2Jh
Y2tncm91bmRUb2tlbnNGb3JTZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLmFkZChyZWdpc3RyYWJsZURv
bWFpbiwgc2VydmljZVdvcmtlclByb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0
eVRva2VuKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5z
Rm9yU2VydmljZVdvcmtlclByb2Nlc3Nlcy5jbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fZm9yZWdyb3VuZFRva2Vuc0ZvclNlcnZpY2VXb3JrZXJQcm9j
ZXNzZXMuY2xlYXIoKTsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVG9rZW5zRm9yU2VydmljZVdvcmtl
clByb2Nlc3Nlcy5jbGVhcigpOworICAgIH07CisgICAgdXBkYXRlU2VydmljZVdvcmtlclByb2Nl
c3NBc3NlcnRpb24oKTsKKyNlbmRpZgorCisgICAgYXV0byB1cGRhdGVOZXR3b3JrUHJvY2Vzc0Fz
c2VydGlvbiA9IFsmXSB7CisgICAgICAgIGF1dG8mIG5ldHdvcmtQcm9jZXNzID0gZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKTsKKworICAgICAgICBpZiAobV9mb3JlZ3JvdW5kV2ViUHJvY2Vzc0NvdW50
ZXIudmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKCFtX2ZvcmVncm91bmRUb2tlbkZvck5ldHdv
cmtQcm9jZXNzKSB7CisgICAgICAgICAgICAgICAgbV9mb3JlZ3JvdW5kVG9rZW5Gb3JOZXR3b3Jr
UHJvY2VzcyA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmZvcmVncm91bmRBY3Rpdml0eVRv
a2VuKCk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFByb2Nlc3NEaWRUcmFu
c2l0aW9uVG9Gb3JlZ3JvdW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2JhY2tn
cm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9iYWNrZ3JvdW5kV2ViUHJvY2Vzc0NvdW50ZXIu
dmFsdWUoKSkgeworICAgICAgICAgICAgaWYgKCFtX2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQ
cm9jZXNzKSB7CisgICAgICAgICAgICAgICAgbV9iYWNrZ3JvdW5kVG9rZW5Gb3JOZXR3b3JrUHJv
Y2VzcyA9IG5ldHdvcmtQcm9jZXNzLnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rpdml0eVRva2Vu
KCk7CisgICAgICAgICAgICAgICAgbmV0d29ya1Byb2Nlc3Muc2VuZFByb2Nlc3NEaWRUcmFuc2l0
aW9uVG9CYWNrZ3JvdW5kKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ZvcmVncm91
bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBtX2ZvcmVncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0g
bnVsbHB0cjsKKyAgICAgICAgbV9iYWNrZ3JvdW5kVG9rZW5Gb3JOZXR3b3JrUHJvY2VzcyA9IG51
bGxwdHI7CisgICAgfTsKKyAgICB1cGRhdGVOZXR3b3JrUHJvY2Vzc0Fzc2VydGlvbigpOworI2Vu
ZGlmCit9CisKKyNpZiBFTkFCTEUoU0VSVklDRV9XT1JLRVIpCit2b2lkIFdlYlByb2Nlc3NQb29s
Ojpwb3N0TWVzc2FnZVRvU2VydmljZVdvcmtlckNsaWVudChjb25zdCBTZXJ2aWNlV29ya2VyQ2xp
ZW50SWRlbnRpZmllciYgZGVzdGluYXRpb24sIE1lc3NhZ2VXaXRoTWVzc2FnZVBvcnRzJiYgbWVz
c2FnZSwgU2VydmljZVdvcmtlcklkZW50aWZpZXIgc291cmNlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZU9yaWdpbikKK3sKKyAgICBzZW5kVG9OZXR3b3JraW5nUHJvY2Vzc1JlbGF1bmNoaW5nSWZOZWNl
c3NhcnkoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpQb3N0TWVzc2FnZVRvU2VydmljZVdvcmtl
ckNsaWVudChkZXN0aW5hdGlvbiwgV1RGTW92ZShtZXNzYWdlKSwgc291cmNlLCBzb3VyY2VPcmln
aW4pKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cG9zdE1lc3NhZ2VUb1NlcnZpY2VXb3Jr
ZXIoU2VydmljZVdvcmtlcklkZW50aWZpZXIgZGVzdGluYXRpb24sIE1lc3NhZ2VXaXRoTWVzc2Fn
ZVBvcnRzJiYgbWVzc2FnZSwgY29uc3QgU2VydmljZVdvcmtlck9yQ2xpZW50SWRlbnRpZmllciYg
c291cmNlLCBTV1NlcnZlckNvbm5lY3Rpb25JZGVudGlmaWVyIGNvbm5lY3Rpb25JZGVudGlmaWVy
KQoreworICAgIHNlbmRUb05ldHdvcmtpbmdQcm9jZXNzUmVsYXVuY2hpbmdJZk5lY2Vzc2FyeShN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlBvc3RNZXNzYWdlVG9TZXJ2aWNlV29ya2VyKGRlc3Rp
bmF0aW9uLCBXVEZNb3ZlKG1lc3NhZ2UpLCBzb3VyY2UsIGNvbm5lY3Rpb25JZGVudGlmaWVyKSk7
Cit9CisjZW5kaWYKKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVpbnN0YXRlTmV0d29ya1Byb2Nl
c3NBc3NlcnRpb25TdGF0ZShOZXR3b3JrUHJvY2Vzc1Byb3h5JiBuZXdOZXR3b3JrUHJvY2Vzc1By
b3h5KQoreworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgLy8gVGhlIG5ldHdvcmsgcHJv
Y2VzcyBjcmFzaGVkOyB0YWtlIG5ldyB0b2tlbnMgZm9yIHRoZSBuZXcgbmV0d29yayBwcm9jZXNz
LgorICAgIGlmIChtX2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzKQorICAgICAgICBt
X2JhY2tncm91bmRUb2tlbkZvck5ldHdvcmtQcm9jZXNzID0gbmV3TmV0d29ya1Byb2Nlc3NQcm94
eS50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpOworICAgIGVsc2UgaWYgKG1f
Zm9yZWdyb3VuZFRva2VuRm9yTmV0d29ya1Byb2Nlc3MpCisgICAgICAgIG1fZm9yZWdyb3VuZFRv
a2VuRm9yTmV0d29ya1Byb2Nlc3MgPSBuZXdOZXR3b3JrUHJvY2Vzc1Byb3h5LnRocm90dGxlcigp
LmZvcmVncm91bmRBY3Rpdml0eVRva2VuKCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShuZXdO
ZXR3b3JrUHJvY2Vzc1Byb3h5KTsKKyNlbmRpZgorfQorCisjaWYgRU5BQkxFKFNFUlZJQ0VfV09S
S0VSKQorU2VydmljZVdvcmtlclByb2Nlc3NQcm94eSogV2ViUHJvY2Vzc1Bvb2w6OnNlcnZpY2VX
b3JrZXJQcm9jZXNzUHJveHlGcm9tUGFnZUlEKHVpbnQ2NF90IHBhZ2VJRCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBpcyBpbmVmZmljaWVudC4KKyAgICBmb3IgKGF1dG8qIHNlcnZpY2VX
b3JrZXJQcm9jZXNzIDogbV9zZXJ2aWNlV29ya2VyUHJvY2Vzc2VzLnZhbHVlcygpKSB7CisgICAg
ICAgIGlmIChzZXJ2aWNlV29ya2VyUHJvY2Vzcy0+cGFnZUlEKCkgPT0gcGFnZUlEKQorICAgICAg
ICAgICAgcmV0dXJuIHNlcnZpY2VXb3JrZXJQcm9jZXNzOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKyNlbmRpZgorCit2b2lkIFdlYlByb2Nlc3NQb29sOjphZGRQcm9jZXNzVG9Pcmln
aW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MsIGNvbnN0IFVSTCYgdXJsKQorewor
ICAgIGF1dG8gcmVnaXN0cmFibGVEb21haW4gPSBXZWJDb3JlOjpSZWdpc3RyYWJsZURvbWFpbiB7
IHVybCB9OworICAgIGF1dG8gcmVzdWx0ID0gbV9zd2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFi
bGVEb21haW4uYWRkKHJlZ2lzdHJhYmxlRG9tYWluLCAmcHJvY2Vzcyk7CisgICAgaWYgKCFyZXN1
bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9ICZwcm9jZXNz
OworCisgICAgTE9HKFByb2Nlc3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlZ2lzdHJh
YmxlIGRvbWFpbiAlcyBqdXN0IHNhdmVkIGEgY2FjaGVkIHByb2Nlc3Mgd2l0aCBwaWQgJWkiLCBy
ZWdpc3RyYWJsZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBwcm9jZXNzLnByb2Nlc3NJ
ZGVudGlmaWVyKCkpOworICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgIExPRyhQ
cm9jZXNzU3dhcHBpbmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBOb3RlOiBJdCBhbHJlYWR5IGhhZCBv
bmUgc2F2ZWQiKTsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlUHJvY2Vzc0Zyb21P
cmlnaW5DYWNoZVNldChXZWJQcm9jZXNzUHJveHkmIHByb2Nlc3MpCit7CisgICAgTE9HKFByb2Nl
c3NTd2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIFJlbW92aW5nIHByb2Nlc3Mgd2l0aCBwaWQg
JWkgZnJvbSB0aGUgb3JpZ2luIGNhY2hlIHNldCIsIHByb2Nlc3MucHJvY2Vzc0lkZW50aWZpZXIo
KSk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBjYW4gYmUgdmVyeSBpbmVmZmljaWVudCBhcyB0aGUg
bnVtYmVyIG9mIHJlbWVtYmVyZWQgb3JpZ2lucyBhbmQgcHJvY2Vzc2VzIGdyb3dzCisgICAgVmVj
dG9yPFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluPiByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92
ZTsKKyAgICBmb3IgKGF1dG8gZW50cnkgOiBtX3N3YXBwZWRQcm9jZXNzZXNQZXJSZWdpc3RyYWJs
ZURvbWFpbikgeworICAgICAgICBpZiAoZW50cnkudmFsdWUgPT0gJnByb2Nlc3MpCisgICAgICAg
ICAgICByZWdpc3RyYWJsZURvbWFpbnNUb1JlbW92ZS5hcHBlbmQoZW50cnkua2V5KTsKKyAgICB9
CisKKyAgICBmb3IgKGF1dG8mIHJlZ2lzdHJhYmxlRG9tYWluIDogcmVnaXN0cmFibGVEb21haW5z
VG9SZW1vdmUpCisgICAgICAgIG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxlRG9tYWlu
LnJlbW92ZShyZWdpc3RyYWJsZURvbWFpbik7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnBy
b2Nlc3NGb3JOYXZpZ2F0aW9uKFdlYlBhZ2VQcm94eSYgcGFnZSwgY29uc3QgQVBJOjpOYXZpZ2F0
aW9uJiBuYXZpZ2F0aW9uLCBSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmIHNvdXJjZVByb2Nlc3MsIGNv
bnN0IFVSTCYgc291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHByb2Nlc3NT
d2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFTdG9yZSwg
Q29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNwZW5kZWRQ
YWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBw
cm9jZXNzRm9yTmF2aWdhdGlvbkludGVybmFsKHBhZ2UsIG5hdmlnYXRpb24sIHNvdXJjZVByb2Nl
c3MuY29weVJlZigpLCBzb3VyY2VVUkwsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFdU
Rk1vdmUoZGF0YVN0b3JlKSwgW3RoaXMsIHBhZ2UgPSBtYWtlUmVmUHRyKHBhZ2UpLCBuYXZpZ2F0
aW9uID0gbWFrZVJlZihuYXZpZ2F0aW9uKSwgc291cmNlUHJvY2VzcyA9IHNvdXJjZVByb2Nlc3Mu
Y29weVJlZigpLCBzb3VyY2VVUkwsIHByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIGNvbXBs
ZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildKFJlZjxXZWJQcm9jZXNz
UHJveHk+JiYgcHJvY2VzcywgU3VzcGVuZGVkUGFnZVByb3h5KiBzdXNwZW5kZWRQYWdlLCBjb25z
dCBTdHJpbmcmIHJlYXNvbikgbXV0YWJsZSB7CisgICAgICAgIC8vIFdlIGFyZSBwcm9jZXNzLXN3
YXBwaW5nIHNvIGF1dG9tYXRpYyBwcm9jZXNzIHByZXdhcm1pbmcgd291bGQgYmUgYmVuZWZpY2lh
bCBpZiB0aGUgY2xpZW50IGhhcyBub3QgZXhwbGljaXRseSBlbmFibGVkIC8gZGlzYWJsZWQgaXQu
CisgICAgICAgIGJvb2wgZG9pbmdBbkF1dG9tYXRpY1Byb2Nlc3NTd2FwID0gcHJvY2Vzc1N3YXBS
ZXF1ZXN0ZWRCeUNsaWVudCA9PSBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50OjpObyAmJiBw
cm9jZXNzLnB0cigpICE9IHNvdXJjZVByb2Nlc3MucHRyKCk7CisgICAgICAgIGlmIChkb2luZ0Fu
QXV0b21hdGljUHJvY2Vzc1N3YXAgJiYgIWNvbmZpZ3VyYXRpb24oKS53YXNBdXRvbWF0aWNQcm9j
ZXNzV2FybWluZ1NldEJ5Q2xpZW50KCkgJiYgIWNvbmZpZ3VyYXRpb24oKS5jbGllbnRXb3VsZEJl
bmVmaXRGcm9tQXV0b21hdGljUHJvY2Vzc1ByZXdhcm1pbmcoKSkgeworICAgICAgICAgICAgUkVM
RUFTRV9MT0coUGVyZm9ybWFuY2VMb2dnaW5nLCAiQXV0b21hdGljYWxseSB0dXJuaW5nIG9uIHBy
b2Nlc3MgcHJld2FybWluZyBiZWNhdXNlIHRoZSBjbGllbnQgd291bGQgYmVuZWZpdCBmcm9tIGl0
Iik7CisgICAgICAgICAgICBjb25maWd1cmF0aW9uKCkuc2V0Q2xpZW50V291bGRCZW5lZml0RnJv
bUF1dG9tYXRpY1Byb2Nlc3NQcmV3YXJtaW5nKHRydWUpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKG1fY29uZmlndXJhdGlvbi0+YWx3YXlzS2VlcEFuZFJldXNlU3dhcHBlZFByb2Nlc3Nlcygp
ICYmIHByb2Nlc3MucHRyKCkgIT0gc291cmNlUHJvY2Vzcy5wdHIoKSkgeworICAgICAgICAgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgICAgICAgICAgc3RkOjpjYWxsX29u
Y2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgICAgICAgICBXVEZMb2dBbHdheXMoIldBUk5JTkc6
IFRoZSBvcHRpb24gdG8gYWx3YXlzIGtlZXAgc3dhcHBlZCB3ZWIgcHJvY2Vzc2VzIGFsaXZlIGlz
IGFjdGl2ZS4gVGhpcyBpcyBtZWFudCBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIG9ubHkuIik7
CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgYWRkUHJvY2Vzc1RvT3JpZ2luQ2FjaGVT
ZXQoc291cmNlUHJvY2Vzcywgc291cmNlVVJMKTsKKworICAgICAgICAgICAgTE9HKFByb2Nlc3NT
d2FwcGluZywgIihQcm9jZXNzU3dhcHBpbmcpIE5hdmlnYXRpbmcgZnJvbSAlcyB0byAlcywga2Vl
cGluZyBhcm91bmQgb2xkIHByb2Nlc3MuIE5vdyBob2xkaW5nIG9uIHRvIG9sZCBwcm9jZXNzZXMg
Zm9yICV1IG9yaWdpbnMuIiwgc291cmNlVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG5hdmln
YXRpb24tPmN1cnJlbnRSZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbV9z
d2FwcGVkUHJvY2Vzc2VzUGVyUmVnaXN0cmFibGVEb21haW4uc2l6ZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocHJvY2VzcyksIHN1c3BlbmRlZFBh
Z2UsIHJlYXNvbik7CisgICAgfSk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnByb2Nlc3NG
b3JOYXZpZ2F0aW9uSW50ZXJuYWwoV2ViUGFnZVByb3h5JiBwYWdlLCBjb25zdCBBUEk6Ok5hdmln
YXRpb24mIG5hdmlnYXRpb24sIFJlZjxXZWJQcm9jZXNzUHJveHk+JiYgc291cmNlUHJvY2Vzcywg
Y29uc3QgVVJMJiBwYWdlU291cmNlVVJMLCBQcm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50IHBy
b2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGllbnQsIFJlZjxXZWJzaXRlRGF0YVN0b3JlPiYmIGRhdGFT
dG9yZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWY8V2ViUHJvY2Vzc1Byb3h5PiYmLCBTdXNw
ZW5kZWRQYWdlUHJveHkqLCBjb25zdCBTdHJpbmcmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sK
KyAgICBhdXRvJiB0YXJnZXRVUkwgPSBuYXZpZ2F0aW9uLmN1cnJlbnRSZXF1ZXN0KCkudXJsKCk7
CisgICAgYXV0byB0YXJnZXRSZWdpc3RyYWJsZURvbWFpbiA9IFdlYkNvcmU6OlJlZ2lzdHJhYmxl
RG9tYWluIHsgdGFyZ2V0VVJMIH07CisKKyAgICBhdXRvIGNyZWF0ZU5ld1Byb2Nlc3MgPSBbdGhp
cywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBwYWdlID0gbWFrZVJlZihwYWdlKSwg
dGFyZ2V0UmVnaXN0cmFibGVEb21haW4sIGRhdGFTdG9yZSA9IGRhdGFTdG9yZS5jb3B5UmVmKCld
ICgpIC0+IFJlZjxXZWJQcm9jZXNzUHJveHk+IHsKKyAgICAgICAgcmV0dXJuIHByb2Nlc3NGb3JS
ZWdpc3RyYWJsZURvbWFpbihkYXRhU3RvcmUsIHBhZ2UucHRyKCksIHRhcmdldFJlZ2lzdHJhYmxl
RG9tYWluKTsKKyAgICB9OworCisgICAgaWYgKHVzZXNTaW5nbGVXZWJQcm9jZXNzKCkpCisgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNvdXJjZVByb2Nlc3MpLCBudWxs
cHRyLCAiU2luZ2xlIFdlYlByb2Nlc3MgbW9kZSBpcyBlbmFibGVkIl9zKTsKKworICAgIGlmIChw
cm9jZXNzU3dhcFJlcXVlc3RlZEJ5Q2xpZW50ID09IFByb2Nlc3NTd2FwUmVxdWVzdGVkQnlDbGll
bnQ6OlllcykKKyAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKGNyZWF0ZU5ld1Byb2Nl
c3MoKSwgbnVsbHB0ciwgIlByb2Nlc3Mgc3dhcCB3YXMgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQi
X3MpOworCisgICAgaWYgKCFtX2NvbmZpZ3VyYXRpb24tPnByb2Nlc3NTd2Fwc09uTmF2aWdhdGlv
bigpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzb3VyY2VQcm9j
ZXNzKSwgbnVsbHB0ciwgIkZlYXR1cmUgaXMgZGlzYWJsZWQiX3MpOworCisgICAgaWYgKG1fYXV0
b21hdGlvblNlc3Npb24pCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3Zl
KHNvdXJjZVByb2Nlc3MpLCBudWxscHRyLCAiQW4gYXV0b21hdGlvbiBzZXNzaW9uIGlzIGFjdGl2
ZSJfcyk7CisKKyAgICBpZiAoIXNvdXJjZVByb2Nlc3MtPmhhc0NvbW1pdHRlZEFueVByb3Zpc2lv
bmFsTG9hZHMoKSkgeworICAgICAgICB0cnlQcmV3YXJtV2l0aERvbWFpbkluZm9ybWF0aW9uKHNv
dXJjZVByb2Nlc3MsIHRhcmdldFJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKFdURk1vdmUoc291cmNlUHJvY2VzcyksIG51bGxwdHIsICJQcm9jZXNz
IGhhcyBub3QgeWV0IGNvbW1pdHRlZCBhbnkgcHJvdmlzaW9uYWwgbG9hZHMiX3MpOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBwcm9jZXNzIHN3YXAgd2hlbiBhIHdp
bmRvdyBoYXMgYmVlbiBvcGVuZWQgdmlhIHdpbmRvdy5vcGVuKCkgd2l0aG91dCAnbm9vcGVuZXIn
LgorICAgIC8vIFRoZSBpc3N1ZSBpcyB0aGF0IHRoZSBvcGVuZXIgaGFzIGEgaGFuZGxlIHRvIHRo
ZSBXaW5kb3dQcm94eS4KKyAgICBpZiAobmF2aWdhdGlvbi5vcGVuZWRCeURPTVdpdGhPcGVuZXIo
KSAmJiAhbV9jb25maWd1cmF0aW9uLT5wcm9jZXNzU3dhcHNPbldpbmRvd09wZW5XaXRoT3BlbmVy
KCkpCisgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNvdXJjZVByb2Nl
c3MpLCBudWxscHRyLCAiQnJvd3NpbmcgY29udGV4dCBiZWVuIG9wZW5lZCBieSBET00gd2l0aG91
dCAnbm9vcGVuZXInIl9zKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgc3VwcG9ydCBwcm9j
ZXNzIHN3YXAgd2hlbiBhIHdpbmRvdyBoYXMgb3BlbmVkIG90aGVyIHdpbmRvd3MgdmlhIHdpbmRv
dy5vcGVuLgorICAgIGlmIChuYXZpZ2F0aW9uLmhhc09wZW5lZEZyYW1lcygpKQorICAgICAgICBy
ZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzb3VyY2VQcm9jZXNzKSwgbnVsbHB0ciwg
IkJyb3dzaW5nIGNvbnRleHQgaGFzIG9wZW5lZCBvdGhlciB3aW5kb3dzIl9zKTsKKworICAgIGlm
IChhdXRvKiB0YXJnZXRJdGVtID0gbmF2aWdhdGlvbi50YXJnZXRJdGVtKCkpIHsKKyAgICAgICAg
aWYgKGF1dG8qIHN1c3BlbmRlZFBhZ2UgPSB0YXJnZXRJdGVtLT5zdXNwZW5kZWRQYWdlKCkpIHsK
KyAgICAgICAgICAgIHJldHVybiBzdXNwZW5kZWRQYWdlLT53YWl0VW50aWxSZWFkeVRvVW5zdXNw
ZW5kKFtjcmVhdGVOZXdQcm9jZXNzID0gV1RGTW92ZShjcmVhdGVOZXdQcm9jZXNzKSwgY29tcGxl
dGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oU3VzcGVuZGVkUGFnZVBy
b3h5KiBzdXNwZW5kZWRQYWdlKSBtdXRhYmxlIHsKKyAgICAgICAgICAgICAgICBpZiAoIXN1c3Bl
bmRlZFBhZ2UpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihj
cmVhdGVOZXdQcm9jZXNzKCksIG51bGxwdHIsICJVc2luZyBuZXcgcHJvY2VzcyBiZWNhdXNlIHRh
cmdldCBiYWNrL2ZvcndhcmQgaXRlbSdzIHN1c3BlbmRlZCBwYWdlIGlzIG5vdCByZXVzYWJsZSJf
cyk7CisgICAgICAgICAgICAgICAgUmVmPFdlYlByb2Nlc3NQcm94eT4gcHJvY2VzcyA9IHN1c3Bl
bmRlZFBhZ2UtPnByb2Nlc3MoKTsKKyAgICAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKHByb2Nlc3MpLCBzdXNwZW5kZWRQYWdlLCAiVXNpbmcgdGFyZ2V0IGJhY2svZm9yd2Fy
ZCBpdGVtJ3MgcHJvY2VzcyBhbmQgc3VzcGVuZGVkIHBhZ2UiX3MpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoUmVmUHRyPFdlYlByb2Nlc3NQcm94eT4gcHJvY2Vz
cyA9IFdlYlByb2Nlc3NQcm94eTo6cHJvY2Vzc0ZvcklkZW50aWZpZXIodGFyZ2V0SXRlbS0+bGFz
dFByb2Nlc3NJZGVudGlmaWVyKCkpKSB7CisgICAgICAgICAgICBpZiAocHJvY2Vzcy0+c3RhdGUo
KSAhPSBXZWJQcm9jZXNzUHJveHk6OlN0YXRlOjpUZXJtaW5hdGVkKSB7CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEFyY2hpdGVjdHVyYWxseSB3ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQg
bXVsdGlwbGUgV2ViUGFnZSdzIHdpdGggdGhlIHNhbWUgSUQgaW4gYSBnaXZlbiBXZWJQcm9jZXNz
LgorICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIHdoZXJlIHRoaXMgV2ViUHJvY2VzcyBo
YXMgYSBTdXNwZW5kZWRQYWdlUHJveHkgZm9yIHRoaXMgV2ViUGFnZSwgd2UgY2FuIHRocm93IGl0
IGF3YXkgdG8gc3VwcG9ydAorICAgICAgICAgICAgICAgIC8vIFdlYlByb2Nlc3MgcmUtdXNlLgor
ICAgICAgICAgICAgICAgIHJlbW92ZUFsbFN1c3BlbmRlZFBhZ2VzRm9yUGFnZShwYWdlLCBwcm9j
ZXNzLmdldCgpKTsKKworICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhl
IHByb2Nlc3MgZnJvbSB0aGUgY2FjaGUgaWYgaXQgaXMgaW4gdGhlcmUgc2luY2Ugd2UncmUgYWJv
dXQgdG8gdXNlIGl0LgorICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzLT5pc0luUHJvY2Vzc0Nh
Y2hlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgd2ViUHJvY2Vzc0NhY2hlKCkucmVtb3ZlUHJv
Y2VzcygqcHJvY2VzcywgV2ViUHJvY2Vzc0NhY2hlOjpTaG91bGRTaHV0RG93blByb2Nlc3M6Ok5v
KTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFwcm9jZXNzLT5pc0luUHJvY2Vzc0NhY2hl
KCkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0
aW9uSGFuZGxlcihwcm9jZXNzLnJlbGVhc2VOb25OdWxsKCksIG51bGxwdHIsICJVc2luZyB0YXJn
ZXQgYmFjay9mb3J3YXJkIGl0ZW0ncyBwcm9jZXNzIl9zKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmIChuYXZpZ2F0aW9uLnRyZWF0QXNTYW1lT3JpZ2luTmF2aWdh
dGlvbigpKQorICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShzb3VyY2VQ
cm9jZXNzKSwgbnVsbHB0ciwgIlRoZSB0cmVhdEFzU2FtZU9yaWdpbk5hdmlnYXRpb24gZmxhZyBp
cyBzZXQiX3MpOworCisgICAgVVJMIHNvdXJjZVVSTDsKKyAgICBpZiAocGFnZS5pc1BhZ2VPcGVu
ZWRCeURPTVNob3dpbmdJbml0aWFsRW1wdHlEb2N1bWVudCgpICYmICFuYXZpZ2F0aW9uLnJlcXVl
c3Rlck9yaWdpbigpLmlzRW1wdHkoKSkKKyAgICAgICAgc291cmNlVVJMID0gVVJMIHsgVVJMKCks
IG5hdmlnYXRpb24ucmVxdWVzdGVyT3JpZ2luKCkudG9TdHJpbmcoKSB9OworICAgIGVsc2UKKyAg
ICAgICAgc291cmNlVVJMID0gcGFnZVNvdXJjZVVSTDsKKworICAgIGlmIChzb3VyY2VVUkwuaXNF
bXB0eSgpICYmIHBhZ2UuY29uZmlndXJhdGlvbigpLnJlbGF0ZWRQYWdlKCkpIHsKKyAgICAgICAg
c291cmNlVVJMID0gVVJMIHsgeyB9LCBwYWdlLmNvbmZpZ3VyYXRpb24oKS5yZWxhdGVkUGFnZSgp
LT5wYWdlTG9hZFN0YXRlKCkudXJsKCkgfTsKKyAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N3
YXBwaW5nLCAiVXNpbmcgcmVsYXRlZCBwYWdlICVwJ3MgVVJMIGFzIHNvdXJjZSBVUkwgZm9yIHBy
b2Nlc3Mgc3dhcCBkZWNpc2lvbiIsIHBhZ2UuY29uZmlndXJhdGlvbigpLnJlbGF0ZWRQYWdlKCkp
OworICAgIH0KKworICAgIGlmICghc291cmNlVVJMLmlzVmFsaWQoKSB8fCAhdGFyZ2V0VVJMLmlz
VmFsaWQoKSB8fCBzb3VyY2VVUkwuaXNFbXB0eSgpIHx8IHNvdXJjZVVSTC5wcm90b2NvbElzQWJv
dXQoKSB8fCB0YXJnZXRSZWdpc3RyYWJsZURvbWFpbi5tYXRjaGVzKHNvdXJjZVVSTCkpCisgICAg
ICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHNvdXJjZVByb2Nlc3MpLCBudWxs
cHRyLCAiTmF2aWdhdGlvbiBpcyBzYW1lLXNpdGUiX3MpOworCisgICAgU3RyaW5nIHJlYXNvbiA9
ICJOYXZpZ2F0aW9uIGlzIGNyb3NzLXNpdGUiX3M7CisgICAgCisgICAgaWYgKG1fY29uZmlndXJh
dGlvbi0+YWx3YXlzS2VlcEFuZFJldXNlU3dhcHBlZFByb2Nlc3NlcygpKSB7CisgICAgICAgIExP
RyhQcm9jZXNzU3dhcHBpbmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBDb25zaWRlcmluZyByZS11c2Ug
b2YgYSBwcmV2aW91c2x5IGNhY2hlZCBwcm9jZXNzIGZvciBkb21haW4gJXMiLCB0YXJnZXRSZWdp
c3RyYWJsZURvbWFpbi5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgICAgICBpZiAoYXV0
byogcHJvY2VzcyA9IG1fc3dhcHBlZFByb2Nlc3Nlc1BlclJlZ2lzdHJhYmxlRG9tYWluLmdldCh0
YXJnZXRSZWdpc3RyYWJsZURvbWFpbikpIHsKKyAgICAgICAgICAgIGlmICgmcHJvY2Vzcy0+d2Vi
c2l0ZURhdGFTdG9yZSgpID09IGRhdGFTdG9yZS5wdHIoKSkgeworICAgICAgICAgICAgICAgIExP
RyhQcm9jZXNzU3dhcHBpbmcsICIoUHJvY2Vzc1N3YXBwaW5nKSBSZXVzaW5nIGEgcHJldmlvdXNs
eSBjYWNoZWQgcHJvY2VzcyB3aXRoIHBpZCAlaSB0byBjb250aW51ZSBuYXZpZ2F0aW9uIHRvIFVS
TCAlcyIsIHByb2Nlc3MtPnByb2Nlc3NJZGVudGlmaWVyKCksIHRhcmdldFVSTC5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBBcmNoaXRlY3R1cmFs
bHkgd2UgZG8gbm90IGN1cnJlbnRseSBzdXBwb3J0IG11bHRpcGxlIFdlYlBhZ2UncyB3aXRoIHRo
ZSBzYW1lIElEIGluIGEgZ2l2ZW4gV2ViUHJvY2Vzcy4KKyAgICAgICAgICAgICAgICAvLyBJbiB0
aGUgY2FzZSB3aGVyZSB0aGlzIFdlYlByb2Nlc3MgaGFzIGEgU3VzcGVuZGVkUGFnZVByb3h5IGZv
ciB0aGlzIFdlYlBhZ2UsIHdlIGNhbiB0aHJvdyBpdCBhd2F5IHRvIHN1cHBvcnQKKyAgICAgICAg
ICAgICAgICAvLyBXZWJQcm9jZXNzIHJlLXVzZS4KKyAgICAgICAgICAgICAgICAvLyBJbiB0aGUg
ZnV0dXJlIGl0IHdvdWxkIGJlIGdyZWF0IHRvIHJlZmFjdG9yLW91dCB0aGlzIGxpbWl0YXRpb24g
KGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTExNjYpLgorICAgICAg
ICAgICAgICAgIHJlbW92ZUFsbFN1c3BlbmRlZFBhZ2VzRm9yUGFnZShwYWdlLCBwcm9jZXNzKTsK
KworICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihtYWtlUmVmKCpwcm9j
ZXNzKSwgbnVsbHB0ciwgcmVhc29uKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihjcmVhdGVOZXdQcm9jZXNzKCksIG51bGxw
dHIsIHJlYXNvbik7Cit9CisKK1JlZlB0cjxXZWJQcm9jZXNzUHJveHk+IFdlYlByb2Nlc3NQb29s
OjpmaW5kUmV1c2FibGVTdXNwZW5kZWRQYWdlUHJvY2Vzcyhjb25zdCBXZWJDb3JlOjpSZWdpc3Ry
YWJsZURvbWFpbiYgcmVnaXN0cmFibGVEb21haW4sIFdlYlBhZ2VQcm94eSYgcGFnZSwgV2Vic2l0
ZURhdGFTdG9yZSYgZGF0YVN0b3JlKQoreworICAgIGF1dG8gaXQgPSBtX3N1c3BlbmRlZFBhZ2Vz
LmZpbmRJZihbJl0oYXV0byYgc3VzcGVuZGVkUGFnZSkgeworICAgICAgICByZXR1cm4gc3VzcGVu
ZGVkUGFnZS0+cmVnaXN0cmFibGVEb21haW4oKSA9PSByZWdpc3RyYWJsZURvbWFpbiAmJiAmc3Vz
cGVuZGVkUGFnZS0+cHJvY2VzcygpLndlYnNpdGVEYXRhU3RvcmUoKSA9PSAmZGF0YVN0b3JlOwor
ICAgIH0pOworICAgIGlmIChpdCA9PSBtX3N1c3BlbmRlZFBhZ2VzLmVuZCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIFJlZjxXZWJQcm9jZXNzUHJveHk+IHByb2Nlc3MgPSAoKml0
KS0+cHJvY2VzcygpOworCisgICAgLy8gRklYTUU6IElmIHRoZSBTdXNwZW5kZWRQYWdlIGlzIGZv
ciB0aGlzIHBhZ2UsIHRoZW4gd2UgbmVlZCB0byBkZXN0cm95IHRoZSBzdXNwZW5kZWQgcGFnZSBh
cyB3ZSBkbyBub3Qgc3VwcG9ydCBoYXZpbmcKKyAgICAvLyBtdWx0aXBsZSBXZWJQYWdlcyB3aXRo
IHRoZSBzYW1lIElEIGluIGEgZ2l2ZW4gV2ViUHJvY2VzcyBjdXJyZW50bHkgKGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTExNjYpLgorICAgIGlmICgmKCppdCktPnBh
Z2UoKSA9PSAmcGFnZSkKKyAgICAgICAgbV9zdXNwZW5kZWRQYWdlcy5yZW1vdmUoaXQpOworCisK
KyAgICByZXR1cm4gcHJvY2VzczsKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6YWRkU3VzcGVu
ZGVkUGFnZShzdGQ6OnVuaXF1ZV9wdHI8U3VzcGVuZGVkUGFnZVByb3h5PiYmIHN1c3BlbmRlZFBh
Z2UpCit7CisgICAgaWYgKCFtX21heFN1c3BlbmRlZFBhZ2VDb3VudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKG1fc3VzcGVuZGVkUGFnZXMuc2l6ZSgpID49IG1fbWF4U3VzcGVuZGVkUGFn
ZUNvdW50KQorICAgICAgICBtX3N1c3BlbmRlZFBhZ2VzLnJlbW92ZUZpcnN0KCk7CisKKyAgICBt
X3N1c3BlbmRlZFBhZ2VzLmFwcGVuZChXVEZNb3ZlKHN1c3BlbmRlZFBhZ2UpKTsKK30KKwordm9p
ZCBXZWJQcm9jZXNzUG9vbDo6cmVtb3ZlQWxsU3VzcGVuZGVkUGFnZXNGb3JQYWdlKFdlYlBhZ2VQ
cm94eSYgcGFnZSwgV2ViUHJvY2Vzc1Byb3h5KiBwcm9jZXNzKQoreworICAgIG1fc3VzcGVuZGVk
UGFnZXMucmVtb3ZlQWxsTWF0Y2hpbmcoWyZwYWdlLCBwcm9jZXNzXShhdXRvJiBzdXNwZW5kZWRQ
YWdlKSB7CisgICAgICAgIHJldHVybiAmc3VzcGVuZGVkUGFnZS0+cGFnZSgpID09ICZwYWdlICYm
ICghcHJvY2VzcyB8fCAmc3VzcGVuZGVkUGFnZS0+cHJvY2VzcygpID09IHByb2Nlc3MpOworICAg
IH0pOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpjbG9zZUZhaWxlZFN1c3BlbmRlZFBhZ2Vz
Rm9yUGFnZShXZWJQYWdlUHJveHkmIHBhZ2UpCit7CisgICAgZm9yIChhdXRvJiBzdXNwZW5kZWRQ
YWdlIDogbV9zdXNwZW5kZWRQYWdlcykgeworICAgICAgICBpZiAoJnN1c3BlbmRlZFBhZ2UtPnBh
Z2UoKSA9PSAmcGFnZSAmJiBzdXNwZW5kZWRQYWdlLT5mYWlsZWRUb1N1c3BlbmQoKSkKKyAgICAg
ICAgICAgIHN1c3BlbmRlZFBhZ2UtPmNsb3NlKCk7CisgICAgfQorfQorCitzdGQ6OnVuaXF1ZV9w
dHI8U3VzcGVuZGVkUGFnZVByb3h5PiBXZWJQcm9jZXNzUG9vbDo6dGFrZVN1c3BlbmRlZFBhZ2Uo
U3VzcGVuZGVkUGFnZVByb3h5JiBzdXNwZW5kZWRQYWdlKQoreworICAgIHJldHVybiBtX3N1c3Bl
bmRlZFBhZ2VzLnRha2VGaXJzdChbJnN1c3BlbmRlZFBhZ2VdKGF1dG8mIGl0ZW0pIHsKKyAgICAg
ICAgcmV0dXJuIGl0ZW0uZ2V0KCkgPT0gJnN1c3BlbmRlZFBhZ2U7CisgICAgfSk7Cit9CisKK3Zv
aWQgV2ViUHJvY2Vzc1Bvb2w6OnJlbW92ZVN1c3BlbmRlZFBhZ2UoU3VzcGVuZGVkUGFnZVByb3h5
JiBzdXNwZW5kZWRQYWdlKQoreworICAgIGF1dG8gaXQgPSBtX3N1c3BlbmRlZFBhZ2VzLmZpbmRJ
ZihbJnN1c3BlbmRlZFBhZ2VdKGF1dG8mIGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGl0ZW0uZ2V0
KCkgPT0gJnN1c3BlbmRlZFBhZ2U7CisgICAgfSk7CisgICAgaWYgKGl0ICE9IG1fc3VzcGVuZGVk
UGFnZXMuZW5kKCkpCisgICAgICAgIG1fc3VzcGVuZGVkUGFnZXMucmVtb3ZlKGl0KTsKK30KKwor
Ym9vbCBXZWJQcm9jZXNzUG9vbDo6aGFzU3VzcGVuZGVkUGFnZUZvcihXZWJQcm9jZXNzUHJveHkm
IHByb2Nlc3MsIFdlYlBhZ2VQcm94eSYgcGFnZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdXNw
ZW5kZWRQYWdlcy5maW5kSWYoWyZwcm9jZXNzLCAmcGFnZV0oYXV0byYgc3VzcGVuZGVkUGFnZSkg
eworICAgICAgICByZXR1cm4gJnN1c3BlbmRlZFBhZ2UtPnByb2Nlc3MoKSA9PSAmcHJvY2VzcyAm
JiAmc3VzcGVuZGVkUGFnZS0+cGFnZSgpID09ICZwYWdlOworICAgIH0pICE9IG1fc3VzcGVuZGVk
UGFnZXMuZW5kKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyU3VzcGVuZGVkUGFn
ZXMoQWxsb3dQcm9jZXNzQ2FjaGluZyBhbGxvd1Byb2Nlc3NDYWNoaW5nKQoreworICAgIEhhc2hT
ZXQ8UmVmUHRyPFdlYlByb2Nlc3NQcm94eT4+IHByb2Nlc3NlczsKKyAgICBmb3IgKGF1dG8mIHN1
c3BlbmRlZFBhZ2UgOiBtX3N1c3BlbmRlZFBhZ2VzKQorICAgICAgICBwcm9jZXNzZXMuYWRkKCZz
dXNwZW5kZWRQYWdlLT5wcm9jZXNzKCkpOworCisgICAgbV9zdXNwZW5kZWRQYWdlcy5jbGVhcigp
OworCisgICAgZm9yIChhdXRvJiBwcm9jZXNzIDogcHJvY2Vzc2VzKQorICAgICAgICBwcm9jZXNz
LT5tYXliZVNodXREb3duKGFsbG93UHJvY2Vzc0NhY2hpbmcpOworfQorCit2b2lkIFdlYlByb2Nl
c3NQb29sOjphZGRNb2NrTWVkaWFEZXZpY2UoY29uc3QgTW9ja01lZGlhRGV2aWNlJiBkZXZpY2Up
Cit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBNb2NrUmVhbHRpbWVNZWRpYVNvdXJj
ZUNlbnRlcjo6YWRkRGV2aWNlKGRldmljZSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzOjpBZGRNb2NrTWVkaWFEZXZpY2UgeyBkZXZpY2UgfSk7CisjZW5kaWYK
K30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6Y2xlYXJNb2NrTWVkaWFEZXZpY2VzKCkKK3sKKyNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIE1vY2tSZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
OjpzZXREZXZpY2VzKHsgfSk7CisgICAgc2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzOjpDbGVhck1vY2tNZWRpYURldmljZXMgeyB9KTsKKyNlbmRpZgorfQorCit2b2lkIFdl
YlByb2Nlc3NQb29sOjpyZW1vdmVNb2NrTWVkaWFEZXZpY2UoY29uc3QgU3RyaW5nJiBwZXJzaXN0
ZW50SWQpCit7CisjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKKyAgICBNb2NrUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlcjo6cmVtb3ZlRGV2aWNlKHBlcnNpc3RlbnRJZCk7CisgICAgc2VuZFRvQWxs
UHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpSZW1vdmVNb2NrTWVkaWFEZXZpY2UgeyBw
ZXJzaXN0ZW50SWQgfSk7CisjZW5kaWYKK30KKwordm9pZCBXZWJQcm9jZXNzUG9vbDo6cmVzZXRN
b2NrTWVkaWFEZXZpY2VzKCkKK3sKKyNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQorICAgIE1vY2tS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpyZXNldERldmljZXMoKTsKKyAgICBzZW5kVG9BbGxQ
cm9jZXNzZXMoTWVzc2FnZXM6OldlYlByb2Nlc3M6OlJlc2V0TW9ja01lZGlhRGV2aWNlcyB7IH0p
OworI2VuZGlmCit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNlbmREaXNwbGF5Q29uZmlndXJh
dGlvbkNoYW5nZWRNZXNzYWdlRm9yVGVzdGluZygpCit7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBF
TkFCTEUoV0VCUFJPQ0VTU19XSU5ET1dTRVJWRVJfQkxPQ0tJTkcpCisgICAgYXV0byBkaXNwbGF5
ID0gQ0dTTWFpbkRpc3BsYXlJRCgpOworCisgICAgZm9yIChhdXRvJiBwcm9jZXNzUG9vbCA6IFdl
YlByb2Nlc3NQb29sOjphbGxQcm9jZXNzUG9vbHMoKSkgeworICAgICAgICBwcm9jZXNzUG9vbC0+
c2VuZFRvQWxsUHJvY2Vzc2VzKE1lc3NhZ2VzOjpXZWJQcm9jZXNzOjpEaXNwbGF5Q29uZmlndXJh
dGlvbkNoYW5nZWQoZGlzcGxheSwga0NHRGlzcGxheUJlZ2luQ29uZmlndXJhdGlvbkZsYWcpKTsK
KyAgICAgICAgcHJvY2Vzc1Bvb2wtPnNlbmRUb0FsbFByb2Nlc3NlcyhNZXNzYWdlczo6V2ViUHJv
Y2Vzczo6RGlzcGxheUNvbmZpZ3VyYXRpb25DaGFuZ2VkKGRpc3BsYXksIGtDR0Rpc3BsYXlTZXRN
b2RlRmxhZyB8IGtDR0Rpc3BsYXlEZXNrdG9wU2hhcGVDaGFuZ2VkRmxhZykpOworICAgIH0KKyNl
bmRpZgorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpkaWRDb2xsZWN0UHJld2FybUluZm9ybWF0
aW9uKGNvbnN0IFdlYkNvcmU6OlJlZ2lzdHJhYmxlRG9tYWluJiByZWdpc3RyYWJsZURvbWFpbiwg
Y29uc3QgV2ViQ29yZTo6UHJld2FybUluZm9ybWF0aW9uJiBwcmV3YXJtSW5mb3JtYXRpb24pCit7
CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhpbXVtU2l6ZVRvUHJldmVudFVubGltaXRlZEdy
b3d0aCA9IDEwMDsKKyAgICBpZiAobV9wcmV3YXJtSW5mb3JtYXRpb25QZXJSZWdpc3RyYWJsZURv
bWFpbi5zaXplKCkgPT0gbWF4aW11bVNpemVUb1ByZXZlbnRVbmxpbWl0ZWRHcm93dGgpCisgICAg
ICAgIG1fcHJld2FybUluZm9ybWF0aW9uUGVyUmVnaXN0cmFibGVEb21haW4ucmVtb3ZlKG1fcHJl
d2FybUluZm9ybWF0aW9uUGVyUmVnaXN0cmFibGVEb21haW4ucmFuZG9tKCkpOworCisgICAgYXV0
byYgdmFsdWUgPSBtX3ByZXdhcm1JbmZvcm1hdGlvblBlclJlZ2lzdHJhYmxlRG9tYWluLmVuc3Vy
ZShyZWdpc3RyYWJsZURvbWFpbiwgW10geworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxXZWJDb3JlOjpQcmV3YXJtSW5mb3JtYXRpb24+KCk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVl
OworCisgICAgKnZhbHVlID0gcHJld2FybUluZm9ybWF0aW9uOworfQorCit2b2lkIFdlYlByb2Nl
c3NQb29sOjp0cnlQcmV3YXJtV2l0aERvbWFpbkluZm9ybWF0aW9uKFdlYlByb2Nlc3NQcm94eSYg
cHJvY2VzcywgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHJlZ2lzdHJhYmxlRG9tYWluKQorewor
ICAgIGF1dG8qIHByZXdhcm1JbmZvcm1hdGlvbiA9IG1fcHJld2FybUluZm9ybWF0aW9uUGVyUmVn
aXN0cmFibGVEb21haW4uZ2V0KHJlZ2lzdHJhYmxlRG9tYWluKTsKKyAgICBpZiAoIXByZXdhcm1J
bmZvcm1hdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIHByb2Nlc3Muc2VuZChNZXNzYWdlczo6
V2ViUHJvY2Vzczo6UHJld2FybVdpdGhEb21haW5JbmZvcm1hdGlvbigqcHJld2FybUluZm9ybWF0
aW9uKSwgMCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFyQ3VycmVudE1vZGlmaWVy
U3RhdGVGb3JUZXN0aW5nKCkKK3sKKyAgICBzZW5kVG9BbGxQcm9jZXNzZXMoTWVzc2FnZXM6Oldl
YlByb2Nlc3M6OkNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCkpOworfQorCit2
b2lkIFdlYlByb2Nlc3NQb29sOjpkdW1wQWRDbGlja0F0dHJpYnV0aW9uKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb25JRCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdCBTdHJpbmcmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1fbmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAg
Y29tcGxldGlvbkhhbmRsZXIoZW1wdHlTdHJpbmcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBtX25ldHdvcmtQcm9jZXNzLT5kdW1wQWRDbGlja0F0dHJpYnV0aW9uKHNlc3Npb25J
RCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOworfQorCit2b2lkIFdlYlByb2Nlc3NQb29s
OjpjbGVhckFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3sKKyAgICBpZiAoIW1f
bmV0d29ya1Byb2Nlc3MpIHsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX25ldHdvcmtQcm9jZXNzLT5jbGVhckFkQ2xpY2tB
dHRyaWJ1dGlvbihzZXNzaW9uSUQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKK30KKyAg
ICAKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNvbW1pdHRlZENyb3NzU2l0ZUxvYWRXaXRoTGlua0Rl
Y29yYXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBSZWdpc3RyYWJsZURvbWFp
biYgZnJvbURvbWFpbiwgY29uc3QgUmVnaXN0cmFibGVEb21haW4mIHRvRG9tYWluLCB1aW50NjRf
dCBwYWdlSUQpCit7CisjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURfU1RBVElTVElDUykKKyAgICBp
ZiAoIW1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIG1fbmV0d29ya1By
b2Nlc3MtPmNvbW1pdHRlZENyb3NzU2l0ZUxvYWRXaXRoTGlua0RlY29yYXRpb24oc2Vzc2lvbklE
LCBmcm9tRG9tYWluLCB0b0RvbWFpbiwgcGFnZUlELCBbXSB7IH0pOworI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc2Vzc2lvbklEKTsKKyAgICBVTlVTRURfUEFSQU0oZnJvbURvbWFpbik7CisgICAg
VU5VU0VEX1BBUkFNKHRvRG9tYWluKTsKKyAgICBVTlVTRURfUEFSQU0ocGFnZUlEKTsKKyNlbmRp
ZgorfQorCit2b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRXZWJQcm9jZXNzSGFzVXBsb2FkcyhQcm9j
ZXNzSWRlbnRpZmllciBwcm9jZXNzSUQpCit7CisgICAgYXV0byogcHJvY2VzcyA9IFdlYlByb2Nl
c3NQcm94eTo6cHJvY2Vzc0ZvcklkZW50aWZpZXIocHJvY2Vzc0lEKTsKKyAgICBBU1NFUlQocHJv
Y2Vzcyk7CisKKyAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIldlYiBwcm9jZXNz
IHBpZCAldSBub3cgaGFzIHVwbG9hZHMgaW4gcHJvZ3Jlc3MiLCAodW5zaWduZWQpcHJvY2Vzcy0+
cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisKKyAgICBpZiAobV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3BlbnNpb24sICJUaGUg
bnVtYmVyIG9mIHVwbG9hZHMgaW4gcHJvZ3Jlc3MgaXMgbm93IG9uZS4gVGFraW5nIE5ldHdvcmtp
bmcgYW5kIFVJIHByb2Nlc3MgYXNzZXJ0aW9ucy4iKTsKKworICAgICAgICBBU1NFUlQobV9uZXR3
b3JrUHJvY2Vzcyk7CisgICAgICAgIG1fbmV0d29ya1Byb2Nlc3MtPnRha2VVcGxvYWRBc3NlcnRp
b24oKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV91aVByb2Nlc3NVcGxvYWRBc3NlcnRp
b24pOworICAgICAgICBtX3VpUHJvY2Vzc1VwbG9hZEFzc2VydGlvbiA9IHN0ZDo6bWFrZV91bmlx
dWU8UHJvY2Vzc0Fzc2VydGlvbj4oZ2V0Q3VycmVudFByb2Nlc3NJRCgpLCAiV2ViS2l0IHVwbG9h
ZHMiX3MsIEFzc2VydGlvblN0YXRlOjpVbmJvdW5kZWROZXR3b3JraW5nKTsKKyAgICB9CisgICAg
CisgICAgYXV0byByZXN1bHQgPSBtX3Byb2Nlc3Nlc1dpdGhVcGxvYWRzLmFkZChwcm9jZXNzSUQs
IG51bGxwdHIpOworICAgIEFTU0VSVChyZXN1bHQuaXNOZXdFbnRyeSk7CisgICAgcmVzdWx0Lml0
ZXJhdG9yLT52YWx1ZSA9IHN0ZDo6bWFrZV91bmlxdWU8UHJvY2Vzc0Fzc2VydGlvbj4ocHJvY2Vz
cy0+cHJvY2Vzc0lkZW50aWZpZXIoKSwgIldlYktpdCB1cGxvYWRzIl9zLCBBc3NlcnRpb25TdGF0
ZTo6VW5ib3VuZGVkTmV0d29ya2luZyk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzc1Bvb2w6OmNsZWFy
V2ViUHJvY2Vzc0hhc1VwbG9hZHMoUHJvY2Vzc0lkZW50aWZpZXIgcHJvY2Vzc0lEKQoreworICAg
IGF1dG8gcmVzdWx0ID0gbV9wcm9jZXNzZXNXaXRoVXBsb2Fkcy50YWtlKHByb2Nlc3NJRCk7Cisg
ICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCk7CisKKyAgICBhdXRvKiBwcm9jZXNzID0g
V2ViUHJvY2Vzc1Byb3h5Ojpwcm9jZXNzRm9ySWRlbnRpZmllcihwcm9jZXNzSUQpOworICAgIEFT
U0VSVChwcm9jZXNzKTsKKyAgICBSRUxFQVNFX0xPRyhQcm9jZXNzU3VzcGVuc2lvbiwgIldlYiBw
cm9jZXNzIHBpZCAldSBubyBsb25nZXIgaGFzIHVwbG9hZHMgaW4gcHJvZ3Jlc3MiLCAodW5zaWdu
ZWQpcHJvY2Vzcy0+cHJvY2Vzc0lkZW50aWZpZXIoKSk7CisKKyAgICBpZiAobV9wcm9jZXNzZXNX
aXRoVXBsb2Fkcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgUkVMRUFTRV9MT0coUHJvY2Vzc1N1c3Bl
bnNpb24sICJUaGUgbnVtYmVyIG9mIHVwbG9hZHMgaW4gcHJvZ3Jlc3MgaXMgbm93IHplcm8uIFJl
bGVhc2luZyBOZXR3b3JraW5nIGFuZCBVSSBwcm9jZXNzIGFzc2VydGlvbnMuIik7CisKKyAgICAg
ICAgaWYgKG1fbmV0d29ya1Byb2Nlc3MpCisgICAgICAgICAgICBtX25ldHdvcmtQcm9jZXNzLT5j
bGVhclVwbG9hZEFzc2VydGlvbigpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fdWlQcm9j
ZXNzVXBsb2FkQXNzZXJ0aW9uKTsKKyAgICAgICAgbV91aVByb2Nlc3NVcGxvYWRBc3NlcnRpb24g
PSBudWxscHRyOworICAgIH0KKyAgICAKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCAyMTU3YjZiMDlhY2MwY2E1
MGU4NjEyODI4MjFiMTllYWE1ZWFkODY2Li4zNGRjNGIxMmQ2NmFlNzlkMDhjZTc2ODMzN2U0ZTY1
NzM3NGEyMWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAg
LTI5OSw4ICsyOTksNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN5bmNOZXR3b3JrUHJvY2Vzc0Nv
b2tpZXMoKTsKIAotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwotCiAg
ICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhi
b29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rp
bmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFp
bEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xh
dW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQ
cm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0
TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKaW5kZXgg
NWVlNWE3YjI5YmVmNDUzOTlkZmQ3OGIzMTIzYzBlMGIyZmM5YWNhMS4uMmViNzA1MzYyNmRmMmU3
N2I5YjIzNjg4MDIwOWVlYWI1MWNlNWE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcApAQCAtNDUsMTcgKzQ1LDkgQEAgV2Vi
RGF0YWJhc2VQcm92aWRlcjo6fldlYkRhdGFiYXNlUHJvdmlkZXIoKQogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXIm
IFdlYkRhdGFiYXNlUHJvdmlkZXI6OmlkYkNvbm5lY3Rpb25Ub1NlcnZlckZvclNlc3Npb24oY29u
c3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1faWRi
U2VydmVyTWFwLmFkZChzZXNzaW9uSUQuc2Vzc2lvbklEKCksIG51bGxwdHIpOwotICAgIGlmIChy
ZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkp
Ci0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViQ29yZTo6SW5Qcm9jZXNz
SURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklEKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
cmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3Jl
YXRlKHNlc3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5UGF0aCgpKTsKLSAgICB9Ci0K
LSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5pZGJTZXJ2ZXIoKS5zZXRQZXJPcmlnaW5RdW90
YShtX2lkYlBlck9yaWdpblF1b3RhKTsKLQotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlLT5jb25uZWN0aW9uVG9TZXJ2ZXIoKTsKKyAgICByZXR1cm4gbV9pZGJTZXJ2ZXJNYXAuZW5z
dXJlKHNlc3Npb25JRC5zZXNzaW9uSUQoKSwgWyZzZXNzaW9uSURdIHsKKyAgICAgICAgcmV0dXJu
IHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpID8gV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpj
cmVhdGUoc2Vzc2lvbklEKSA6IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNl
c3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICB9KS5pdGVyYXRv
ci0+dmFsdWUtPmNvbm5lY3Rpb25Ub1NlcnZlcigpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlUHJv
dmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCkBAIC02MywxMyArNTUsNCBAQCB2b2lkIFdlYkRh
dGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCiAgICAgZm9yIChhdXRvJiBzZXJ2
ZXIgOiBtX2lkYlNlcnZlck1hcC52YWx1ZXMoKSkKICAgICAgICAgc2VydmVyLT5pZGJTZXJ2ZXIo
KS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoLVdhbGxUaW1lOjppbmZpbml0
eSgpLCBbXSB7IH0pOwogfQotCi12b2lkIFdlYkRhdGFiYXNlUHJvdmlkZXI6OnNldElEQlBlck9y
aWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1faWRiUGVyT3JpZ2luUXVvdGEgPSBx
dW90YTsKLQotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJNYXAudmFsdWVzKCkp
Ci0gICAgICAgIHNlcnZlci0+aWRiU2VydmVyKCkuc2V0UGVyT3JpZ2luUXVvdGEocXVvdGEpOwot
fQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJE
YXRhYmFzZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJh
c2VQcm92aWRlci5oCmluZGV4IDUyMjIzMzA5YjM5YmUzZWNhY2ViNjlmYzY5ZjIwMDdlMmM5YjNl
ZGEuLjNmNTA2ZDc2YzNiZjc0NTM0ZjM2M2RmMmE0N2ZlY2JlMzdlMTAxMjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaApAQCAtNDQs
OCArNDQsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9u
VG9TZXJ2ZXImIGlkYkNvbm5lY3Rpb25Ub1NlcnZlckZvclNlc3Npb24oY29uc3QgUEFMOjpTZXNz
aW9uSUQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci0KLSAg
ICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKICNlbmRpZgogCiBwcml2YXRl
OgpAQCAtNTUsNiArNTMsNSBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNl
cnZlcj4+IG1faWRiU2VydmVyTWFwOwotICAgIHVpbnQ2NF90IG1faWRiUGVyT3JpZ2luUXVvdGEg
eyBXZWJDb3JlOjpJREJTZXJ2ZXI6OmRlZmF1bHRQZXJPcmlnaW5RdW90YSB9OwogI2VuZGlmCiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFz
ZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNl
TWFuYWdlci5tbQppbmRleCA2ZDYyYTk4Yjk3ZjJlYzI0MTRjN2RiMWFkM2U3MGYyZDBkZjEzZWU0
Li43M2UyMzMxZWJiNmNmYWVkZWVhNGMxZDJmMTJhZDBiYWQ1MjI2NTNjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQpA
QCAtMTU3LDEzICsxNTcsNiBAQCBzdGF0aWMgTlNTdHJpbmcgKmRhdGFiYXNlc0RpcmVjdG9yeVBh
dGgoKTsKICNlbmRpZgogfQogCi0tICh2b2lkKXNldElEQlBlck9yaWdpblF1b3RhOih1aW50NjRf
dClxdW90YQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFdlYkRhdGFiYXNl
UHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldElEQlBlck9yaWdpblF1b3RhKHF1b3RhKTsKLSNlbmRp
ZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogc3RhdGljIGJvb2wgaXNGaWxlSGlk
ZGVuKE5TU3RyaW5nICpmaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
U3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaAppbmRleCAyMTcyNDE2MmI5
NTM4OGE0YTI2YmE5ZWM0ZDZjNTA0ZjQ1ZjY0MDRhLi45MzliNGNmN2UwNTc0MmQzNmUxMzA3N2Mw
Y2E2NjMyZmYzZTVkY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9y
YWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaApAQCAtNzAsNyArNzAsNiBA
QCBleHRlcm4gQ0ZTdHJpbmdSZWYgV2ViRGF0YWJhc2VPcmlnaW5zRGlkQ2hhbmdlTm90aWZpY2F0
aW9uOwogCiAvLyBGb3IgRHVtcFJlbmRlclRyZWUgc3VwcG9ydCBvbmx5CiAtICh2b2lkKWRlbGV0
ZUFsbEluZGV4ZWREYXRhYmFzZXM7Ci0tICh2b2lkKXNldElEQlBlck9yaWdpblF1b3RhOih1aW50
NjRfdClxdW90YTsKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKICsgKHZvaWQpc2NoZWR1bGVFbXB0
eURhdGFiYXNlUmVtb3ZhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0lu
dGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9JbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsCmluZGV4IGU4MWQ0OTM4NTkyZDY4
MjBiMjExYTJlZmI1MzliNjZjZTZkMTUyYzQuLjdhZWJjYWVmNzIwYWFhMjI2YzM4NDUwYTY0OWQ3
MDc3ZDZiY2JlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFj
ZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
SW50ZXJmYWNlcy9JV2ViRGF0YWJhc2VNYW5hZ2VyLmlkbApAQCAtNjksNSArNjksNCBAQCBpbnRl
cmZhY2UgSVdlYkRhdGFiYXNlTWFuYWdlciA6IElVbmtub3duCiBpbnRlcmZhY2UgSVdlYkRhdGFi
YXNlTWFuYWdlcjIgOiBJV2ViRGF0YWJhc2VNYW5hZ2VyCiB7CiAgICAgSFJFU1VMVCBkZWxldGVB
bGxJbmRleGVkRGF0YWJhc2VzKCk7Ci0gICAgSFJFU1VMVCBzZXRJREJQZXJPcmlnaW5RdW90YShb
aW5dIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcAppbmRleCBmOTk2M2YxYzA2ODk2ZDdhMmNiMmQ3
MzNhMThlZmFhYWYzY2U0ODA4Li5kOGRlMjMyNmU1ZjA2ZmU0ZmRhYjYyOTQxMDU1ZmY5YzRiZWYz
NzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5j
cHAKQEAgLTM0NCwxNCArMzQ0LDYgQEAgSFJFU1VMVCBXZWJEYXRhYmFzZU1hbmFnZXI6OmRlbGV0
ZUFsbEluZGV4ZWREYXRhYmFzZXMoKQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdl
YkRhdGFiYXNlTWFuYWdlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25n
IHF1b3RhKQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFdlYkRhdGFiYXNl
UHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldElEQlBlck9yaWdpblF1b3RhKHF1b3RhKTsKLSNlbmRp
ZgotICAgIHJldHVybiBTX09LOwotfQotCiBjbGFzcyBEaWRNb2RpZnlPcmlnaW5EYXRhIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShEaWRNb2RpZnlPcmlnaW5EYXRhKTsKIHB1YmxpYzoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKaW5kZXggZTBmZTNl
M2I4ODFiNjEzZThiMGY5NzZhODVjYWQ4NDliYjcyNzQ3Ny4uNTFiNjQ1ZjcyODQ3NWQxNjY0YTlh
ZmFkZGRiYjkxMGQ1OGJlOWI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViRGF0YWJhc2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0
YWJhc2VNYW5hZ2VyLmgKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogCiAgICAgLy8gSVdlYkRh
dGFiYXNlTWFuYWdlcjIKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGVs
ZXRlQWxsSW5kZXhlZERhdGFiYXNlcygpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBzZXRJREJQZXJPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcpOwogCiAgICAg
Ly8gRGF0YWJhc2VNYW5hZ2VyQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9k
aWZ5T3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDExN2RhZWFmZDI0NGFj
MDcxOWRjNGExZTZiZGU5OTI0NTc5ZjEzNjYuLmI4YzU5YWIyYjQ3YmZiMzVjYzdjNzUyN2IwNWFi
MmUxYTNjOGZmMjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucyk6
CisgICAgICAgIChzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVy
OjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAo
V1RSOjpUZXN0UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdU
Ujo6VGVzdENvbnRyb2xsZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0
aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwog
MjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAg
UGFzcyBzdG9yYWdlIHF1b3RhIHBhcmFtZXRlcnMgZnJvbSBVSVByb2Nlc3MgdG8gTmV0d29ya1By
b2Nlc3MgYXMgcGFydCBvZiBXZWJzaXRlRGF0YVN0b3JlIHBhcmFtZXRlcnMKZGlmZiAtLWdpdCBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXggNjIyMjI0MmEwYTg5MDMxZDZkYTFiOGEzOGY5MDg3YTE1
ZjdlMWFkYS4uNWFiNzE2OGE0OTQxNmIzZWNiOGM3OWI1MjVmNTEyODY4OGFiYTI2NCAxMDA2NDQK
LS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKQEAgLTkzNCwyMCArOTM0LDYgQEAgc3RhdGljIEpT
VmFsdWVSZWYgc2V0RGF0YWJhc2VRdW90YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW4KICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7
CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAg
IGF1dG8qIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAKLSAgICBkb3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBudWxscHRyKTsKLSAgICBpZiAoIXN0ZDo6aXNu
YW4ocXVvdGEpKQotICAgICAgICBjb250cm9sbGVyLT5zZXRJREJQZXJPcmlnaW5RdW90YShzdGF0
aWNfY2FzdDx1aW50NjRfdD4ocXVvdGEpKTsKLSAgICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Ci19Ci0KIHN0YXRpYyBKU1ZhbHVlUmVmIHNldERlZmVyc0xvYWRp
bmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgaWYgKGFyZ3Vt
ZW50Q291bnQgPCAxKQpAQCAtMjIyNSw3ICsyMjExLDYgQEAgSlNTdGF0aWNGdW5jdGlvbiogVGVz
dFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAgICAgeyAic2V0UmVqZWN0c1Byb3RlY3Rp
b25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzIiwgc2V0UmVqZWN0
c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlcyIsIHNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXNDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJzZXRJY29uRGF0YWJhc2VFbmFibGVkIiwgc2V0SWNvbkRhdGFiYXNlRW5h
YmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsgInNldElEQlBlck9yaWdpblF1b3RhIiwg
c2V0SURCUGVyT3JpZ2luUXVvdGFDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCIsIHNldEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFi
bGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0TWFpbkZyYW1lSXNGaXJzdFJlc3Bv
bmRlciIsIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXJDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24iLCBzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCmluZGV4IDQyMDkx
OTBiMzYyZGMwZGZhMjcyZjgzZjUzNzViMGFhYjA1MTlmMGUuLmJiNjNlZDVmMTgwOGIwYTk2MjFk
ZjdhNDc1ZWNhYTYzYTgxYmFjZmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTEw
Niw3ICsxMDYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlk
ZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBKU1N0cmluZ1JlZiBzY2hlbWUpOwogICAg
IHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKICAgICB2b2lkIHNldEljb25EYXRhYmFzZUVu
YWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAg
ICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xpcGJvYXJkKGJvb2wgZmxhZyk7CiAgICAg
dm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZChib29sIGZsYWcpOwogICAgIHZv
aWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihib29sIGZsYWcpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IDY2YzNmYjk4NDNhY2FjYWNhM2Fl
MzMyY2NmODliMmRlMGUwZjJhNDUuLjgyODYyMDAyZmMwZjczMjIzZDJhM2ZlN2ZmZGUzMTIzYzhl
NjY2NWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAg
LTIwMjYsNyArMjAyNiw2IEBAIHN0YXRpYyB2b2lkIHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1
dExpbmUpCiAgICAgZ1Rlc3RSdW5uZXItPmNsZWFyQWxsQXBwbGljYXRpb25DYWNoZXMoKTsKIAog
ICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbERhdGFiYXNlcygpOwotICAgIGdUZXN0UnVubmVyLT5z
ZXRJREJQZXJPcmlnaW5RdW90YSg1MCAqIE1CKTsKIAogICAgIGlmIChkaXNhbGxvd2VkVVJMcykK
ICAgICAgICAgQ0ZTZXRSZW1vdmVBbGxWYWx1ZXMoZGlzYWxsb3dlZFVSTHMpOwpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQppbmRleCA3NDI1MTdjZmY3MTA1MjBiZGFh
YTE3YWYyMmVhN2I5OTg0YTlkZTMzLi4wYmNkNTU1Njc3YmNkMDIyNGE2ZWU2NTc2MzM1MWY5YzE3
NWMxYjI3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1h
Yy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAt
NDMzLDExICs0MzMsNiBAQCB2b2lkIFRlc3RSdW5uZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWdu
ZWQgbG9uZyBsb25nIHF1b3RhKQogICAgIFtvcmlnaW4gcmVsZWFzZV07CiB9CiAKLXZvaWQgVGVz
dFJ1bm5lcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgW1tX
ZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJhc2VNYW5hZ2VyXSBzZXRJREJQZXJPcmln
aW5RdW90YTpxdW90YV07Ci19Ci0KIHZvaWQgVGVzdFJ1bm5lcjo6Z29CYWNrKCkKIHsKICAgICBb
W21haW5GcmFtZSB3ZWJWaWV3XSBnb0JhY2tdOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5k
ZXggMDg3ZGE4NDY1MjU3ZmJlNjlkMzU4YmY1NzcwZWY3MjMyYzY5NTViMC4uODY4YWY1ZWQ1Yzdi
NGFiYjA4NjY2Mjc0NWQ5ODkzNGU2MGIwNzIzMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRs
CkBAIC0xMzgsOSArMTM4LDYgQEAgaW50ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIGF0dHJpYnV0
ZSBkb3VibGUgZGF0YWJhc2VEZWZhdWx0UXVvdGE7CiAgICAgYXR0cmlidXRlIGRvdWJsZSBkYXRh
YmFzZU1heFF1b3RhOwogCi0gICAgLy8gSW5kZXhlZERCIEFQSQotICAgIHZvaWQgc2V0SURCUGVy
T3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKTsKLQogICAgIC8vIEFwcGxpY2F0
aW9uIENhY2hlIEFQSQogICAgIHZvaWQgY2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwogICAg
IHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcAppbmRleCAxYzlhZjMzMTk3MGJlNGM0Njc1ZmI2OTM5Zjk0N2Q4OWExMWMxZTQ2Li42MGJj
OWFlYTZkMWVmMWQxNTAwYzVmM2E2MDMzOTI3YzQ5OGY3MDcwIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQxNiwx
MyArNDE2LDYgQEAgdm9pZCBUZXN0UnVubmVyOjpkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRp
b25DYWNoZVF1b3RhKCkKICAgICBtX2Rpc2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hl
UXVvdGEgPSB0cnVlOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3Rh
KHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdl
TmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiU2V0SURCUGVyT3Jp
Z2luUXVvdGEiKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5KEFk
b3B0V0ssIFdLVUludDY0Q3JlYXRlKHF1b3RhKSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25v
dXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKLX0KLQogc3RhdGljIGlubGlu
ZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJh
eVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXpl
KHN0cmluZ3MpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAppbmRleCA4NGFiMjE5MzMzNjZkM2Q3ZTY3YzkxNjhlZDhkMDY2YzE2MTQx
NjE1Li4xNTkxYWM4NWQ4ZTU4NDcyNDRlZTI4MzIyYzdhZWM1N2Y4YTVjYTUyIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAt
MTc2LDkgKzE3Niw2IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBkb21DYWNoZVNpemUoSlNTdHJp
bmdSZWYgb3JpZ2luKTsKICAgICB2b2lkIHNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9v
bCk7CiAKLSAgICAvLyBJbmRleGVkREIKLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVp
bnQ2NF90KTsKLQogICAgIC8vIEZhaWxlZCBsb2FkIGNvbmRpdGlvbiB0ZXN0aW5nCiAgICAgdm9p
ZCBmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24oKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RDb250cm9sbGVyLmNwcAppbmRleCA1M2QxMzQ3MTQzM2MwZjEzMmZhODViMTVjNDdlN2Y4NThi
NWRhNTRhLi40N2E2M2NiYjYyMGI3Yzg1ZGVjZmZlMWE2ZDIzYTY4ZGNhMjU4NWQzIDEwMDY0NAot
LS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtOTAxLDcgKzkwMSw2IEBA
IGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3Qg
VGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAgICAgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50
aWFscyhUZXN0Q29udHJvbGxlcjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKIAogICAgIENsZWFy
SW5kZXhlZERhdGFiYXNlcygpOwotICAgIHNldElEQlBlck9yaWdpblF1b3RhKDUwICogTUIpOwog
CiAgICAgY2xlYXJTZXJ2aWNlV29ya2VyUmVnaXN0cmF0aW9ucygpOwogICAgIGNsZWFyRE9NQ2Fj
aGVzKCk7CkBAIC0yOTg2LDExICsyOTg1LDYgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJE
T01DYWNoZXMoKQogICAgIHJ1blVudGlsKGNvbnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAot
dm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEp
Ci17Ci0gICAgV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEocGxhdGZvcm1Db250ZXh0KCks
IHF1b3RhKTsKLX0KLQogc3RydWN0IFJlbW92ZUFsbEluZGV4ZWREYXRhYmFzZXNDYWxsYmFja0Nv
bnRleHQgewogICAgIGV4cGxpY2l0IFJlbW92ZUFsbEluZGV4ZWREYXRhYmFzZXNDYWxsYmFja0Nv
bnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRyb2xsZXIpCiAgICAgICAgIDogdGVzdENvbnRyb2xs
ZXIoY29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRl
eCBhY2U2YTU0MTAyYzg5YmRhZWM2YWEzZTNjYzA2NTZjNTkzNThkNTljLi5mMmNhNTQ0YWNjZGJk
MDE2YTcwNjE3N2Q5YWQ5MTNmMmEzNzk4ZTM4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oCkBAIC0yNjcsOCArMjY3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRB
bGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJvb2wpOwogCi0gICAgdm9pZCBzZXRJREJQZXJPcmln
aW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICBib29sIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZv
clByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkUmVjZWl2ZVNlcnZl
clJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uOyB9CiAgICAgdm9pZCBjbGVhckRpZFJl
Y2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIHsgbV9kaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24gPSBmYWxzZTsgfQogCmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCmluZGV4IDRjNzAzN2I3ZjU3
NzVjNjY3ZGYzOGIwMzEzYzFkYWMwMDRhYmU1MjAuLmNlNWE5YzNmMDUzMWZiNDMzN2FmMWY5NGJk
M2YxYzJjZDFiMTQ1ZGIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCkBAIC0xNDkzLDEzICsxNDkzLDYgQEAgV0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52
b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQogCi0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRG
OENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRJREJQZXJPcmlnaW5RdW90YSIpKSB7Ci0gICAgICAg
IEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7
Ci0gICAgICAgIFdLVUludDY0UmVmIHF1b3RhID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1l
c3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElEQlBl
ck9yaWdpblF1b3RhKFdLVUludDY0R2V0VmFsdWUocXVvdGEpKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVz
c2FnZU5hbWUsICJJbmplY3RVc2VyU2NyaXB0IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlw
ZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJp
bmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366665</attachid>
            <date>2019-04-03 16:19:15 -0700</date>
            <delta_ts>2019-04-05 14:56:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196545-20190403161915.patch</filename>
            <type>text/plain</type>
            <size>46588</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzNjk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmI5ZDZkN2VlOTRhMzNm
YWU2NjkyOTBiMGY2NTI4Mjg1ZTdiM2JjMi4uNzg2MGQyMjliMjhmZmJiNDJmOGRjZTczYWYzYmMw
NjQ0NzljMzJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE5LTA0LTAzICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNp
ZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IgYXMgSURCIHNwZWNpZmljIHF1b3RhIGlzIG5vIGxvbmdl
ciB1c2VkLgorCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdT
dG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6c2V0UGVyT3Jp
Z2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpwZXJP
cmlnaW5RdW90YSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVn
aW5UcmFuc2FjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2Vy
dmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVjdFN0b3JlKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJbmRleCk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5j
aGVja2VkUHV0SW5kZXhSZWNvcmQpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFNldEtleUdlbmVy
YXRvclZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpxdW90YUZvck9yaWdpbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6bWF4aW11bVNpemUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURC
RGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpVbmlxdWVJREJEYXRh
YmFzZTo6c2V0UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5oOgorCiAyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBQYXNzIHN0b3JhZ2UgcXVvdGEgcGFyYW1ldGVy
cyBmcm9tIFVJUHJvY2VzcyB0byBOZXR3b3JrUHJvY2VzcyBhcyBwYXJ0IG9mIFdlYnNpdGVEYXRh
U3RvcmUgcGFyYW1ldGVycwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAwYjBiODRhY2VkMDRhNWI0OTQ3NzM3YjE3YzQ5
YzcxNWE0NjJlODI1Li41MWVhMjY4ODAyM2E4M2I3NWI3NzIxOWU0YWJlNjJjYWRhMDI2ZGQ0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA0LTAzICBZb3Vlbm4gRmFibGV0ICA8eW91
ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNpZmljIHF1b3RhCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE5ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OmNyZWF0ZUlEQlNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRJ
bmRleGVkRGF0YWJhc2VTZXNzaW9uKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6
OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9j
ZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
OgorICAgICAgICAoV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bv
b2w6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaDoKKwogMjAxOS0wNC0wMyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgUGFzcyBzdG9yYWdlIHF1b3RhIHBhcmFtZXRlcnMgZnJvbSBV
SVByb2Nlc3MgdG8gTmV0d29ya1Byb2Nlc3MgYXMgcGFydCBvZiBXZWJzaXRlRGF0YVN0b3JlIHBh
cmFtZXRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggMjVmZTM1YjAzZTU1MGI3MmMwOGQ0NjY3
M2ZkZmI5ZGMxOWI1YTJmMS4uOTEzODExYTExOWExOThmZjRjOGIwOTI5MGQ4ZDRmZGMyYTdkMGIx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxOS0wNC0wMyAgWW91
ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVj
aWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwOgorICAgICAgICAoV2ViRGF0YWJh
c2VQcm92aWRlcjo6aWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lvbik6CisgICAgICAgIChX
ZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMpOgorICAgICAgICAoV2ViRGF0
YWJhc2VQcm92aWRlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAq
IFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oOgorCiAyMDE5LTAzLTEzICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBJREIgcXVvdGEgdXNhZ2Ug
dGhyb3VnaCBRdW90YU1hbmFnZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBkMTlk
Y2RhZjRhNTM4OGU0M2RhYzg0MDJlNzk2MzUzMGZkZTQ0YzI0Li5lMGVjZjkwMzE2MWRkZWZhNTQ4
ZTc0ZmQyYjFjM2QwMDcwZjBkNzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTktMDQtMDMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFn
ZXIubW06CisgICAgICAgICgtW1dlYkRhdGFiYXNlTWFuYWdlciBzZXRJREJQZXJPcmlnaW5RdW90
YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZh
dGUuaDoKKwogMjAxOS0wMy0zMSAgU2FtIFdlaW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIG1vcmUgaTM4NiBzcGVjaWZpYyBjb25maWd1cmF0aW9ucwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vQ2hhbmdlTG9nCmluZGV4IDY3MTUwZDg0YzZmZGVlYWJkZTIyMGZiYjUwZTIxZDc4NGVh
NDQ4MzIuLjI5NWU3ODhjOGJhMTE3YWEzMzRjYTJjM2YxNzU3OTdlMDA1ODk2YmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wNC0wMyAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZp
YyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBJbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsOgorICAgICAgICAqIFdlYkRhdGFi
YXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJEYXRhYmFzZU1hbmFnZXI6OnNldElEQlBlck9y
aWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJEYXRhYmFzZU1hbmFnZXIuaDoKKwog
MjAxOS0wMy0yOSAgQ2F0aGllIENoZW4gIDxjYXRoaWVjaGVuQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgSW1wbGVtZW50IFJlc2l6ZU9ic2VydmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IGM2ZDdk
NDNmOWViYWRkMjkyNDgwY2Y0ZWFjNDA3ODc1MTAwOWE0MDEuLjM0ZjFlMzU3NTJjN2E5NmZmYTgz
MWNkYjgzMTQ1NWI5YzVlYWVmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKQEAgLTEwMCw3ICsxMDAs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzRXBoZW1lcmFsKCkgPSAwOwogCiAgICAg
dmlydHVhbCB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9yT3JpZ2luKCkgY29uc3QgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXRRdW90YSh1aW50NjRfdCkgPSAwOworCiBwcm90ZWN0ZWQ6CiAgICAg
SURCQmFja2luZ1N0b3JlKCkgeyBSRUxFQVNFX0FTU0VSVCghaXNNYWluVGhyZWFkKCkpOyB9CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcAppbmRleCA2MmYzMjBjZmIwM2NkZGIzZjczMjJkM2I0OGE0OTE3OGM3Mzk4Nzdi
Li4wOGI1ZTU5OTM0ZDAxNTE0M2IyOThkNjEwMTQ4ZTVkMDQ0MzY3NTgwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcApA
QCAtMTM4LDcgKzEzOCw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3RvcmU+IElEQlNl
cnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0
YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE1lbW9yeUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0
b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciwgbV9wZXJPcmlnaW5R
dW90YSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3Jl
PihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1w
b3JhcnlGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpvcGVuRGF0YWJhc2UoY29u
c3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpAQCAtNjk0LDE0ICs2OTQsNiBAQCB2b2lk
IElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVpbnQ2NF90IGNh
bGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6OnNldFBlck9y
aWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1fcGVyT3JpZ2luUXVvdGEgPSBxdW90
YTsKLQotICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBtX3VuaXF1ZUlEQkRhdGFiYXNlTWFwLnZh
bHVlcygpKQotICAgICAgICBkYXRhYmFzZS0+c2V0UXVvdGEocXVvdGEpOwotfQotCiB2b2lkIElE
QlNlcnZlcjo6Y2xvc2VEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSogZGF0YWJhc2UpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCAzM2MzMzEzMWMyMDVlOWEzYjRl
M2ZkODBiY2VmMDlkNjZhYTI4NjJhLi5hNjU0ZjIzN2UyYzk5NTc0ODc2ODM3ZmUxMTVmMDBhNThh
YzhlNzMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oCkBAIC0xMTMsOSArMTEzLDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1l
LCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8
U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRs
ZXIpOwogCi0gICAgdWludDY0X3QgcGVyT3JpZ2luUXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3Bl
ck9yaWdpblF1b3RhOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQZXJPcmlnaW5RdW90
YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIGNsb3NlRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2Uq
KTsKICAgICB2b2lkIGRpZENsb3NlRGF0YWJhc2UoVW5pcXVlSURCRGF0YWJhc2UqKTsKICAgICB2
b2lkIGh5c3RlcmVzaXNVcGRhdGVkKFBBTDo6SHlzdGVyZXNpc1N0YXRlKTsKQEAgLTE5Niw4ICsx
OTMsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKICAg
ICBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgbV9iYWNraW5nU3RvcmVUZW1w
b3JhcnlGaWxlSGFuZGxlcjsKIAotICAgIHVpbnQ2NF90IG1fcGVyT3JpZ2luUXVvdGEgeyBkZWZh
dWx0UGVyT3JpZ2luUXVvdGEgfTsKLQogICAgIFdURjo6RnVuY3Rpb248dm9pZChib29sKT4gbV9p
c0Nsb3NpbmdEYXRhYmFzZUNhbGxiYWNrOwogICAgIFBBTDo6SHlzdGVyZXNpc0FjdGl2aXR5IG1f
aXNDbG9zaW5nRGF0YWJhc2VIeXN0ZXJlc2lzOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggNjRlNmNjN2RlMGNhNjc2N2VjMThkNTE0YmNhYWY0YmQ4YTU2MmM3Zi4uNGViZGU1
MzZjZjMzNzRhYjQ1MjMzZjM3MTViMmQ1OWEwNGQzNzEyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNr
aW5nU3RvcmUuaApAQCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c1Np
bXVsdGFuZW91c1RyYW5zYWN0aW9ucygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29s
IGlzRXBoZW1lcmFsKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBzZXRRdW90
YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBVTlVTRURfUEFSQU0ocXVvdGEpOyB9OwogICAgIHVp
bnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQg
cmVtb3ZlT2JqZWN0U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUm
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggNjI0OTk3NjVhYjlkNGFi
ZDEzZjU5NzBkMmNmZTU1ZjNiMmMxOTNhMC4uYmI4MjFmNzM1Nzg3NWUzOTg5MjAxYzAzMDdiNGUw
NjRlNGQ4MGNjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIzMCwx
MSArMjMwLDEwIEBAIHN0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0
ZXJuYXRlKCkKICAgICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7CiB9CiAKLVNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFi
YXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJl
Y3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlciwg
dWludDY0X3QgcXVvdGEpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFu
ZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAs
IG1fZGF0YWJhc2VSb290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1f
dGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCi0gICAgLCBtX3F1b3RhKHF1b3RhKQog
ewogICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBn
cmFkZSgpOwogfQpAQCAtODc0LDE0ICs4NzMsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwog
ICAgIHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLXVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6cXVvdGFGb3JPcmlnaW4oKSBjb25zdAotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFk
KCkpOwotICAgIHVpbnQ2NF90IGRpc2tGcmVlU3BhY2VTaXplID0gMDsKLSAgICBGaWxlU3lzdGVt
OjpnZXRWb2x1bWVGcmVlU3BhY2UobV9pZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRp
dmVUb1Jvb3QobV9kYXRhYmFzZVJvb3REaXJlY3RvcnkpLCBkaXNrRnJlZVNwYWNlU2l6ZSk7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWluKGRpc2tGcmVlU3BhY2VTaXplIC8gMiwgbV9xdW90YSk7Ci19Ci0K
IHVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihj
b25zdCBTdHJpbmcmIGZvbGRlcikKIHsKICAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSAwOwpAQCAt
ODk5LDI0ICs4OTAsNiBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNl
c1NpemVGb3JPcmlnaW4oKSBjb25zdAogICAgIHJldHVybiBkYXRhYmFzZXNTaXplRm9yRm9sZGVy
KG9sZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihuZXdW
ZXJzaW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
Ci0KLSAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBvbmUgZGF0YWJhc2UgZmlsZSBpcyB0aGUg
cXVvdGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHNpemUgb2YgYWxsIGRhdGFiYXNlcyB3aXRoaW4g
dGhhdCBvcmlnaW4sCi0gICAgLy8gYW5kIHBsdXMgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFz
ZSBmaWxlLgotICAgIHVpbnQ2NF90IGRhdGFiYXNlRmlsZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVt
OjpnZXREYXRhYmFzZUZpbGVTaXplKGZ1bGxEYXRhYmFzZVBhdGgoKSk7Ci0gICAgdWludDY0X3Qg
cXVvdGEgPSBxdW90YUZvck9yaWdpbigpOwotCi0gICAgdWludDY0X3QgZGlza1VzYWdlID0gZGF0
YWJhc2VzU2l6ZUZvck9yaWdpbigpOwotICAgIEFTU0VSVChkaXNrVXNhZ2UgPj0gZGF0YWJhc2VG
aWxlU2l6ZSk7Ci0KLSAgICBpZiAocXVvdGEgPCBkaXNrVXNhZ2UpCi0gICAgICAgIHJldHVybiBk
YXRhYmFzZUZpbGVTaXplOwotCi0gICAgcmV0dXJuIHF1b3RhIC0gZGlza1VzYWdlICsgZGF0YWJh
c2VGaWxlU2l6ZTsKLX0KLQogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRy
YW5zYWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5k
ZXhlZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uIC0gJXMiLCBp
bmZvLmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC05MjUs
NyArODk4LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0
aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBBU1NFUlQobV9zcWxpdGVE
Qi0+aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAKLSAgICBtX3NxbGl0
ZURCLT5zZXRNYXhpbXVtU2l6ZShtYXhpbXVtU2l6ZSgpKTsKICAgICBhdXRvIGFkZFJlc3VsdCA9
IG1fdHJhbnNhY3Rpb25zLmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYg
KCFhZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8g
ZXN0YWJsaXNoIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwpA
QCAtOTQyLDEwICs5MTQsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2lu
VHJhbnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgICAgICBpZiAo
c3FsLnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgx
LCBTdHJpbmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwogICAgICAg
ICAgICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKG1f
c3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIGVy
cm9yID0gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3
IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9y
IGRvbWFpbiJfcyB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yID0g
SURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZl
cnNpb24gaW4gZGF0YWJhc2UiX3MgfTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0
YWJhc2UiX3MgfTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAyOSw4ICs5OTgsNiBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYgdAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgaW5m
by5tYXhJbmRleElEKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFkZCBv
YmplY3Qgc3RvcmUgJyVzJyB0byBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5m
by5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBR
dW90YUV4Y2VlZGVkRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSBiZWNhdXNl
IG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSJfcyB9
OwogICAgICAgICB9CiAgICAgfQpAQCAtMTA0MSw4ICsxMDA4LDYgQEAgSURCRXJyb3IgU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50
aWZpZXImIHQKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRpZmll
cigpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9E
T05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZWVkIGluaXRpYWwga2V5
IGdlbmVyYXRvciB2YWx1ZSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1f
c3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAg
ICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiQ291bGQg
bm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUgYmVj
YXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJu
IElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2Vu
ZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogICAgIH0KQEAg
LTExNjgsOCArMTEzMyw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1l
T2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8
fCBzcWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwog
ICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAg
IExPR19FUlJPUigiQ291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBvYmplY3Qgc3RvcmUgaWQgJSIg
UFJJaTY0ICIgaW4gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3Jl
SWRlbnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJ
VEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVk
RXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBz
cGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9
CiAgICAgfQpAQCAtMTI1Myw4ICsxMjE2LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAg
ICAgICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8ubXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sK
ICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VS
Uk9SKCJDb3VsZCBub3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAl
cyIsIGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0
RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1
b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UgYmVj
YXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNl
Il9zIH07CiAgICAgfQogCkBAIC0xNDAzLDggKzEzNjQsNiBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJ
RCwgaQogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgcmVjb3JkSUQpICE9IFNRTElU
RV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBpbmRleCByZWNvcmQgZm9yIGluZGV4ICUi
IFBSSWk2NCAiIGluIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICgl
aSkgLSAlcyIsIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigp
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVE
Qi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiRXJyb3IgcHV0dGluZyBpbmRleCByZWNvcmQg
aW50byBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAg
ICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBwdXR0aW5n
IGluZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIl9zIH07CiAgICAgICAgIH0KICAgICB9CkBAIC0x
NDk0LDggKzE0NTMsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUlu
ZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICAgICAgfHwg
c3FsLT5iaW5kSW50NjQoMywgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJS
T1IoIkNvdWxkIG5vdCB1cGRhdGUgbmFtZSBmb3IgaW5kZXggaWQgKCUiIFBSSWk2NCAiLCAlIiBQ
UklpNjQgIikgaW4gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRlbnRp
ZmllciwgaW5kZXhJZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVE
Qi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJv
cigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1
b3RhRXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5kZXggYmVjYXVzZSBubyBlbm91
Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsg
VW5rbm93bkVycm9yLCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCJfcyB9OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTgzNSw4ICsxNzkyLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAg
ICAgICAgIHx8IHNxbC0+YmluZEJsb2IoMywgdmFsdWUuZGF0YSgpLmRhdGEoKS0+ZGF0YSgpLCB2
YWx1ZS5kYXRhKCkuZGF0YSgpLT5zaXplKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291
bGQgbm90IHB1dCByZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRz
IHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRl
REItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAg
ICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIHN0
b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRv
bWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAi
VW5hYmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQog
CkBAIC0xODY5LDggKzE4MjQsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFk
ZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAg
ICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
ICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgICAgIExP
R19FUlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpOwotICAg
ICAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9y
LCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVu
b3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRh
YmFzZSJfcyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xOTA0LDggKzE4NTcsNiBA
QCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRl
eHQoMiwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9PSwogICAgICAgICAgICAgICAgIHx8IHNx
bC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJV
bmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVu
YWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNw
YWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJh
c2UiX3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQ0Miw4ICsyMzkzLDYgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JW
YWx1ZShpbnQ2NF90IG9iamVjdFN0b3IKICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgdmFs
dWUpICE9IFNRTElURV9PSwogICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUga2V5IGdlbmVyYXRvciB2YWx1
ZSAoJWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVy
cm9yTXNnKCkpOwotICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRF
X0ZVTEwpCi0gICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3Is
ICJFcnJvciBzdG9yaW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVlIGluIGRhdGFiYXNlIGJlY2F1
c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgQ29uc3RyYWludEVycm9yLCAiRXJyb3Igc3RvcmluZyBuZXcga2V5IGdlbmVyYXRvciB2
YWx1ZSBpbiBkYXRhYmFzZSIgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUu
aAppbmRleCA1NmI1MTdjMmE2MTA3NDRiZGVmMjBlMTg4OWMwNjMxYzMwYWFmYjU4Li40OTI2MmI5
MzVhODc2ZjI4NTVkZDdmNGU0MGJhYzFiZDY3M2M5Zjk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNz
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZShjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9v
dERpcmVjdG9yeSwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImLCB1aW50NjRf
dCBxdW90YSk7CisgICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRl
bnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5n
U3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwogICAgIAogICAgIH5TUUxpdGVJREJCYWNraW5n
U3RvcmUoKSBmaW5hbDsKIApAQCAtODEsNyArODEsNiBAQCBwdWJsaWM6CiAgICAgSURCT2JqZWN0
U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlm
aWVyKSBmaW5hbDsKICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCi0gICAg
dm9pZCBzZXRRdW90YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBtX3F1b3RhID0gcXVvdGE7IH0K
ICAgICB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9yT3JpZ2luKCkgY29uc3QgZmluYWw7CiAKICAg
ICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4g
ZmFsc2U7IH0KQEAgLTEwNSw5ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBmdWxsRGF0
YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhV
cGdyYWRlKCk7CiAKLSAgICB1aW50NjRfdCBxdW90YUZvck9yaWdpbigpIGNvbnN0OwotICAgIHVp
bnQ2NF90IG1heGltdW1TaXplKCkgY29uc3Q7Ci0KICAgICBib29sIGVuc3VyZVZhbGlkUmVjb3Jk
c1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCk7CiAgICAg
Ym9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CkBAIC0yMDYsOCArMjAyLDYgQEAg
cHJpdmF0ZToKICAgICBKU0M6OlN0cm9uZzxKU0M6OkpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9i
amVjdDsKIAogICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBtX3RlbXBv
cmFyeUZpbGVIYW5kbGVyOwotICAgIAotICAgIHVpbnQ2NF90IG1fcXVvdGE7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBJREJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDlhZTQ5
MjI4MTdmYWJjYTc0ZmM1NDA4YjFjNWYzN2U3ZjkxYTk1M2IuLjc3Y2Q2ZTJlMjllM2E0ZjU5YTA5
NDFkM2UwYTVhNDZmZWU5MjBmZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMjI5
OSwxMiArMjI5OSw2IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJh
Y2sodWludDY0X3QgY2FsbGJhY2tJZGVudGlmaWVyKQogICAgIG1fZXJyb3JDYWxsYmFja3MucmVt
b3ZlKGNhbGxiYWNrSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNl
dFF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPnNldFF1b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBVbmlxdWVJREJE
YXRhYmFzZTo6bm90aWZ5U2VydmVyQWJvdXRDbG9zZShDbG9zZVN0YXRlIHN0YXRlKQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCmluZGV4IGJjZTY3
NDVhNmEzYTMxOGJiZTkyMjQ2N2NhMzY5Y2MwZmE4ZThhZTYuLjBkZTNjOTBlMTc5NTY1OGY4Yjli
MTA5ZDYwYzNmMmNkODViNjUxNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCkBAIC0xMjUsOCAr
MTI1LDYgQEAgcHVibGljOgogCiAgICAgdWludDY0X3Qgc3BhY2VVc2VkKCkgY29uc3Q7CiAKLSAg
ICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KTsKLQogcHJpdmF0ZToKICAgICBlbnVtIGNsYXNzIENs
b3NlU3RhdGUgeyBTdGFydCwgRG9uZSB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VRdW90YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZVF1b3RhTWFuYWdlci5oCmluZGV4IDQ4NjJhYzE2YzJhMTQwZGI1MTI5ZTkwODY5MjFjOTRm
MDg2NDYyMTQuLmU4YWY3NjA5MWEyNTcyNDMyYzRkNDQwODhlMGE3ZGZkZjgxNTIwZDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiQ2xpZW50T3JpZ2luLmgiCiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAK
aW5kZXggMWNiNGI2NzRiYWYzYzAyYTNjZjJlYzJiNmM5Mjc1ZTJkOTQ5Y2RmYi4uZTkzMjM3NzE3
MTBiNDRmN2MyMGI3ODRmN2E5OWFhOGNhM2EwY2M5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIxMTgsNyArMjExOCw3IEBAIFJl
ZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMu
Z2V0KHNlc3Npb25JRCk7CiAgICAgfQogCi0gICAgYXV0byBzZXJ2ZXIgPSBJREJTZXJ2ZXI6OklE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9
IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8m
IG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2ZXI6
OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhp
cyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1
dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3RhTWFuYWdlciogewogICAgICAgICBpZiAoIXdlYWtU
aGlzKQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiAmdGhpcy0+
c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CkBAIC0yMTI3LDggKzIxMjcs
NiBAQCBSZWY8SURCU2VydmVyOjpJREJTZXJ2ZXI+IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJT
ZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB0aGlzLT5ub3RpZnlIb2xkaW5nTG9ja2VkRmlsZXMoaXNIb2xkaW5nTG9ja2VkRmlsZXMpOwog
ICAgIH0pOwotICAgIHNlcnZlci0+c2V0UGVyT3JpZ2luUXVvdGEobV9pZGJQZXJPcmlnaW5RdW90
YSk7Ci0gICAgcmV0dXJuIHNlcnZlcjsKIH0KIAogSURCU2VydmVyOjpJREJTZXJ2ZXImIE5ldHdv
cmtQcm9jZXNzOjppZGJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtMjIyNCwx
NCArMjIyMiw2IEBAIHZvaWQgTmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Np
b24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBTdHJpbmcmCiAgICAgICAgICAgICBwb3N0U3Rv
cmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJlYWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVu
c3VyZVBhdGhFeGlzdHMsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeSkpOwogICAgIH0KIH0KLQot
dm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEp
Ci17Ci0gICAgbV9pZGJQZXJPcmlnaW5RdW90YSA9IHF1b3RhOwotICAgIAotICAgIGZvciAoYXV0
byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJzLnZhbHVlcygpKQotICAgICAgICBzZXJ2ZXItPnNldFBl
ck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vzczo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZv
clRlc3RpbmcoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9y
aWdpbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaApp
bmRleCA2MzQ3YzE4YzdkZGZkYjNkOGYyZTFmNjNmY2VkODQ4NzM0MTc4ZjkzLi4wMGU5ZTM2ODUy
YzE5MDkyYzU5NmQxYTI5MTcxODQyMGJkNzkwNDE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yNzcsNyArMjc3LDYgQEAgcHVibGljOgog
ICAgIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoUEFMOjpTZXNzaW9u
SUQpOwogICAgIC8vIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhhbmRs
ZXIuCiAgICAgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShjb25zdCBTdHJpbmcm
IHBhdGgpIGZpbmFsOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwog
I2VuZGlmCiAgICAgdm9pZCB1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQ
QUw6OlNlc3Npb25JRCwgY29uc3QgV2ViQ29yZTo6Q2xpZW50T3JpZ2luJik7CiAKQEAgLTUxNCw3
ICs1MTMsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0cmluZz4gbV9pZGJEYXRhYmFzZVBhdGhzOwogICAgIEhh
c2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZl
cj4+IG1faWRiU2VydmVyczsKLSAgICB1aW50NjRfdCBtX2lkYlBlck9yaWdpblF1b3RhIHsgV2Vi
Q29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsKICNlbmRpZgogCiAgICAg
RGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4
IGRiZjNjYTdhZTJlNWIwOGYwOGQ2NWE4OGRjNTYwMGZjYWU1M2Q2YmQuLmRlNDA2MDBjOTBjNzY0
NzA5OTliY2FkZWUxN2QyYWFmMDk2NjcwYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktp
dC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTYxLDkgKzE2
MSw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBE
aXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRlbGF5KCkKICNlbmRpZgogCi0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2V0SURCUGVyT3JpZ2luUXVvdGEodWlu
dDY0X3QgcXVvdGEpCi0jZW5kaWYKICAgICBVcGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9y
VGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpDbGllbnRP
cmlnaW4gb3JpZ2luKQogCiAgICAgU3RvcmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9u
SUQgc2Vzc2lvbklELCBXZWJDb3JlOjpBZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXgg
OTNmNzZhNzk2MTA3ZDdjNDI1YWExMzM5MDg5MDUxMmEwZmFjYWZkNS4uNmI4OTYxMDNhZTBmMjZl
MTc4OTczMTRlMDM4YTA0NjU3Mzk1ZTM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHQuY3BwCkBAIC02NTksMTEgKzY1OSw2IEBAIHZvaWQgV0tDb250ZXh0Q2xl
YXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQogI2VuZGlmCiB9CiAK
LXZvaWQgV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYsIHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5z
ZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAg
ICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVG
b3JUZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRl
eHRQcml2YXRlLmgKaW5kZXggZjljN2QzMjk2ZTVjMGNkN2YzMzY3ZGUzOWEwMzFkMjgzZmJlNjY2
Ni4uMGMxN2IxYTExMmMyZWMxZjJlODUwMjE3YWI1MWY2NjRhNTE4YWVhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAtMTE2LDgg
KzExNiw2IEBAIFdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vz
c0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRl
eHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRv
bWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYg
ZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdp
bnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJ
REJQZXJPcmlnaW5RdW90YShXS0NvbnRleHRSZWYgY29udGV4dCwgdWludDY0X3QgcXVvdGEpOwot
CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVz
dGluZyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCmluZGV4IGZkMDMyY2M1M2ZiOTM2
OTc1ZGU3MWYzODI2ZTQxY2FkZTJiN2E5YjEuLjNjZmJjNDNlNDBjOGI0MTZiMzMxZGU2ZmY2ZTk3
ZDczYmE2NmFhMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5j
cHAKQEAgLTE3NjAsMTMgKzE3NjAsNiBAQCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29y
a1Byb2Nlc3NDb29raWVzKCkKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29r
aWVzKCk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnNldElEQlBlck9yaWdpblF1b3RhKHVp
bnQ2NF90IHF1b3RhKQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGVuc3Vy
ZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChNZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElEQlBl
ck9yaWdpblF1b3RhKHF1b3RhKSwgMCk7Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9v
bDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2VydGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmlj
YXRlSW5mbyogY2VydGlmaWNhdGUsIGNvbnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBlbnN1cmVO
ZXR3b3JrUHJvY2VzcygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgK
aW5kZXggMjE1N2I2YjA5YWNjMGNhNTBlODYxMjgyODIxYjE5ZWFhNWVhZDg2Ni4uMzRkYzRiMTJk
NjZhZTc5ZDA4Y2U3NjgzMzdlNGU2NTczNzRhMjFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5oCkBAIC0yOTksOCArMjk5LDYgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKCk7CiAKLSAgICB2b2lkIHNldElEQlBlck9yaWdp
blF1b3RhKHVpbnQ2NF90KTsKLQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VO
ZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91
bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0
U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFs
dWUpIHsgbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3Rpbmcg
PSB2YWx1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRh
dGFiYXNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFi
YXNlUHJvdmlkZXIuY3BwCmluZGV4IDVlZTVhN2IyOWJlZjQ1Mzk5ZGZkNzhiMzEyM2MwZTBiMmZj
OWFjYTEuLjJlYjcwNTM2MjZkZjJlNzdiOWIyMzY4ODAyMDllZWFiNTFjZTVhOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAK
QEAgLTQ1LDE3ICs0NSw5IEBAIFdlYkRhdGFiYXNlUHJvdmlkZXI6On5XZWJEYXRhYmFzZVByb3Zp
ZGVyKCkKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIFdlYkNvcmU6OklEQkNsaWVudDo6
SURCQ29ubmVjdGlvblRvU2VydmVyJiBXZWJEYXRhYmFzZVByb3ZpZGVyOjppZGJDb25uZWN0aW9u
VG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCiB7Ci0g
ICAgYXV0byByZXN1bHQgPSBtX2lkYlNlcnZlck1hcC5hZGQoc2Vzc2lvbklELnNlc3Npb25JRCgp
LCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKHNl
c3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZSA9IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJDb3JlOjpJ
blByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGluZGV4ZWREYXRhYmFzZURpcmVj
dG9yeVBhdGgoKSk7Ci0gICAgfQotCi0gICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+aWRiU2Vy
dmVyKCkuc2V0UGVyT3JpZ2luUXVvdGEobV9pZGJQZXJPcmlnaW5RdW90YSk7Ci0KLSAgICByZXR1
cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Y29ubmVjdGlvblRvU2VydmVyKCk7CisgICAgcmV0
dXJuIG1faWRiU2VydmVyTWFwLmVuc3VyZShzZXNzaW9uSUQuc2Vzc2lvbklEKCksIFsmc2Vzc2lv
bklEXSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSA/IFdlYkNvcmU6
OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCkgOiBXZWJDb3JlOjpJblByb2Nl
c3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeVBh
dGgoKSk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5jb25uZWN0aW9uVG9TZXJ2ZXIoKTsKIH0K
IAogdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMoKQpAQCAtNjMs
MTMgKzU1LDQgQEAgdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMo
KQogICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJNYXAudmFsdWVzKCkpCiAgICAg
ICAgIHNlcnZlci0+aWRiU2VydmVyKCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNp
bmNlKC1XYWxsVGltZTo6aW5maW5pdHkoKSwgW10geyB9KTsKIH0KLQotdm9pZCBXZWJEYXRhYmFz
ZVByb3ZpZGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBt
X2lkYlBlck9yaWdpblF1b3RhID0gcXVvdGE7Ci0KLSAgICBmb3IgKGF1dG8mIHNlcnZlciA6IG1f
aWRiU2VydmVyTWFwLnZhbHVlcygpKQotICAgICAgICBzZXJ2ZXItPmlkYlNlcnZlcigpLnNldFBl
ck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oIGIvU291cmNlL1dlYktpdExl
Z2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaAppbmRleCA1MjIyMzMwOWIzOWJlM2Vj
YWNlYjY5ZmM2OWYyMDA3ZTJjOWIzZWRhLi4zZjUwNmQ3NmMzYmY3NDUzNGYzNjNkZjJhNDdmZWNi
ZTM3ZTEwMTIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0
YWJhc2VQcm92aWRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRh
YmFzZVByb3ZpZGVyLmgKQEAgLTQ0LDggKzQ0LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OklE
QkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBpZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JT
ZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lvbklEJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRlbGV0
ZUFsbERhdGFiYXNlcygpOwotCi0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRf
dCk7CiAjZW5kaWYKIAogcHJpdmF0ZToKQEAgLTU1LDYgKzUzLDUgQEAgcHJpdmF0ZToKIAogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxX
ZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI+PiBtX2lkYlNlcnZlck1hcDsKLSAgICB1aW50NjRf
dCBtX2lkYlBlck9yaWdpblF1b3RhIHsgV2ViQ29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3Jp
Z2luUXVvdGEgfTsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KaW5kZXggNmQ2MmE5OGI5N2YyZWMyNDE0
YzdkYjFhZDNlNzBmMmQwZGYxM2VlNC4uNzNlMjMzMWViYjZjZmFlZGVlYTRjMWQyZjEyYWQwYmFk
NTIyNjUzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJE
YXRhYmFzZU1hbmFnZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9X
ZWJEYXRhYmFzZU1hbmFnZXIubW0KQEAgLTE1NywxMyArMTU3LDYgQEAgc3RhdGljIE5TU3RyaW5n
ICpkYXRhYmFzZXNEaXJlY3RvcnlQYXRoKCk7CiAjZW5kaWYKIH0KIAotLSAodm9pZClzZXRJREJQ
ZXJPcmlnaW5RdW90YToodWludDY0X3QpcXVvdGEKLXsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLSAgICBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmln
aW5RdW90YShxdW90YSk7Ci0jZW5kaWYKLX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAK
IHN0YXRpYyBib29sIGlzRmlsZUhpZGRlbihOU1N0cmluZyAqZmlsZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2
YXRlLmgKaW5kZXggMjE3MjQxNjJiOTUzODhhNGEyNmJhOWVjNGQ2YzUwNGY0NWY2NDA0YS4uOTM5
YjRjZjdlMDU3NDJkMzZlMTMwNzdjMGNhNjYzMmZmM2U1ZGNmMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2
YXRlLmgKQEAgLTcwLDcgKzcwLDYgQEAgZXh0ZXJuIENGU3RyaW5nUmVmIFdlYkRhdGFiYXNlT3Jp
Z2luc0RpZENoYW5nZU5vdGlmaWNhdGlvbjsKIAogLy8gRm9yIER1bXBSZW5kZXJUcmVlIHN1cHBv
cnQgb25seQogLSAodm9pZClkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzOwotLSAodm9pZClzZXRJ
REJQZXJPcmlnaW5RdW90YToodWludDY0X3QpcXVvdGE7CiAKICNpZiBUQVJHRVRfT1NfSVBIT05F
CiArICh2b2lkKXNjaGVkdWxlRW1wdHlEYXRhYmFzZVJlbW92YWw7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRGF0YWJhc2VNYW5hZ2VyLmlk
bAppbmRleCBlODFkNDkzODU5MmQ2ODIwYjIxMWEyZWZiNTM5YjY2Y2U2ZDE1MmM0Li43YWViY2Fl
ZjcyMGFhYTIyNmMzODQ1MGE2NDlkNzA3N2Q2YmNiZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwK
QEAgLTY5LDUgKzY5LDQgQEAgaW50ZXJmYWNlIElXZWJEYXRhYmFzZU1hbmFnZXIgOiBJVW5rbm93
bgogaW50ZXJmYWNlIElXZWJEYXRhYmFzZU1hbmFnZXIyIDogSVdlYkRhdGFiYXNlTWFuYWdlcgog
ewogICAgIEhSRVNVTFQgZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcygpOwotICAgIEhSRVNVTFQg
c2V0SURCUGVyT3JpZ2luUXVvdGEoW2luXSB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKaW5kZXgg
Zjk5NjNmMWMwNjg5NmQ3YTJjYjJkNzMzYTE4ZWZhYWFmM2NlNDgwOC4uZDhkZTIzMjZlNWYwNmZl
NGZkYWI2Mjk0MTA1NWZmOWM0YmVmMzcyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCkBAIC0zNDQsMTQgKzM0NCw2IEBAIEhSRVNVTFQgV2Vi
RGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzKCkKICAgICByZXR1cm4g
U19PSzsKIH0KIAotSFJFU1VMVCBXZWJEYXRhYmFzZU1hbmFnZXI6OnNldElEQlBlck9yaWdpblF1
b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKLSAgICBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmln
aW5RdW90YShxdW90YSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gU19PSzsKLX0KLQogY2xhc3MgRGlk
TW9kaWZ5T3JpZ2luRGF0YSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGlkTW9kaWZ5T3Jp
Z2luRGF0YSk7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJEYXRhYmFzZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNl
TWFuYWdlci5oCmluZGV4IGUwZmUzZTNiODgxYjYxM2U4YjBmOTc2YTg1Y2FkODQ5YmI3Mjc0Nzcu
LjUxYjY0NWY3Mjg0NzVkMTY2NGE5YWZhZGRkYmI5MTBkNThiZTliNWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oCkBAIC01Niw3ICs1Niw2IEBAIHB1
YmxpYzoKIAogICAgIC8vIElXZWJEYXRhYmFzZU1hbmFnZXIyCiAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIGRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKTsKLSAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0SURCUGVyT3JpZ2luUXVvdGEodW5zaWdu
ZWQgbG9uZyBsb25nKTsKIAogICAgIC8vIERhdGFiYXNlTWFuYWdlckNsaWVudAogICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9y
aWdpbkRhdGEmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCAxMTdkYWVhZmQyNDRhYzA3MTlkYzRhMWU2YmRlOTkyNDU3OWYxMzY2Li5iOGM1OWFi
MmI0N2JmYjM1Y2M3Yzc1MjdiMDVhYjJlMWEzYzhmZjI2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTktMDQtMDMg
IFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREIt
c3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChUZXN0UnVu
bmVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAoc2V0SURCUGVyT3JpZ2luUXVvdGFDYWxs
YmFjayk6IERlbGV0ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAg
KHJ1blRlc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1t
OgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1
bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SURCUGVyT3JpZ2luUXVv
dGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIu
Y3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVu
dFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRJREJQZXJPcmlnaW5R
dW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTktMDQtMDMgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5A
YXBwbGUuY29tPgogCiAgICAgICAgIFBhc3Mgc3RvcmFnZSBxdW90YSBwYXJhbWV0ZXJzIGZyb20g
VUlQcm9jZXNzIHRvIE5ldHdvcmtQcm9jZXNzIGFzIHBhcnQgb2YgV2Vic2l0ZURhdGFTdG9yZSBw
YXJhbWV0ZXJzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNw
cCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDYyMjIyNDJhMGE4
OTAzMWQ2ZGExYjhhMzhmOTA4N2ExNWY3ZTFhZGEuLjVhYjcxNjhhNDk0MTZiM2VjYjhjNzliNTI1
ZjUxMjg2ODhhYmEyNjQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5u
ZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCkBAIC05MzQs
MjAgKzkzNCw2IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRJREJQZXJP
cmlnaW5RdW90YUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBp
ZiAoYXJndW1lbnRDb3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKLSAgICAKLSAgICBhdXRvKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVz
dFJ1bm5lcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgZG91
YmxlIHF1b3RhID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgbnVsbHB0
cik7Ci0gICAgaWYgKCFzdGQ6OmlzbmFuKHF1b3RhKSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0
SURCUGVyT3JpZ2luUXVvdGEoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHF1b3RhKSk7Ci0gICAgCi0g
ICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCiBzdGF0aWMgSlNW
YWx1ZVJlZiBzZXREZWZlcnNMb2FkaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKQEAgLTIyMjUsNyArMjIxMSw2IEBA
IEpTU3RhdGljRnVuY3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAg
IHsgInNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlcyIsIHNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldEhhbmRs
ZXNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZXMiLCBzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFs
bGVuZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0SWNvbkRhdGFiYXNlRW5hYmxl
ZCIsIHNldEljb25EYXRhYmFzZUVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJz
ZXRJREJQZXJPcmlnaW5RdW90YSIsIHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAic2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQiLCBzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNl
dE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIiLCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVy
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0TW9ja0RldmljZU9yaWVudGF0aW9uIiwg
c2V0TW9ja0RldmljZU9yaWVudGF0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RSdW5uZXIuaAppbmRleCA0MjA5MTkwYjM2MmRjMGRmYTI3MmY4M2Y1Mzc1YjBhYWIwNTE5ZjBl
Li5iYjYzZWQ1ZjE4MDhiMGE5NjIxZGY3YTQ3NWVjYWE2M2E4MWJhY2ZhIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5oCkBAIC0xMDYsNyArMTA2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
RG9tYWluUmVsYXhhdGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNT
dHJpbmdSZWYgc2NoZW1lKTsKICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAg
dm9pZCBzZXRJY29uRGF0YWJhc2VFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0SURCUGVyT3Jp
Z2luUXVvdGEodWludDY0X3QpOwogICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBi
b2FyZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJs
ZWQoYm9vbCBmbGFnKTsKICAgICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9v
bCBmbGFnKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRl
eCA2NmMzZmI5ODQzYWNhY2FjYTNhZTMzMmNjZjg5YjJkZTBlMGYyYTQ1Li44Mjg2MjAwMmZjMGY3
MzIyM2QyYTNmZTdmZmRlMzEyM2M4ZTY2NjVmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tCkBAIC0yMDI2LDcgKzIwMjYsNiBAQCBzdGF0aWMgdm9pZCBydW5U
ZXN0KGNvbnN0IHN0cmluZyYgaW5wdXRMaW5lKQogICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbEFw
cGxpY2F0aW9uQ2FjaGVzKCk7CiAKICAgICBnVGVzdFJ1bm5lci0+Y2xlYXJBbGxEYXRhYmFzZXMo
KTsKLSAgICBnVGVzdFJ1bm5lci0+c2V0SURCUGVyT3JpZ2luUXVvdGEoNTAgKiBNQik7CiAKICAg
ICBpZiAoZGlzYWxsb3dlZFVSTHMpCiAgICAgICAgIENGU2V0UmVtb3ZlQWxsVmFsdWVzKGRpc2Fs
bG93ZWRVUkxzKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVu
bmVyTWFjLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5k
ZXggNzQyNTE3Y2ZmNzEwNTIwYmRhYWExN2FmMjJlYTdiOTk4NGE5ZGUzMy4uMGJjZDU1NTY3N2Jj
ZDAyMjRhNmVlNjU3NjMzNTFmOWMxNzVjMWIyNyAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L1Rlc3RSdW5uZXJNYWMubW0KQEAgLTQzMywxMSArNDMzLDYgQEAgdm9pZCBUZXN0UnVubmVyOjpz
ZXREYXRhYmFzZVF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKICAgICBbb3JpZ2luIHJl
bGVhc2VdOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2
NF90IHF1b3RhKQotewotICAgIFtbV2ViRGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNl
TWFuYWdlcl0gc2V0SURCUGVyT3JpZ2luUXVvdGE6cXVvdGFdOwotfQotCiB2b2lkIFRlc3RSdW5u
ZXI6OmdvQmFjaygpCiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gZ29CYWNrXTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVz
dFJ1bm5lci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsCmluZGV4IDA4N2RhODQ2NTI1N2ZiZTY5ZDM1OGJmNTc3MGVmNzIz
MmM2OTU1YjAuLjg2OGFmNWVkNWM3YjRhYmIwODY2NjI3NDVkOTg5MzRlNjBiMDcyMzMgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVz
dFJ1bm5lci5pZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbApAQCAtMTM4LDkgKzEzOCw2IEBAIGludGVyZmFjZSBUZXN0
UnVubmVyIHsKICAgICBhdHRyaWJ1dGUgZG91YmxlIGRhdGFiYXNlRGVmYXVsdFF1b3RhOwogICAg
IGF0dHJpYnV0ZSBkb3VibGUgZGF0YWJhc2VNYXhRdW90YTsKIAotICAgIC8vIEluZGV4ZWREQiBB
UEkKLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSk7Ci0KICAgICAvLyBBcHBsaWNhdGlvbiBDYWNoZSBBUEkKICAgICB2b2lkIGNsZWFyQWxsQXBw
bGljYXRpb25DYWNoZXMoKTsKICAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWdu
ZWQgbG9uZyBsb25nIHNpemUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggMWM5YWYzMzE5NzBiZTRjNDY3NWZiNjkz
OWY5NDdkODlhMTFjMWU0Ni4uNjBiYzlhZWE2ZDFlZjFkMTUwMGM1ZjNhNjAzMzkyN2M0OThmNzA3
MCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0
UnVubmVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuY3BwCkBAIC00MTYsMTMgKzQxNiw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxs
b3dJbmNyZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCiAgICAgbV9kaXNhbGxvd0luY3Jl
YXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0UnVubmVy
OjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gbWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIlNldElEQlBlck9yaWdpblF1b3RhIikpOwotICAgIFdLUmV0YWluUHRyPFdLVUlu
dDY0UmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1VJbnQ2NENyZWF0ZShxdW90YSkpOwotICAg
IFdLQnVuZGxlUG9zdFN5bmNocm9ub3VzTWVzc2FnZShJbmplY3RlZEJ1bmRsZTo6c2luZ2xldG9u
KCkuYnVuZGxlKCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSwgbnVsbHB0
cik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSlNWYWx1ZVJlZiBzdHJpbmdBcnJheVRvSlMoSlNDb250
ZXh0UmVmIGNvbnRleHQsIFdLQXJyYXlSZWYgc3RyaW5ncykKIHsKICAgICBjb25zdCBzaXplX3Qg
Y291bnQgPSBXS0FycmF5R2V0U2l6ZShzdHJpbmdzKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmgKaW5kZXggODRhYjIxOTMzMzY2ZDNk
N2U2N2M5MTY4ZWQ4ZDA2NmMxNjE0MTYxNS4uMTU5MWFjODVkOGU1ODQ3MjQ0ZWUyODMyMmM3YWVj
NTdmOGE1Y2E1MiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmgKQEAgLTE3Niw5ICsxNzYsNiBAQCBwdWJsaWM6CiAgICAgdWludDY0
X3QgZG9tQ2FjaGVTaXplKEpTU3RyaW5nUmVmIG9yaWdpbik7CiAgICAgdm9pZCBzZXRBbGxvd1N0
b3JhZ2VRdW90YUluY3JlYXNlKGJvb2wpOwogCi0gICAgLy8gSW5kZXhlZERCCi0gICAgdm9pZCBz
ZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICAvLyBGYWlsZWQgbG9hZCBjb25k
aXRpb24gdGVzdGluZwogICAgIHZvaWQgZm9yY2VJbW1lZGlhdGVDb21wbGV0aW9uKCk7CiAKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggNTNkMTM0NzE0MzNj
MGYxMzJmYTg1YjE1YzQ3ZTdmODU4YjVkYTU0YS4uNDdhNjNjYmI2MjBiN2M4NWRlY2ZmZTFhNmQy
M2E2OGRjYTI1ODVkMyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKQEAgLTkwMSw3ICs5MDEsNiBAQCBib29sIFRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9D
b25zaXN0ZW50VmFsdWVzKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zLCBSZQogICAgIFdLQ29u
dGV4dENsZWFyQ2FjaGVkQ3JlZGVudGlhbHMoVGVzdENvbnRyb2xsZXI6OnNpbmdsZXRvbigpLmNv
bnRleHQoKSk7CiAKICAgICBDbGVhckluZGV4ZWREYXRhYmFzZXMoKTsKLSAgICBzZXRJREJQZXJP
cmlnaW5RdW90YSg1MCAqIE1CKTsKIAogICAgIGNsZWFyU2VydmljZVdvcmtlclJlZ2lzdHJhdGlv
bnMoKTsKICAgICBjbGVhckRPTUNhY2hlcygpOwpAQCAtMjk4NiwxMSArMjk4NSw2IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmNsZWFyRE9NQ2FjaGVzKCkKICAgICBydW5VbnRpbChjb250ZXh0LmRv
bmUsIG5vVGltZW91dCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6OnNldElEQlBlck9yaWdp
blF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdLQ29udGV4dFNldElEQlBlck9yaWdpblF1
b3RhKHBsYXRmb3JtQ29udGV4dCgpLCBxdW90YSk7Ci19Ci0KIHN0cnVjdCBSZW1vdmVBbGxJbmRl
eGVkRGF0YWJhc2VzQ2FsbGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNpdCBSZW1vdmVBbGxJbmRl
eGVkRGF0YWJhc2VzQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyKQog
ICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmgKaW5kZXggYWNlNmE1NDEwMmM4OWJkYWVjNmFhM2UzY2MwNjU2YzU5
MzU4ZDU5Yy4uZjJjYTU0NGFjY2RiZDAxNmE3MDYxNzdkOWFkOTEzZjJhMzc5OGUzOCAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMjY3LDggKzI2Nyw2IEBAIHB1
YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sKTsKIAot
ICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwotCiAgICAgYm9vbCBkaWRS
ZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2RpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjsg
fQogICAgIHZvaWQgY2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5h
dmlnYXRpb24oKSB7IG1fZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uID0gZmFsc2U7IH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcAppbmRleCA0YzcwMzdiN2Y1Nzc1YzY2N2RmMzhiMDMxM2MxZGFjMDA0YWJlNTIwLi5jZTVh
OWMzZjA1MzFmYjQzMzdhZjFmOTRiZDNmMWMyY2QxYjE0NWRiIDEwMDY0NAotLS0gYS9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMTQ5MywxMyArMTQ5Myw2IEBAIFdLUmV0YWlu
UHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3Nh
Z2VGcm9tSW5qZWN0ZWRCCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlm
IChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SURCUGVyT3Jp
Z2luUXVvdGEiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09
IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJlZiBxdW90YSA9IHN0YXRp
Y19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVy
OjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShXS1VJbnQ2NEdldFZhbHVlKHF1b3Rh
KSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIGlmIChXS1N0cmluZ0lz
RXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5qZWN0VXNlclNjcmlwdCIpKSB7CiAg
ICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBl
SUQoKSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5n
UmVmPihtZXNzYWdlQm9keSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>366847</attachid>
            <date>2019-04-05 14:56:32 -0700</date>
            <delta_ts>2019-08-07 10:33:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196545-20190405145636.patch</filename>
            <type>text/plain</type>
            <size>47736</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQzODcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGY0NTFjMjIzZWIyMmJj
MDA1ZjNkYjdjN2JiYmYyNDI4Y2Q5NzFiNC4uZDRkN2YyZDI1MDg4MTk0MTdmMmFmMDcyYmM4ODA3
OGIzOTI4YTY2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE5LTA0LTA1ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNp
ZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBObyBjaGFuZ2Ugb2YgYmVoYXZpb3IgYXMgSURCIHNwZWNpZmljIHF1b3RhIGlzIG5vIGxvbmdl
ciB1c2VkLgorICAgICAgICBJbnN0ZWFkIGEgZ2xvYmFsIHF1b3RhIGlzIHVzZWQuIFRoaXMgcXVv
dGEgY3VycmVudGx5IGhhbmRsZXMgSURCIGFuZCBDYWNoZSBBUEkuCisKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlNlcnZlcjo6SURCU2VydmVyOjpzZXRQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnBlck9yaWdpblF1b3RhIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0
b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6cmVuYW1lT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1l
SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmFkZFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6dW5jaGVja2VkU2V0S2V5R2VuZXJhdG9yVmFsdWUpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnF1b3RhRm9yT3JpZ2luIGNv
bnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjptYXhpbXVtU2l6ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlVuaXF1ZUlEQkRhdGFiYXNlOjpzZXRRdW90YSk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6
CisKIDIwMTktMDQtMDQgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIENsb3NlIHNlcnZpY2Ugd29ya2VyIGRhdGFiYXNlIG9uIG5ldHdvcmsgcHJvY2VzcyBzdXNw
ZW5zaW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IGE0OTIzMTYwZjMwMDQ4MmE2ZTJhMmUxZDAwZDRlZmZiMTU5NDNk
MzguLmNmZDY4NmYxMzk3MmNlMDA1Y2U0ZDRjMmE1N2M4OTI1ZTFlODIxOTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTktMDQtMDUgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29y
a1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURC
U2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRh
YmFzZVNlc3Npb24pOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0SURCUGVy
T3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmg6CisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2Fn
ZXMuaW46CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAg
IChXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SURC
UGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5oOgorCiAyMDE5LTA0LTA0ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4K
IAogICAgICAgICBDbG9zZSBzZXJ2aWNlIHdvcmtlciBkYXRhYmFzZSBvbiBuZXR3b3JrIHByb2Nl
c3Mgc3VzcGVuc2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCBkNzY4MGMzM2VhYzE5OGRiMWEx
Yzc5YTVhNWY3NDMyN2Q2NjljMmI1Li42ZDhiNTc2YzAzMTEyNGYwYzc1OGY1MmZkMzhmNGYxODU5
MmM0YzE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA0LTA1
ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURC
LXNwZWNpZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJE
YXRhYmFzZVByb3ZpZGVyOjppZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKToKKyAgICAg
ICAgKFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcyk6CisgICAgICAgIChX
ZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAg
ICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg6CisKIDIwMTktMDQtMDMgIERvbiBP
bG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ01ha2VdW1dURl0g
TWlycm9yIFhDb2RlIGhlYWRlciBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CmluZGV4IDNjOGE1NGE4MmE3Y2Q0ZjYzMTMwYmFhYzIzNzJmM2UyNjZiMDMzY2UuLmEwNjhkNWE5
MDkxOTI4ZThiYzdjOGFkMzcwNDBiYTgxNjBiMWNiNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVu
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTdG9yYWdlL1dlYkRh
dGFiYXNlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViRGF0YWJhc2VNYW5hZ2VyIHNldElEQlBl
ck9yaWdpblF1b3RhOl0pOiBEZWxldGVkLgorICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VN
YW5hZ2VyUHJpdmF0ZS5oOgorCiAyMDE5LTA0LTAzICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhm
aWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgLWFwcGxlLXRyYWlsaW5nLXdvcmQgaXMgbmVlZGVk
IGZvciBicm93c2VyIGRldGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDM5
NGY5YjYzZDlhNTQwMmM2MDc3YWIyYTljNDBjYTI1OWU0YjEzYWMuLjY0YzQxYjJiY2NhOGE3ODI1
NDI5ZjBmY2U3M2MyMjQzYzBhZjgwZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxNSBAQAorMjAxOS0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJEYXRhYmFz
ZU1hbmFnZXIuaWRsOgorICAgICAgICAqIFdlYkRhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAg
IChXZWJEYXRhYmFzZU1hbmFnZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBXZWJEYXRhYmFzZU1hbmFnZXIuaDoKKwogMjAxOS0wNC0wMyAgRG9uIE9sbXN0ZWFk
ICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV1bV1RGXSBNaXJyb3Ig
WENvZGUgaGVhZGVyIGRpcmVjdG9yaWVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggYzZkN2Q0M2Y5
ZWJhZGQyOTI0ODBjZjRlYWM0MDc4NzUxMDA5YTQwMS4uMzRmMWUzNTc1MmM3YTk2ZmZhODMxY2Ri
ODMxNDU1YjljNWVhZWY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaApAQCAtMTAwLDcgKzEwMCw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNFcGhlbWVyYWwoKSA9IDA7CiAKICAgICB2aXJ0
dWFsIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KSA9IDA7CisKIHByb3RlY3RlZDoKICAgICBJREJC
YWNraW5nU3RvcmUoKSB7IFJFTEVBU0VfQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7IH0KIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2
ZXIuY3BwCmluZGV4IDYyZjMyMGNmYjAzY2RkYjNmNzMyMmQzYjQ4YTQ5MTc4YzczOTg3N2IuLjA4
YjVlNTk5MzRkMDE1MTQzYjI5OGQ2MTAxNDhlNWQwNDQzNjc1ODAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0x
MzgsNyArMTM4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gSURCU2VydmVy
OjpjcmVhdGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2UKICAgICBpZiAobV9kYXRhYmFz
ZURpcmVjdG9yeVBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTWVtb3J5SURCQmFja2lu
Z1N0b3JlOjpjcmVhdGUoaWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxTUUxpdGVJREJCYWNraW5nU3RvcmU+KGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQ
YXRoLCBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyLCBtX3Blck9yaWdpblF1b3Rh
KTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxTUUxpdGVJREJCYWNraW5nU3RvcmU+KGlk
ZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBtX2JhY2tpbmdTdG9yZVRlbXBvcmFy
eUZpbGVIYW5kbGVyKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6Om9wZW5EYXRhYmFzZShjb25zdCBJ
REJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCkBAIC02OTQsMTQgKzY5NCw2IEBAIHZvaWQgSURC
U2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXModWludDY0X3QgY2FsbGJh
Y2tJRCkKICAgICBjYWxsYmFjaygpOwogfQogCi12b2lkIElEQlNlcnZlcjo6c2V0UGVyT3JpZ2lu
UXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9wZXJPcmlnaW5RdW90YSA9IHF1b3RhOwot
Ci0gICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fdW5pcXVlSURCRGF0YWJhc2VNYXAudmFsdWVz
KCkpCi0gICAgICAgIGRhdGFiYXNlLT5zZXRRdW90YShxdW90YSk7Ci19Ci0KIHZvaWQgSURCU2Vy
dmVyOjpjbG9zZURhdGFiYXNlKFVuaXF1ZUlEQkRhdGFiYXNlKiBkYXRhYmFzZSkKIHsKICAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCmluZGV4IGFlNGJmZDg4OTczZTc1YjAwMTVmN2Zk
ZThhMTUwMWUyN2RhNWYxOTIuLjVlNzRlNjRlNmM3ZTdhMDhjMDA4MTc3OWFjZWNlZmQ3Y2UyY2Jj
MzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJTZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCU2VydmVyLmgKQEAgLTExMiw5ICsxMTIsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1
bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1
cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7
CiAKLSAgICB1aW50NjRfdCBwZXJPcmlnaW5RdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyT3Jp
Z2luUXVvdGE7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFBlck9yaWdpblF1b3RhKHVp
bnQ2NF90KTsKLQogICAgIHZvaWQgY2xvc2VEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSopOwog
ICAgIHZvaWQgZGlkQ2xvc2VEYXRhYmFzZShVbmlxdWVJREJEYXRhYmFzZSopOwogICAgIHZvaWQg
aHlzdGVyZXNpc1VwZGF0ZWQoUEFMOjpIeXN0ZXJlc2lzU3RhdGUpOwpAQCAtMTk1LDggKzE5Miw2
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogICAgIElE
QkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFy
eUZpbGVIYW5kbGVyOwogCi0gICAgdWludDY0X3QgbV9wZXJPcmlnaW5RdW90YSB7IGRlZmF1bHRQ
ZXJPcmlnaW5RdW90YSB9OwotCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKGJvb2wpPiBtX2lzQ2xv
c2luZ0RhdGFiYXNlQ2FsbGJhY2s7CiAgICAgUEFMOjpIeXN0ZXJlc2lzQWN0aXZpdHkgbV9pc0Ns
b3NpbmdEYXRhYmFzZUh5c3RlcmVzaXM7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaApp
bmRleCA2NGU2Y2M3ZGUwY2E2NzY3ZWMxOGQ1MTRiY2FhZjRiZDhhNTYyYzdmLi40ZWJkZTUzNmNm
MzM3NGFiNDUyMzNmMzcxNWIyZDU5YTA0ZDM3MTIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdT
dG9yZS5oCkBAIC03OSw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzU2ltdWx0
YW5lb3VzVHJhbnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgaXNF
cGhlbWVyYWwoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHNldFF1b3RhKHVp
bnQ2NF90IHF1b3RhKSBmaW5hbCB7IFVOVVNFRF9QQVJBTShxdW90YSk7IH07CiAgICAgdWludDY0
X3QgZGF0YWJhc2VzU2l6ZUZvck9yaWdpbigpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCByZW1v
dmVPYmplY3RTdG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA0ODlkZWQ0ZTNiZDcwNjFkYjgy
MWNkNjlmYjQwMWM4NzEzNGRhYWE0Li5iNDdiY2E1OTY5MGNlZThiOWJhYzdjZTRiNTkwM2E2ODVm
YmQzZjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjMxLDExICsy
MzEsMTAgQEAgc3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5h
dGUoKQogICAgIHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKIH0KIAotU1FMaXRl
SURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJ
ZGVudGlmaWVyJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9y
eSwgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIGZpbGVIYW5kbGVyLCB1aW50
NjRfdCBxdW90YSkKK1NRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3Jl
KGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVy
JiBmaWxlSGFuZGxlcikKICAgICA6IG1faWRlbnRpZmllcihpZGVudGlmaWVyKQogICAgICwgbV9k
YXRhYmFzZVJvb3REaXJlY3RvcnkoZGF0YWJhc2VSb290RGlyZWN0b3J5KQogICAgICwgbV90ZW1w
b3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKLSAgICAsIG1fcXVvdGEocXVvdGEpCiB7CiAg
ICAgbV9kYXRhYmFzZURpcmVjdG9yeSA9IGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRl
KCk7CiB9CkBAIC04NzUsMTQgKzg3NCw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvCiAgICAg
cmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpxdW90YUZvck9yaWdpbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7
Ci0gICAgdWludDY0X3QgZGlza0ZyZWVTcGFjZVNpemUgPSAwOwotICAgIEZpbGVTeXN0ZW06Omdl
dFZvbHVtZUZyZWVTcGFjZShtX2lkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2ZVRv
Um9vdChtX2RhdGFiYXNlUm9vdERpcmVjdG9yeSksIGRpc2tGcmVlU3BhY2VTaXplKTsKLSAgICBy
ZXR1cm4gc3RkOjptaW4oZGlza0ZyZWVTcGFjZVNpemUgLyAyLCBtX3F1b3RhKTsKLX0KLQogdWlu
dDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRm9sZGVyKGNvbnN0
IFN0cmluZyYgZm9sZGVyKQogewogICAgIHVpbnQ2NF90IGRpc2tVc2FnZSA9IDA7CkBAIC05MDAs
MjQgKzg5MSw2IEBAIHVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6
ZUZvck9yaWdpbigpIGNvbnN0CiAgICAgcmV0dXJuIGRhdGFiYXNlc1NpemVGb3JGb2xkZXIob2xk
VmVyc2lvbk9yaWdpbkRpcmVjdG9yeSkgKyBkYXRhYmFzZXNTaXplRm9yRm9sZGVyKG5ld1ZlcnNp
b25PcmlnaW5EaXJlY3RvcnkpOwogfQogCi11aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6
Om1heGltdW1TaXplKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsKLQot
ICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIG9uZSBkYXRhYmFzZSBmaWxlIGlzIHRoZSBxdW90
YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgc2l6ZSBvZiBhbGwgZGF0YWJhc2VzIHdpdGhpbiB0aGF0
IG9yaWdpbiwKLSAgICAvLyBhbmQgcGx1cyBjdXJyZW50IHNpemUgb2YgdGhlIGRhdGFiYXNlIGZp
bGUuCi0gICAgdWludDY0X3QgZGF0YWJhc2VGaWxlU2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06Omdl
dERhdGFiYXNlRmlsZVNpemUoZnVsbERhdGFiYXNlUGF0aCgpKTsKLSAgICB1aW50NjRfdCBxdW90
YSA9IHF1b3RhRm9yT3JpZ2luKCk7Ci0KLSAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSBkYXRhYmFz
ZXNTaXplRm9yT3JpZ2luKCk7Ci0gICAgQVNTRVJUKGRpc2tVc2FnZSA+PSBkYXRhYmFzZUZpbGVT
aXplKTsKLQotICAgIGlmIChxdW90YSA8IGRpc2tVc2FnZSkKLSAgICAgICAgcmV0dXJuIGRhdGFi
YXNlRmlsZVNpemU7Ci0KLSAgICByZXR1cm4gcXVvdGEgLSBkaXNrVXNhZ2UgKyBkYXRhYmFzZUZp
bGVTaXplOwotfQotCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNh
Y3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRleGVk
REIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24gLSAlcyIsIGluZm8u
aWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTkyNiw3ICs4
OTksNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24o
Y29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgIEFTU0VSVChtX3NxbGl0ZURCLT5p
c09wZW4oKSk7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKIAotICAgIG1fc3FsaXRlREIt
PnNldE1heGltdW1TaXplKG1heGltdW1TaXplKCkpOwogICAgIGF1dG8gYWRkUmVzdWx0ID0gbV90
cmFuc2FjdGlvbnMuYWRkKGluZm8uaWRlbnRpZmllcigpLCBudWxscHRyKTsKICAgICBpZiAoIWFk
ZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBlc3Rh
Ymxpc2ggdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGFscmVhZHkgZXhpc3RzIik7CkBAIC05
NDMsMTAgKzkxNSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5UcmFu
c2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8pCiAgICAgICAgIGlmIChzcWwu
cHJlcGFyZSgpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEsIFN0
cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAg
ICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBpZiAobV9zcWxp
dGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgZXJyb3Ig
PSBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcgZGF0
YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9t
YWluIl9zIH07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBJREJF
cnJvciB7IFVua25vd25FcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lv
biBpbiBkYXRhYmFzZSJfcyB9OworICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVua25v
d25FcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFz
ZSJfcyB9OwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMDMwLDggKzk5OSw2IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCg1LCBpbmZvLm1h
eEluZGV4SUQoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWRkIG9iamVj
dCBzdG9yZSAnJXMnIHRvIE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBpbmZvLm5h
bWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigp
ID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCBjcmVhdGUgb2JqZWN0IHN0b3JlIGJlY2F1c2Ugbm8g
ZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIkNvdWxkIG5vdCBjcmVhdGUgb2JqZWN0IHN0b3JlIl9zIH07CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMDQyLDggKzEwMDksNiBAQCBJREJFcnJvciBTUUxpdGVJREJC
YWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmll
ciYgdAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMSwgaW5mby5pZGVudGlmaWVyKCkp
ICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUp
IHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2Vu
ZXJhdG9yIHZhbHVlIGZvciBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAg
ICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJDb3VsZCBub3Qg
c2VlZCBpbml0aWFsIGtleSBnZW5lcmF0b3IgdmFsdWUgZm9yIG9iamVjdCBzdG9yZSBiZWNhdXNl
IG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3Qgc2VlZCBpbml0aWFsIGtleSBnZW5lcmF0
b3IgdmFsdWUgZm9yIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAtMTE2
OSw4ICsxMTM0LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmpl
Y3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAgICAgICAgICAgIHx8IHNx
bC0+YmluZEludDY0KDIsIG9iamVjdFN0b3JlSWRlbnRpZmllcikgIT0gU1FMSVRFX09LCiAgICAg
ICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9H
X0VSUk9SKCJDb3VsZCBub3QgdXBkYXRlIG5hbWUgZm9yIG9iamVjdCBzdG9yZSBpZCAlIiBQUklp
NjQgIiBpbiBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJZGVu
dGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNn
KCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9G
VUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJv
ciwgIkNvdWxkIG5vdCByZW5hbWUgb2JqZWN0IHN0b3JlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNl
IGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25F
cnJvciwgIkNvdWxkIG5vdCByZW5hbWUgb2JqZWN0IHN0b3JlIl9zIH07CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMjU0LDggKzEyMTcsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OmNyZWF0ZUluZGV4KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAg
ICB8fCBzcWwtPmJpbmRJbnQoNiwgaW5mby5tdWx0aUVudHJ5KCkpICE9IFNRTElURV9PSwogICAg
ICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCBhZGQgaW5kZXggJyVzJyB0byBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwg
aW5mby5uYW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3Fs
aXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJv
cigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFF
eGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIGNyZWF0ZSBpbmRleCBpbiBkYXRhYmFzZSBiZWNhdXNl
IG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UiX3Mg
fTsKICAgICB9CiAKQEAgLTE0MDQsOCArMTM2NSw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6dW5jaGVja2VkUHV0SW5kZXhSZWNvcmQoaW50NjRfdCBvYmplY3RTdG9yZUlELCBp
CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCg1LCByZWNvcmRJRCkgIT0gU1FMSVRFX09L
CiAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAg
ICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgcHV0IGluZGV4IHJlY29yZCBmb3IgaW5kZXggJSIgUFJJ
aTY0ICIgaW4gb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiIGluIFJlY29yZHMgdGFibGUgKCVpKSAt
ICVzIiwgaW5kZXhJRCwgb2JqZWN0U3RvcmVJRCwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1f
c3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJFcnJvciBwdXR0aW5nIGluZGV4IHJlY29yZCBpbnRv
IGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAg
ICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIkVycm9yIHB1dHRpbmcgaW5k
ZXggcmVjb3JkIGludG8gZGF0YWJhc2UiX3MgfTsKICAgICAgICAgfQogICAgIH0KQEAgLTE0OTUs
OCArMTQ1NCw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAgICAgICB8fCBzcWwt
PmJpbmRJbnQ2NCgzLCBpbmRleElkZW50aWZpZXIpICE9IFNRTElURV9PSwogICAgICAgICAgICAg
fHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBpbmRleCBpZCAoJSIgUFJJaTY0ICIsICUiIFBSSWk2
NCAiKSBpbiBJbmRleEluZm8gdGFibGUgKCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJZGVudGlmaWVy
LCBpbmRleElkZW50aWZpZXIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkg
PT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFF
eGNlZWRlZEVycm9yLCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCBiZWNhdXNlIG5vIGVub3VnaCBz
cGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIGluZGV4Il9zIH07CiAgICAgICAgIH0KICAgICB9
CkBAIC0xODM4LDggKzE3OTUsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFk
ZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kQmxvYigzLCB2YWx1ZS5kYXRhKCkuZGF0YSgpLT5kYXRhKCksIHZhbHVl
LmRhdGEoKS5kYXRhKCktPnNpemUoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgcHV0IHJlY29yZCBmb3Igb2JqZWN0IHN0b3JlICUiIFBSSWk2NCAiIGluIFJlY29yZHMgdGFi
bGUgKCVpKSAtICVzIiwgb2JqZWN0U3RvcmVJbmZvLmlkZW50aWZpZXIoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlm
IChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJVbmFibGUgdG8gc3RvcmUg
cmVjb3JkIGluIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWlu
Il9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJVbmFi
bGUgdG8gc3RvcmUgcmVjb3JkIGluIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9CiAKQEAg
LTE4NzIsOCArMTgyNyw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVj
b3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAgICAg
ICAgfHwgc3FsLT5iaW5kVGV4dCgyLCB1cmwpICE9IFNRTElURV9PSwogICAgICAgICAgICAgICAg
IHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VS
Uk9SKCJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIik7Ci0gICAgICAg
ICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJV
bmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdo
IHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgcmVjb3JkIGluIGRhdGFiYXNl
Il9zIH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5MDcsOCArMTg2MCw2IEBAIElE
QkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKGNvbnN0IElEQlJlc291cmNl
SWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAgICAgICAgfHwgc3FsLT5iaW5kVGV4dCgy
LCBzdG9yZWRGaWxlbmFtZSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICAgICAgfHwgc3FsLT5z
dGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byByZWNvcmQgQmxvYiBmaWxlIHJlY29yZCBpbiBkYXRhYmFzZSIpOwotICAgICAgICAgICAg
ICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxl
IHRvIHJlY29yZCBCbG9iIGZpbGUgaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2Ug
Zm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25v
d25FcnJvciwgIlVuYWJsZSB0byByZWNvcmQgQmxvYiBmaWxlIHJlY29yZCBpbiBkYXRhYmFzZSJf
cyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDU5LDggKzI0MTAsNiBAQCBJREJF
cnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFNldEtleUdlbmVyYXRvclZhbHVl
KGludDY0X3Qgb2JqZWN0U3RvcgogICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgyLCB2YWx1ZSkg
IT0gU1FMSVRFX09LCiAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAg
ICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHVwZGF0ZSBrZXkgZ2VuZXJhdG9yIHZhbHVlICgl
aSkgLSAlcyIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JN
c2coKSk7Ci0gICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVM
TCkKLSAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIkVy
cm9yIHN0b3JpbmcgbmV3IGtleSBnZW5lcmF0b3IgdmFsdWUgaW4gZGF0YWJhc2UgYmVjYXVzZSBu
byBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICByZXR1cm4gSURCRXJyb3Ig
eyBDb25zdHJhaW50RXJyb3IsICJFcnJvciBzdG9yaW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVl
IGluIGRhdGFiYXNlIiB9OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCmlu
ZGV4IDU2YjUxN2MyYTYxMDc0NGJkZWYyMGUxODg5YzA2MzFjMzBhYWZiNTguLjQ5MjYyYjkzNWE4
NzZmMjg1NWRkN2Y0ZTQwYmFjMWJkNjczYzlmOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgU1FMaXRlSURCQ3Vyc29yOwogY2xhc3MgU1FM
aXRlSURCQmFja2luZ1N0b3JlIDogcHVibGljIElEQkJhY2tpbmdTdG9yZSB7CiAgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNv
bnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGly
ZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYsIHVpbnQ2NF90IHF1
b3RhKTsKKyAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2VJZGVudGlm
aWVyJiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9y
ZVRlbXBvcmFyeUZpbGVIYW5kbGVyJik7CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZSgpIGZpbmFsOwogCkBAIC04MSw3ICs4MSw2IEBAIHB1YmxpYzoKICAgICBJREJPYmplY3RTdG9y
ZUluZm8qIGluZm9Gb3JPYmplY3RTdG9yZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIp
IGZpbmFsOwogICAgIHZvaWQgZGVsZXRlQmFja2luZ1N0b3JlKCkgZmluYWw7CiAKLSAgICB2b2lk
IHNldFF1b3RhKHVpbnQ2NF90IHF1b3RhKSBmaW5hbCB7IG1fcXVvdGEgPSBxdW90YTsgfQogICAg
IHVpbnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAogICAgIGJv
b2wgc3VwcG9ydHNTaW11bHRhbmVvdXNUcmFuc2FjdGlvbnMoKSBmaW5hbCB7IHJldHVybiBmYWxz
ZTsgfQpAQCAtMTA1LDkgKzEwNCw2IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFz
ZVBhdGgoKSBjb25zdDsKICAgICBTdHJpbmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5V2l0aFVwZ3Jh
ZGUoKTsKIAotICAgIHVpbnQ2NF90IHF1b3RhRm9yT3JpZ2luKCkgY29uc3Q7Ci0gICAgdWludDY0
X3QgbWF4aW11bVNpemUoKSBjb25zdDsKLQogICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFi
bGUoKTsKICAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKICAgICBib29s
IGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRzSW5kZXgoKTsKQEAgLTIwNiw4ICsyMDIsNiBAQCBwcml2
YXRlOgogICAgIEpTQzo6U3Ryb25nPEpTQzo6SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0
OwogCiAgICAgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIG1fdGVtcG9yYXJ5
RmlsZUhhbmRsZXI7Ci0gICAgCi0gICAgdWludDY0X3QgbV9xdW90YTsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggOTA3N2U1OGI4
NDhhZmJhY2JjOTUzMDk2YTkyOWZhNjY3ZTU2ZWU5Ny4uY2U0OTA5YjllYWFlYzU3ZTFjZWNkY2Jm
YjJjNmQyNmI0YjE4NTJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0yMjY3LDEy
ICsyMjY3LDYgQEAgdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1
aW50NjRfdCBjYWxsYmFja0lkZW50aWZpZXIpCiAgICAgbV9lcnJvckNhbGxiYWNrcy5yZW1vdmUo
Y2FsbGJhY2tJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2V0UXVv
dGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBt
X2JhY2tpbmdTdG9yZS0+c2V0UXVvdGEocXVvdGEpOwotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFi
YXNlOjpub3RpZnlTZXJ2ZXJBYm91dENsb3NlKENsb3NlU3RhdGUgc3RhdGUpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKaW5kZXggYmNlNjc0NWE2
YTNhMzE4YmJlOTIyNDY3Y2EzNjljYzBmYThlOGFlNi4uMGRlM2M5MGUxNzk1NjU4ZjhiOWIxMDlk
NjBjM2YyY2Q4NWI2NTE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmgKQEAgLTEyNSw4ICsxMjUs
NiBAQCBwdWJsaWM6CiAKICAgICB1aW50NjRfdCBzcGFjZVVzZWQoKSBjb25zdDsKIAotICAgIHZv
aWQgc2V0UXVvdGEodWludDY0X3QpOwotCiBwcml2YXRlOgogICAgIGVudW0gY2xhc3MgQ2xvc2VT
dGF0ZSB7IFN0YXJ0LCBEb25lIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZVF1b3RhTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
UXVvdGFNYW5hZ2VyLmgKaW5kZXggNDRkNGZiZjI1ZTI3NjYyN2U2OTI2NTJiODA3ZGYwZWYwMGQ2
M2E1NS4uYWY1NzRkYTY0MWM4ZTkzMTQzMDNkMTY0OWE0OGY3YzVlN2YzNjY0MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlUXVvdGFNYW5hZ2VyLmgKQEAgLTI4LDYgKzI4LDcg
QEAKICNpbmNsdWRlICJDbGllbnRPcmlnaW4uaCIKICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRl
eCAyZDAwN2U3YTYyMGFiNTlhZDkzMjNiYmI5MTgwNjdjMDZmNGU2OTBlLi4wMjU2NmIxM2U0Y2Fm
Y2JkZjMyMmQ3YmMwYmQzZDE5YzVhOWRlZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMjEyMSw3ICsyMTIxLDcgQEAgUmVmPElE
QlNlcnZlcjo6SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKFBBTDo6
U2Vzc2lvbklEIHNlc3Npb24KICAgICAgICAgcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQo
c2Vzc2lvbklEKTsKICAgICB9CiAKLSAgICBhdXRvIHNlcnZlciA9IElEQlNlcnZlcjo6SURCU2Vy
dmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCAqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIodGhpcyldKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgYXV0byYgb3Jp
Z2luKSAtPiBTdG9yYWdlUXVvdGFNYW5hZ2VyKiB7CisgICAgcmV0dXJuIElEQlNlcnZlcjo6SURC
U2VydmVyOjpjcmVhdGUoc2Vzc2lvbklELCBwYXRoLCAqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0g
bWFrZVdlYWtQdHIodGhpcyldKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgYXV0byYg
b3JpZ2luKSAtPiBTdG9yYWdlUXVvdGFNYW5hZ2VyKiB7CiAgICAgICAgIGlmICghd2Vha1RoaXMp
CiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICZ0aGlzLT5zdG9y
YWdlUXVvdGFNYW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKQEAgLTIxMzAsOCArMjEzMCw2IEBA
IFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZl
cihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIHRo
aXMtPm5vdGlmeUhvbGRpbmdMb2NrZWRGaWxlcyhpc0hvbGRpbmdMb2NrZWRGaWxlcyk7CiAgICAg
fSk7Ci0gICAgc2VydmVyLT5zZXRQZXJPcmlnaW5RdW90YShtX2lkYlBlck9yaWdpblF1b3RhKTsK
LSAgICByZXR1cm4gc2VydmVyOwogfQogCiBJREJTZXJ2ZXI6OklEQlNlcnZlciYgTmV0d29ya1By
b2Nlc3M6OmlkYlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQpCkBAIC0yMjI3LDE0ICsy
MjI1LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYKICAgICAgICAgICAgIHBvc3RTdG9yYWdl
VGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJl
UGF0aEV4aXN0cywgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5KSk7CiAgICAgfQogfQotCi12b2lk
IE5ldHdvcmtQcm9jZXNzOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsK
LSAgICBtX2lkYlBlck9yaWdpblF1b3RhID0gcXVvdGE7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBz
ZXJ2ZXIgOiBtX2lkYlNlcnZlcnMudmFsdWVzKCkpCi0gICAgICAgIHNlcnZlci0+c2V0UGVyT3Jp
Z2luUXVvdGEocXVvdGEpOwotfQogI2VuZGlmIC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQog
CiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVz
dGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IENsaWVudE9yaWdpbiYgb3JpZ2lu
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmluZGV4
IDcxMDk3YjE3MGM0MjgzYzRlM2ZmNDg5NzkxMTJlNzU4MjM0YWEzM2YuLjhjYTNlN2M0MjFjYjA4
YjdhNzg0MzBiYTllMDNjNDBkODViNmVhNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI3OCw3ICsyNzgsNiBAQCBwdWJsaWM6CiAgICAg
V2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXImIGlkYlNlcnZlcihQQUw6OlNlc3Npb25JRCk7
CiAgICAgLy8gV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxlci4K
ICAgICB2b2lkIGFjY2Vzc1RvVGVtcG9yYXJ5RmlsZUNvbXBsZXRlKGNvbnN0IFN0cmluZyYgcGF0
aCkgZmluYWw7Ci0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAjZW5k
aWYKICAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5nKFBBTDo6
U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4mKTsKIApAQCAtNTE0LDcgKzUx
Myw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgU3RyaW5nPiBtX2lkYkRhdGFiYXNlUGF0aHM7CiAgICAgSGFzaE1h
cDxQQUw6OlNlc3Npb25JRCwgUmVmUHRyPFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyPj4g
bV9pZGJTZXJ2ZXJzOwotICAgIHVpbnQ2NF90IG1faWRiUGVyT3JpZ2luUXVvdGEgeyBXZWJDb3Jl
OjpJREJTZXJ2ZXI6OmRlZmF1bHRQZXJPcmlnaW5RdW90YSB9OwogI2VuZGlmCiAKICAgICBEZXF1
ZTxDcm9zc1RocmVhZFRhc2s+IG1fc3RvcmFnZVRhc2tzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbiBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KaW5kZXggN2Q5
ZDJlMDYwYjE3MDNmNjk4MmFlMjAxZGE2ZjRjN2MwMjY2NTAzZS4uOGE4OTEzZDUxZjNmODBmMmZk
MTBiZDAwMTYwNWIyZTJkYTYxYzJjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCkBAIC0xNjEsOSArMTYxLDYg
QEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5UmVjZWl2ZXIgewogICAgIERpc2Fi
bGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVsYXkoKQogI2VuZGlmCiAKLSNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRf
dCBxdW90YSkKLSNlbmRpZgogICAgIFVwZGF0ZVF1b3RhQmFzZWRPblNwYWNlVXNhZ2VGb3JUZXN0
aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0IFdlYkNvcmU6OkNsaWVudE9yaWdp
biBvcmlnaW4pCiAKICAgICBTdG9yZUFkQ2xpY2tBdHRyaWJ1dGlvbihQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlvbiBhZENsaWNrQXR0cmlidXRpb24p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAppbmRleCA5M2Y3
NmE3OTYxMDdkN2M0MjVhYTEzMzkwODkwNTEyYTBmYWNhZmQ1Li42Yjg5NjEwM2FlMGYyNmUxNzg5
NzMxNGUwMzhhMDQ2NTczOTVlMzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAKQEAgLTY1OSwxMSArNjU5LDYgQEAgdm9pZCBXS0NvbnRleHRDbGVhclN1
cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiAjZW5kaWYKIH0KIAotdm9p
ZCBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShXS0NvbnRleHRSZWYgY29udGV4dFJlZiwg
dWludDY0X3QgcXVvdGEpCi17Ci0gICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPnNldElE
QlBlck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRN
b2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKIHsKICAgICBX
ZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRl
c3RpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29u
dGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFBy
aXZhdGUuaAppbmRleCBmOWM3ZDMyOTZlNWMwY2Q3ZjMzNjdkZTM5YTAzMWQyODNmYmU2NjY2Li4w
YzE3YjFhMTEyYzJlYzFmMmU4NTAyMTdhYjUxZjY2NGE1MThhZWE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCkBAIC0xMTYsOCArMTE2
LDYgQEAgV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4dEdldE5ldHdvcmtQcm9jZXNzSWRl
bnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCkKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dEFk
ZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4dCwgV0tTdHJpbmdSZWYgZG9tYWlu
LCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVUeXBlcywgV0tBcnJheVJlZiBleHRl
bnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyU3VwcG9ydGVkUGx1Z2lucyhX
S0NvbnRleHRSZWYgY29udGV4dCk7CiAKLVdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dFNldElEQlBl
ck9yaWdpblF1b3RhKFdLQ29udGV4dFJlZiBjb250ZXh0LCB1aW50NjRfdCBxdW90YSk7Ci0KIFdL
X0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5n
KFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggOTY4NGEwMWNhZDQ1Mjc5NWU5
ZDA5MTk3M2NhYTc0YjMwMzBkYTg1Yy4uYzcwYTc4ZWI1NGRhZGRlMjI4MDYyMGUzYTUwNzcyMTA4
MTExZTc1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcApA
QCAtMTc2OSwxMyArMTc2OSw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5bmNOZXR3b3JrUHJv
Y2Vzc0Nvb2tpZXMoKQogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3luY0FsbENvb2tpZXMo
KTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0
X3QgcXVvdGEpCi17Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgZW5zdXJlTmV0
d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6U2V0SURCUGVyT3Jp
Z2luUXVvdGEocXVvdGEpLCAwKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlByb2Nlc3NQb29sOjph
bGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3QoY29uc3QgV2ViQ2VydGlmaWNhdGVJ
bmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0KQogewogICAgIGVuc3VyZU5ldHdv
cmtQcm9jZXNzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9j
ZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRl
eCBlYzY3NGY1YzAzZWJlMjIzNTQ4OTU5NGUzYTMyNzAzZGI3ZDA5Nzc3Li4yOTUzZGM0M2RlOTIx
MTAyY2RhOWE3YzQwM2RjZDhlYzRmYzQ2ODA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlByb2Nlc3NQb29sLmgKQEAgLTMwMiw4ICszMDIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN5
bmNOZXR3b3JrUHJvY2Vzc0Nvb2tpZXMoKTsKIAotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVv
dGEodWludDY0X3QpOwotCiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNz
TGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAgIGJvb2wgc2hvdWxkTWFrZU5leHRX
ZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZE1h
a2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nOyB9CiAgICAgdm9pZCBzZXRTaG91
bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkg
eyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZh
bHVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJh
c2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQ
cm92aWRlci5jcHAKaW5kZXggNWVlNWE3YjI5YmVmNDUzOTlkZmQ3OGIzMTIzYzBlMGIyZmM5YWNh
MS4uMmViNzA1MzYyNmRmMmU3N2I5YjIzNjg4MDIwOWVlYWI1MWNlNWE5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcApAQCAt
NDUsMTcgKzQ1LDkgQEAgV2ViRGF0YWJhc2VQcm92aWRlcjo6fldlYkRhdGFiYXNlUHJvdmlkZXIo
KQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogV2ViQ29yZTo6SURCQ2xpZW50OjpJREJD
b25uZWN0aW9uVG9TZXJ2ZXImIFdlYkRhdGFiYXNlUHJvdmlkZXI6OmlkYkNvbm5lY3Rpb25Ub1Nl
cnZlckZvclNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmIHNlc3Npb25JRCkKIHsKLSAgICBh
dXRvIHJlc3VsdCA9IG1faWRiU2VydmVyTWFwLmFkZChzZXNzaW9uSUQuc2Vzc2lvbklEKCksIG51
bGxwdHIpOwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgewotICAgICAgICBpZiAoc2Vzc2lv
bklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0g
V2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklEKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkNvcmU6OkluUHJv
Y2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
UGF0aCgpKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5pZGJTZXJ2ZXIo
KS5zZXRQZXJPcmlnaW5RdW90YShtX2lkYlBlck9yaWdpblF1b3RhKTsKLQotICAgIHJldHVybiBy
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5jb25uZWN0aW9uVG9TZXJ2ZXIoKTsKKyAgICByZXR1cm4g
bV9pZGJTZXJ2ZXJNYXAuZW5zdXJlKHNlc3Npb25JRC5zZXNzaW9uSUQoKSwgWyZzZXNzaW9uSURd
IHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpID8gV2ViQ29yZTo6SW5Q
cm9jZXNzSURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklEKSA6IFdlYkNvcmU6OkluUHJvY2Vzc0lE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5UGF0aCgp
KTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmNvbm5lY3Rpb25Ub1NlcnZlcigpOwogfQogCiB2
b2lkIFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCkBAIC02MywxMyAr
NTUsNCBAQCB2b2lkIFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCiAg
ICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2lkYlNlcnZlck1hcC52YWx1ZXMoKSkKICAgICAgICAg
c2VydmVyLT5pZGJTZXJ2ZXIoKS5jbG9zZUFuZERlbGV0ZURhdGFiYXNlc01vZGlmaWVkU2luY2Uo
LVdhbGxUaW1lOjppbmZpbml0eSgpLCBbXSB7IH0pOwogfQotCi12b2lkIFdlYkRhdGFiYXNlUHJv
dmlkZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1faWRi
UGVyT3JpZ2luUXVvdGEgPSBxdW90YTsKLQotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9pZGJT
ZXJ2ZXJNYXAudmFsdWVzKCkpCi0gICAgICAgIHNlcnZlci0+aWRiU2VydmVyKCkuc2V0UGVyT3Jp
Z2luUXVvdGEocXVvdGEpOwotfQotCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCmluZGV4IDUyMjIzMzA5YjM5YmUzZWNhY2Vi
NjlmYzY5ZjIwMDdlMmM5YjNlZGEuLjNmNTA2ZDc2YzNiZjc0NTM0ZjM2M2RmMmE0N2ZlY2JlMzdl
MTAxMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFz
ZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNl
UHJvdmlkZXIuaApAQCAtNDQsOCArNDQsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SURCQ2xp
ZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGlkYkNvbm5lY3Rpb25Ub1NlcnZlckZvclNlc3Np
b24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBvdmVycmlkZTsKIAogICAgIHZvaWQgZGVsZXRlQWxs
RGF0YWJhc2VzKCk7Ci0KLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsK
ICNlbmRpZgogCiBwcml2YXRlOgpAQCAtNTUsNiArNTMsNSBAQCBwcml2YXRlOgogCiAjaWYgRU5B
QkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPFdlYkNv
cmU6OkluUHJvY2Vzc0lEQlNlcnZlcj4+IG1faWRiU2VydmVyTWFwOwotICAgIHVpbnQ2NF90IG1f
aWRiUGVyT3JpZ2luUXVvdGEgeyBXZWJDb3JlOjpJREJTZXJ2ZXI6OmRlZmF1bHRQZXJPcmlnaW5R
dW90YSB9OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
U3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9T
dG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQppbmRleCA2ZDYyYTk4Yjk3ZjJlYzI0MTRjN2Ri
MWFkM2U3MGYyZDBkZjEzZWU0Li43M2UyMzMxZWJiNmNmYWVkZWVhNGMxZDJmMTJhZDBiYWQ1MjI2
NTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFi
YXNlTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRh
dGFiYXNlTWFuYWdlci5tbQpAQCAtMTU3LDEzICsxNTcsNiBAQCAtICh2b2lkKWRlbGV0ZUFsbElu
ZGV4ZWREYXRhYmFzZXMKICNlbmRpZgogfQogCi0tICh2b2lkKXNldElEQlBlck9yaWdpblF1b3Rh
Oih1aW50NjRfdClxdW90YQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFdl
YkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldElEQlBlck9yaWdpblF1b3RhKHF1b3Rh
KTsKLSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogc3RhdGljIGJvb2wg
aXNGaWxlSGlkZGVuKE5TU3RyaW5nICpmaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaAppbmRleCAy
MTcyNDE2MmI5NTM4OGE0YTI2YmE5ZWM0ZDZjNTA0ZjQ1ZjY0MDRhLi45MzliNGNmN2UwNTc0MmQz
NmUxMzA3N2MwY2E2NjMyZmYzZTVkY2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaApAQCAtNzAs
NyArNzAsNiBAQCBleHRlcm4gQ0ZTdHJpbmdSZWYgV2ViRGF0YWJhc2VPcmlnaW5zRGlkQ2hhbmdl
Tm90aWZpY2F0aW9uOwogCiAvLyBGb3IgRHVtcFJlbmRlclRyZWUgc3VwcG9ydCBvbmx5CiAtICh2
b2lkKWRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXM7Ci0tICh2b2lkKXNldElEQlBlck9yaWdpblF1
b3RhOih1aW50NjRfdClxdW90YTsKIAogI2lmIFRBUkdFVF9PU19JUEhPTkUKICsgKHZvaWQpc2No
ZWR1bGVFbXB0eURhdGFiYXNlUmVtb3ZhbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsCmluZGV4IGU4MWQ0
OTM4NTkyZDY4MjBiMjExYTJlZmI1MzliNjZjZTZkMTUyYzQuLjdhZWJjYWVmNzIwYWFhMjI2YzM4
NDUwYTY0OWQ3MDc3ZDZiY2JlY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRGF0YWJhc2VNYW5hZ2VyLmlkbApAQCAtNjksNSArNjks
NCBAQCBpbnRlcmZhY2UgSVdlYkRhdGFiYXNlTWFuYWdlciA6IElVbmtub3duCiBpbnRlcmZhY2Ug
SVdlYkRhdGFiYXNlTWFuYWdlcjIgOiBJV2ViRGF0YWJhc2VNYW5hZ2VyCiB7CiAgICAgSFJFU1VM
VCBkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzKCk7Ci0gICAgSFJFU1VMVCBzZXRJREJQZXJPcmln
aW5RdW90YShbaW5dIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcAppbmRleCBmOTk2M2YxYzA2ODk2
ZDdhMmNiMmQ3MzNhMThlZmFhYWYzY2U0ODA4Li5kOGRlMjMyNmU1ZjA2ZmU0ZmRhYjYyOTQxMDU1
ZmY5YzRiZWYzNzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRh
YmFzZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNl
TWFuYWdlci5jcHAKQEAgLTM0NCwxNCArMzQ0LDYgQEAgSFJFU1VMVCBXZWJEYXRhYmFzZU1hbmFn
ZXI6OmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKQogICAgIHJldHVybiBTX09LOwogfQogCi1I
UkVTVUxUIFdlYkRhdGFiYXNlTWFuYWdlcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodW5zaWduZWQg
bG9uZyBsb25nIHF1b3RhKQotewotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFdl
YkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldElEQlBlck9yaWdpblF1b3RhKHF1b3Rh
KTsKLSNlbmRpZgotICAgIHJldHVybiBTX09LOwotfQotCiBjbGFzcyBEaWRNb2RpZnlPcmlnaW5E
YXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEaWRNb2RpZnlPcmlnaW5EYXRhKTsKIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFu
YWdlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKaW5k
ZXggZTBmZTNlM2I4ODFiNjEzZThiMGY5NzZhODVjYWQ4NDliYjcyNzQ3Ny4uNTFiNjQ1ZjcyODQ3
NWQxNjY0YTlhZmFkZGRiYjkxMGQ1OGJlOWI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKQEAgLTU2LDcgKzU2LDYgQEAgcHVibGljOgogCiAgICAg
Ly8gSVdlYkRhdGFiYXNlTWFuYWdlcjIKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcygpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBzZXRJREJQZXJPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcp
OwogCiAgICAgLy8gRGF0YWJhc2VNYW5hZ2VyQ2xpZW50CiAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNlY3VyaXR5T3JpZ2luRGF0YSYpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDVkNGFk
OGFlN2YzMzAzZDcwZDE1YjNiZTBhNDQxMDI0MDg5NDhmMWIuLjk4NTMxZDc3OGZiNmMxMzliNWVh
NTM2NDQwMTBjM2JiNGFmYWUwZWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAxOS0wNC0wNSAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90
YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN0YXRpY0Z1
bmN0aW9ucyk6CisgICAgICAgIChzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxiYWNrKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAocnVuVGVzdCk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChU
ZXN0UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAg
ICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgor
ICAgICAgICAoV1RSOjpUZXN0UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQu
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6
CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAg
IChXVFI6OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAg
ICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAg
ICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRl
c3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKToKKwogMjAxOS0wNC0wNSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAK
ICAgICAgICAgQ2xvc2Ugc2VydmljZSB3b3JrZXIgZGF0YWJhc2Ugb24gbmV0d29yayBwcm9jZXNz
IHN1c3BlbnNpb24KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIu
Y3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXggNjIyMjI0MmEw
YTg5MDMxZDZkYTFiOGEzOGY5MDg3YTE1ZjdlMWFkYS4uNWFiNzE2OGE0OTQxNmIzZWNiOGM3OWI1
MjVmNTEyODY4OGFiYTI2NCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1
bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKQEAgLTkz
NCwyMCArOTM0LDYgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0RGF0YWJhc2VRdW90YUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW4KICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHNldElEQlBl
ck9yaWdpblF1b3RhQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewotICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOwotICAgIAotICAgIGF1dG8qIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxU
ZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAKLSAgICBk
b3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBudWxs
cHRyKTsKLSAgICBpZiAoIXN0ZDo6aXNuYW4ocXVvdGEpKQotICAgICAgICBjb250cm9sbGVyLT5z
ZXRJREJQZXJPcmlnaW5RdW90YShzdGF0aWNfY2FzdDx1aW50NjRfdD4ocXVvdGEpKTsKLSAgICAK
LSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KIHN0YXRpYyBK
U1ZhbHVlUmVmIHNldERlZmVyc0xvYWRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQpAQCAtMjIyNSw3ICsyMjExLDYg
QEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAg
ICAgeyAic2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGljYXRp
b25DaGFsbGVuZ2VzIiwgc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0
aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0SGFu
ZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRJY29uRGF0YWJhc2VFbmFi
bGVkIiwgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAgIHsg
InNldElEQlBlck9yaWdpblF1b3RhIiwgc2V0SURCUGVyT3JpZ2luUXVvdGFDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCIsIHNldEF1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25k
ZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50YXRpb24i
LCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
VGVzdFJ1bm5lci5oCmluZGV4IDQyMDkxOTBiMzYyZGMwZGZhMjcyZjgzZjUzNzViMGFhYjA1MTlm
MGUuLmJiNjNlZDVmMTgwOGIwYTk2MjFkZjdhNDc1ZWNhYTYzYTgxYmFjZmEgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9UZXN0UnVubmVyLmgKQEAgLTEwNiw3ICsxMDYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVuLCBK
U1N0cmluZ1JlZiBzY2hlbWUpOwogICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsKICAg
ICB2b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJREJQZXJP
cmlnaW5RdW90YSh1aW50NjRfdCk7CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNzQ2xp
cGJvYXJkKGJvb2wgZmxhZyk7CiAgICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5h
YmxlZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlcihi
b29sIGZsYWcpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmlu
ZGV4IDY2YzNmYjk4NDNhY2FjYWNhM2FlMzMyY2NmODliMmRlMGUwZjJhNDUuLjgyODYyMDAyZmMw
ZjczMjIzZDJhM2ZlN2ZmZGUzMTIzYzhlNjY2NWYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTIwMjYsNyArMjAyNiw2IEBAIHN0YXRpYyB2b2lkIHJ1
blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAgICAgZ1Rlc3RSdW5uZXItPmNsZWFyQWxs
QXBwbGljYXRpb25DYWNoZXMoKTsKIAogICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbERhdGFiYXNl
cygpOwotICAgIGdUZXN0UnVubmVyLT5zZXRJREJQZXJPcmlnaW5RdW90YSg1MCAqIE1CKTsKIAog
ICAgIGlmIChkaXNhbGxvd2VkVVJMcykKICAgICAgICAgQ0ZTZXRSZW1vdmVBbGxWYWx1ZXMoZGlz
YWxsb3dlZFVSTHMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RS
dW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpp
bmRleCA3NDI1MTdjZmY3MTA1MjBiZGFhYTE3YWYyMmVhN2I5OTg0YTlkZTMzLi4wYmNkNTU1Njc3
YmNkMDIyNGE2ZWU2NTc2MzM1MWY5YzE3NWMxYjI3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDMzLDExICs0MzMsNiBAQCB2b2lkIFRlc3RSdW5uZXI6
OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQogICAgIFtvcmlnaW4g
cmVsZWFzZV07CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEodWlu
dDY0X3QgcXVvdGEpCi17Ci0gICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0YWJh
c2VNYW5hZ2VyXSBzZXRJREJQZXJPcmlnaW5RdW90YTpxdW90YV07Ci19Ci0KIHZvaWQgVGVzdFJ1
bm5lcjo6Z29CYWNrKCkKIHsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBnb0JhY2tdOwpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCmluZGV4IDYwNjFhYTE3ODU5
NWIyYmEyZDA2MGY0NGUwMGI0MzFhODQwNmM2ZTEuLmI5MmI5OTZmYzI3ODdjOGM4ZGViOGYxYTUw
Y2Y2OWEzYzlhZWY1NDIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0
UnVubmVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldp
bi5jcHAKQEAgLTE3MiwyMiArMTcyLDYgQEAgdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERhdGFi
YXNlcygpCiAgICAgZGF0YWJhc2VNYW5hZ2VyMi0+ZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcygp
OwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1
b3RhKQotewotICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiBkYXRhYmFzZU1hbmFnZXI7
Ci0gICAgQ09NUHRyPElXZWJEYXRhYmFzZU1hbmFnZXI+IHRtcERhdGFiYXNlTWFuYWdlcjsKLSAg
ICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkRhdGFiYXNlTWFuYWdl
ciwgMCwgSUlEX0lXZWJEYXRhYmFzZU1hbmFnZXIsICh2b2lkKiopJnRtcERhdGFiYXNlTWFuYWdl
cikpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZBSUxFRCh0bXBEYXRhYmFzZU1hbmFnZXIt
PnNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcigmZGF0YWJhc2VNYW5hZ2VyKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyMj4gZGF0YWJhc2VNYW5hZ2Vy
MjsKLSAgICBpZiAoRkFJTEVEKGRhdGFiYXNlTWFuYWdlci0+UXVlcnlJbnRlcmZhY2UoJmRhdGFi
YXNlTWFuYWdlcjIpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YWJhc2VNYW5hZ2VyMi0+
c2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQotCiB2b2lkIFRlc3RSdW5uZXI6OnNldFN0
b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IEltcGxl
bWVudC4gUmVxdWlyZXMgbm9uLWV4aXN0YW50IChvbiBXaW5kb3dzKSBXZWJTdG9yYWdlTWFuYWdl
cgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5kZXggMDg3ZGE4NDY1MjU3ZmJlNjlkMzU4YmY1
NzcwZWY3MjMyYzY5NTViMC4uODY4YWY1ZWQ1YzdiNGFiYjA4NjY2Mjc0NWQ5ODkzNGU2MGIwNzIz
MyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBAIC0xMzgsOSArMTM4LDYgQEAgaW50ZXJm
YWNlIFRlc3RSdW5uZXIgewogICAgIGF0dHJpYnV0ZSBkb3VibGUgZGF0YWJhc2VEZWZhdWx0UXVv
dGE7CiAgICAgYXR0cmlidXRlIGRvdWJsZSBkYXRhYmFzZU1heFF1b3RhOwogCi0gICAgLy8gSW5k
ZXhlZERCIEFQSQotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBs
b25nIHF1b3RhKTsKLQogICAgIC8vIEFwcGxpY2F0aW9uIENhY2hlIEFQSQogICAgIHZvaWQgY2xl
YXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwogICAgIHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVtU2l6
ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCAxYzlhZjMzMTk3MGJlNGM0
Njc1ZmI2OTM5Zjk0N2Q4OWExMWMxZTQ2Li42MGJjOWFlYTZkMWVmMWQxNTAwYzVmM2E2MDMzOTI3
YzQ5OGY3MDcwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTQxNiwxMyArNDE2LDYgQEAgdm9pZCBUZXN0UnVubmVy
OjpkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkKICAgICBtX2Rpc2Fs
bG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEgPSB0cnVlOwogfQogCi12b2lkIFRl
c3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiU2V0SURCUGVyT3JpZ2luUXVvdGEiKSk7Ci0gICAgV0tSZXRhaW5Q
dHI8V0tVSW50NjRSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLVUludDY0Q3JlYXRlKHF1b3Rh
KSk7Ci0gICAgV0tCdW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpz
aW5nbGV0b24oKS5idW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgp
LCBudWxscHRyKTsKLX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9K
UyhKU0NvbnRleHRSZWYgY29udGV4dCwgV0tBcnJheVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0
IHNpemVfdCBjb3VudCA9IFdLQXJyYXlHZXRTaXplKHN0cmluZ3MpOwpkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCA4NGFiMjE5
MzMzNjZkM2Q3ZTY3YzkxNjhlZDhkMDY2YzE2MTQxNjE1Li4xNTkxYWM4NWQ4ZTU4NDcyNDRlZTI4
MzIyYzdhZWM1N2Y4YTVjYTUyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaApAQCAtMTc2LDkgKzE3Niw2IEBAIHB1YmxpYzoKICAg
ICB1aW50NjRfdCBkb21DYWNoZVNpemUoSlNTdHJpbmdSZWYgb3JpZ2luKTsKICAgICB2b2lkIHNl
dEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbCk7CiAKLSAgICAvLyBJbmRleGVkREIKLSAg
ICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIC8vIEZhaWxlZCBs
b2FkIGNvbmRpdGlvbiB0ZXN0aW5nCiAgICAgdm9pZCBmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24o
KTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCAyMmRj
MDcxZmZlNzRkYTU5N2EyNmIyZTVhNDEwYTBlZmRmY2Y0ZTRjLi5lM2M2ODQ2YzNiM2Y2ODU4MGMx
YTU0NmQyODQ1ODRkMDhiZmVjYWIwIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmNwcApAQCAtOTA3LDcgKzkwNyw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0
U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAg
ICAgV0tDb250ZXh0Q2xlYXJDYWNoZWRDcmVkZW50aWFscyhUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuY29udGV4dCgpKTsKIAogICAgIENsZWFySW5kZXhlZERhdGFiYXNlcygpOwotICAgIHNl
dElEQlBlck9yaWdpblF1b3RhKDUwICogTUIpOwogCiAgICAgY2xlYXJTZXJ2aWNlV29ya2VyUmVn
aXN0cmF0aW9ucygpOwogICAgIGNsZWFyRE9NQ2FjaGVzKCk7CkBAIC0yOTkyLDExICsyOTkxLDYg
QEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6Y2xlYXJET01DYWNoZXMoKQogICAgIHJ1blVudGlsKGNv
bnRleHQuZG9uZSwgbm9UaW1lb3V0KTsKIH0KIAotdm9pZCBUZXN0Q29udHJvbGxlcjo6c2V0SURC
UGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgV0tDb250ZXh0U2V0SURCUGVy
T3JpZ2luUXVvdGEocGxhdGZvcm1Db250ZXh0KCksIHF1b3RhKTsKLX0KLQogc3RydWN0IFJlbW92
ZUFsbEluZGV4ZWREYXRhYmFzZXNDYWxsYmFja0NvbnRleHQgewogICAgIGV4cGxpY2l0IFJlbW92
ZUFsbEluZGV4ZWREYXRhYmFzZXNDYWxsYmFja0NvbnRleHQoVGVzdENvbnRyb2xsZXImIGNvbnRy
b2xsZXIpCiAgICAgICAgIDogdGVzdENvbnRyb2xsZXIoY29udHJvbGxlcikKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaCBiL1Rvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAppbmRleCBhY2U2YTU0MTAyYzg5YmRhZWM2YWEzZTNj
YzA2NTZjNTkzNThkNTljLi5mMmNhNTQ0YWNjZGJkMDE2YTcwNjE3N2Q5YWQ5MTNmMmEzNzk4ZTM4
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKKysr
IGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5oCkBAIC0yNjcsOCArMjY3
LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRBbGxvd1N0b3JhZ2VRdW90YUluY3JlYXNlKGJv
b2wpOwogCi0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICBi
b29sIGRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZp
Z2F0aW9uOyB9CiAgICAgdm9pZCBjbGVhckRpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTmF2aWdhdGlvbigpIHsgbV9kaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbE5hdmlnYXRpb24gPSBmYWxzZTsgfQogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCmluZGV4IDRjNzAzN2I3ZjU3NzVjNjY3ZGYzOGIwMzEzYzFkYWMwMDRhYmU1
MjAuLmNlNWE5YzNmMDUzMWZiNDMzN2FmMWY5NGJkM2YxYzJjZDFiMTQ1ZGIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1Rvb2xzL1dl
YktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0xNDkzLDEzICsxNDkzLDYgQEAg
V0tSZXRhaW5QdHI8V0tUeXBlUmVmPiBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9u
b3VzTWVzc2FnZUZyb21JbmplY3RlZEIKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfQog
Ci0gICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJTZXRJ
REJQZXJPcmlnaW5RdW90YSIpKSB7Ci0gICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdl
Qm9keSkgPT0gV0tVSW50NjRHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFdLVUludDY0UmVmIHF1b3Rh
ID0gc3RhdGljX2Nhc3Q8V0tVSW50NjRSZWY+KG1lc3NhZ2VCb2R5KTsKLSAgICAgICAgVGVzdENv
bnRyb2xsZXI6OnNpbmdsZXRvbigpLnNldElEQlBlck9yaWdpblF1b3RhKFdLVUludDY0R2V0VmFs
dWUocXVvdGEpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCiAgICAgaWYgKFdL
U3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJJbmplY3RVc2VyU2NyaXB0
IikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmlu
Z0dldFR5cGVJRCgpKTsKICAgICAgICAgV0tTdHJpbmdSZWYgc2NyaXB0ID0gc3RhdGljX2Nhc3Q8
V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375711</attachid>
            <date>2019-08-07 10:33:03 -0700</date>
            <delta_ts>2019-08-12 01:16:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-196545-20190807103302.patch</filename>
            <type>text/plain</type>
            <size>47321</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4MzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE4OTlhMDA3MGI3NTRm
YjUxMzlkM2ZhMjA4NzNiNzM2N2QxNzM1OC4uNmYyN2NkZmM5OTdlY2I2ZGM2MDkxMGMwOGZmZGY2
MGI5YzE1Yzg1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE5LTA4LTA3ICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNp
ZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAg
ICAgIE5vIGNoYW5nZSBvZiBiZWhhdmlvciBhcyBJREIgc3BlY2lmaWMgcXVvdGEgaXMgbm8gbG9u
Z2VyIHVzZWQuCisgICAgICAgIEluc3RlYWQgYSBnbG9iYWwgcXVvdGEgaXMgdXNlZC4gVGhpcyBx
dW90YSBjdXJyZW50bHkgaGFuZGxlcyBJREIgYW5kIENhY2hlIEFQSS4KKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnNldFBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6cGVyT3JpZ2luUXVvdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5n
U3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5h
bWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6YWRkUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cXVvdGFGb3JPcmlnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6Om1heGltdW1TaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNldFF1b3RhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aDoKKwogMjAxOS0wOC0wNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmVtb3ZlIElEQlZhbHVlOjptX3Nlc3Npb25JRApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiNzY0MGQ3Y2Jj
ODI3NzU3MjUzY2IzNDViYjcxYjVhZjI5ZDcyOTUxLi5hMTcxMGEyYmY4OTY3MjVkYWM0MTU0MTEw
Mjk4NmZhZjk4YmI1NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDE5LTA4LTA3ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNw
ZWNpZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5R
dW90YSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorCiAyMDE5LTA4LTA2ICBKZXIg
Tm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCB0ZXN0IGZvciBiZWhh
dmlvciBpbnRyb2R1Y2VkIGluIHIyNDgxNzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKaW5kZXggM2RlMDQ1
MzIxYWFjZjgyYjMxNmVlM2Q4YWVlOGQyNDUyY2JhNmE1OC4uMTNiZTFhZGNkYmJlODQxM2RiYTQ4
ZTY5MzViZmFjZWY0MjdhODE4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBA
QAorMjAxOS0wOC0wNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBD
aHJpc3RlbnNlbi4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHA6
CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjppZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JT
ZXNzaW9uKToKKyAgICAgICAgKFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNl
cyk6CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6
IERlbGV0ZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg6CisKIDIw
MTktMDgtMDYgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFtXaW5dIEZpeCBBcHBsZVdpbiBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4
IDU3MGIxNWIyNTQ4MTYzYzJjOTA4NzAxMWFhZTVmYjRlNGI3NGRmMDQuLjkwNTA4NjMyZWZiYzU2
MmExYWEzYzEzMmEyNmM1ZWQzOThhMWQ2ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOC0wNyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFN0b3JhZ2UvV2ViRGF0YWJh
c2VNYW5hZ2VyLm1tOgorICAgICAgICAoLVtXZWJEYXRhYmFzZU1hbmFnZXIgc2V0SURCUGVyT3Jp
Z2luUXVvdGE6XSk6IERlbGV0ZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFn
ZXJQcml2YXRlLmg6CisKIDIwMTktMDgtMDIgIEtlaXRoIFJvbGxpbiAgPGtyb2xsaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIENvbnNpc3RlbnRseSB1c2UgT2JqLUMgYm9vbGVhbiBsaXRlcmFscwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IDRjNDAxNmQzNjcwYzUwNzc0ZmVlMGE4NTcx
M2VmMWM4MzkxMGNkOWMuLmEwMzBhZmRkN2E3MzhjOTc2OWY3ZDVkZjFjOTU0MjA1YWY5NDA1Yzgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOS0wOC0w
NyAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElE
Qi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4K
KworICAgICAgICAqIEludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGw6CisgICAgICAg
ICogV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkRhdGFiYXNlTWFuYWdlcjo6
c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkRhdGFiYXNlTWFu
YWdlci5oOgorCiAyMDE5LTA3LTI4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNv
bnkuY29tPgogCiAgICAgICAgIFtXaW5dW1dLMV0gQ2FuJ3QgY2hhbmdlIFdlYiBJbnNwZWN0b3Ig
ZnJvbnRlbmQgaGVpZ2h0IGluIGhpZ2ggRFBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgKaW5kZXggMjkxZjc2
ZWQ1YWM1YmJiNzdjODRkZWZmOWMwYzY2NzljNzhiYTMzNC4uNzJlY2YyZTBhMDNhNTFkNGU2MjUw
NTE5NjMzMjQwNTdkZDc5ZjI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaApAQCAtMTAwLDcgKzEwMCw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNFcGhlbWVyYWwoKSA9IDA7CiAKICAgICB2
aXJ0dWFsIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCA9IDA7Ci0gICAg
dmlydHVhbCB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJikgY29uc3QgPSAwOwog
cHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA3ZjA3MDlkMzlmY2JkOGE0N2YyNDFlOWNkYjkwNDgz
YTJlNzYwYWFlLi4zYjFlMTU2MWJiYTA1NWM4Y2E2ZWE4ZTVhYTk2MDk1OWFkZjZiOWI3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxJREJCYWNraW5nU3Rv
cmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlCiAgICAg
aWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIE1l
bW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciwgbV9w
ZXJPcmlnaW5RdW90YSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFj
a2luZ1N0b3JlPihpZGVudGlmaWVyLCBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5n
U3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlcik7CiB9CiAKIHZvaWQgSURCU2VydmVyOjpvcGVuRGF0
YWJhc2UoY29uc3QgSURCUmVxdWVzdERhdGEmIHJlcXVlc3REYXRhKQpAQCAtNjkxLDE0ICs2OTEs
NiBAQCB2b2lkIElEQlNlcnZlcjo6ZGlkUGVyZm9ybUNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzKHVp
bnQ2NF90IGNhbGxiYWNrSUQpCiAgICAgY2FsbGJhY2soKTsKIH0KIAotdm9pZCBJREJTZXJ2ZXI6
OnNldFBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1fcGVyT3JpZ2luUXVv
dGEgPSBxdW90YTsKLQotICAgIGZvciAoYXV0byYgZGF0YWJhc2UgOiBtX3VuaXF1ZUlEQkRhdGFi
YXNlTWFwLnZhbHVlcygpKQotICAgICAgICBkYXRhYmFzZS0+c2V0UXVvdGEocXVvdGEpOwotfQot
CiBJREJTZXJ2ZXI6OlF1b3RhVXNlcjo6UXVvdGFVc2VyKElEQlNlcnZlciYgc2VydmVyLCBTdG9y
YWdlUXVvdGFNYW5hZ2VyKiBtYW5hZ2VyLCBDbGllbnRPcmlnaW4mJiBvcmlnaW4pCiAgICAgOiBt
X3NlcnZlcihzZXJ2ZXIpCiAgICAgLCBtX21hbmFnZXIobWFrZVdlYWtQdHIobWFuYWdlcikpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2Vy
dmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmgKaW5kZXggNGQzMjhjNDgyMTU1NjRhMzIzMDQ5ZWQ2YjUzN2JiZGJlMzdkYzhjMS4uMDlmNWMx
YzQ3MTVjYWNkZTE0NjhmN2NjMjVlOGVjOGNiZmQ2MDFhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaApAQCAtMTE1LDkgKzEx
NSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0
YWJhc2VzTW9kaWZpZWRTaW5jZShXYWxsVGltZSwgRnVuY3Rpb248dm9pZCAoKT4mJiBjb21wbGV0
aW9uSGFuZGxlcik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURhdGFi
YXNlc0Zvck9yaWdpbnMoY29uc3QgVmVjdG9yPFNlY3VyaXR5T3JpZ2luRGF0YT4mLCBGdW5jdGlv
bjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKIAotICAgIHVpbnQ2NF90IHBlck9yaWdp
blF1b3RhKCkgY29uc3QgeyByZXR1cm4gbV9wZXJPcmlnaW5RdW90YTsgfQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0UGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwotCiAgICAgdm9pZCByZXF1
ZXN0U3BhY2UoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUsIENvbXBsZXRp
b25IYW5kbGVyPHZvaWQoU3RvcmFnZVF1b3RhTWFuYWdlcjo6RGVjaXNpb24pPiYmKTsKICAgICB2
b2lkIGluY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2
NF90IHRhc2tTaXplKTsKICAgICB2b2lkIGRlY3JlYXNlUG90ZW50aWFsU3BhY2VVc2VkKGNvbnN0
IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplKTsKQEAgLTE5Niw4ICsxOTMsNiBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFiYXNlRGlyZWN0b3J5UGF0aDsKICAgICBJREJCYWNr
aW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxl
SGFuZGxlcjsKIAotICAgIHVpbnQ2NF90IG1fcGVyT3JpZ2luUXVvdGEgeyBkZWZhdWx0UGVyT3Jp
Z2luUXVvdGEgfTsKLQogICAgIEhhc2hNYXA8Q2xpZW50T3JpZ2luLCBzdGQ6OnVuaXF1ZV9wdHI8
UXVvdGFVc2VyPj4gbV9xdW90YVVzZXJzOwogICAgIFF1b3RhTWFuYWdlckdldHRlciBtX3F1b3Rh
TWFuYWdlckdldHRlcjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKaW5kZXggMTVm
ZTNjNDczOTk2YzZlNGYzN2U0ZjQzZmY1YTY1ZmNmNmZhM2FmNy4uNzdjYzk2OTg5NjU4NDBlNWJk
N2U2N2EyN2Q3ZTI1ZWNhNjYxNjBkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaApA
QCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBzdXBwb3J0c1NpbXVsdGFuZW91c1Ry
YW5zYWN0aW9ucygpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBib29sIGlzRXBoZW1lcmFs
KCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgdm9pZCBzZXRRdW90YSh1aW50NjRfdCBx
dW90YSkgZmluYWwgeyBVTlVTRURfUEFSQU0ocXVvdGEpOyB9OwogICAgIHVpbnQ2NF90IGRhdGFi
YXNlc1NpemVGb3JPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAogICAgIHZvaWQgcmVtb3ZlT2JqZWN0
U3RvcmVGb3JWZXJzaW9uQ2hhbmdlQWJvcnQoTWVtb3J5T2JqZWN0U3RvcmUmKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNr
aW5nU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKaW5kZXggMjc5ZDE4MTFmMDZiNjgxNjA0OTY3OTU2MDRl
YWUwYzVlZDVhYzE0Yi4uYTViMmIwZDRmZmU1YTY4OWM1ZmFhZGNjMTljMmI2NGNkYjA3YzAyNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0
ZUlEQkJhY2tpbmdTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAKQEAgLTIyOCwxMSArMjI4LDEwIEBA
IHN0YXRpYyBjb25zdCBTdHJpbmcmIGJsb2JGaWxlc1RhYmxlU2NoZW1hQWx0ZXJuYXRlKCkKICAg
ICByZXR1cm4gYmxvYkZpbGVzVGFibGVTY2hlbWFTdHJpbmc7CiB9CiAKLVNRTGl0ZUlEQkJhY2tp
bmdTdG9yZTo6U1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmll
ciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJh
Y2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxlciwgdWludDY0X3QgcXVv
dGEpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJ
REJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VS
b290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhh
bmRsZXIpCiAgICAgOiBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1fZGF0YWJhc2VS
b290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1fdGVtcG9yYXJ5Rmls
ZUhhbmRsZXIoZmlsZUhhbmRsZXIpCi0gICAgLCBtX3F1b3RhKHF1b3RhKQogewogICAgIG1fZGF0
YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBncmFkZSgpOwogfQpA
QCAtODcyLDE0ICs4NzEsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmdldE9y
RXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAgIHJldHVybiBJ
REJFcnJvciB7IH07CiB9CiAKLXVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cXVvdGFG
b3JPcmlnaW4oKSBjb25zdAotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkpOwotICAgIHVp
bnQ2NF90IGRpc2tGcmVlU3BhY2VTaXplID0gMDsKLSAgICBGaWxlU3lzdGVtOjpnZXRWb2x1bWVG
cmVlU3BhY2UobV9pZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVUb1Jvb3QobV9k
YXRhYmFzZVJvb3REaXJlY3RvcnkpLCBkaXNrRnJlZVNwYWNlU2l6ZSk7Ci0gICAgcmV0dXJuIHN0
ZDo6bWluKGRpc2tGcmVlU3BhY2VTaXplIC8gMiwgbV9xdW90YSk7Ci19Ci0KIHVpbnQ2NF90IFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihjb25zdCBTdHJpbmcm
IGZvbGRlcikKIHsKICAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSAwOwpAQCAtODk3LDI0ICs4ODgs
NiBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1NpemVGb3JPcmln
aW4oKSBjb25zdAogICAgIHJldHVybiBkYXRhYmFzZXNTaXplRm9yRm9sZGVyKG9sZFZlcnNpb25P
cmlnaW5EaXJlY3RvcnkpICsgZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihuZXdWZXJzaW9uT3JpZ2lu
RGlyZWN0b3J5KTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXhpbXVt
U2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBU
aGUgbWF4aW11bSBzaXplIGZvciBvbmUgZGF0YWJhc2UgZmlsZSBpcyB0aGUgcXVvdGEgZm9yIGl0
cyBvcmlnaW4sIG1pbnVzIHNpemUgb2YgYWxsIGRhdGFiYXNlcyB3aXRoaW4gdGhhdCBvcmlnaW4s
Ci0gICAgLy8gYW5kIHBsdXMgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFzZSBmaWxlLgotICAg
IHVpbnQ2NF90IGRhdGFiYXNlRmlsZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpnZXREYXRhYmFz
ZUZpbGVTaXplKGZ1bGxEYXRhYmFzZVBhdGgoKSk7Ci0gICAgdWludDY0X3QgcXVvdGEgPSBxdW90
YUZvck9yaWdpbigpOwotCi0gICAgdWludDY0X3QgZGlza1VzYWdlID0gZGF0YWJhc2VzU2l6ZUZv
ck9yaWdpbigpOwotICAgIEFTU0VSVChkaXNrVXNhZ2UgPj0gZGF0YWJhc2VGaWxlU2l6ZSk7Ci0K
LSAgICBpZiAocXVvdGEgPCBkaXNrVXNhZ2UpCi0gICAgICAgIHJldHVybiBkYXRhYmFzZUZpbGVT
aXplOwotCi0gICAgcmV0dXJuIHF1b3RhIC0gZGlza1VzYWdlICsgZGF0YWJhc2VGaWxlU2l6ZTsK
LX0KLQogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNv
bnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhlZERCLCAiU1FM
aXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uIC0gJXMiLCBpbmZvLmlkZW50aWZp
ZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC05MjMsNyArODk2LDYgQEAg
SURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKGNvbnN0IElE
QlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+aXNPcGVuKCkp
OwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAKLSAgICBtX3NxbGl0ZURCLT5zZXRNYXhp
bXVtU2l6ZShtYXhpbXVtU2l6ZSgpKTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fdHJhbnNhY3Rp
b25zLmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYgKCFhZGRSZXN1bHQu
aXNOZXdFbnRyeSkgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gZXN0YWJsaXNoIHRy
YW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwpAQCAtOTQwLDEwICs5
MTIsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24o
Y29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgICAgICBpZiAoc3FsLnByZXBhcmUo
KSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBTdHJpbmc6Om51
bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3Fs
LnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxh
c3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIGVycm9yID0gSURCRXJy
b3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZl
cnNpb24gaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBV
bmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0
YWJhc2UiX3MgfTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UiX3MgfTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTAyNiw4ICs5OTUsNiBAQCBJREJFcnJvciBTUUxpdGVJ
REJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRp
ZmllciYgdAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgaW5mby5tYXhJbmRleElE
KCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RP
TkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFkZCBvYmplY3Qgc3RvcmUg
JyVzJyB0byBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5mby5uYW1lKCkudXRm
OCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
ck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJ
VEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVk
RXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBz
cGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9
CiAgICAgfQpAQCAtMTAzOCw4ICsxMDA1LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHQKICAg
ICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRpZmllcigpKSAhPSBTUUxJ
VEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAg
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZWVkIGluaXRpYWwga2V5IGdlbmVyYXRvciB2
YWx1ZSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3FsaXRlREItPmxh
c3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAo
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5p
dGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91
Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsg
VW5rbm93bkVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVl
IGZvciBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogICAgIH0KQEAgLTExNjMsOCArMTEy
OCw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJ
bnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwogICAgICAgICAgICAg
fHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBvYmplY3Qgc3RvcmUgaWQgJSIgUFJJaTY0ICIgaW4g
T2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwg
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1zZygpKTsKLSAg
ICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJDb3Vs
ZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9t
YWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJD
b3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAt
MTI0Niw4ICsxMjA5LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVJ
bmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50KDYsIGluZm8ubXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgfHwg
c3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBu
b3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIGluZm8ubmFt
ZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBT
UUxJVEVfRlVMTCkKLSAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRF
cnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91
Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9zIH07CiAgICAg
fQogCkBAIC0xMzk2LDggKzEzNTcsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6
OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwgaQogICAgICAg
ICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgcmVjb3JkSUQpICE9IFNRTElURV9PSwogICAgICAg
ICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19F
UlJPUigiQ291bGQgbm90IHB1dCBpbmRleCByZWNvcmQgZm9yIGluZGV4ICUiIFBSSWk2NCAiIGlu
IG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkgLSAlcyIsIGlu
ZGV4SUQsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9y
KCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVv
dGFFeGNlZWRlZEVycm9yLCAiRXJyb3IgcHV0dGluZyBpbmRleCByZWNvcmQgaW50byBkYXRhYmFz
ZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICBy
ZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBwdXR0aW5nIGluZGV4IHJlY29y
ZCBpbnRvIGRhdGFiYXNlIl9zIH07CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDgzLDggKzE0NDIs
NiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4KGNvbnN0IElE
QlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50
NjQoMywgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCB1cGRhdGUgbmFtZSBmb3IgaW5kZXggaWQgKCUiIFBSSWk2NCAiLCAlIiBQUklpNjQgIikgaW4g
SW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRlbnRpZmllciwgaW5kZXhJ
ZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
TXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElU
RV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRF
cnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5kZXggYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9y
IGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9y
LCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAtMTgy
Miw4ICsxNzc5LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQo
Y29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAgIHx8IHNx
bC0+YmluZEJsb2IoMywgdmFsdWUuZGF0YSgpLmRhdGEoKS0+ZGF0YSgpLCB2YWx1ZS5kYXRhKCku
ZGF0YSgpLT5zaXplKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkg
IT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBy
ZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkg
LSAlcyIsIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRlREItPmxhc3RFcnJv
cigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxp
dGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIHN0b3JlIHJlY29yZCBp
biBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9Owog
ICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHN0
b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogCkBAIC0xODU2LDgg
KzE4MTEsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25z
dCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNx
bC0+YmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgICAgICB8fCBzcWwt
PnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5h
YmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpOwotICAgICAgICAgICAgICAg
IGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRv
IHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBm
b3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSJfcyB9Owog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODkxLDggKzE4NDQsNiBAQCBJREJFcnJvciBT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQoMiwgc3RvcmVk
RmlsZW5hbWUpICE9IFNRTElURV9PSwogICAgICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFibGUgdG8gcmVj
b3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAgICAgICAgICBpZiAo
bV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byByZWNv
cmQgQmxvYiBmaWxlIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21h
aW4iX3MgfTsKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3Is
ICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiX3MgfTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQyOSw4ICsyMzgwLDYgQEAgSURCRXJyb3IgU1FM
aXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZShpbnQ2NF90
IG9iamVjdFN0b3IKICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgdmFsdWUpICE9IFNRTElU
RV9PSwogICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICBM
T0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUga2V5IGdlbmVyYXRvciB2YWx1ZSAoJWkpIC0gJXMi
LCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwot
ICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJFcnJvciBzdG9y
aW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVlIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdo
IHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgQ29uc3Ry
YWludEVycm9yLCAiRXJyb3Igc3RvcmluZyBuZXcga2V5IGdlbmVyYXRvciB2YWx1ZSBpbiBkYXRh
YmFzZSIgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaAppbmRleCA3Mzc4
MzQzODQ5NjFmMmI5ZTljNDY4NmVkZmVhMzI2ZDAyMjRjMGFiLi40NjEyNmU1YzgxZmRiZDJhNjU1
YjdjYzdjN2U0NjU5MzE4ZmFjNWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCkBA
IC00OCw3ICs0OCw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNzIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShjb25zdCBJREJE
YXRhYmFzZUlkZW50aWZpZXImLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlUm9vdERpcmVjdG9yeSwg
SURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImLCB1aW50NjRfdCBxdW90YSk7Cisg
ICAgU1FMaXRlSURCQmFja2luZ1N0b3JlKGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3Jh
cnlGaWxlSGFuZGxlciYpOwogICAgIAogICAgIH5TUUxpdGVJREJCYWNraW5nU3RvcmUoKSBmaW5h
bDsKIApAQCAtODEsNyArODEsNiBAQCBwdWJsaWM6CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvKiBp
bmZvRm9yT2JqZWN0U3RvcmUodWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsK
ICAgICB2b2lkIGRlbGV0ZUJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRRdW90
YSh1aW50NjRfdCBxdW90YSkgZmluYWwgeyBtX3F1b3RhID0gcXVvdGE7IH0KICAgICB1aW50NjRf
dCBkYXRhYmFzZXNTaXplRm9yT3JpZ2luKCkgY29uc3QgZmluYWw7CiAKICAgICBib29sIHN1cHBv
cnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTEwNiw5ICsxMDUsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoKCkg
Y29uc3Q7CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKCk7CiAK
LSAgICB1aW50NjRfdCBxdW90YUZvck9yaWdpbigpIGNvbnN0OwotICAgIHVpbnQ2NF90IG1heGlt
dW1TaXplKCkgY29uc3Q7Ci0KICAgICBib29sIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7CiAg
ICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVW
YWxpZEluZGV4UmVjb3Jkc0luZGV4KCk7CkBAIC0yMDcsOCArMjAzLDYgQEAgcHJpdmF0ZToKICAg
ICBKU0M6OlN0cm9uZzxKU0M6OkpTR2xvYmFsT2JqZWN0PiBtX2dsb2JhbE9iamVjdDsKIAogICAg
IElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBtX3RlbXBvcmFyeUZpbGVIYW5k
bGVyOwotICAgIAotICAgIHVpbnQ2NF90IG1fcXVvdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBJ
REJTZXJ2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCmluZGV4IDczMDQ5NzQ0MjBmZjQ2ZmRm
MmVhOTY3OWI2ZDViNWI3ZTY5YmZkZWMuLjFlYmMwODE4Zjg5ZWYzZjc2YjQ2YjI3ZGU3NGYzMWNj
YzNlNDZjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcApAQCAtMjMxNiwxMiArMjMxNiw2
IEBAIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmZvcmdldEVycm9yQ2FsbGJhY2sodWludDY0X3Qg
Y2FsbGJhY2tJZGVudGlmaWVyKQogICAgIG1fZXJyb3JDYWxsYmFja3MucmVtb3ZlKGNhbGxiYWNr
SWRlbnRpZmllcik7CiB9CiAKLXZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OnNldFF1b3RhKHVpbnQ2
NF90IHF1b3RhKQotewotICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKLSAgICAgICAgbV9iYWNraW5n
U3RvcmUtPnNldFF1b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6YWJv
cnRUcmFuc2FjdGlvbk9uTWFpblRocmVhZChVbmlxdWVJREJEYXRhYmFzZVRyYW5zYWN0aW9uJiB0
cmFuc2FjdGlvbikKIHsKICAgICB0cmFuc2FjdGlvbi5zZXRSZXN1bHQobV9iYWNraW5nU3RvcmUt
PmFib3J0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb24uaW5mbygpLmlkZW50aWZpZXIoKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaAppbmRleCA4YzJhMWIzZDE3NDMwY2E2NTM5NzIzODBjYzYxMWMyZTIz
ZjNlNDQ1Li4yNjc2YTRmNGQwYWU1YWFjZDIyMDE2MmMzMjc2OTgxOTgzZjAwYTI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0
YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5p
cXVlSURCRGF0YWJhc2UuaApAQCAtMTI2LDggKzEyNiw2IEBAIHB1YmxpYzoKIAogICAgIHVpbnQ2
NF90IHNwYWNlVXNlZCgpIGNvbnN0OwogCi0gICAgdm9pZCBzZXRRdW90YSh1aW50NjRfdCk7Ci0K
ICAgICB2b2lkIGZpbmlzaEFjdGl2ZVRyYW5zYWN0aW9ucygpOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAppbmRleCBjMzMz
OTU3MGI4NzQwYjE4ODk0NjI0N2YyYmJlMDdhODhkZTI3YWY5Li45Y2I0YTkyNTIyMDkwNWI0YzIx
YTRmNzZhZTc3NmFlMTQ1MDI1Zjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL05ldHdvcmtQcm9jZXNzLmNwcApAQCAtMjI2OSwxMyArMjI2OSwxMSBAQCBSZWY8SURCU2Vy
dmVyOjpJREJTZXJ2ZXI+IE5ldHdvcmtQcm9jZXNzOjpjcmVhdGVJREJTZXJ2ZXIoUEFMOjpTZXNz
aW9uSUQgc2Vzc2lvbgogICAgICAgICBwYXRoID0gbV9pZGJEYXRhYmFzZVBhdGhzLmdldChzZXNz
aW9uSUQpOwogICAgIH0KIAotICAgIGF1dG8gc2VydmVyID0gSURCU2VydmVyOjpJREJTZXJ2ZXI6
OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsICp0aGlzLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtlV2Vh
a1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmlnaW4p
IC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKKyAgICByZXR1cm4gSURCU2VydmVyOjpJREJTZXJ2
ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIHBhdGgsICp0aGlzLCBbdGhpcywgd2Vha1RoaXMgPSBtYWtl
V2Vha1B0cih0aGlzKV0oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBhdXRvJiBvcmln
aW4pIC0+IFN0b3JhZ2VRdW90YU1hbmFnZXIqIHsKICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gJnRoaXMtPnN0b3JhZ2VR
dW90YU1hbmFnZXIoc2Vzc2lvbklELCBvcmlnaW4pOwogICAgIH0pOwotICAgIHNlcnZlci0+c2V0
UGVyT3JpZ2luUXVvdGEobV9pZGJQZXJPcmlnaW5RdW90YSk7Ci0gICAgcmV0dXJuIHNlcnZlcjsK
IH0KIAogSURCU2VydmVyOjpJREJTZXJ2ZXImIE5ldHdvcmtQcm9jZXNzOjppZGJTZXJ2ZXIoUEFM
OjpTZXNzaW9uSUQgc2Vzc2lvbklEKQpAQCAtMjM3MSwxNCArMjM2OSw2IEBAIHZvaWQgTmV0d29y
a1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lv
bklELCBTdHJpbmcmCiAgICAgICAgICAgICBwb3N0U3RvcmFnZVRhc2soY3JlYXRlQ3Jvc3NUaHJl
YWRUYXNrKCp0aGlzLCAmTmV0d29ya1Byb2Nlc3M6OmVuc3VyZVBhdGhFeGlzdHMsIGluZGV4ZWRE
YXRhYmFzZURpcmVjdG9yeSkpOwogICAgIH0KIH0KLQotdm9pZCBOZXR3b3JrUHJvY2Vzczo6c2V0
SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9pZGJQZXJPcmlnaW5R
dW90YSA9IHF1b3RhOwotICAgIAotICAgIGZvciAoYXV0byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJz
LnZhbHVlcygpKQotICAgICAgICBzZXJ2ZXItPnNldFBlck9yaWdpblF1b3RhKHF1b3RhKTsKLX0K
ICNlbmRpZiAvLyBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogdm9pZCBOZXR3b3JrUHJvY2Vz
czo6dXBkYXRlUXVvdGFCYXNlZE9uU3BhY2VVc2FnZUZvclRlc3RpbmcoUEFMOjpTZXNzaW9uSUQg
c2Vzc2lvbklELCBjb25zdCBDbGllbnRPcmlnaW4mIG9yaWdpbikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaCBiL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRleCA1NDZkNWVmM2NjZDhmNmJiZTRj
MDE1M2Q5YmJiN2JlZDhhY2VmZDYzLi5mYjdhNmNkMzZlYTlmMzU5NGE3ZmI5ZGU4NTUzNTMyM2Zh
ODIxNzA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQ
cm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vz
cy5oCkBAIC0yODQsNyArMjg0LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OklEQlNlcnZlcjo6
SURCU2VydmVyJiBpZGJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQpOwogICAgIC8vIFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIuCiAgICAgdm9pZCBhY2Nlc3NUb1Rl
bXBvcmFyeUZpbGVDb21wbGV0ZShjb25zdCBTdHJpbmcmIHBhdGgpIGZpbmFsOwotICAgIHZvaWQg
c2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwogI2VuZGlmCiAgICAgdm9pZCB1cGRhdGVR
dW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCwgY29uc3QgV2Vi
Q29yZTo6Q2xpZW50T3JpZ2luJik7CiAKQEAgLTUyNiw3ICs1MjUsNiBAQCBwcml2YXRlOgogI2lm
IEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0
cmluZz4gbV9pZGJEYXRhYmFzZVBhdGhzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJl
ZlB0cjxXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcj4+IG1faWRiU2VydmVyczsKLSAgICB1
aW50NjRfdCBtX2lkYlBlck9yaWdpblF1b3RhIHsgV2ViQ29yZTo6SURCU2VydmVyOjpkZWZhdWx0
UGVyT3JpZ2luUXVvdGEgfTsKICNlbmRpZgogCiAgICAgRGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBt
X3N0b3JhZ2VUYXNrczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNz
L05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluCmluZGV4IGI3ZTAxZjUxYWNmYmE3YjQzY2JiOTUz
NDc0YjU3OWU0NzFiZWU3YmYuLjZjMjgyN2ViOWRiMTM4ODk5M2QzMGJiOTQzZDNkNmVkMmUxZWFh
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3Jr
UHJvY2Vzcy5tZXNzYWdlcy5pbgpAQCAtMTU5LDkgKzE1OSw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdv
cmtQcm9jZXNzIExlZ2FjeVJlY2VpdmVyIHsKICAgICBEaXNhYmxlU2VydmljZVdvcmtlclByb2Nl
c3NUZXJtaW5hdGlvbkRlbGF5KCkKICNlbmRpZgogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJB
U0UpCi0gICAgU2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi0jZW5kaWYKICAg
ICBVcGRhdGVRdW90YUJhc2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uSUQsIHN0cnVjdCBXZWJDb3JlOjpDbGllbnRPcmlnaW4gb3JpZ2luKQogCiAgICAgU3Rv
cmVBZENsaWNrQXR0cmlidXRpb24oUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBXZWJDb3JlOjpB
ZENsaWNrQXR0cmlidXRpb24gYWRDbGlja0F0dHJpYnV0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKaW5kZXggZDBlYjMxYWUxNjkwMDU3NzJhNmJlYzE0
MzdjMmI0MzBkMGNiNGU2ZC4uYWZjZTcwYjYyN2ZlZWY3YjViZjg4Mjg5YWQ4MjJmMTljMTljZGI2
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCkBAIC02
NjAsMTEgKzY2MCw2IEBAIHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29u
dGV4dFJlZiBjb250ZXh0UmVmKQogI2VuZGlmCiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0SURCUGVy
T3JpZ2luUXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYsIHVpbnQ2NF90IHF1b3RhKQotewot
ICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90
YSk7Ci19Ci0KIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3Rp
bmcoV0tDb250ZXh0UmVmIGNvbnRleHRSZWYpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4
dFJlZiktPmNsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggZjljN2Qz
Mjk2ZTVjMGNkN2YzMzY3ZGUzOWEwMzFkMjgzZmJlNjY2Ni4uMGMxN2IxYTExMmMyZWMxZjJlODUw
MjE3YWI1MWY2NjRhNTE4YWVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLQ29udGV4dFByaXZhdGUuaApAQCAtMTE2LDggKzExNiw2IEBAIFdLX0VYUE9SVCBXS1By
b2Nlc3NJRCBXS0NvbnRleHRHZXROZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVm
IGNvbnRleHQpCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tD
b250ZXh0UmVmIGNvbnRleHQsIFdLU3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwg
V0tBcnJheVJlZiBtaW1lVHlwZXMsIFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQp
OwogCi1XS19FWFBPUlQgdm9pZCBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShXS0NvbnRl
eHRSZWYgY29udGV4dCwgdWludDY0X3QgcXVvdGEpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRl
eHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4
dCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCmluZGV4IGNmOGNmNjkwYThiMjZjZDM2N2U4Nzc5OTk2MWYzNWIyYmNiNmI3
NTAuLjM5ZDYwZDQ0MWFjNGMxYjI0ZTY3YzRmNWI1MDU2YjNmMWU2ZDVhMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKQEAgLTE4MDQsMTMgKzE4MDQsNiBA
QCB2b2lkIFdlYlByb2Nlc3NQb29sOjpzeW5jTmV0d29ya1Byb2Nlc3NDb29raWVzKCkKICAgICBl
bnN1cmVOZXR3b3JrUHJvY2VzcygpLnN5bmNBbGxDb29raWVzKCk7CiB9CiAKLXZvaWQgV2ViUHJv
Y2Vzc1Bvb2w6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotI2lmIEVO
QUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc2VuZChN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlNldElEQlBlck9yaWdpblF1b3RhKHF1b3RhKSwgMCk7
Ci0jZW5kaWYKLX0KLQogdm9pZCBXZWJQcm9jZXNzUG9vbDo6YWxsb3dTcGVjaWZpY0hUVFBTQ2Vy
dGlmaWNhdGVGb3JIb3N0KGNvbnN0IFdlYkNlcnRpZmljYXRlSW5mbyogY2VydGlmaWNhdGUsIGNv
bnN0IFN0cmluZyYgaG9zdCkKIHsKICAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaCBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKaW5kZXggMmNjYjQ3ZjFhZTY0ZmFlMzZh
ZmMxMWEzYzE1NTkwYjc3MDUzNjM1MS4uZDA2YzQ0MDI0Y2RhMTM4ZWI3ZDM4ZjA3N2U1YTFhMWRm
NDY1NzI5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bv
b2wuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCkBAIC0z
MTgsOCArMzE4LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzeW5jTmV0d29ya1Byb2Nlc3NDb29r
aWVzKCk7CiAKLSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAg
IHZvaWQgc2V0U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9v
bCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
ID0gdmFsdWU7IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxG
b3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJv
Y2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4dE5l
dHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCmluZGV4IDVl
ZTVhN2IyOWJlZjQ1Mzk5ZGZkNzhiMzEyM2MwZTBiMmZjOWFjYTEuLjJlYjcwNTM2MjZkZjJlNzdi
OWIyMzY4ODAyMDllZWFiNTFjZTVhOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
U3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKQEAgLTQ1LDE3ICs0NSw5IEBAIFdlYkRh
dGFiYXNlUHJvdmlkZXI6On5XZWJEYXRhYmFzZVByb3ZpZGVyKCkKICNpZiBFTkFCTEUoSU5ERVhF
RF9EQVRBQkFTRSkKIFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBX
ZWJEYXRhYmFzZVByb3ZpZGVyOjppZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0
IFBBTDo6U2Vzc2lvbklEJiBzZXNzaW9uSUQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2lkYlNl
cnZlck1hcC5hZGQoc2Vzc2lvbklELnNlc3Npb25JRCgpLCBudWxscHRyKTsKLSAgICBpZiAocmVz
dWx0LmlzTmV3RW50cnkpIHsKLSAgICAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQot
ICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkNvcmU6OkluUHJvY2Vzc0lE
QlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJl
c3VsdC5pdGVyYXRvci0+dmFsdWUgPSBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0
ZShzZXNzaW9uSUQsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeVBhdGgoKSk7Ci0gICAgfQotCi0g
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+aWRiU2VydmVyKCkuc2V0UGVyT3JpZ2luUXVvdGEo
bV9pZGJQZXJPcmlnaW5RdW90YSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZS0+Y29ubmVjdGlvblRvU2VydmVyKCk7CisgICAgcmV0dXJuIG1faWRiU2VydmVyTWFwLmVuc3Vy
ZShzZXNzaW9uSUQuc2Vzc2lvbklEKCksIFsmc2Vzc2lvbklEXSB7CisgICAgICAgIHJldHVybiBz
ZXNzaW9uSUQuaXNFcGhlbWVyYWwoKSA/IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3Jl
YXRlKHNlc3Npb25JRCkgOiBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNz
aW9uSUQsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeVBhdGgoKSk7CisgICAgfSkuaXRlcmF0b3It
PnZhbHVlLT5jb25uZWN0aW9uVG9TZXJ2ZXIoKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFzZVByb3Zp
ZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMoKQpAQCAtNjMsMTMgKzU1LDQgQEAgdm9pZCBXZWJEYXRh
YmFzZVByb3ZpZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMoKQogICAgIGZvciAoYXV0byYgc2VydmVy
IDogbV9pZGJTZXJ2ZXJNYXAudmFsdWVzKCkpCiAgICAgICAgIHNlcnZlci0+aWRiU2VydmVyKCku
Y2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKC1XYWxsVGltZTo6aW5maW5pdHko
KSwgW10geyB9KTsKIH0KLQotdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQZXJPcmln
aW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBtX2lkYlBlck9yaWdpblF1b3RhID0gcXVv
dGE7Ci0KLSAgICBmb3IgKGF1dG8mIHNlcnZlciA6IG1faWRiU2VydmVyTWFwLnZhbHVlcygpKQot
ICAgICAgICBzZXJ2ZXItPmlkYlNlcnZlcigpLnNldFBlck9yaWdpblF1b3RhKHF1b3RhKTsKLX0K
LQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0
YWJhc2VQcm92aWRlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNl
UHJvdmlkZXIuaAppbmRleCA1MjIyMzMwOWIzOWJlM2VjYWNlYjY5ZmM2OWYyMDA3ZTJjOWIzZWRh
Li4zZjUwNmQ3NmMzYmY3NDUzNGYzNjNkZjJhNDdmZWNiZTM3ZTEwMTIzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKQEAgLTQ0LDgg
KzQ0LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRv
U2VydmVyJiBpZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFBBTDo6U2Vzc2lv
bklEJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRlbGV0ZUFsbERhdGFiYXNlcygpOwotCi0gICAg
dm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAjZW5kaWYKIAogcHJpdmF0ZToK
QEAgLTU1LDYgKzUzLDUgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNF
KQogICAgIEhhc2hNYXA8dWludDY0X3QsIFJlZlB0cjxXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2
ZXI+PiBtX2lkYlNlcnZlck1hcDsKLSAgICB1aW50NjRfdCBtX2lkYlBlck9yaWdpblF1b3RhIHsg
V2ViQ29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsKICNlbmRpZgogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VN
YW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1h
bmFnZXIubW0KaW5kZXggNmQ2MmE5OGI5N2YyZWMyNDE0YzdkYjFhZDNlNzBmMmQwZGYxM2VlNC4u
NzNlMjMzMWViYjZjZmFlZGVlYTRjMWQyZjEyYWQwYmFkNTIyNjUzYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0KQEAg
LTE1NywxMyArMTU3LDYgQEAgLSAodm9pZClkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzCiAjZW5k
aWYKIH0KIAotLSAodm9pZClzZXRJREJQZXJPcmlnaW5RdW90YToodWludDY0X3QpcXVvdGEKLXsK
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBXZWJEYXRhYmFzZVByb3ZpZGVyOjpz
aW5nbGV0b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0jZW5kaWYKLX0KLQogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIHN0YXRpYyBib29sIGlzRmlsZUhpZGRlbihOU1N0cmlu
ZyAqZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2Vi
RGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFn
ZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKaW5kZXggMjE3MjQxNjJiOTUzODhhNGEyNmJh
OWVjNGQ2YzUwNGY0NWY2NDA0YS4uOTM5YjRjZjdlMDU3NDJkMzZlMTMwNzdjMGNhNjYzMmZmM2U1
ZGNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRh
YmFzZU1hbmFnZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFn
ZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKQEAgLTcwLDcgKzcwLDYgQEAgZXh0ZXJuIENG
U3RyaW5nUmVmIFdlYkRhdGFiYXNlT3JpZ2luc0RpZENoYW5nZU5vdGlmaWNhdGlvbjsKIAogLy8g
Rm9yIER1bXBSZW5kZXJUcmVlIHN1cHBvcnQgb25seQogLSAodm9pZClkZWxldGVBbGxJbmRleGVk
RGF0YWJhc2VzOwotLSAodm9pZClzZXRJREJQZXJPcmlnaW5RdW90YToodWludDY0X3QpcXVvdGE7
CiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCiArICh2b2lkKXNjaGVkdWxlRW1wdHlEYXRhYmFzZVJl
bW92YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJEYXRhYmFzZU1hbmFnZXIuaWRsIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNl
cy9JV2ViRGF0YWJhc2VNYW5hZ2VyLmlkbAppbmRleCBlODFkNDkzODU5MmQ2ODIwYjIxMWEyZWZi
NTM5YjY2Y2U2ZDE1MmM0Li43YWViY2FlZjcyMGFhYTIyNmMzODQ1MGE2NDlkNzA3N2Q2YmNiZWNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJEYXRh
YmFzZU1hbmFnZXIuaWRsCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMv
SVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKQEAgLTY5LDUgKzY5LDQgQEAgaW50ZXJmYWNlIElXZWJE
YXRhYmFzZU1hbmFnZXIgOiBJVW5rbm93bgogaW50ZXJmYWNlIElXZWJEYXRhYmFzZU1hbmFnZXIy
IDogSVdlYkRhdGFiYXNlTWFuYWdlcgogewogICAgIEhSRVNVTFQgZGVsZXRlQWxsSW5kZXhlZERh
dGFiYXNlcygpOwotICAgIEhSRVNVTFQgc2V0SURCUGVyT3JpZ2luUXVvdGEoW2luXSB1bnNpZ25l
ZCBsb25nIGxvbmcgcXVvdGEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRh
dGFiYXNlTWFuYWdlci5jcHAKaW5kZXggZjk5NjNmMWMwNjg5NmQ3YTJjYjJkNzMzYTE4ZWZhYWFm
M2NlNDgwOC4uZDhkZTIzMjZlNWYwNmZlNGZkYWI2Mjk0MTA1NWZmOWM0YmVmMzcyYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCkBAIC0zNDQs
MTQgKzM0NCw2IEBAIEhSRVNVTFQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVBbGxJbmRleGVk
RGF0YWJhc2VzKCkKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBXZWJEYXRhYmFzZU1h
bmFnZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKLXsK
LSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBXZWJEYXRhYmFzZVByb3ZpZGVyOjpz
aW5nbGV0b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0jZW5kaWYKLSAgICByZXR1
cm4gU19PSzsKLX0KLQogY2xhc3MgRGlkTW9kaWZ5T3JpZ2luRGF0YSB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRGlkTW9kaWZ5T3JpZ2luRGF0YSk7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oCmluZGV4IGUwZmUzZTNiODgxYjYxM2U4
YjBmOTc2YTg1Y2FkODQ5YmI3Mjc0NzcuLjUxYjY0NWY3Mjg0NzVkMTY2NGE5YWZhZGRkYmI5MTBk
NThiZTliNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNl
TWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdl
ci5oCkBAIC01Niw3ICs1Niw2IEBAIHB1YmxpYzoKIAogICAgIC8vIElXZWJEYXRhYmFzZU1hbmFn
ZXIyCiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGRlbGV0ZUFsbEluZGV4
ZWREYXRhYmFzZXMoKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0
SURCUGVyT3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nKTsKIAogICAgIC8vIERhdGFiYXNl
TWFuYWdlckNsaWVudAogICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihj
b25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdpbkRhdGEmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0NzQ5MjliZTY5YjJmYmMxNjgzMmQyZWZj
MTA5Mjk5MjgxYmQ5ZmQwLi41MzBjZjdjZTRkZjFhNTg3MzA4YTI5MmI3NzJjZWY1M2Q5MjMyMzY2
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjkgQEAKKzIwMTktMDgtMDcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmlld2Vk
IGJ5IEFsZXggQ2hyaXN0ZW5zZW4uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVu
bmVyLmNwcDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAg
IChzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1
bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRJREJQ
ZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0UnVubmVyLmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0
UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9s
bGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAgKFdUUjo6VGVzdENv
bnRyb2xsZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9uOjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxOS0wOC0w
NiAgWmhpZmVpIEZhbmcgIDx6aGlmZWlfZmFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW3Jlc3Vs
dHMud2Via2l0Lm9yZyBUaW1lbGluZV0gUGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCmRpZmYgLS1n
aXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDkwYzY0YzM2MTRjZGM0MmRiNmY0OTQyYmRlMWFk
MTMwZmQxZmQ5Y2IuLmU4MTdhNTczYTU4ZDE1OWQ0Y2YyMzQ5ODJjY2EwNGRjZDY0YjYwNGEgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCkBAIC04OTMsMjAgKzg5Myw2IEBAIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRl
eHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8
IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAgICAK
LSAgICBhdXRvKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgZG91YmxlIHF1b3RhID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgbnVsbHB0cik7Ci0gICAgaWYgKCFzdGQ6
OmlzbmFuKHF1b3RhKSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0SURCUGVyT3JpZ2luUXVvdGEo
c3RhdGljX2Nhc3Q8dWludDY0X3Q+KHF1b3RhKSk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFsdWVN
YWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZXREZWZlcnNM
b2FkaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlmIChh
cmd1bWVudENvdW50IDwgMSkKQEAgLTIyMjAsNyArMjIwNiw2IEBAIEpTU3RhdGljRnVuY3Rpb24q
IFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgInNldFJlamVjdHNQcm90
ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNldFJl
amVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldEhhbmRsZXNBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZXMiLCBzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAic2V0SWNvbkRhdGFiYXNlRW5hYmxlZCIsIHNldEljb25EYXRhYmFz
ZUVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRJREJQZXJPcmlnaW5RdW90
YSIsIHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0
QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQiLCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9u
RW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1haW5GcmFtZUlzRmlyc3RS
ZXNwb25kZXIiLCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
ICAgICAgICAgeyAic2V0TW9ja0RldmljZU9yaWVudGF0aW9uIiwgc2V0TW9ja0RldmljZU9yaWVu
dGF0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRleCA4
MTQ1MjQ3ZjVlMTdjZTgxNjEzMmNkZTE2MmZkNTlmOTIzZWZiNTBjLi4yOWE0ZWYyZTc4Yjc2MTFi
ZTFiYmI2MWNkYTExZGUzNTBhYzkyNzQyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oCkBA
IC0xMDYsNyArMTA2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlvbkZv
cmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1lKTsK
ICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAgdm9pZCBzZXRJY29uRGF0YWJh
c2VFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3Qp
OwogICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcpOwog
ICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCBmbGFnKTsKICAg
ICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA4M2M5MjVlNzg1MTFkZThi
NTNkOTEzYzA2YzI5OTM4MjVmMmU5YmYyLi44ODllZTJhN2U4MzM0YjVkYjAxNzE5NzBhZjUyY2Nm
YTM2YzdkMTNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRl
clRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
CkBAIC0yMDM0LDcgKzIwMzQsNiBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmluZyYg
aW5wdXRMaW5lKQogICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVzKCk7
CiAKICAgICBnVGVzdFJ1bm5lci0+Y2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAgICBnVGVzdFJ1bm5l
ci0+c2V0SURCUGVyT3JpZ2luUXVvdGEoNTAgKiBNQik7CiAKICAgICBpZiAoZGlzYWxsb3dlZFVS
THMpCiAgICAgICAgIENGU2V0UmVtb3ZlQWxsVmFsdWVzKGRpc2FsbG93ZWRVUkxzKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggYzAxYmRhNTY2ZTUxYmZh
YTZmMDc5YjExMjk0NWY5NTYyZWZjMTYxNS4uMWY5NjBhYWUyZGQwM2UxNjBiMTI0Yzc5MjIzZTk1
NmFhZGNlYTc4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5u
ZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0K
QEAgLTQzOSwxMSArNDM5LDYgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3RhKHVu
c2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKICAgICBbb3JpZ2luIHJlbGVhc2VdOwogfQogCi12b2lk
IFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAg
IFtbV2ViRGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcl0gc2V0SURCUGVy
T3JpZ2luUXVvdGE6cXVvdGFdOwotfQotCiB2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7CiAg
ICAgW1ttYWluRnJhbWUgd2ViVmlld10gZ29CYWNrXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBhMjg2ZjIzZjdlZDc2OWJlY2VhZmUyMDI2ZTI5Mzky
ZjdlNDA5YjY4Li45NWFkMDIyZmNiNDI2Zjg2ODQ3OWJlZjI4MWNiZjM0YTk4MTdmZDZkIDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCkBAIC0xNzIsMjIgKzE3
Miw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogICAgIGRhdGFiYXNl
TWFuYWdlcjItPmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKTsKIH0KIAotdm9pZCBUZXN0UnVu
bmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBDT01QdHI8
SVdlYkRhdGFiYXNlTWFuYWdlcj4gZGF0YWJhc2VNYW5hZ2VyOwotICAgIENPTVB0cjxJV2ViRGF0
YWJhc2VNYW5hZ2VyPiB0bXBEYXRhYmFzZU1hbmFnZXI7Ci0gICAgaWYgKEZBSUxFRChXZWJLaXRD
cmVhdGVJbnN0YW5jZShDTFNJRF9XZWJEYXRhYmFzZU1hbmFnZXIsIDAsIElJRF9JV2ViRGF0YWJh
c2VNYW5hZ2VyLCAodm9pZCoqKSZ0bXBEYXRhYmFzZU1hbmFnZXIpKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChGQUlMRUQodG1wRGF0YWJhc2VNYW5hZ2VyLT5zaGFyZWRXZWJEYXRhYmFzZU1h
bmFnZXIoJmRhdGFiYXNlTWFuYWdlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01QdHI8
SVdlYkRhdGFiYXNlTWFuYWdlcjI+IGRhdGFiYXNlTWFuYWdlcjI7Ci0gICAgaWYgKEZBSUxFRChk
YXRhYmFzZU1hbmFnZXItPlF1ZXJ5SW50ZXJmYWNlKCZkYXRhYmFzZU1hbmFnZXIyKSkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGRhdGFiYXNlTWFuYWdlcjItPnNldElEQlBlck9yaWdpblF1b3Rh
KHF1b3RhKTsKLX0KLQogdm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxlSW50
ZXJ2YWwoZG91YmxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuIFJlcXVpcmVzIG5vbi1l
eGlzdGFudCAob24gV2luZG93cykgV2ViU3RvcmFnZU1hbmFnZXIKZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwg
Yi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5u
ZXIuaWRsCmluZGV4IGNkNTFjMWQwNzdmMTU1ZjQzNjdiYjJjYmE1YjE5ZWE0Yzg2NDk0ZmIuLjBh
ZWI5M2UxOTEwNzM3ZTcwMDIzZDE5NjljZWQyNzg5ZDI2ZDk4MjUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwK
KysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9UZXN0
UnVubmVyLmlkbApAQCAtMTQ2LDkgKzE0Niw2IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsKICAg
ICBhdHRyaWJ1dGUgZG91YmxlIGRhdGFiYXNlRGVmYXVsdFF1b3RhOwogICAgIGF0dHJpYnV0ZSBk
b3VibGUgZGF0YWJhc2VNYXhRdW90YTsKIAotICAgIC8vIEluZGV4ZWREQiBBUEkKLSAgICB2b2lk
IHNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7Ci0KICAgICAv
LyBBcHBsaWNhdGlvbiBDYWNoZSBBUEkKICAgICB2b2lkIGNsZWFyQWxsQXBwbGljYXRpb25DYWNo
ZXMoKTsKICAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBsb25n
IHNpemUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRs
ZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
VGVzdFJ1bm5lci5jcHAKaW5kZXggNDBiZGMyZWEwYmEyZTE0YTA0ZDBmNDVmNjY0ODA1NzRmNzhi
Zjg4YS4uNTlmMjVjMWJiYWM2ZWQ4OWU5NGNmYTg4YTlhZmZjMDNmYjcyNGExOCAxMDA2NDQKLS0t
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAor
KysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3Bw
CkBAIC0zNjcsMTMgKzM2Nyw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFzZUZv
ckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCiAgICAgbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBwbGlj
YXRpb25DYWNoZVF1b3RhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRJREJQZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJT
ZXRJREJQZXJPcmlnaW5RdW90YSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4gbWVz
c2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHF1b3RhKSk7Ci0gICAgV0tCdW5kbGVQ
b3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5kbGUo
KSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKLX0KLQog
c3RhdGljIGlubGluZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYgY29u
dGV4dCwgV0tBcnJheVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9IFdL
QXJyYXlHZXRTaXplKHN0cmluZ3MpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCA3M2NiZTdkOWM2MTcwOGZkYmYzNzAzOGU2
MzQ1ZGExYTU3ZTg2ZjA5Li43ZTg1ODhlY2EzMTdiZjg0NjBjZGNhYTc0Njg5NjI0NWExODkxZWQz
IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RS
dW5uZXIuaApAQCAtMTc1LDkgKzE3NSw2IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBkb21DYWNo
ZVNpemUoSlNTdHJpbmdSZWYgb3JpZ2luKTsKICAgICB2b2lkIHNldEFsbG93U3RvcmFnZVF1b3Rh
SW5jcmVhc2UoYm9vbCk7CiAKLSAgICAvLyBJbmRleGVkREIKLSAgICB2b2lkIHNldElEQlBlck9y
aWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIC8vIEZhaWxlZCBsb2FkIGNvbmRpdGlvbiB0ZXN0
aW5nCiAgICAgdm9pZCBmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24oKTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCA3OTU3ZGM2MmY0MWViYmRmMDQ3Yjc0
ZjQ2ZDllMzNjOTBkNGYyZGU5Li45NTViNzQ1NjgwMzJjMTZjOTg5NDYzNjQ1OGIxNGE2YjZjZGQz
YTI5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtOTM5
LDcgKzkzOSw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAgICAgV0tXZWJzaXRlRGF0YVN0
b3JlQ2xlYXJBbGxEZXZpY2VPcmllbnRhdGlvblBlcm1pc3Npb25zKHdlYnNpdGVEYXRhU3RvcmUp
OwogCiAgICAgQ2xlYXJJbmRleGVkRGF0YWJhc2VzKCk7Ci0gICAgc2V0SURCUGVyT3JpZ2luUXVv
dGEoNTAgKiBNQik7CiAKICAgICBjbGVhclNlcnZpY2VXb3JrZXJSZWdpc3RyYXRpb25zKCk7CiAg
ICAgY2xlYXJET01DYWNoZXMoKTsKQEAgLTMwNjEsMTEgKzMwNjAsNiBAQCB2b2lkIFRlc3RDb250
cm9sbGVyOjpjbGVhckRPTUNhY2hlcygpCiAgICAgcnVuVW50aWwoY29udGV4dC5kb25lLCBub1Rp
bWVvdXQpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1
aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShwbGF0
Zm9ybUNvbnRleHQoKSwgcXVvdGEpOwotfQotCiBzdHJ1Y3QgUmVtb3ZlQWxsSW5kZXhlZERhdGFi
YXNlc0NhbGxiYWNrQ29udGV4dCB7CiAgICAgZXhwbGljaXQgUmVtb3ZlQWxsSW5kZXhlZERhdGFi
YXNlc0NhbGxiYWNrQ29udGV4dChUZXN0Q29udHJvbGxlciYgY29udHJvbGxlcikKICAgICAgICAg
OiB0ZXN0Q29udHJvbGxlcihjb250cm9sbGVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5oCmluZGV4IGIwNGU1ODJkODJkNmRhNDIxNjYwYzhhNzVjZmJiNjYxZDQ2OTMxZmEu
LmM4ZmU0ZTVhOGI1OWJiNGVmYWM0YzVlMWE2YTI5ODc2Y2E4OWNmZmYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKQEAgLTI3Miw4ICsyNzIsNiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEFsbG93U3RvcmFnZVF1b3RhSW5jcmVhc2UoYm9vbCk7CiAKLSAgICB2b2lk
IHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIGJvb2wgZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9k
aWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb247IH0KICAgICB2
b2lkIGNsZWFyRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9u
KCkgeyBtX2RpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbiA9
IGZhbHNlOyB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9j
YXRpb24uY3BwIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5k
ZXggYTdiNzdjYTljMDExOTRhNTIxYTdhNTFlMmI4YmE0NDc2NmNkZjFkYi4uMjg5MGU1MzMyZDA1
YTE0OTAyZTA2YWJkNWU1OWFmNjk5MzBiZDYzZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAKQEAgLTE1MDUsMTMgKzE1MDUsNiBAQCBXS1JldGFpblB0cjxXS1R5
cGVSZWY+IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUlu
amVjdGVkQgogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIlNldElEQlBlck9yaWdpblF1b3Rh
IikpIHsKLSAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1VJbnQ2
NEdldFR5cGVJRCgpKTsKLSAgICAgICAgV0tVSW50NjRSZWYgcXVvdGEgPSBzdGF0aWNfY2FzdDxX
S1VJbnQ2NFJlZj4obWVzc2FnZUJvZHkpOwotICAgICAgICBUZXN0Q29udHJvbGxlcjo6c2luZ2xl
dG9uKCkuc2V0SURCUGVyT3JpZ2luUXVvdGEoV0tVSW50NjRHZXRWYWx1ZShxdW90YSkpOwotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9V
VEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkluamVjdFVzZXJTY3JpcHQiKSkgewogICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwog
ICAgICAgICBXS1N0cmluZ1JlZiBzY3JpcHQgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVz
c2FnZUJvZHkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376052</attachid>
            <date>2019-08-12 01:16:54 -0700</date>
            <delta_ts>2019-08-16 17:04:28 -0700</delta_ts>
            <desc>Rebasing</desc>
            <filename>bug-196545-20190812101652.patch</filename>
            <type>text/plain</type>
            <size>47458</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4NDcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzFlNDZmOWRlOGYzYjBl
Y2Y4ZWU3ZTY5ZWY3YWFlZDYwNmJlMTI0Yy4uZWVkMGJlNjdhMjBlZmM4ZWI0M2ExZjY0MDhkM2Fi
YWQxZjdlNTAzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDE5LTA4LTEyICBZb3Vl
bm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNp
ZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTY1NDUKKworICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAg
ICAgIE5vIGNoYW5nZSBvZiBiZWhhdmlvciBhcyBJREIgc3BlY2lmaWMgcXVvdGEgaXMgbm8gbG9u
Z2VyIHVzZWQuCisgICAgICAgIEluc3RlYWQgYSBnbG9iYWwgcXVvdGEgaXMgdXNlZC4gVGhpcyBx
dW90YSBjdXJyZW50bHkgaGFuZGxlcyBJREIgYW5kIENhY2hlIEFQSS4KKworICAgICAgICAqIE1v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyOjpjcmVhdGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6OnNldFBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6cGVyT3JpZ2luUXVvdGEgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5n
U3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVj
dFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0
b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURC
U2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5h
bWVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6YWRkUmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURC
QmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cXVvdGFGb3JPcmlnaW4g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJC
YWNraW5nU3RvcmU6Om1heGltdW1TaXplIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6VW5pcXVlSURCRGF0YWJhc2U6OnNldFF1b3RhKTogRGVsZXRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2Uu
aDoKKwogMjAxOS0wOC0xMSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAg
ICAgICAgTWFrZSBCbG9iOjptX3NpemUgYW4gT3B0aW9uYWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNGE0MjgyMTNm
NDgzYmIyODljYmVjMzdlNjBlOGNiNjVlODk2ZmNhOS4uYjJmMDg2YzQ0NGE1YmJiNThhZTIzY2I3
NGU3ZWMwMTM1ZDkzOGE0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxOS0wOC0xMiAg
WW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1z
cGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKwor
ICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcik6CisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKToKKyAgICAgICAgKFdl
YktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0SURCUGVyT3JpZ2lu
UXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2
YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKwogMjAxOS0wOC0wOSAgVGlt
IEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBUYXBwaW5nIGJ1
dHRvbnMgaW4gRGF0YSBEZXRlY3RvcnMgbG9va3VwIHByZXZpZXdzIGRvZXNuJ3Qgd29yawpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L0NoYW5nZUxvZwppbmRleCA5NmJkZGFkZDc1NDFhNDAxNzQwMGJiZDJhNTI1OWRjZGVmZDEx
ZDdmLi5jMmE1ZGZjYzNkZWZiMjBjNTJhN2FhNTQ4YmFiNzQ4ZmViNzkzOTBhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA4LTEyICBZb3Vlbm4gRmFibGV0ICA8
eW91ZW5uQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSURCLXNwZWNpZmljIHF1b3RhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NDUKKwor
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4IENocmlzdGVuc2VuLgorCisgICAgICAgICogU3RvcmFn
ZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcDoKKyAgICAgICAgKFdlYkRhdGFiYXNlUHJvdmlkZXI6
OmlkYkNvbm5lY3Rpb25Ub1NlcnZlckZvclNlc3Npb24pOgorICAgICAgICAoV2ViRGF0YWJhc2VQ
cm92aWRlcjo6ZGVsZXRlQWxsRGF0YWJhc2VzKToKKyAgICAgICAgKFdlYkRhdGFiYXNlUHJvdmlk
ZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dl
YkRhdGFiYXNlUHJvdmlkZXIuaDoKKwogMjAxOS0wOC0wOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxn
aGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbRlRXXSBHZXQgV2ViS2l0LCBXZWJLaXQyLCBhbmQg
TWluaUJyb3dzZXIgYnVpbGRpbmcgYW5kIGV4ZWN1dGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IDk0NDlkZjJiM2NlNDE0OTM5ZDhlZjg5NGQzYTM3ZjE1MzY2N2NjYmIuLjQzODg0
OTFkNDU4ODA2NzZmZDFhOTM2NTBkNDZkMmVkMTViOTRmM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0wOC0xMiAgWW91ZW5uIEZhYmxldCAgPHlv
dWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3RlbnNlbi4KKworICAgICAgICAqIFN0b3JhZ2Uv
V2ViRGF0YWJhc2VNYW5hZ2VyLm1tOgorICAgICAgICAoLVtXZWJEYXRhYmFzZU1hbmFnZXIgc2V0
SURCUGVyT3JpZ2luUXVvdGE6XSk6IERlbGV0ZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRh
YmFzZU1hbmFnZXJQcml2YXRlLmg6CisKIDIwMTktMDgtMDggIFJvYiBCdWlzICA8cmJ1aXNAaWdh
bGlhLmNvbT4KIAogICAgICAgICBBZGQgcnVudGltZSBmbGFnIGZvciBsYXp5IGltYWdlIGxvYWRp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCA3OGQyNmUwMTJmYjE5ZmE5OWY5MGU1
NWYyNjIxNDk4MDljNGUxMjJkLi5lMTE4NTIyZWE4ZTUwNDU0MDI4YmY5MDIwYWY4MWE4Y2M5ODdh
MDNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTkt
MDgtMTIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92
ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NjU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IEFsZXggQ2hyaXN0ZW5z
ZW4uCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsOgorICAg
ICAgICAqIFdlYkRhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJEYXRhYmFzZU1hbmFn
ZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJEYXRhYmFz
ZU1hbmFnZXIuaDoKKwogMjAxOS0wOC0wOCAgUGVyIEFybmUgVm9sbGFuICA8cHZvbGxhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgW1dpbl0gRml4IGludGVybmFsIGJ1aWxkCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCQmFja2luZ1N0b3Jl
LmgKaW5kZXggMjkxZjc2ZWQ1YWM1YmJiNzdjODRkZWZmOWMwYzY2NzljNzhiYTMzNC4uNzJlY2Yy
ZTBhMDNhNTFkNGU2MjUwNTE5NjMzMjQwNTdkZDc5ZjI2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaApA
QCAtMTAwLDcgKzEwMCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNFcGhlbWVyYWwo
KSA9IDA7CiAKICAgICB2aXJ0dWFsIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVGb3JPcmlnaW4oKSBj
b25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KSA9IDA7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaGFzVHJhbnNhY3Rpb24oY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JikgY29uc3QgPSAwOwogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmNwcAppbmRleCA4OWJmZTc5M2Q3ZGJiNWNl
NzMxMTQ3OWVmNjk1MGI5Y2ZkMTdjZTA4Li5mNmFiNGYzYWIyYzI4YjBlZTIyNDY4OTRhMGRlNTg0
YmQwODc1MWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9z
ZXJ2ZXIvSURCU2VydmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIHN0ZDo6dW5pcXVlX3B0
cjxJREJCYWNraW5nU3RvcmU+IElEQlNlcnZlcjo6Y3JlYXRlQmFja2luZ1N0b3JlKGNvbnN0IElE
QkRhdGFiYXNlCiAgICAgaWYgKG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIE1lbW9yeUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlKGlkZW50aWZpZXIpOwog
Ci0gICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihtX3Nl
c3Npb25JRCwgaWRlbnRpZmllciwgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGgsIG1fYmFja2luZ1N0
b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIsIG1fcGVyT3JpZ2luUXVvdGEpOworICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPFNRTGl0ZUlEQkJhY2tpbmdTdG9yZT4obV9zZXNzaW9uSUQsIGlkZW50
aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoLCBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZp
bGVIYW5kbGVyKTsKIH0KIAogdm9pZCBJREJTZXJ2ZXI6Om9wZW5EYXRhYmFzZShjb25zdCBJREJS
ZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCkBAIC02OTEsMTQgKzY5MSw2IEBAIHZvaWQgSURCU2Vy
dmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVEYXRhYmFzZXModWludDY0X3QgY2FsbGJhY2tJ
RCkKICAgICBjYWxsYmFjaygpOwogfQogCi12b2lkIElEQlNlcnZlcjo6c2V0UGVyT3JpZ2luUXVv
dGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9wZXJPcmlnaW5RdW90YSA9IHF1b3RhOwotCi0g
ICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fdW5pcXVlSURCRGF0YWJhc2VNYXAudmFsdWVzKCkp
Ci0gICAgICAgIGRhdGFiYXNlLT5zZXRRdW90YShxdW90YSk7Ci19Ci0KIElEQlNlcnZlcjo6UXVv
dGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBzZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIq
IG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdpbikKICAgICA6IG1fc2VydmVyKHNlcnZlcikK
ICAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0cihtYW5hZ2VyKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAppbmRleCA0ZDMyOGM0
ODIxNTU2NGEzMjMwNDllZDZiNTM3YmJkYmUzN2RjOGMxLi4wOWY1YzFjNDcxNWNhY2RlMTQ2OGY3
Y2MyNWU4ZWM4Y2JmZDYwMWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBAIC0xMTUsOSArMTE1LDYgQEAgcHVibGljOgog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNp
bmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRpb25IYW5kbGVyKTsKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJhc2VzRm9yT3JpZ2lucyhj
b25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29t
cGxldGlvbkhhbmRsZXIpOwogCi0gICAgdWludDY0X3QgcGVyT3JpZ2luUXVvdGEoKSBjb25zdCB7
IHJldHVybiBtX3Blck9yaWdpblF1b3RhOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRQ
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIHJlcXVlc3RTcGFjZShjb25zdCBD
bGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChT
dG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwogICAgIHZvaWQgaW5jcmVhc2VQb3Rl
bnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwog
ICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwg
dWludDY0X3QgdGFza1NpemUpOwpAQCAtMTk2LDggKzE5Myw2IEBAIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFy
eUZpbGVIYW5kbGVyJiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyOwogCi0gICAg
dWludDY0X3QgbV9wZXJPcmlnaW5RdW90YSB7IGRlZmF1bHRQZXJPcmlnaW5RdW90YSB9OwotCiAg
ICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxRdW90YVVzZXI+PiBtX3F1
b3RhVXNlcnM7CiAgICAgUXVvdGFNYW5hZ2VyR2V0dGVyIG1fcXVvdGFNYW5hZ2VyR2V0dGVyOwog
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9N
ZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCAxNWZlM2M0NzM5OTZjNmU0ZjM3
ZTRmNDNmZjVhNjVmY2Y2ZmEzYWY3Li43N2NjOTY5ODk2NTg0MGU1YmQ3ZTY3YTI3ZDdlMjVlY2E2
NjE2MGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2
ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBAIC03OSw3ICs3OSw2IEBA
IHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJhbnNhY3Rpb25zKCkgZmlu
YWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgaXNFcGhlbWVyYWwoKSBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90IHF1b3RhKSBmaW5hbCB7IFVO
VVNFRF9QQVJBTShxdW90YSk7IH07CiAgICAgdWludDY0X3QgZGF0YWJhc2VzU2l6ZUZvck9yaWdp
bigpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCByZW1vdmVPYmplY3RTdG9yZUZvclZlcnNpb25D
aGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0
b3JlLmNwcAppbmRleCBkYzlmYmE0MjBkMjIzMmM3Mjc5ZWJiNDY2NjczY2Q4MzllY2NhMTkyLi5l
NTMzZDFjN2QxMmQzNTc2ZmFkNDEzOWYyZDhmZDgwNTk4NjBiZjY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3Jl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjI4LDEyICsyMjgsMTEgQEAgc3RhdGljIGNvbnN0IFN0
cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQogICAgIHJldHVybiBibG9iRmls
ZXNUYWJsZVNjaGVtYVN0cmluZzsKIH0KIAotU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJ
REJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBJREJEYXRhYmFz
ZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0
b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIsIHVp
bnQ2NF90IHF1b3RhKQorU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3Rv
cmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXIm
IGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNr
aW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIpCiAgICAgOiBtX3Nlc3Np
b25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRpZmllcikKICAgICAsIG1f
ZGF0YWJhc2VSb290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERpcmVjdG9yeSkKICAgICAsIG1fdGVt
cG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCi0gICAgLCBtX3F1b3RhKHF1b3RhKQogewog
ICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBncmFk
ZSgpOwogfQpAQCAtODczLDE0ICs4NzIsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAg
IHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLXVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6cXVvdGFGb3JPcmlnaW4oKSBjb25zdAotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwotICAgIHVpbnQ2NF90IGRpc2tGcmVlU3BhY2VTaXplID0gMDsKLSAgICBGaWxlU3lzdGVtOjpn
ZXRWb2x1bWVGcmVlU3BhY2UobV9pZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVU
b1Jvb3QobV9kYXRhYmFzZVJvb3REaXJlY3RvcnkpLCBkaXNrRnJlZVNwYWNlU2l6ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6bWluKGRpc2tGcmVlU3BhY2VTaXplIC8gMiwgbV9xdW90YSk7Ci19Ci0KIHVp
bnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihjb25z
dCBTdHJpbmcmIGZvbGRlcikKIHsKICAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSAwOwpAQCAtODk4
LDI0ICs4ODksNiBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1Np
emVGb3JPcmlnaW4oKSBjb25zdAogICAgIHJldHVybiBkYXRhYmFzZXNTaXplRm9yRm9sZGVyKG9s
ZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihuZXdWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBvbmUgZGF0YWJhc2UgZmlsZSBpcyB0aGUgcXVv
dGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHNpemUgb2YgYWxsIGRhdGFiYXNlcyB3aXRoaW4gdGhh
dCBvcmlnaW4sCi0gICAgLy8gYW5kIHBsdXMgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFzZSBm
aWxlLgotICAgIHVpbnQ2NF90IGRhdGFiYXNlRmlsZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpn
ZXREYXRhYmFzZUZpbGVTaXplKGZ1bGxEYXRhYmFzZVBhdGgoKSk7Ci0gICAgdWludDY0X3QgcXVv
dGEgPSBxdW90YUZvck9yaWdpbigpOwotCi0gICAgdWludDY0X3QgZGlza1VzYWdlID0gZGF0YWJh
c2VzU2l6ZUZvck9yaWdpbigpOwotICAgIEFTU0VSVChkaXNrVXNhZ2UgPj0gZGF0YWJhc2VGaWxl
U2l6ZSk7Ci0KLSAgICBpZiAocXVvdGEgPCBkaXNrVXNhZ2UpCi0gICAgICAgIHJldHVybiBkYXRh
YmFzZUZpbGVTaXplOwotCi0gICAgcmV0dXJuIHF1b3RhIC0gZGlza1VzYWdlICsgZGF0YWJhc2VG
aWxlU2l6ZTsKLX0KLQogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5z
YWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uIC0gJXMiLCBpbmZv
LmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC05MjQsNyAr
ODk3LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+
aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAKLSAgICBtX3NxbGl0ZURC
LT5zZXRNYXhpbXVtU2l6ZShtYXhpbXVtU2l6ZSgpKTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHJhbnNhY3Rpb25zLmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gZXN0
YWJsaXNoIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwpAQCAt
OTQxLDEwICs5MTMsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJh
bnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgICAgICBpZiAoc3Fs
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBT
dHJpbmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwogICAgICAgICAg
ICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRh
dGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRv
bWFpbiJfcyB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yID0gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNp
b24gaW4gZGF0YWJhc2UiX3MgfTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJh
c2UiX3MgfTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTAyNyw4ICs5OTYsNiBAQCBJREJFcnJv
ciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0IElEQlJlc291
cmNlSWRlbnRpZmllciYgdAogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgaW5mby5t
YXhJbmRleElEKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0g
U1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQgbm90IGFkZCBvYmpl
Y3Qgc3RvcmUgJyVzJyB0byBPYmplY3RTdG9yZUluZm8gdGFibGUgKCVpKSAtICVzIiwgaW5mby5u
YW1lKCkudXRmOCgpLmRhdGEoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREIt
Pmxhc3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3Io
KSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90
YUV4Y2VlZGVkRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5v
IGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsICJDb3VsZCBub3QgY3JlYXRlIG9iamVjdCBzdG9yZSJfcyB9Owog
ICAgICAgICB9CiAgICAgfQpAQCAtMTAzOSw4ICsxMDA2LDYgQEAgSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHQKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRpZmllcigp
KSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZWVkIGluaXRpYWwga2V5IGdl
bmVyYXRvciB2YWx1ZSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiQ291bGQgbm90
IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUgYmVjYXVz
ZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJh
dG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogICAgIH0KQEAgLTEx
NjQsOCArMTEyOSw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2Jq
ZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8fCBz
cWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwogICAg
ICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBvYmplY3Qgc3RvcmUgaWQgJSIgUFJJ
aTY0ICIgaW4gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVf
RlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJy
b3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFj
ZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTI0Nyw4ICsxMjEwLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAg
ICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8ubXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sKICAg
ICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIs
IGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UgYmVjYXVz
ZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9z
IH07CiAgICAgfQogCkBAIC0xMzk3LDggKzEzNTgsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwg
aQogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgcmVjb3JkSUQpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBpbmRleCByZWNvcmQgZm9yIGluZGV4ICUiIFBS
SWk2NCAiIGluIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkg
LSAlcyIsIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+
bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiRXJyb3IgcHV0dGluZyBpbmRleCByZWNvcmQgaW50
byBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBwdXR0aW5nIGlu
ZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIl9zIH07CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDg0
LDggKzE0NDMsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50NjQoMywgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
IHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCB1cGRhdGUgbmFtZSBmb3IgaW5kZXggaWQgKCUiIFBSSWk2NCAiLCAlIiBQUklp
NjQgIikgaW4gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigp
ID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5kZXggYmVjYXVzZSBubyBlbm91Z2gg
c3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5r
bm93bkVycm9yLCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCJfcyB9OwogICAgICAgICB9CiAgICAg
fQpAQCAtMTgyMyw4ICsxNzgwLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjph
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZEJsb2IoMywgdmFsdWUuZGF0YSgpLmRhdGEoKS0+ZGF0YSgpLCB2YWx1
ZS5kYXRhKCkuZGF0YSgpLT5zaXplKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IHB1dCByZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRh
YmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRlREIt
Pmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBp
ZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIHN0b3Jl
IHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFp
biJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5h
YmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogCkBA
IC0xODU3LDggKzE4MTIsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgICAg
ICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpOwotICAgICAg
ICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAi
VW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3Vn
aCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFz
ZSJfcyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODkyLDggKzE4NDUsNiBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQo
Miwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9PSwogICAgICAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJs
ZSB0byByZWNvcmQgQmxvYiBmaWxlIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNl
IGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2Ui
X3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQyOSw4ICsyMzgwLDYgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1
ZShpbnQ2NF90IG9iamVjdFN0b3IKICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgdmFsdWUp
ICE9IFNRTElURV9PSwogICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUga2V5IGdlbmVyYXRvciB2YWx1ZSAo
JWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZV
TEwpCi0gICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJF
cnJvciBzdG9yaW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVlIGluIGRhdGFiYXNlIGJlY2F1c2Ug
bm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgQ29uc3RyYWludEVycm9yLCAiRXJyb3Igc3RvcmluZyBuZXcga2V5IGdlbmVyYXRvciB2YWx1
ZSBpbiBkYXRhYmFzZSIgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApp
bmRleCAwNmRjMzQ0NTA4YmMwNzMzNWViMTkwMWVhMGZlNzZiMGFmMmQ1MmZmLi4yZjdlMGNhNzE2
OTlkODM2NzdkMmJkMTMwMjRlODE4YjhlOGI0NWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5oCkBAIC00OCw3ICs0OCw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNzIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQ
QUw6OlNlc3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5k
bGVyJiwgdWludDY0X3QgcXVvdGEpOworICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNl
c3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJik7
CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCkBAIC04MSw3ICs4
MSw2IEBAIHB1YmxpYzoKICAgICBJREJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmplY3RTdG9y
ZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwogICAgIHZvaWQgZGVsZXRl
QmFja2luZ1N0b3JlKCkgZmluYWw7CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90IHF1b3Rh
KSBmaW5hbCB7IG1fcXVvdGEgPSBxdW90YTsgfQogICAgIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVG
b3JPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNTaW11bHRhbmVvdXNU
cmFuc2FjdGlvbnMoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTA5LDkgKzEwOCw2IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJp
bmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5V2l0aFVwZ3JhZGUoKTsKIAotICAgIHVpbnQ2NF90IHF1
b3RhRm9yT3JpZ2luKCkgY29uc3Q7Ci0gICAgdWludDY0X3QgbWF4aW11bVNpemUoKSBjb25zdDsK
LQogICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZh
bGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
SW5kZXgoKTsKQEAgLTIxMSw4ICsyMDcsNiBAQCBwcml2YXRlOgogICAgIEpTQzo6U3Ryb25nPEpT
Qzo6SlNHbG9iYWxPYmplY3Q+IG1fZ2xvYmFsT2JqZWN0OwogCiAgICAgSURCQmFja2luZ1N0b3Jl
VGVtcG9yYXJ5RmlsZUhhbmRsZXImIG1fdGVtcG9yYXJ5RmlsZUhhbmRsZXI7Ci0gICAgCi0gICAg
dWludDY0X3QgbV9xdW90YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIElEQlNlcnZlcgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9Vbmlx
dWVJREJEYXRhYmFzZS5jcHAKaW5kZXggNzMwNDk3NDQyMGZmNDZmZGYyZWE5Njc5YjZkNWI1Yjdl
NjliZmRlYy4uMWViYzA4MThmODllZjNmNzZiNDZiMjdkZTc0ZjMxY2NjM2U0NmNjZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRh
dGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0yMzE2LDEyICsyMzE2LDYgQEAgdm9pZCBVbmlxdWVJ
REJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFja0lkZW50aWZp
ZXIpCiAgICAgbV9lcnJvckNhbGxiYWNrcy5yZW1vdmUoY2FsbGJhY2tJZGVudGlmaWVyKTsKIH0K
IAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2V0UXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0g
ICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0UXVvdGEo
cXVvdGEpOwotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5zYWN0aW9uT25N
YWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewog
ICAgIHRyYW5zYWN0aW9uLnNldFJlc3VsdChtX2JhY2tpbmdTdG9yZS0+YWJvcnRUcmFuc2FjdGlv
bih0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CmluZGV4IDhjMmExYjNkMTc0MzBjYTY1Mzk3MjM4MGNjNjExYzJlMjNmM2U0NDUuLjI2NzZhNGY0
ZDBhZTVhYWNkMjIwMTYyYzMyNzY5ODE5ODNmMDBhMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CkBAIC0xMjYsOCArMTI2LDYgQEAgcHVibGljOgogCiAgICAgdWludDY0X3Qgc3BhY2VVc2VkKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KTsKLQogICAgIHZvaWQgZmluaXNo
QWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IGMzMzM5NTcwYjg3NDBiMTg4OTQ2
MjQ3ZjJiYmUwN2E4OGRlMjdhZjkuLjljYjRhOTI1MjIwOTA1YjRjMjFhNGY3NmFlNzc2YWUxNDUw
MjVmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1By
b2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuY3BwCkBAIC0yMjY5LDEzICsyMjY5LDExIEBAIFJlZjxJREJTZXJ2ZXI6OklEQlNlcnZlcj4g
TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNzaW9uCiAg
ICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7CiAgICAgfQog
Ci0gICAgYXV0byBzZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25J
RCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQQUw6
OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1b3Rh
TWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRlKHNlc3Np
b25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRoaXMpXShQ
QUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gU3RvcmFnZVF1
b3RhTWFuYWdlciogewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAgICAgICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3RhTWFuYWdlcihzZXNz
aW9uSUQsIG9yaWdpbik7CiAgICAgfSk7Ci0gICAgc2VydmVyLT5zZXRQZXJPcmlnaW5RdW90YSht
X2lkYlBlck9yaWdpblF1b3RhKTsKLSAgICByZXR1cm4gc2VydmVyOwogfQogCiBJREJTZXJ2ZXI6
OklEQlNlcnZlciYgTmV0d29ya1Byb2Nlc3M6OmlkYlNlcnZlcihQQUw6OlNlc3Npb25JRCBzZXNz
aW9uSUQpCkBAIC0yMzcxLDE0ICsyMzY5LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vzczo6YWRkSW5k
ZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0cmluZyYKICAg
ICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2soKnRoaXMsICZO
ZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgaW5kZXhlZERhdGFiYXNlRGlyZWN0b3J5
KSk7CiAgICAgfQogfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJREJQZXJPcmlnaW5RdW90
YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBtX2lkYlBlck9yaWdpblF1b3RhID0gcXVvdGE7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2lkYlNlcnZlcnMudmFsdWVzKCkpCi0gICAg
ICAgIHNlcnZlci0+c2V0UGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQogI2VuZGlmIC8vIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjp1cGRhdGVRdW90YUJh
c2VkT25TcGFjZVVzYWdlRm9yVGVzdGluZyhQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0
IENsaWVudE9yaWdpbiYgb3JpZ2luKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5oCmluZGV4IDU0NmQ1ZWYzY2NkOGY2YmJlNGMwMTUzZDliYmI3YmVkOGFj
ZWZkNjMuLmZiN2E2Y2QzNmVhOWYzNTk0YTdmYjlkZTg1NTM1MzIzZmE4MjE3MDggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI4NCw3ICsy
ODQsNiBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXImIGlkYlNl
cnZlcihQQUw6OlNlc3Npb25JRCk7CiAgICAgLy8gV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNr
aW5nU3RvcmVGaWxlSGFuZGxlci4KICAgICB2b2lkIGFjY2Vzc1RvVGVtcG9yYXJ5RmlsZUNvbXBs
ZXRlKGNvbnN0IFN0cmluZyYgcGF0aCkgZmluYWw7Ci0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5R
dW90YSh1aW50NjRfdCk7CiAjZW5kaWYKICAgICB2b2lkIHVwZGF0ZVF1b3RhQmFzZWRPblNwYWNl
VXNhZ2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklELCBjb25zdCBXZWJDb3JlOjpDbGllbnRPcmln
aW4mKTsKIApAQCAtNTI2LDcgKzUyNSw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgU3RyaW5nPiBtX2lkYkRhdGFi
YXNlUGF0aHM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgUmVmUHRyPFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyPj4gbV9pZGJTZXJ2ZXJzOwotICAgIHVpbnQ2NF90IG1faWRiUGVy
T3JpZ2luUXVvdGEgeyBXZWJDb3JlOjpJREJTZXJ2ZXI6OmRlZmF1bHRQZXJPcmlnaW5RdW90YSB9
OwogI2VuZGlmCiAKICAgICBEZXF1ZTxDcm9zc1RocmVhZFRhc2s+IG1fc3RvcmFnZVRhc2tzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KaW5kZXggYjdlMDFmNTFhY2ZiYTdiNDNjYmI5NTM0NzRiNTc5ZTQ3MWJlZTdi
Zi4uNmMyODI3ZWI5ZGIxMzg4OTkzZDMwYmI5NDNkM2Q2ZWQyZTFlYWEyMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluCkBAIC0xNTksOSArMTU5LDYgQEAgbWVzc2FnZXMgLT4gTmV0d29ya1Byb2Nlc3MgTGVnYWN5
UmVjZWl2ZXIgewogICAgIERpc2FibGVTZXJ2aWNlV29ya2VyUHJvY2Vzc1Rlcm1pbmF0aW9uRGVs
YXkoKQogI2VuZGlmCiAKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBTZXRJREJQ
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLSNlbmRpZgogICAgIFVwZGF0ZVF1b3RhQmFz
ZWRPblNwYWNlVXNhZ2VGb3JUZXN0aW5nKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgc3RydWN0
IFdlYkNvcmU6OkNsaWVudE9yaWdpbiBvcmlnaW4pCiAKICAgICBTdG9yZUFkQ2xpY2tBdHRyaWJ1
dGlvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFdlYkNvcmU6OkFkQ2xpY2tBdHRyaWJ1dGlv
biBhZENsaWNrQXR0cmlidXRpb24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQy9XS0NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tD
b250ZXh0LmNwcAppbmRleCBkMGViMzFhZTE2OTAwNTc3MmE2YmVjMTQzN2MyYjQzMGQwY2I0ZTZk
Li5hZmNlNzBiNjI3ZmVlZjdiNWJmODgyODlhZDgyMmYxOWMxOWNkYjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKQEAgLTY2MCwxMSArNjYwLDYgQEAg
dm9pZCBXS0NvbnRleHRDbGVhclN1cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHRS
ZWYpCiAjZW5kaWYKIH0KIAotdm9pZCBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShXS0Nv
bnRleHRSZWYgY29udGV4dFJlZiwgdWludDY0X3QgcXVvdGEpCi17Ci0gICAgV2ViS2l0Ojp0b0lt
cGwoY29udGV4dFJlZiktPnNldElEQlBlck9yaWdpblF1b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBX
S0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmllclN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYg
Y29udGV4dFJlZikKIHsKICAgICBXZWJLaXQ6OnRvSW1wbChjb250ZXh0UmVmKS0+Y2xlYXJDdXJy
ZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUuaAppbmRleCBmOWM3ZDMyOTZlNWMwY2Q3ZjMzNjdk
ZTM5YTAzMWQyODNmYmU2NjY2Li4wYzE3YjFhMTEyYzJlYzFmMmU4NTAyMTdhYjUxZjY2NGE1MThh
ZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJp
dmF0ZS5oCkBAIC0xMTYsOCArMTE2LDYgQEAgV0tfRVhQT1JUIFdLUHJvY2Vzc0lEIFdLQ29udGV4
dEdldE5ldHdvcmtQcm9jZXNzSWRlbnRpZmllcihXS0NvbnRleHRSZWYgY29udGV4dCkKIFdLX0VY
UE9SVCB2b2lkIFdLQ29udGV4dEFkZFN1cHBvcnRlZFBsdWdpbihXS0NvbnRleHRSZWYgY29udGV4
dCwgV0tTdHJpbmdSZWYgZG9tYWluLCBXS1N0cmluZ1JlZiBuYW1lLCBXS0FycmF5UmVmIG1pbWVU
eXBlcywgV0tBcnJheVJlZiBleHRlbnNpb25zKTsKIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENs
ZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKLVdLX0VYUE9SVCB2
b2lkIFdLQ29udGV4dFNldElEQlBlck9yaWdpblF1b3RhKFdLQ29udGV4dFJlZiBjb250ZXh0LCB1
aW50NjRfdCBxdW90YSk7Ci0KIFdLX0VYUE9SVCB2b2lkIFdLQ29udGV4dENsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAogI2lmZGVmIF9f
Y3BsdXNwbHVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNz
UG9vbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5k
ZXggY2Y4Y2Y2OTBhOGIyNmNkMzY3ZTg3Nzk5OTYxZjM1YjJiY2I2Yjc1MC4uMzlkNjBkNDQxYWM0
YzFiMjRlNjdjNGY1YjUwNTZiM2YxZTZkNWEyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlByb2Nlc3NQb29sLmNwcApAQCAtMTgwNCwxMyArMTgwNCw2IEBAIHZvaWQgV2ViUHJvY2Vz
c1Bvb2w6OnN5bmNOZXR3b3JrUHJvY2Vzc0Nvb2tpZXMoKQogICAgIGVuc3VyZU5ldHdvcmtQcm9j
ZXNzKCkuc3luY0FsbENvb2tpZXMoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SURC
UGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0jaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCi0gICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3Jr
UHJvY2Vzczo6U2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpLCAwKTsKLSNlbmRpZgotfQotCiB2
b2lkIFdlYlByb2Nlc3NQb29sOjphbGxvd1NwZWNpZmljSFRUUFNDZXJ0aWZpY2F0ZUZvckhvc3Qo
Y29uc3QgV2ViQ2VydGlmaWNhdGVJbmZvKiBjZXJ0aWZpY2F0ZSwgY29uc3QgU3RyaW5nJiBob3N0
KQogewogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuaAppbmRleCAyY2NiNDdmMWFlNjRmYWUzNmFmYzExYTNjMTU1OTBiNzcw
NTM2MzUxLi5kMDZjNDQwMjRjZGExMzhlYjdkMzhmMDc3ZTVhMWExZGY0NjU3MjllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAgLTMxOCw4ICszMTgsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHN5bmNOZXR3b3JrUHJvY2Vzc0Nvb2tpZXMoKTsKIAotICAgIHZv
aWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwotCiAgICAgdm9pZCBzZXRTaG91bGRN
YWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hv
dWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQogICAg
IGJvb2wgc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
OyB9CiAgICAgdm9pZCBzZXRTaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9jZXNzTGF1bmNoRmFpbEZv
clRlc3RpbmcoYm9vbCB2YWx1ZSkgeyBtX3Nob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVu
Y2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHAKaW5kZXggNWVlNWE3YjI5YmVmNDUzOTlk
ZmQ3OGIzMTIzYzBlMGIyZmM5YWNhMS4uMmViNzA1MzYyNmRmMmU3N2I5YjIzNjg4MDIwOWVlYWI1
MWNlNWE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFi
YXNlUHJvdmlkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRh
YmFzZVByb3ZpZGVyLmNwcApAQCAtNDUsMTcgKzQ1LDkgQEAgV2ViRGF0YWJhc2VQcm92aWRlcjo6
fldlYkRhdGFiYXNlUHJvdmlkZXIoKQogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogV2Vi
Q29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIFdlYkRhdGFiYXNlUHJvdmlk
ZXI6OmlkYkNvbm5lY3Rpb25Ub1NlcnZlckZvclNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQm
IHNlc3Npb25JRCkKIHsKLSAgICBhdXRvIHJlc3VsdCA9IG1faWRiU2VydmVyTWFwLmFkZChzZXNz
aW9uSUQuc2Vzc2lvbklEKCksIG51bGxwdHIpOwotICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkg
ewotICAgICAgICBpZiAoc2Vzc2lvbklELmlzRXBoZW1lcmFsKCkpCi0gICAgICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnZhbHVlID0gV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUo
c2Vzc2lvbklEKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52
YWx1ZSA9IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgaW5k
ZXhlZERhdGFiYXNlRGlyZWN0b3J5UGF0aCgpKTsKLSAgICB9Ci0KLSAgICByZXN1bHQuaXRlcmF0
b3ItPnZhbHVlLT5pZGJTZXJ2ZXIoKS5zZXRQZXJPcmlnaW5RdW90YShtX2lkYlBlck9yaWdpblF1
b3RhKTsKLQotICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5jb25uZWN0aW9uVG9T
ZXJ2ZXIoKTsKKyAgICByZXR1cm4gbV9pZGJTZXJ2ZXJNYXAuZW5zdXJlKHNlc3Npb25JRC5zZXNz
aW9uSUQoKSwgWyZzZXNzaW9uSURdIHsKKyAgICAgICAgcmV0dXJuIHNlc3Npb25JRC5pc0VwaGVt
ZXJhbCgpID8gV2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVyOjpjcmVhdGUoc2Vzc2lvbklEKSA6
IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Npb25JRCwgaW5kZXhlZERh
dGFiYXNlRGlyZWN0b3J5UGF0aCgpKTsKKyAgICB9KS5pdGVyYXRvci0+dmFsdWUtPmNvbm5lY3Rp
b25Ub1NlcnZlcigpOwogfQogCiB2b2lkIFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRlbGV0ZUFsbERh
dGFiYXNlcygpCkBAIC02MywxMyArNTUsNCBAQCB2b2lkIFdlYkRhdGFiYXNlUHJvdmlkZXI6OmRl
bGV0ZUFsbERhdGFiYXNlcygpCiAgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2lkYlNlcnZlck1h
cC52YWx1ZXMoKSkKICAgICAgICAgc2VydmVyLT5pZGJTZXJ2ZXIoKS5jbG9zZUFuZERlbGV0ZURh
dGFiYXNlc01vZGlmaWVkU2luY2UoLVdhbGxUaW1lOjppbmZpbml0eSgpLCBbXSB7IH0pOwogfQot
Ci12b2lkIFdlYkRhdGFiYXNlUHJvdmlkZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90
IHF1b3RhKQotewotICAgIG1faWRiUGVyT3JpZ2luUXVvdGEgPSBxdW90YTsKLQotICAgIGZvciAo
YXV0byYgc2VydmVyIDogbV9pZGJTZXJ2ZXJNYXAudmFsdWVzKCkpCi0gICAgICAgIHNlcnZlci0+
aWRiU2VydmVyKCkuc2V0UGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQotCiAjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCmluZGV4
IDUyMjIzMzA5YjM5YmUzZWNhY2ViNjlmYzY5ZjIwMDdlMmM5YjNlZGEuLjNmNTA2ZDc2YzNiZjc0
NTM0ZjM2M2RmMmE0N2ZlY2JlMzdlMTAxMjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaApAQCAtNDQsOCArNDQsNiBAQCBwdWJsaWM6
CiAgICAgV2ViQ29yZTo6SURCQ2xpZW50OjpJREJDb25uZWN0aW9uVG9TZXJ2ZXImIGlkYkNvbm5l
Y3Rpb25Ub1NlcnZlckZvclNlc3Npb24oY29uc3QgUEFMOjpTZXNzaW9uSUQmKSBvdmVycmlkZTsK
IAogICAgIHZvaWQgZGVsZXRlQWxsRGF0YWJhc2VzKCk7Ci0KLSAgICB2b2lkIHNldElEQlBlck9y
aWdpblF1b3RhKHVpbnQ2NF90KTsKICNlbmRpZgogCiBwcml2YXRlOgpAQCAtNTUsNiArNTMsNSBA
QCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAgICAgSGFzaE1hcDx1
aW50NjRfdCwgUmVmUHRyPFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcj4+IG1faWRiU2VydmVy
TWFwOwotICAgIHVpbnQ2NF90IG1faWRiUGVyT3JpZ2luUXVvdGEgeyBXZWJDb3JlOjpJREJTZXJ2
ZXI6OmRlZmF1bHRQZXJPcmlnaW5RdW90YSB9OwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQppbmRleCA2
ZDYyYTk4Yjk3ZjJlYzI0MTRjN2RiMWFkM2U3MGYyZDBkZjEzZWU0Li43M2UyMzMxZWJiNmNmYWVk
ZWVhNGMxZDJmMTJhZDBiYWQ1MjI2NTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbQpAQCAtMTU3LDEzICsxNTcsNiBA
QCAtICh2b2lkKWRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMKICNlbmRpZgogfQogCi0tICh2b2lk
KXNldElEQlBlck9yaWdpblF1b3RhOih1aW50NjRfdClxdW90YQotewotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIFdlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldElE
QlBlck9yaWdpblF1b3RhKHF1b3RhKTsKLSNlbmRpZgotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIAogc3RhdGljIGJvb2wgaXNGaWxlSGlkZGVuKE5TU3RyaW5nICpmaWxlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQ
cml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFu
YWdlclByaXZhdGUuaAppbmRleCAyMTcyNDE2MmI5NTM4OGE0YTI2YmE5ZWM0ZDZjNTA0ZjQ1ZjY0
MDRhLi45MzliNGNmN2UwNTc0MmQzNmUxMzA3N2MwY2E2NjMyZmYzZTVkY2YyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlclByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFu
YWdlclByaXZhdGUuaApAQCAtNzAsNyArNzAsNiBAQCBleHRlcm4gQ0ZTdHJpbmdSZWYgV2ViRGF0
YWJhc2VPcmlnaW5zRGlkQ2hhbmdlTm90aWZpY2F0aW9uOwogCiAvLyBGb3IgRHVtcFJlbmRlclRy
ZWUgc3VwcG9ydCBvbmx5CiAtICh2b2lkKWRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXM7Ci0tICh2
b2lkKXNldElEQlBlck9yaWdpblF1b3RhOih1aW50NjRfdClxdW90YTsKIAogI2lmIFRBUkdFVF9P
U19JUEhPTkUKICsgKHZvaWQpc2NoZWR1bGVFbXB0eURhdGFiYXNlUmVtb3ZhbDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdl
ci5pZGwgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1h
bmFnZXIuaWRsCmluZGV4IGU4MWQ0OTM4NTkyZDY4MjBiMjExYTJlZmI1MzliNjZjZTZkMTUyYzQu
LjdhZWJjYWVmNzIwYWFhMjI2YzM4NDUwYTY0OWQ3MDc3ZDZiY2JlY2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRGF0YWJhc2VNYW5h
Z2VyLmlkbApAQCAtNjksNSArNjksNCBAQCBpbnRlcmZhY2UgSVdlYkRhdGFiYXNlTWFuYWdlciA6
IElVbmtub3duCiBpbnRlcmZhY2UgSVdlYkRhdGFiYXNlTWFuYWdlcjIgOiBJV2ViRGF0YWJhc2VN
YW5hZ2VyCiB7CiAgICAgSFJFU1VMVCBkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzKCk7Ci0gICAg
SFJFU1VMVCBzZXRJREJQZXJPcmlnaW5RdW90YShbaW5dIHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90
YSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1h
bmFnZXIuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNw
cAppbmRleCAyNDkzYzdiMGI3OWZjNGZkOGVjZWMwZWE5NjY3YzZlZTJhYzNhMDRhLi42OGM2YmQ0
OTM5Y2Y5YjA0ODk1N2JjNzUwMGJkODU0OGEwMWVlM2IyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKQEAgLTM0NiwxNCArMzQ2LDYgQEAgSFJF
U1VMVCBXZWJEYXRhYmFzZU1hbmFnZXI6OmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKQogICAg
IHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYkRhdGFiYXNlTWFuYWdlcjo6c2V0SURCUGVy
T3JpZ2luUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQotewotI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQotICAgIFdlYkRhdGFiYXNlUHJvdmlkZXI6OnNpbmdsZXRvbigpLnNldElE
QlBlck9yaWdpblF1b3RhKHF1b3RhKTsKLSNlbmRpZgotICAgIHJldHVybiBTX09LOwotfQotCiBj
bGFzcyBEaWRNb2RpZnlPcmlnaW5EYXRhIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEaWRN
b2RpZnlPcmlnaW5EYXRhKTsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
RGF0YWJhc2VNYW5hZ2VyLmgKaW5kZXggZTBmZTNlM2I4ODFiNjEzZThiMGY5NzZhODVjYWQ4NDli
YjcyNzQ3Ny4uNTFiNjQ1ZjcyODQ3NWQxNjY0YTlhZmFkZGRiYjkxMGQ1OGJlOWI1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmgKQEAgLTU2LDcgKzU2
LDYgQEAgcHVibGljOgogCiAgICAgLy8gSVdlYkRhdGFiYXNlTWFuYWdlcjIKICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcygpOwot
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRJREJQZXJPcmlnaW5RdW90
YSh1bnNpZ25lZCBsb25nIGxvbmcpOwogCiAgICAgLy8gRGF0YWJhc2VNYW5hZ2VyQ2xpZW50CiAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTW9kaWZ5T3JpZ2luKGNvbnN0IFdlYkNvcmU6OlNl
Y3VyaXR5T3JpZ2luRGF0YSYpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IGY0NWM3OTBmNzUwNmJmODgyYWUyMTU1OTEzNzlhODM4NWU1MGYyZTcu
LjEyY2E2NTQzNWQ0MmM5OThjZjliM2JjYTZlNjhlMjYxNmM2ZmYzNTcgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAx
OS0wOC0xMiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVt
b3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWxleCBDaHJpc3Rl
bnNlbi4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwOgorICAgICAg
ICAoVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKHNldElEQlBlck9yaWdp
blF1b3RhQ2FsbGJhY2spOiBEZWxldGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RS
dW5uZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06
CisgICAgICAgIChydW5UZXN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1
bm5lck1hYy5tbToKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRp
bmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6OnNldElEQlBl
ck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVU
b0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6c2V0SURC
UGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91
c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE5LTA4LTA5ICBBYWthc2ggSmFpbiAg
PGFha2FzaF9qYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbZXdzXSBBZGQgYnVpbGRib3QudGFj
IHRvIHJlcG9zaXRvcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5u
ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKaW5kZXggOTBjNjRj
MzYxNGNkYzQyZGI2ZjQ5NDJiZGUxYWQxMzBmZDFmZDljYi4uZTgxN2E1NzNhNThkMTU5ZDRjZjIz
NDk4MmNjYTA0ZGNkNjRiNjA0YSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dFJ1bm5lci5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5jcHAKQEAg
LTg5MywyMCArODkzLDYgQEAgc3RhdGljIEpTVmFsdWVSZWYgc2V0RGF0YWJhc2VRdW90YUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW4KICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKLXN0YXRpYyBKU1ZhbHVlUmVmIHNldElE
QlBlck9yaWdpblF1b3RhQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQotewot
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwotICAgIAotICAgIGF1dG8qIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxUZXN0UnVubmVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKLSAgICAKLSAg
ICBkb3VibGUgcXVvdGEgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBu
dWxscHRyKTsKLSAgICBpZiAoIXN0ZDo6aXNuYW4ocXVvdGEpKQotICAgICAgICBjb250cm9sbGVy
LT5zZXRJREJQZXJPcmlnaW5RdW90YShzdGF0aWNfY2FzdDx1aW50NjRfdD4ocXVvdGEpKTsKLSAg
ICAKLSAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Ci19Ci0KIHN0YXRp
YyBKU1ZhbHVlUmVmIHNldERlZmVyc0xvYWRpbmdDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCiB7CiAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAxKQpAQCAtMjIyMCw3ICsyMjA2
LDYgQEAgSlNTdGF0aWNGdW5jdGlvbiogVGVzdFJ1bm5lcjo6c3RhdGljRnVuY3Rpb25zKCkKICAg
ICAgICAgeyAic2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9yQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2VzIiwgc2V0UmVqZWN0c1Byb3RlY3Rpb25TcGFjZUFuZENvbnRpbnVlRm9y
QXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2V0
SGFuZGxlc0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNldEhhbmRsZXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRJY29uRGF0YWJhc2VF
bmFibGVkIiwgc2V0SWNvbkRhdGFiYXNlRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCi0gICAgICAg
IHsgInNldElEQlBlck9yaWdpblF1b3RhIiwgc2V0SURCUGVyT3JpZ2luUXVvdGFDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZCIsIHNl
dEF1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAic2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRlciIsIHNldE1haW5GcmFtZUlzRmlyc3RSZXNw
b25kZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRNb2NrRGV2aWNlT3JpZW50YXRp
b24iLCBzZXRNb2NrRGV2aWNlT3JpZW50YXRpb25DYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdFJ1bm5lci5oCmluZGV4IDgxNDUyNDdmNWUxN2NlODE2MTMyY2RlMTYyZmQ1OWY5MjNl
ZmI1MGMuLjI5YTRlZjJlNzhiNzYxMWJlMWJiYjYxY2RhMTFkZTM1MGFjOTI3NDIgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9UZXN0UnVubmVyLmgKQEAgLTEwNiw3ICsxMDYsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXREb21haW5SZWxheGF0aW9uRm9yYmlkZGVuRm9yVVJMU2NoZW1lKGJvb2wgZm9yYmlkZGVu
LCBKU1N0cmluZ1JlZiBzY2hlbWUpOwogICAgIHZvaWQgc2V0RGVmZXJzTG9hZGluZyhib29sKTsK
ICAgICB2b2lkIHNldEljb25EYXRhYmFzZUVuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBzZXRJREJQ
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAgICAgdm9pZCBzZXRKYXZhU2NyaXB0Q2FuQWNjZXNz
Q2xpcGJvYXJkKGJvb2wgZmxhZyk7CiAgICAgdm9pZCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0aW9u
RW5hYmxlZChib29sIGZsYWcpOwogICAgIHZvaWQgc2V0TWFpbkZyYW1lSXNGaXJzdFJlc3BvbmRl
cihib29sIGZsYWcpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBS
ZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
CmluZGV4IDJlOTM5N2ZmNTk0OTI1MDBmYjA4Njg3MWM4YWY3YzZmMTY2OWFiZjQuLjY0ZGIxZDE3
ZjliYzljYjhjZTZkODJmOWI3N2RiZjM4NzVhY2EwY2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTIwMzUsNyArMjAzNSw2IEBAIHN0YXRpYyB2b2lk
IHJ1blRlc3QoY29uc3Qgc3RyaW5nJiBpbnB1dExpbmUpCiAgICAgZ1Rlc3RSdW5uZXItPmNsZWFy
QWxsQXBwbGljYXRpb25DYWNoZXMoKTsKIAogICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbERhdGFi
YXNlcygpOwotICAgIGdUZXN0UnVubmVyLT5zZXRJREJQZXJPcmlnaW5RdW90YSg1MCAqIE1CKTsK
IAogICAgIGlmIChkaXNhbGxvd2VkVVJMcykKICAgICAgICAgQ0ZTZXRSZW1vdmVBbGxWYWx1ZXMo
ZGlzYWxsb3dlZFVSTHMpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rl
c3RSdW5uZXJNYWMubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5t
bQppbmRleCBjMDFiZGE1NjZlNTFiZmFhNmYwNzliMTEyOTQ1Zjk1NjJlZmMxNjE1Li4xZjk2MGFh
ZTJkZDAzZTE2MGIxMjRjNzkyMjNlOTU2YWFkY2VhNzhlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvVGVzdFJ1bm5lck1hYy5tbQpAQCAtNDM5LDExICs0MzksNiBAQCB2b2lkIFRlc3RSdW5u
ZXI6OnNldERhdGFiYXNlUXVvdGEodW5zaWduZWQgbG9uZyBsb25nIHF1b3RhKQogICAgIFtvcmln
aW4gcmVsZWFzZV07CiB9CiAKLXZvaWQgVGVzdFJ1bm5lcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEo
dWludDY0X3QgcXVvdGEpCi17Ci0gICAgW1tXZWJEYXRhYmFzZU1hbmFnZXIgc2hhcmVkV2ViRGF0
YWJhc2VNYW5hZ2VyXSBzZXRJREJQZXJPcmlnaW5RdW90YTpxdW90YV07Ci19Ci0KIHZvaWQgVGVz
dFJ1bm5lcjo6Z29CYWNrKCkKIHsKICAgICBbW21haW5GcmFtZSB3ZWJWaWV3XSBnb0JhY2tdOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCmluZGV4IGEyODZmMjNm
N2VkNzY5YmVjZWFmZTIwMjZlMjkzOTJmN2U0MDliNjguLjk1YWQwMjJmY2I0MjZmODY4NDc5YmVm
MjgxY2JmMzRhOTgxN2ZkNmQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9U
ZXN0UnVubmVyV2luLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5l
cldpbi5jcHAKQEAgLTE3MiwyMiArMTcyLDYgQEAgdm9pZCBUZXN0UnVubmVyOjpjbGVhckFsbERh
dGFiYXNlcygpCiAgICAgZGF0YWJhc2VNYW5hZ2VyMi0+ZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNl
cygpOwogfQogCi12b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90
IHF1b3RhKQotewotICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyPiBkYXRhYmFzZU1hbmFn
ZXI7Ci0gICAgQ09NUHRyPElXZWJEYXRhYmFzZU1hbmFnZXI+IHRtcERhdGFiYXNlTWFuYWdlcjsK
LSAgICBpZiAoRkFJTEVEKFdlYktpdENyZWF0ZUluc3RhbmNlKENMU0lEX1dlYkRhdGFiYXNlTWFu
YWdlciwgMCwgSUlEX0lXZWJEYXRhYmFzZU1hbmFnZXIsICh2b2lkKiopJnRtcERhdGFiYXNlTWFu
YWdlcikpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKEZBSUxFRCh0bXBEYXRhYmFzZU1hbmFn
ZXItPnNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcigmZGF0YWJhc2VNYW5hZ2VyKSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENPTVB0cjxJV2ViRGF0YWJhc2VNYW5hZ2VyMj4gZGF0YWJhc2VNYW5h
Z2VyMjsKLSAgICBpZiAoRkFJTEVEKGRhdGFiYXNlTWFuYWdlci0+UXVlcnlJbnRlcmZhY2UoJmRh
dGFiYXNlTWFuYWdlcjIpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZGF0YWJhc2VNYW5hZ2Vy
Mi0+c2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQotCiB2b2lkIFRlc3RSdW5uZXI6OnNl
dFN0b3JhZ2VEYXRhYmFzZUlkbGVJbnRlcnZhbChkb3VibGUpCiB7CiAgICAgLy8gRklYTUU6IElt
cGxlbWVudC4gUmVxdWlyZXMgbm9uLWV4aXN0YW50IChvbiBXaW5kb3dzKSBXZWJTdG9yYWdlTWFu
YWdlcgpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5pZGwKaW5kZXggY2Q1MWMxZDA3N2YxNTVmNDM2N2Ji
MmNiYTViMTllYTRjODY0OTRmYi4uMGFlYjkzZTE5MTA3MzdlNzAwMjNkMTk2OWNlZDI3ODlkMjZk
OTgyNSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9UZXN0UnVubmVyLmlkbAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsCkBAIC0xNDYsOSArMTQ2LDYgQEAgaW50
ZXJmYWNlIFRlc3RSdW5uZXIgewogICAgIGF0dHJpYnV0ZSBkb3VibGUgZGF0YWJhc2VEZWZhdWx0
UXVvdGE7CiAgICAgYXR0cmlidXRlIGRvdWJsZSBkYXRhYmFzZU1heFF1b3RhOwogCi0gICAgLy8g
SW5kZXhlZERCIEFQSQotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodW5zaWduZWQgbG9u
ZyBsb25nIHF1b3RhKTsKLQogICAgIC8vIEFwcGxpY2F0aW9uIENhY2hlIEFQSQogICAgIHZvaWQg
Y2xlYXJBbGxBcHBsaWNhdGlvbkNhY2hlcygpOwogICAgIHZvaWQgc2V0QXBwQ2FjaGVNYXhpbXVt
U2l6ZSh1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuY3BwIGIvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNwcAppbmRleCA0MGJkYzJlYTBiYTJl
MTRhMDRkMGY0NWY2NjQ4MDU3NGY3OGJmODhhLi41OWYyNWMxYmJhYzZlZDg5ZTk0Y2ZhODhhOWFm
ZmMwM2ZiNzI0YTE4IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHAKQEAgLTM2NywxMyArMzY3LDYgQEAgdm9pZCBUZXN0UnVu
bmVyOjpkaXNhbGxvd0luY3JlYXNlRm9yQXBwbGljYXRpb25DYWNoZVF1b3RhKCkKICAgICBtX2Rp
c2FsbG93SW5jcmVhc2VGb3JBcHBsaWNhdGlvbkNhY2hlUXVvdGEgPSB0cnVlOwogfQogCi12b2lk
IFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZSA9IGFkb3B0V0soV0tTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoIlNldElEQlBlck9yaWdpblF1b3RhIikpOwotICAgIFdLUmV0
YWluUHRyPFdLVUludDY0UmVmPiBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tVSW50NjRDcmVhdGUo
cXVvdGEpKTsKLSAgICBXS0J1bmRsZVBvc3RTeW5jaHJvbm91c01lc3NhZ2UoSW5qZWN0ZWRCdW5k
bGU6OnNpbmdsZXRvbigpLmJ1bmRsZSgpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHku
Z2V0KCksIG51bGxwdHIpOwotfQotCiBzdGF0aWMgaW5saW5lIEpTVmFsdWVSZWYgc3RyaW5nQXJy
YXlUb0pTKEpTQ29udGV4dFJlZiBjb250ZXh0LCBXS0FycmF5UmVmIHN0cmluZ3MpCiB7CiAgICAg
Y29uc3Qgc2l6ZV90IGNvdW50ID0gV0tBcnJheUdldFNpemUoc3RyaW5ncyk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaCBiL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCmluZGV4IDcz
Y2JlN2Q5YzYxNzA4ZmRiZjM3MDM4ZTYzNDVkYTFhNTdlODZmMDkuLjdlODU4OGVjYTMxN2JmODQ2
MGNkY2FhNzQ2ODk2MjQ1YTE4OTFlZDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5oCkBAIC0xNzUsOSArMTc1LDYgQEAgcHVibGlj
OgogICAgIHVpbnQ2NF90IGRvbUNhY2hlU2l6ZShKU1N0cmluZ1JlZiBvcmlnaW4pOwogICAgIHZv
aWQgc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sKTsKIAotICAgIC8vIEluZGV4ZWRE
QgotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwotCiAgICAgLy8gRmFp
bGVkIGxvYWQgY29uZGl0aW9uIHRlc3RpbmcKICAgICB2b2lkIGZvcmNlSW1tZWRpYXRlQ29tcGxl
dGlvbigpOwogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4
IDk5MTE4ZTc2OWUzMGJhOTU3Y2RiZDg2N2I5NTg2OWQxMDhkM2VkYjQuLjE2NTQ2MjljYWE2ZjZk
OGM4OTQ1NDgzNTFjMGM4ZmIwYTMzMzM3MmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCkBAIC05NDAsNyArOTQwLDYgQEAgYm9vbCBUZXN0Q29udHJvbGxlcjo6
cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucywg
UmUKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckFsbERldmljZU9yaWVudGF0aW9uUGVybWlz
c2lvbnMod2Vic2l0ZURhdGFTdG9yZSk7CiAKICAgICBDbGVhckluZGV4ZWREYXRhYmFzZXMoKTsK
LSAgICBzZXRJREJQZXJPcmlnaW5RdW90YSg1MCAqIE1CKTsKIAogICAgIGNsZWFyU2VydmljZVdv
cmtlclJlZ2lzdHJhdGlvbnMoKTsKICAgICBjbGVhckRPTUNhY2hlcygpOwpAQCAtMzA2NCwxMSAr
MzA2Myw2IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmNsZWFyRE9NQ2FjaGVzKCkKICAgICBydW5V
bnRpbChjb250ZXh0LmRvbmUsIG5vVGltZW91dCk7CiB9CiAKLXZvaWQgVGVzdENvbnRyb2xsZXI6
OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdLQ29udGV4dFNl
dElEQlBlck9yaWdpblF1b3RhKHBsYXRmb3JtQ29udGV4dCgpLCBxdW90YSk7Ci19Ci0KIHN0cnVj
dCBSZW1vdmVBbGxJbmRleGVkRGF0YWJhc2VzQ2FsbGJhY2tDb250ZXh0IHsKICAgICBleHBsaWNp
dCBSZW1vdmVBbGxJbmRleGVkRGF0YWJhc2VzQ2FsbGJhY2tDb250ZXh0KFRlc3RDb250cm9sbGVy
JiBjb250cm9sbGVyKQogICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNvbnRyb2xsZXIpCmRpZmYg
LS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmggYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggYjA0ZTU4MmQ4MmQ2ZGE0MjE2
NjBjOGE3NWNmYmI2NjFkNDY5MzFmYS4uYzhmZTRlNWE4YjU5YmI0ZWZhYzRjNWUxYTZhMjk4NzZj
YTg5Y2ZmZiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuaApAQCAtMjcy
LDggKzI3Miw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dTdG9yYWdlUXVvdGFJbmNy
ZWFzZShib29sKTsKIAotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwot
CiAgICAgYm9vbCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX2RpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTmF2aWdhdGlvbjsgfQogICAgIHZvaWQgY2xlYXJEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RG
b3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSB7IG1fZGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxOYXZpZ2F0aW9uID0gZmFsc2U7IH0KIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCBlNmRlODg2YWNmNmYyZmRlZTM4MjU3MGI4NmRhNzdj
MzU3MTBhMjM3Li4xMDczYWIxNTFhMGUzNTQ5YTQxMmE1ZDI1ZjU0ZjdiMWI0ZTlkY2I4IDEwMDY0
NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9U
b29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMTUwNSwxMyArMTUw
NSw2IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1l
LCAiU2V0SURCUGVyT3JpZ2luUXVvdGEiKSkgewotICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQo
bWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAgICAgICBXS1VJbnQ2NFJl
ZiBxdW90YSA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdlQm9keSk7Ci0gICAgICAg
IFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShXS1VJbnQ2
NEdldFZhbHVlKHF1b3RhKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiSW5qZWN0VXNl
clNjcmlwdCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLU3RyaW5nUmVmIHNjcmlwdCA9IHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376569</attachid>
            <date>2019-08-16 17:04:29 -0700</date>
            <delta_ts>2019-08-19 09:38:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-196545-20190816170428.patch</filename>
            <type>text/plain</type>
            <size>50333</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4Nzc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTU4ZGYxODUzZTJiZThh
ZDljNDhmNmMyMTVhYzAxYzk3MWJkOTFlZS4uYWY1MTA4NzM3Yzg0MTlhMmU1OTVkYWY1NDVjZTUx
ODBiN2VmOTQzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTA4LTE2ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lm
aWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NjU0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmUtbGFuZCByMjQ4NTI2IHdpdGgg
Zml4IGZvciBwZXJmb3JtYW5jZSB0ZXN0cy4KKworICAgICAgICBObyBjaGFuZ2Ugb2YgYmVoYXZp
b3IgYXMgSURCIHNwZWNpZmljIHF1b3RhIGlzIG5vIGxvbmdlciB1c2VkLgorICAgICAgICBJbnN0
ZWFkIGEgZ2xvYmFsIHF1b3RhIGlzIHVzZWQuIFRoaXMgcXVvdGEgY3VycmVudGx5IGhhbmRsZXMg
SURCIGFuZCBDYWNoZSBBUEkuCisKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QlNlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3Jl
YXRlQmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVy
OjpzZXRQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVk
ZGIvc2VydmVyL0lEQlNlcnZlci5oOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJT
ZXJ2ZXI6OnBlck9yaWdpblF1b3RhIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6U1FMaXRlSURCQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6
U1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2JqZWN0U3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmNy
ZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2lu
Z1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZCk6CisgICAgICAgIChXZWJDb3JlOjpJREJT
ZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lSW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2Vk
U2V0S2V5R2VuZXJhdG9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxp
dGVJREJCYWNraW5nU3RvcmU6OnF1b3RhRm9yT3JpZ2luIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjptYXhpbXVtU2l6
ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NR
TGl0ZUlEQkJhY2tpbmdTdG9yZS5oOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9VbmlxdWVJREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlVu
aXF1ZUlEQkRhdGFiYXNlOjpzZXRRdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmg6CisKIDIwMTktMDgtMTYgIEFudHRp
IEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIENvbnRlbnQgaW4gPGlmcmFt
ZT4gc2hvdWxkIG92ZXJyaWRlICJ0b3VjaC1hY3Rpb24iIHNldCBpbiBlbWJlZGRpbmcgZG9jdW1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggZjYxODVhMjliMjA4MDNhYWQ1NWM2NjFmZDhmNzUzZmIyYTRlYmJmNi4u
N2EzMmRhN2I2MzExM2VjMzI0NjI5MzRhYThmY2UzYzA3OTVkNTc4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxOS0wOC0xNiAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4K
KworICAgICAgICBSZW1vdmUgSURCLXNwZWNpZmljIHF1b3RhCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTY1NDUKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzU0MjAxNzgzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKToKKyAgICAgICAgKFdlYktpdDo6
TmV0d29ya1Byb2Nlc3M6OmFkZEluZGV4ZWREYXRhYmFzZVNlc3Npb24pOgorICAgICAgICAoV2Vi
S2l0OjpOZXR3b3JrUHJvY2Vzczo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmg6CisgICAgICAgICogTmV0d29y
a1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW46CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9DL1dLQ29udGV4dC5jcHA6CisgICAgICAgIChXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5R
dW90YSk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZh
dGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQcm9jZXNzUG9vbDo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oOgorCiAyMDE5LTA4LTE2ICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MjQ4NDM2KTogV0tXZWJWaWV3IGRvZXNu4oCZdCByZXNwZWN0IGlzT3BhcXVlIHNldHRpbmcgaW4g
TklCLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCA5M2U3ZTgzNThlYzZiMWFhMDc3OTM5MTEyOTBm
Zjg3ZTEyM2ZiNDQ1Li45MjA4N2Q1NzI0MTMwMTMxMjFiOTBkOGNiODJkMjFlNzEzMThhNzE3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA4LTE2ICBTaWh1aSBM
aXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMg
cXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
NjU0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlUHJv
dmlkZXIuY3BwOgorICAgICAgICAoV2ViRGF0YWJhc2VQcm92aWRlcjo6aWRiQ29ubmVjdGlvblRv
U2VydmVyRm9yU2Vzc2lvbik6CisgICAgICAgIChXZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQ
ZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogU3RvcmFnZS9XZWJEYXRhYmFzZVBy
b3ZpZGVyLmg6CisKIDIwMTktMDgtMTUgIEJyZW50IEZ1bGdoYW0gIDxiZnVsZ2hhbUBhcHBsZS5j
b20+CiAKICAgICAgICAgW0ZUV10gRW5hYmxlIENvcmVGb3VuZGF0aW9uIHVzZSBpZiBidWlsZGlu
ZyBmb3IgQXBwbGUgdGFyZ2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggNGViN2Ez
M2YzOTQ1NGI5OGE3MDNjNjRhZWUxZTdhOTNmOWViZTA4My4uOWE5ZDliYTkwMjgyMzY2OTIxM2Jk
ZTJmNzU5ZWY4ZDVhOTJhNjQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDE5LTA4LTE2ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgor
CisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTdG9yYWdlL1dlYkRhdGFiYXNlTWFuYWdlci5tbToKKyAgICAgICAgKC1bV2ViRGF0
YWJhc2VNYW5hZ2VyIHNldElEQlBlck9yaWdpblF1b3RhOl0pOiBEZWxldGVkLgorICAgICAgICAq
IFN0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oOgorCiAyMDE5LTA4LTE1ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dURl0gQWRkIG1ha2VV
bmlxdWU8VD4sIHdoaWNoIGVuc3VyZXMgVCBpcyBmYXN0LWFsbG9jYXRlZCwgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQgYW5ub3RhdGlvbiBwYXJ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5k
ZXggYTBiMTcyM2YwZDlhODVkMzA0ZWYxZDE4NTllYjI2MjlkOTM5NDY5NS4uYmE4ZTgwZWZkMGUy
ODQ0ZGVlMDFlMmYxOTZlOWU3M2IxMzBmZjBiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA4LTE2ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBw
bGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsOgorICAg
ICAgICAqIFdlYkRhdGFiYXNlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJEYXRhYmFzZU1hbmFn
ZXI6OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJEYXRhYmFz
ZU1hbmFnZXIuaDoKKwogMjAxOS0wOC0xNSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUu
Y29tPgogCiAgICAgICAgIFtXVEZdIEFkZCBtYWtlVW5pcXVlPFQ+LCB3aGljaCBlbnN1cmVzIFQg
aXMgZmFzdC1hbGxvY2F0ZWQsIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEIGFubm90YXRpb24gcGFy
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lE
QkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L0lEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDI5MWY3NmVkNWFjNWJiYjc3Yzg0ZGVmZjljMGM2Njc5
Yzc4YmEzMzQuLjcyZWNmMmUwYTAzYTUxZDRlNjI1MDUxOTYzMzI0MDU3ZGQ3OWYyNmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJCYWNraW5n
U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
QmFja2luZ1N0b3JlLmgKQEAgLTEwMCw3ICsxMDAsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzRXBoZW1lcmFsKCkgPSAwOwogCiAgICAgdmlydHVhbCB1aW50NjRfdCBkYXRhYmFzZXNT
aXplRm9yT3JpZ2luKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRRdW90YSh1aW50
NjRfdCkgPSAwOwogCiAgICAgdmlydHVhbCBib29sIGhhc1RyYW5zYWN0aW9uKGNvbnN0IElEQlJl
c291cmNlSWRlbnRpZmllciYpIGNvbnN0ID0gMDsKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKaW5kZXgg
NTViNDEyNDQxZWYxNzI1MDhjZjA1ZGYxZmNhNmQxYzRmZDUwZTk0MC4uOGIzMmM1ZTE1ZmNhZDlh
MTBkMTczOGU4MTAxNjRkZWE2YzdhODhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5jcHAKQEAgLTEzNSw3ICsxMzUsNyBA
QCBzdGQ6OnVuaXF1ZV9wdHI8SURCQmFja2luZ1N0b3JlPiBJREJTZXJ2ZXI6OmNyZWF0ZUJhY2tp
bmdTdG9yZShjb25zdCBJREJEYXRhYmFzZQogICAgIGlmIChtX2RhdGFiYXNlRGlyZWN0b3J5UGF0
aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBNZW1vcnlJREJCYWNraW5nU3RvcmU6OmNyZWF0
ZShtX3Nlc3Npb25JRCwgaWRlbnRpZmllcik7CiAKLSAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxTUUxpdGVJREJCYWNraW5nU3RvcmU+KG1fc2Vzc2lvbklELCBpZGVudGlmaWVyLCBtX2RhdGFi
YXNlRGlyZWN0b3J5UGF0aCwgbV9iYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciwgbV9w
ZXJPcmlnaW5RdW90YSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8U1FMaXRlSURCQmFj
a2luZ1N0b3JlPihtX3Nlc3Npb25JRCwgaWRlbnRpZmllciwgbV9kYXRhYmFzZURpcmVjdG9yeVBh
dGgsIG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIpOwogfQogCiB2b2lkIElEQlNl
cnZlcjo6b3BlbkRhdGFiYXNlKGNvbnN0IElEQlJlcXVlc3REYXRhJiByZXF1ZXN0RGF0YSkKQEAg
LTY5MSwxNCArNjkxLDYgQEAgdm9pZCBJREJTZXJ2ZXI6OmRpZFBlcmZvcm1DbG9zZUFuZERlbGV0
ZURhdGFiYXNlcyh1aW50NjRfdCBjYWxsYmFja0lEKQogICAgIGNhbGxiYWNrKCk7CiB9CiAKLXZv
aWQgSURCU2VydmVyOjpzZXRQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBt
X3Blck9yaWdpblF1b3RhID0gcXVvdGE7Ci0KLSAgICBmb3IgKGF1dG8mIGRhdGFiYXNlIDogbV91
bmlxdWVJREJEYXRhYmFzZU1hcC52YWx1ZXMoKSkKLSAgICAgICAgZGF0YWJhc2UtPnNldFF1b3Rh
KHF1b3RhKTsKLX0KLQogSURCU2VydmVyOjpRdW90YVVzZXI6OlF1b3RhVXNlcihJREJTZXJ2ZXIm
IHNlcnZlciwgU3RvcmFnZVF1b3RhTWFuYWdlciogbWFuYWdlciwgQ2xpZW50T3JpZ2luJiYgb3Jp
Z2luKQogICAgIDogbV9zZXJ2ZXIoc2VydmVyKQogICAgICwgbV9tYW5hZ2VyKG1ha2VXZWFrUHRy
KG1hbmFnZXIpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQlNlcnZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2Vy
dmVyL0lEQlNlcnZlci5oCmluZGV4IDRkMzI4YzQ4MjE1NTY0YTMyMzA0OWVkNmI1MzdiYmRiZTM3
ZGM4YzEuLjllNmE0NWQyY2NkNThiNGUxMzllMjdkOTQ3OGExZDZlOTEyZDZhOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgK
QEAgLTU0LDggKzU0LDYgQEAgc3RydWN0IElEQkdldFJlY29yZERhdGE7CiAKIG5hbWVzcGFjZSBJ
REJTZXJ2ZXIgewogCi1jb25zdCB1aW50NjRfdCBkZWZhdWx0UGVyT3JpZ2luUXVvdGEgPSA1MDAg
KiBNQjsKLQogY2xhc3MgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXI7CiAKIGVu
dW0gY2xhc3MgU2hvdWxkRm9yY2VTdG9wIDogYm9vbCB7IE5vLCBZZXMgfTsKQEAgLTExNSw5ICsx
MTMsNiBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjbG9zZUFuZERlbGV0ZURh
dGFiYXNlc01vZGlmaWVkU2luY2UoV2FsbFRpbWUsIEZ1bmN0aW9uPHZvaWQgKCk+JiYgY29tcGxl
dGlvbkhhbmRsZXIpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRh
YmFzZXNGb3JPcmlnaW5zKGNvbnN0IFZlY3RvcjxTZWN1cml0eU9yaWdpbkRhdGE+JiwgRnVuY3Rp
b248dm9pZCAoKT4mJiBjb21wbGV0aW9uSGFuZGxlcik7CiAKLSAgICB1aW50NjRfdCBwZXJPcmln
aW5RdW90YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGVyT3JpZ2luUXVvdGE7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldFBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIHZvaWQgcmVx
dWVzdFNwYWNlKGNvbnN0IENsaWVudE9yaWdpbiYsIHVpbnQ2NF90IHRhc2tTaXplLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFN0b3JhZ2VRdW90YU1hbmFnZXI6OkRlY2lzaW9uKT4mJik7CiAgICAg
dm9pZCBpbmNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50
NjRfdCB0YXNrU2l6ZSk7CiAgICAgdm9pZCBkZWNyZWFzZVBvdGVudGlhbFNwYWNlVXNlZChjb25z
dCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSk7CkBAIC0xOTYsOCArMTkxLDYgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9kYXRhYmFzZURpcmVjdG9yeVBhdGg7CiAgICAgSURCQmFj
a2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXImIG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5Rmls
ZUhhbmRsZXI7CiAKLSAgICB1aW50NjRfdCBtX3Blck9yaWdpblF1b3RhIHsgZGVmYXVsdFBlck9y
aWdpblF1b3RhIH07Ci0KICAgICBIYXNoTWFwPENsaWVudE9yaWdpbiwgc3RkOjp1bmlxdWVfcHRy
PFF1b3RhVXNlcj4+IG1fcXVvdGFVc2VyczsKICAgICBRdW90YU1hbmFnZXJHZXR0ZXIgbV9xdW90
YU1hbmFnZXJHZXR0ZXI7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCmluZGV4IDk4
Yzc0NWNiZWVlM2Q3ZjJjNGE2YjZhZmJiNDZiODNlOWQyNDU4MjguLmRhYjhjMzBlMjYyODIzNTUw
YjAzNDg0OTE4NjA2OGM0ZGM4YzY1ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgK
QEAgLTc5LDcgKzc5LDYgQEAgcHVibGljOgogICAgIGJvb2wgc3VwcG9ydHNTaW11bHRhbmVvdXNU
cmFuc2FjdGlvbnMoKSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgYm9vbCBpc0VwaGVtZXJh
bCgpIGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KIAotICAgIHZvaWQgc2V0UXVvdGEodWludDY0X3Qg
cXVvdGEpIGZpbmFsIHsgVU5VU0VEX1BBUkFNKHF1b3RhKTsgfTsKICAgICB1aW50NjRfdCBkYXRh
YmFzZXNTaXplRm9yT3JpZ2luKCkgY29uc3QgZmluYWw7CiAKICAgICB2b2lkIHJlbW92ZU9iamVj
dFN0b3JlRm9yVmVyc2lvbkNoYW5nZUFib3J0KE1lbW9yeU9iamVjdFN0b3JlJik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFj
a2luZ1N0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9T
UUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCmluZGV4IDQwYjZiNjc4ZWFkYjdhM2QzNjY2YzgzY2Ex
OGM5MjBhZTM5ODA5OWUuLjUxMjBkMmMyOTkzNWMyYTE5NTRhMTIwZTAwOWU5NjcyMjQ1ZjhjNjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxp
dGVJREJCYWNraW5nU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuY3BwCkBAIC0yMjksMTIgKzIyOSwxMSBA
QCBzdGF0aWMgY29uc3QgU3RyaW5nJiBibG9iRmlsZXNUYWJsZVNjaGVtYUFsdGVybmF0ZSgpCiAg
ICAgcmV0dXJuIGJsb2JGaWxlc1RhYmxlU2NoZW1hU3RyaW5nOwogfQogCi1TUUxpdGVJREJCYWNr
aW5nU3RvcmU6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQs
IGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBk
YXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVy
JiBmaWxlSGFuZGxlciwgdWludDY0X3QgcXVvdGEpCitTUUxpdGVJREJCYWNraW5nU3RvcmU6OlNR
TGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IElEQkRh
dGFiYXNlSWRlbnRpZmllciYgaWRlbnRpZmllciwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZVJvb3RE
aXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBmaWxlSGFuZGxl
cikKICAgICA6IG1fc2Vzc2lvbklEKHNlc3Npb25JRCkKICAgICAsIG1faWRlbnRpZmllcihpZGVu
dGlmaWVyKQogICAgICwgbV9kYXRhYmFzZVJvb3REaXJlY3RvcnkoZGF0YWJhc2VSb290RGlyZWN0
b3J5KQogICAgICwgbV90ZW1wb3JhcnlGaWxlSGFuZGxlcihmaWxlSGFuZGxlcikKLSAgICAsIG1f
cXVvdGEocXVvdGEpCiAgICAgLCBtX3NlcmlhbGl6YXRpb25Db250ZXh0KElEQlNlcmlhbGl6YXRp
b25Db250ZXh0OjpnZXRPckNyZWF0ZUlEQlNlcmlhbGl6YXRpb25Db250ZXh0KHNlc3Npb25JRCkp
CiB7CiAgICAgbV9kYXRhYmFzZURpcmVjdG9yeSA9IGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhV
cGdyYWRlKCk7CkBAIC04NDUsMTQgKzg0NCw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdT
dG9yZTo6Z2V0T3JFc3RhYmxpc2hEYXRhYmFzZUluZm8oSURCRGF0YWJhc2VJbmZvJiBpbmZvCiAg
ICAgcmV0dXJuIElEQkVycm9yIHsgfTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0
b3JlOjpxdW90YUZvck9yaWdpbigpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQo
KSk7Ci0gICAgdWludDY0X3QgZGlza0ZyZWVTcGFjZVNpemUgPSAwOwotICAgIEZpbGVTeXN0ZW06
OmdldFZvbHVtZUZyZWVTcGFjZShtX2lkZW50aWZpZXIuZGF0YWJhc2VEaXJlY3RvcnlSZWxhdGl2
ZVRvUm9vdChtX2RhdGFiYXNlUm9vdERpcmVjdG9yeSksIGRpc2tGcmVlU3BhY2VTaXplKTsKLSAg
ICByZXR1cm4gc3RkOjptaW4oZGlza0ZyZWVTcGFjZVNpemUgLyAyLCBtX3F1b3RhKTsKLX0KLQog
dWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpkYXRhYmFzZXNTaXplRm9yRm9sZGVyKGNv
bnN0IFN0cmluZyYgZm9sZGVyKQogewogICAgIHVpbnQ2NF90IGRpc2tVc2FnZSA9IDA7CkBAIC04
NzAsMjQgKzg2MSw2IEBAIHVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2Vz
U2l6ZUZvck9yaWdpbigpIGNvbnN0CiAgICAgcmV0dXJuIGRhdGFiYXNlc1NpemVGb3JGb2xkZXIo
b2xkVmVyc2lvbk9yaWdpbkRpcmVjdG9yeSkgKyBkYXRhYmFzZXNTaXplRm9yRm9sZGVyKG5ld1Zl
cnNpb25PcmlnaW5EaXJlY3RvcnkpOwogfQogCi11aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6Om1heGltdW1TaXplKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIWlzTWFpblRocmVhZCgpKTsK
LQotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgZm9yIG9uZSBkYXRhYmFzZSBmaWxlIGlzIHRoZSBx
dW90YSBmb3IgaXRzIG9yaWdpbiwgbWludXMgc2l6ZSBvZiBhbGwgZGF0YWJhc2VzIHdpdGhpbiB0
aGF0IG9yaWdpbiwKLSAgICAvLyBhbmQgcGx1cyBjdXJyZW50IHNpemUgb2YgdGhlIGRhdGFiYXNl
IGZpbGUuCi0gICAgdWludDY0X3QgZGF0YWJhc2VGaWxlU2l6ZSA9IFNRTGl0ZUZpbGVTeXN0ZW06
OmdldERhdGFiYXNlRmlsZVNpemUoZnVsbERhdGFiYXNlUGF0aCgpKTsKLSAgICB1aW50NjRfdCBx
dW90YSA9IHF1b3RhRm9yT3JpZ2luKCk7Ci0KLSAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSBkYXRh
YmFzZXNTaXplRm9yT3JpZ2luKCk7Ci0gICAgQVNTRVJUKGRpc2tVc2FnZSA+PSBkYXRhYmFzZUZp
bGVTaXplKTsKLQotICAgIGlmIChxdW90YSA8IGRpc2tVc2FnZSkKLSAgICAgICAgcmV0dXJuIGRh
dGFiYXNlRmlsZVNpemU7Ci0KLSAgICByZXR1cm4gcXVvdGEgLSBkaXNrVXNhZ2UgKyBkYXRhYmFz
ZUZpbGVTaXplOwotfQotCiBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJh
bnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogewogICAgIExPRyhJbmRl
eGVkREIsICJTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24gLSAlcyIsIGlu
Zm8uaWRlbnRpZmllcigpLmxvZ2dpbmdTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTg5Niw3
ICs4NjksNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJhbnNhY3Rp
b24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgIEFTU0VSVChtX3NxbGl0ZURC
LT5pc09wZW4oKSk7CiAgICAgQVNTRVJUKG1fZGF0YWJhc2VJbmZvKTsKIAotICAgIG1fc3FsaXRl
REItPnNldE1heGltdW1TaXplKG1heGltdW1TaXplKCkpOwogICAgIGF1dG8gYWRkUmVzdWx0ID0g
bV90cmFuc2FjdGlvbnMuYWRkKGluZm8uaWRlbnRpZmllcigpLCBudWxscHRyKTsKICAgICBpZiAo
IWFkZFJlc3VsdC5pc05ld0VudHJ5KSB7CiAgICAgICAgIExPR19FUlJPUigiQXR0ZW1wdCB0byBl
c3RhYmxpc2ggdHJhbnNhY3Rpb24gaWRlbnRpZmllciB0aGF0IGFscmVhZHkgZXhpc3RzIik7CkBA
IC05MTMsMTAgKzg4NSw3IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YmVnaW5U
cmFuc2FjdGlvbihjb25zdCBJREJUcmFuc2FjdGlvbkluZm8mIGluZm8pCiAgICAgICAgIGlmIChz
cWwucHJlcGFyZSgpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3FsLmJpbmRUZXh0KDEs
IFN0cmluZzo6bnVtYmVyKGluZm8ubmV3VmVyc2lvbigpKSkgIT0gU1FMSVRFX09LCiAgICAgICAg
ICAgICB8fCBzcWwuc3RlcCgpICE9IFNRTElURV9ET05FKSB7Ci0gICAgICAgICAgICBpZiAobV9z
cWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgZXJy
b3IgPSBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcg
ZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3Ig
ZG9tYWluIl9zIH07Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZXJyb3IgPSBJ
REJFcnJvciB7IFVua25vd25FcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVy
c2lvbiBpbiBkYXRhYmFzZSJfcyB9OworICAgICAgICAgICAgZXJyb3IgPSBJREJFcnJvciB7IFVu
a25vd25FcnJvciwgIkZhaWxlZCB0byBzdG9yZSBuZXcgZGF0YWJhc2UgdmVyc2lvbiBpbiBkYXRh
YmFzZSJfcyB9OwogICAgICAgICB9CiAgICAgfQogCkBAIC05OTksOCArOTY4LDYgQEAgSURCRXJy
b3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNv
dXJjZUlkZW50aWZpZXImIHQKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDUsIGluZm8u
bWF4SW5kZXhJRCgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9
IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBhZGQgb2Jq
ZWN0IHN0b3JlICclcycgdG8gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIGluZm8u
bmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURC
LT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9y
KCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVv
dGFFeGNlZWRlZEVycm9yLCAiQ291bGQgbm90IGNyZWF0ZSBvYmplY3Qgc3RvcmUgYmVjYXVzZSBu
byBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IGNyZWF0ZSBvYmplY3Qgc3RvcmUiX3MgfTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTEwMTEsOCArOTc4LDYgQEAgSURCRXJyb3IgU1FMaXRlSURC
QmFja2luZ1N0b3JlOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBJREJSZXNvdXJjZUlkZW50aWZp
ZXImIHQKICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDEsIGluZm8uaWRlbnRpZmllcigp
KSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05F
KSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCBzZWVkIGluaXRpYWwga2V5IGdl
bmVyYXRvciB2YWx1ZSBmb3IgT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAg
ICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiQ291bGQgbm90
IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJhdG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUgYmVjYXVz
ZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElE
QkVycm9yIHsgVW5rbm93bkVycm9yLCAiQ291bGQgbm90IHNlZWQgaW5pdGlhbCBrZXkgZ2VuZXJh
dG9yIHZhbHVlIGZvciBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogICAgIH0KQEAgLTEx
MzYsOCArMTEwMSw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6cmVuYW1lT2Jq
ZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8fCBz
cWwtPmJpbmRJbnQ2NCgyLCBvYmplY3RTdG9yZUlkZW50aWZpZXIpICE9IFNRTElURV9PSwogICAg
ICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExP
R19FUlJPUigiQ291bGQgbm90IHVwZGF0ZSBuYW1lIGZvciBvYmplY3Qgc3RvcmUgaWQgJSIgUFJJ
aTY0ICIgaW4gT2JqZWN0U3RvcmVJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRl
bnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVf
RlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJy
b3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFj
ZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3du
RXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIG9iamVjdCBzdG9yZSJfcyB9OwogICAgICAgICB9CiAg
ICAgfQpAQCAtMTIxOSw4ICsxMTgyLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjpjcmVhdGVJbmRleChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAg
ICAgfHwgc3FsLT5iaW5kSW50KDYsIGluZm8ubXVsdGlFbnRyeSgpKSAhPSBTUUxJVEVfT0sKICAg
ICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgTE9HX0VSUk9S
KCJDb3VsZCBub3QgYWRkIGluZGV4ICclcycgdG8gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIs
IGluZm8ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3Nx
bGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJy
b3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byBjcmVhdGUgaW5kZXggaW4gZGF0YWJhc2UgYmVjYXVz
ZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICByZXR1cm4gSURCRXJy
b3IgeyBVbmtub3duRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIl9z
IH07CiAgICAgfQogCkBAIC0xMzY5LDggKzEzMzAsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNr
aW5nU3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKGludDY0X3Qgb2JqZWN0U3RvcmVJRCwg
aQogICAgICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoNSwgcmVjb3JkSUQpICE9IFNRTElURV9P
SwogICAgICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAg
ICAgIExPR19FUlJPUigiQ291bGQgbm90IHB1dCBpbmRleCByZWNvcmQgZm9yIGluZGV4ICUiIFBS
SWk2NCAiIGluIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRhYmxlICglaSkg
LSAlcyIsIGluZGV4SUQsIG9iamVjdFN0b3JlSUQsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBt
X3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+
bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVy
cm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiRXJyb3IgcHV0dGluZyBpbmRleCByZWNvcmQgaW50
byBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAg
ICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtub3duRXJyb3IsICJFcnJvciBwdXR0aW5nIGlu
ZGV4IHJlY29yZCBpbnRvIGRhdGFiYXNlIl9zIH07CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDU2
LDggKzE0MTUsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZUluZGV4
KGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhYwogICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50NjQoMywgaW5kZXhJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAg
IHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1Io
IkNvdWxkIG5vdCB1cGRhdGUgbmFtZSBmb3IgaW5kZXggaWQgKCUiIFBSSWk2NCAiLCAlIiBQUklp
NjQgIikgaW4gSW5kZXhJbmZvIHRhYmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSWRlbnRpZmll
ciwgaW5kZXhJZGVudGlmaWVyLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigp
ID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5kZXggYmVjYXVzZSBubyBlbm91Z2gg
c3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5r
bm93bkVycm9yLCAiQ291bGQgbm90IHJlbmFtZSBpbmRleCJfcyB9OwogICAgICAgICB9CiAgICAg
fQpAQCAtMTc5NSw4ICsxNzUyLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjph
ZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZEJsb2IoMywgdmFsdWUuZGF0YSgpLmRhdGEoKS0+ZGF0YSgpLCB2YWx1
ZS5kYXRhKCkuZGF0YSgpLT5zaXplKCkpICE9IFNRTElURV9PSwogICAgICAgICAgICAgfHwgc3Fs
LT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgIExPR19FUlJPUigiQ291bGQg
bm90IHB1dCByZWNvcmQgZm9yIG9iamVjdCBzdG9yZSAlIiBQUklpNjQgIiBpbiBSZWNvcmRzIHRh
YmxlICglaSkgLSAlcyIsIG9iamVjdFN0b3JlSW5mby5pZGVudGlmaWVyKCksIG1fc3FsaXRlREIt
Pmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2coKSk7Ci0gICAgICAgICAgICBp
ZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiVW5hYmxlIHRvIHN0b3Jl
IHJlY29yZCBpbiBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFp
biJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiVW5h
YmxlIHRvIHN0b3JlIHJlY29yZCBpbiBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogCkBA
IC0xODI5LDggKzE3ODQsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJl
Y29yZChjb25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAg
ICAgIHx8IHNxbC0+YmluZFRleHQoMiwgdXJsKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgICAg
ICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgICAgIExPR19F
UlJPUigiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSIpOwotICAgICAg
ICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9PSBTUUxJVEVfRlVMTCkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAi
VW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3Vn
aCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIHJlY29yZCBpbiBkYXRhYmFz
ZSJfcyB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xODY0LDggKzE4MTcsNiBAQCBJ
REJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmFkZFJlY29yZChjb25zdCBJREJSZXNvdXJj
ZUlkZW50aWZpZXImIHRyYW5zYWN0aQogICAgICAgICAgICAgICAgIHx8IHNxbC0+YmluZFRleHQo
Miwgc3RvcmVkRmlsZW5hbWUpICE9IFNRTElURV9PSwogICAgICAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICAgICAgTE9HX0VSUk9SKCJVbmFi
bGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAgICAg
ICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJs
ZSB0byByZWNvcmQgQmxvYiBmaWxlIGluIGRhdGFiYXNlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNl
IGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJVbmFibGUgdG8gcmVjb3JkIEJsb2IgZmlsZSByZWNvcmQgaW4gZGF0YWJhc2Ui
X3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQwMSw4ICsyMzUyLDYgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRTZXRLZXlHZW5lcmF0b3JWYWx1
ZShpbnQ2NF90IG9iamVjdFN0b3IKICAgICAgICAgfHwgc3FsLT5iaW5kSW50NjQoMiwgdmFsdWUp
ICE9IFNRTElURV9PSwogICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewog
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB1cGRhdGUga2V5IGdlbmVyYXRvciB2YWx1ZSAo
JWkpIC0gJXMiLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9y
TXNnKCkpOwotICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZV
TEwpCi0gICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJF
cnJvciBzdG9yaW5nIG5ldyBrZXkgZ2VuZXJhdG9yIHZhbHVlIGluIGRhdGFiYXNlIGJlY2F1c2Ug
bm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgQ29uc3RyYWludEVycm9yLCAiRXJyb3Igc3RvcmluZyBuZXcga2V5IGdlbmVyYXRvciB2YWx1
ZSBpbiBkYXRhYmFzZSIgfTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3RvcmUuaApp
bmRleCBiYjkwN2JlMGJjNjU0OTRhNmJkOGM1MzMwNjM0YjhiNDEyNzhjZjlmLi4xOGY1OGU0ZjI5
YTZhZTE3OTZiM2ExZDQxNDRkNjc2NDFjMTlkZGQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdT
dG9yZS5oCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFNRTGl0ZUlEQkN1cnNvcjsKIGNsYXNzIFNR
TGl0ZUlEQkJhY2tpbmdTdG9yZSA6IHB1YmxpYyBJREJCYWNraW5nU3RvcmUgewogICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQ
QUw6OlNlc3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5k
bGVyJiwgdWludDY0X3QgcXVvdGEpOworICAgIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZShQQUw6OlNl
c3Npb25JRCwgY29uc3QgSURCRGF0YWJhc2VJZGVudGlmaWVyJiwgY29uc3QgU3RyaW5nJiBkYXRh
YmFzZVJvb3REaXJlY3RvcnksIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJik7
CiAgICAgCiAgICAgflNRTGl0ZUlEQkJhY2tpbmdTdG9yZSgpIGZpbmFsOwogCkBAIC04Miw3ICs4
Miw2IEBAIHB1YmxpYzoKICAgICBJREJPYmplY3RTdG9yZUluZm8qIGluZm9Gb3JPYmplY3RTdG9y
ZSh1aW50NjRfdCBvYmplY3RTdG9yZUlkZW50aWZpZXIpIGZpbmFsOwogICAgIHZvaWQgZGVsZXRl
QmFja2luZ1N0b3JlKCkgZmluYWw7CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90IHF1b3Rh
KSBmaW5hbCB7IG1fcXVvdGEgPSBxdW90YTsgfQogICAgIHVpbnQ2NF90IGRhdGFiYXNlc1NpemVG
b3JPcmlnaW4oKSBjb25zdCBmaW5hbDsKIAogICAgIGJvb2wgc3VwcG9ydHNTaW11bHRhbmVvdXNU
cmFuc2FjdGlvbnMoKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTEwLDkgKzEwOSw2IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIGZ1bGxEYXRhYmFzZVBhdGgoKSBjb25zdDsKICAgICBTdHJp
bmcgZnVsbERhdGFiYXNlRGlyZWN0b3J5V2l0aFVwZ3JhZGUoKTsKIAotICAgIHVpbnQ2NF90IHF1
b3RhRm9yT3JpZ2luKCkgY29uc3Q7Ci0gICAgdWludDY0X3QgbWF4aW11bVNpemUoKSBjb25zdDsK
LQogICAgIGJvb2wgZW5zdXJlVmFsaWRSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZh
bGlkSW5kZXhSZWNvcmRzVGFibGUoKTsKICAgICBib29sIGVuc3VyZVZhbGlkSW5kZXhSZWNvcmRz
SW5kZXgoKTsKQEAgLTIwNSw4ICsyMDEsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGFi
YXNlRGlyZWN0b3J5OwogCiAgICAgSURCQmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIm
IG1fdGVtcG9yYXJ5RmlsZUhhbmRsZXI7Ci0gICAgCi0gICAgdWludDY0X3QgbV9xdW90YTsKIAog
ICAgIFJlZjxJREJTZXJpYWxpemF0aW9uQ29udGV4dD4gbV9zZXJpYWxpemF0aW9uQ29udGV4dDsK
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNlLmNwcAppbmRleCA2ZjJjN2ViZjU5MWQwOGFiODgyYjY0
N2VkOTg0NzYzMmVjOGMxYjY5Li4xMzIzODFkYzM4ZDk0NjhiYTY0NTIyOTE3N2NmZGM4NjM3NGY3
ODE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
VW5pcXVlSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKQEAgLTIyOTksMTIgKzIyOTksNiBAQCB2
b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpmb3JnZXRFcnJvckNhbGxiYWNrKHVpbnQ2NF90IGNhbGxi
YWNrSWRlbnRpZmllcikKICAgICBtX2Vycm9yQ2FsbGJhY2tzLnJlbW92ZShjYWxsYmFja0lkZW50
aWZpZXIpOwogfQogCi12b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjpzZXRRdW90YSh1aW50NjRfdCBx
dW90YSkKLXsKLSAgICBpZiAobV9iYWNraW5nU3RvcmUpCi0gICAgICAgIG1fYmFja2luZ1N0b3Jl
LT5zZXRRdW90YShxdW90YSk7Ci19Ci0KIHZvaWQgVW5pcXVlSURCRGF0YWJhc2U6OmFib3J0VHJh
bnNhY3Rpb25Pbk1haW5UaHJlYWQoVW5pcXVlSURCRGF0YWJhc2VUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24pCiB7CiAgICAgdHJhbnNhY3Rpb24uc2V0UmVzdWx0KG1fYmFja2luZ1N0b3JlLT5hYm9y
dFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uLmluZm8oKS5pZGVudGlmaWVyKCkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRh
YmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmgKaW5kZXggMmU4MDg2MGUwODk1ZThjNWIzOGYwNzNlMjljYTAxY2FlMTRhMzdj
My4uODcxZTU5ZmQyZWJhNTE3ZjhlNmRlODk4YjNlNTBjMWE1YmIwOWVhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlEQkRhdGFiYXNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1VuaXF1ZUlE
QkRhdGFiYXNlLmgKQEAgLTExOCw4ICsxMTgsNiBAQCBwdWJsaWM6CiAKICAgICB1aW50NjRfdCBz
cGFjZVVzZWQoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0UXVvdGEodWludDY0X3QpOwotCiAgICAg
dm9pZCBmaW5pc2hBY3RpdmVUcmFuc2FjdGlvbnMoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwIGIvU291cmNl
L1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5jcHAKaW5kZXggYzc3NjdkMmNl
ZWQ3MWEwMDQxZTYwZjlhY2E4YmI4ZDIyMTcyNjNkNC4uOTAxNjk5YzY1MjFlZjY4YTA4NGQ3OTI0
ODU2ODdlNTVkOTMzM2Y4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vz
cy9OZXR3b3JrUHJvY2Vzcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9O
ZXR3b3JrUHJvY2Vzcy5jcHAKQEAgLTIyODMsMTMgKzIyODMsMTEgQEAgUmVmPElEQlNlcnZlcjo6
SURCU2VydmVyPiBOZXR3b3JrUHJvY2Vzczo6Y3JlYXRlSURCU2VydmVyKFBBTDo6U2Vzc2lvbklE
IHNlc3Npb24KICAgICAgICAgcGF0aCA9IG1faWRiRGF0YWJhc2VQYXRocy5nZXQoc2Vzc2lvbklE
KTsKICAgICB9CiAKLSAgICBhdXRvIHNlcnZlciA9IElEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVh
dGUoc2Vzc2lvbklELCBwYXRoLCAqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
dGhpcyldKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgYXV0byYgb3JpZ2luKSAtPiBT
dG9yYWdlUXVvdGFNYW5hZ2VyKiB7CisgICAgcmV0dXJuIElEQlNlcnZlcjo6SURCU2VydmVyOjpj
cmVhdGUoc2Vzc2lvbklELCBwYXRoLCAqdGhpcywgW3RoaXMsIHdlYWtUaGlzID0gbWFrZVdlYWtQ
dHIodGhpcyldKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwgY29uc3QgYXV0byYgb3JpZ2luKSAt
PiBTdG9yYWdlUXVvdGFNYW5hZ2VyKiB7CiAgICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuICZ0aGlzLT5zdG9yYWdlUXVvdGFN
YW5hZ2VyKHNlc3Npb25JRCwgb3JpZ2luKTsKICAgICB9KTsKLSAgICBzZXJ2ZXItPnNldFBlck9y
aWdpblF1b3RhKG1faWRiUGVyT3JpZ2luUXVvdGEpOwotICAgIHJldHVybiBzZXJ2ZXI7CiB9CiAK
IElEQlNlcnZlcjo6SURCU2VydmVyJiBOZXR3b3JrUHJvY2Vzczo6aWRiU2VydmVyKFBBTDo6U2Vz
c2lvbklEIHNlc3Npb25JRCkKQEAgLTIzODUsMTQgKzIzODMsNiBAQCB2b2lkIE5ldHdvcmtQcm9j
ZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKFBBTDo6U2Vzc2lvbklEIHNlc3Npb25JRCwg
U3RyaW5nJgogICAgICAgICAgICAgcG9zdFN0b3JhZ2VUYXNrKGNyZWF0ZUNyb3NzVGhyZWFkVGFz
aygqdGhpcywgJk5ldHdvcmtQcm9jZXNzOjplbnN1cmVQYXRoRXhpc3RzLCBpbmRleGVkRGF0YWJh
c2VEaXJlY3RvcnkpKTsKICAgICB9CiB9Ci0KLXZvaWQgTmV0d29ya1Byb2Nlc3M6OnNldElEQlBl
ck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewotICAgIG1faWRiUGVyT3JpZ2luUXVvdGEg
PSBxdW90YTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIHNlcnZlciA6IG1faWRiU2VydmVycy52YWx1
ZXMoKSkKLSAgICAgICAgc2VydmVyLT5zZXRQZXJPcmlnaW5RdW90YShxdW90YSk7Ci19CiAjZW5k
aWYgLy8gRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKIHZvaWQgTmV0d29ya1Byb2Nlc3M6OnN5
bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJv
Y2Vzcy5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCmlu
ZGV4IDMyMTFlOTBmNjUxODM2YTNiMDc2YzMyMmFhYjg2MzQ4MTdkNGM3M2EuLjJhYTUzYzMyZmM3
ZDQ3MmRlMWU1MzRhN2ZmOTc5MTc5NWY5MTFkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
TmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKQEAgLTI4MSw3ICsyODEsNiBAQCBwdWJsaWM6CiAg
ICAgV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXImIGlkYlNlcnZlcihQQUw6OlNlc3Npb25J
RCk7CiAgICAgLy8gV2ViQ29yZTo6SURCU2VydmVyOjpJREJCYWNraW5nU3RvcmVGaWxlSGFuZGxl
ci4KICAgICB2b2lkIGFjY2Vzc1RvVGVtcG9yYXJ5RmlsZUNvbXBsZXRlKGNvbnN0IFN0cmluZyYg
cGF0aCkgZmluYWw7Ci0gICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAj
ZW5kaWYKIAogICAgIHZvaWQgc3luY0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KCk+JiYpOwpAQCAtNTI4LDcgKzUyNyw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgU3RyaW5nPiBtX2lkYkRhdGFi
YXNlUGF0aHM7CiAgICAgSGFzaE1hcDxQQUw6OlNlc3Npb25JRCwgUmVmUHRyPFdlYkNvcmU6OklE
QlNlcnZlcjo6SURCU2VydmVyPj4gbV9pZGJTZXJ2ZXJzOwotICAgIHVpbnQ2NF90IG1faWRiUGVy
T3JpZ2luUXVvdGEgeyBXZWJDb3JlOjpJREJTZXJ2ZXI6OmRlZmF1bHRQZXJPcmlnaW5RdW90YSB9
OwogI2VuZGlmCiAKICAgICBEZXF1ZTxDcm9zc1RocmVhZFRhc2s+IG1fc3RvcmFnZVRhc2tzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5t
ZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3Mu
bWVzc2FnZXMuaW4KaW5kZXggYzU1M2E4ODlhNmUyMDhjNDhkM2QzNmZjNTk3YTJlOTFiN2U1MzQw
My4uNGZjMTkyMGFkYWI3NWRkYmNhZTU1NTM1MTBiOWMxNmZiNDdhZmQwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2Vz
LmluCkBAIC0xNjAsMTAgKzE2MCw2IEBAIG1lc3NhZ2VzIC0+IE5ldHdvcmtQcm9jZXNzIExlZ2Fj
eVJlY2VpdmVyIHsKICAgICBEaXNhYmxlU2VydmljZVdvcmtlclByb2Nlc3NUZXJtaW5hdGlvbkRl
bGF5KCkKICNlbmRpZgogCi0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgU2V0SURC
UGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi0jZW5kaWYKLQogICAgIFN5bmNMb2NhbFN0
b3JhZ2UoKSAtPiAoKSBTeW5jaHJvbm91cwogICAgIENsZWFyTGVnYWN5UHJpdmF0ZUJyb3dzaW5n
TG9jYWxTdG9yYWdlKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4
dC5jcHAKaW5kZXggZDgzYzZiOGY5ODA2OTYwMzYyNzZjYmFlZmQ1NDJkOGE2ZmQwY2QwMS4uYWZm
MDZlMWM5YTQ1ZDc5MTFhYmNiYWM4ZWRkNzBhNDQzY2MzN2MwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwCkBAIC02NjAsMTEgKzY2MCw2IEBAIHZvaWQg
V0tDb250ZXh0Q2xlYXJTdXBwb3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0UmVmKQog
I2VuZGlmCiB9CiAKLXZvaWQgV0tDb250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEoV0tDb250ZXh0
UmVmIGNvbnRleHRSZWYsIHVpbnQ2NF90IHF1b3RhKQotewotICAgIFdlYktpdDo6dG9JbXBsKGNv
bnRleHRSZWYpLT5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci19Ci0KIHZvaWQgV0tDb250
ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJTdGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRl
eHRSZWYpCiB7CiAgICAgV2ViS2l0Ojp0b0ltcGwoY29udGV4dFJlZiktPmNsZWFyQ3VycmVudE1v
ZGlmaWVyU3RhdGVGb3JUZXN0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQy9XS0NvbnRleHRQcml2YXRlLmgKaW5kZXggNThmMWE5MjA5OTEzNTRmMDcwZjY1YjlkM2Rh
MWJhMDdiZjgzNWMyMy4uZTk0MmI2MjlmNmJkNGJiZjRhZWUzYzJhYWVkYzg3YjQxYTExZmVkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUu
aApAQCAtMTE2LDggKzExNiw2IEBAIFdLX0VYUE9SVCBXS1Byb2Nlc3NJRCBXS0NvbnRleHRHZXRO
ZXR3b3JrUHJvY2Vzc0lkZW50aWZpZXIoV0tDb250ZXh0UmVmIGNvbnRleHQpCiBXS19FWFBPUlQg
dm9pZCBXS0NvbnRleHRBZGRTdXBwb3J0ZWRQbHVnaW4oV0tDb250ZXh0UmVmIGNvbnRleHQsIFdL
U3RyaW5nUmVmIGRvbWFpbiwgV0tTdHJpbmdSZWYgbmFtZSwgV0tBcnJheVJlZiBtaW1lVHlwZXMs
IFdLQXJyYXlSZWYgZXh0ZW5zaW9ucyk7CiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhclN1
cHBvcnRlZFBsdWdpbnMoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCi1XS19FWFBPUlQgdm9pZCBX
S0NvbnRleHRTZXRJREJQZXJPcmlnaW5RdW90YShXS0NvbnRleHRSZWYgY29udGV4dCwgdWludDY0
X3QgcXVvdGEpOwotCiBXS19FWFBPUlQgdm9pZCBXS0NvbnRleHRDbGVhckN1cnJlbnRNb2RpZmll
clN0YXRlRm9yVGVzdGluZyhXS0NvbnRleHRSZWYgY29udGV4dCk7CiAKIHR5cGVkZWYgdm9pZCAo
KldLQ29udGV4dFN5bmNMb2NhbFN0b3JhZ2VDYWxsYmFjaykodm9pZCogZnVuY3Rpb25Db250ZXh0
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNwcAppbmRleCBiOTc2
NzkxMDU0YjgyOTRkOWY3OWU5ZjBhYTRiOTZhYmExMTQzN2FiLi4xNWE2ZTExODFjY2JiODI2OTVi
ZTA1NjNmNDZiNzE2ZTY5N2RkYjkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9XZWJQcm9jZXNzUG9vbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJv
Y2Vzc1Bvb2wuY3BwCkBAIC0xODAyLDEzICsxODAyLDYgQEAgdm9pZCBXZWJQcm9jZXNzUG9vbDo6
c3luY05ldHdvcmtQcm9jZXNzQ29va2llcygpCiAgICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5z
eW5jQWxsQ29va2llcygpOwogfQogCi12b2lkIFdlYlByb2Nlc3NQb29sOjpzZXRJREJQZXJPcmln
aW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
LSAgICBlbnN1cmVOZXR3b3JrUHJvY2VzcygpLnNlbmQoTWVzc2FnZXM6Ok5ldHdvcmtQcm9jZXNz
OjpTZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSksIDApOwotI2VuZGlmCi19Ci0KIHZvaWQgV2Vi
UHJvY2Vzc1Bvb2w6OnN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgpPiYm
IGNvbXBsZXRpb25IYW5kbGVyKQogewogICAgIHNlbmRTeW5jVG9OZXR3b3JraW5nUHJvY2VzcyhN
ZXNzYWdlczo6TmV0d29ya1Byb2Nlc3M6OlN5bmNMb2NhbFN0b3JhZ2UoKSwgTWVzc2FnZXM6Ok5l
dHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlOjpSZXBseSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCmluZGV4IGVkNmMyOWZmMzI4Mzg5Njc2OTEwYThmZmZm
ZmE0MmRhY2Y0NDEyOGYuLjQwYmVhODYxYTJlNjcwMjg0NjIyMDg3YzAwM2IzZTg4YTZhY2MwM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaApAQCAtMzIwLDggKzMy
MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZCgpPiYmIGNhbGxiYWNrKTsKICAgICB2b2lkIGNsZWFyTGVnYWN5UHJpdmF0ZUJyb3dz
aW5nTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjYWxsYmFjayk7CiAK
LSAgICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIHZvaWQgc2V0
U2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcoYm9vbCB2YWx1ZSkg
eyBtX3Nob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7
IH0KICAgICBib29sIHNob3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5n
KCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9y
VGVzdGluZzsgfQogICAgIHZvaWQgc2V0U2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vzc0xhdW5j
aEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsgbV9zaG91bGRNYWtlTmV4dE5ldHdvcmtQcm9j
ZXNzTGF1bmNoRmFpbEZvclRlc3RpbmcgPSB2YWx1ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwIGIvU291cmNlL1dlYktp
dExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuY3BwCmluZGV4IDVlZTVhN2IyOWJl
ZjQ1Mzk5ZGZkNzhiMzEyM2MwZTBiMmZjOWFjYTEuLmNhYTQ5NjU4ZGI1ZGY4MzM4NDA1MDdhZjQ2
MGI2NDNjODJjMjk0M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9X
ZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2Uv
V2ViRGF0YWJhc2VQcm92aWRlci5jcHAKQEAgLTQ1LDE3ICs0NSw5IEBAIFdlYkRhdGFiYXNlUHJv
dmlkZXI6On5XZWJEYXRhYmFzZVByb3ZpZGVyKCkKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFT
RSkKIFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlvblRvU2VydmVyJiBXZWJEYXRhYmFz
ZVByb3ZpZGVyOjppZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJiBzZXNzaW9uSUQpCiB7Ci0gICAgYXV0byByZXN1bHQgPSBtX2lkYlNlcnZlck1hcC5h
ZGQoc2Vzc2lvbklELnNlc3Npb25JRCgpLCBudWxscHRyKTsKLSAgICBpZiAocmVzdWx0LmlzTmV3
RW50cnkpIHsKLSAgICAgICAgaWYgKHNlc3Npb25JRC5pc0VwaGVtZXJhbCgpKQotICAgICAgICAg
ICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6
Y3JlYXRlKHNlc3Npb25JRCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdC5pdGVy
YXRvci0+dmFsdWUgPSBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9u
SUQsIGluZGV4ZWREYXRhYmFzZURpcmVjdG9yeVBhdGgoKSk7Ci0gICAgfQotCi0gICAgcmVzdWx0
Lml0ZXJhdG9yLT52YWx1ZS0+aWRiU2VydmVyKCkuc2V0UGVyT3JpZ2luUXVvdGEobV9pZGJQZXJP
cmlnaW5RdW90YSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+Y29ubmVj
dGlvblRvU2VydmVyKCk7CisgICAgcmV0dXJuIG1faWRiU2VydmVyTWFwLmVuc3VyZShzZXNzaW9u
SUQuc2Vzc2lvbklEKCksIFsmc2Vzc2lvbklEXSB7CisgICAgICAgIHJldHVybiBzZXNzaW9uSUQu
aXNFcGhlbWVyYWwoKSA/IFdlYkNvcmU6OkluUHJvY2Vzc0lEQlNlcnZlcjo6Y3JlYXRlKHNlc3Np
b25JRCkgOiBXZWJDb3JlOjpJblByb2Nlc3NJREJTZXJ2ZXI6OmNyZWF0ZShzZXNzaW9uSUQsIGlu
ZGV4ZWREYXRhYmFzZURpcmVjdG9yeVBhdGgoKSk7CisgICAgfSkuaXRlcmF0b3ItPnZhbHVlLT5j
b25uZWN0aW9uVG9TZXJ2ZXIoKTsKIH0KIAogdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpkZWxl
dGVBbGxEYXRhYmFzZXMoKQpAQCAtNjQsMTIgKzU2LDQgQEAgdm9pZCBXZWJEYXRhYmFzZVByb3Zp
ZGVyOjpkZWxldGVBbGxEYXRhYmFzZXMoKQogICAgICAgICBzZXJ2ZXItPmlkYlNlcnZlcigpLmNs
b3NlQW5kRGVsZXRlRGF0YWJhc2VzTW9kaWZpZWRTaW5jZSgtV2FsbFRpbWU6OmluZmluaXR5KCks
IFtdIHsgfSk7CiB9CiAKLXZvaWQgV2ViRGF0YWJhc2VQcm92aWRlcjo6c2V0SURCUGVyT3JpZ2lu
UXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9pZGJQZXJPcmlnaW5RdW90YSA9IHF1b3Rh
OwotCi0gICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2lkYlNlcnZlck1hcC52YWx1ZXMoKSkKLSAg
ICAgICAgc2VydmVyLT5pZGJTZXJ2ZXIoKS5zZXRQZXJPcmlnaW5RdW90YShxdW90YSk7Ci19Ci0K
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFi
YXNlUHJvdmlkZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVBy
b3ZpZGVyLmgKaW5kZXggNTIyMjMzMDliMzliZTNlY2FjZWI2OWZjNjlmMjAwN2UyYzliM2VkYS4u
M2Y1MDZkNzZjM2JmNzQ1MzRmMzYzZGYyYTQ3ZmVjYmUzN2UxMDEyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFiYXNlUHJvdmlkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCkBAIC00NCw4ICs0
NCw2IEBAIHB1YmxpYzoKICAgICBXZWJDb3JlOjpJREJDbGllbnQ6OklEQkNvbm5lY3Rpb25Ub1Nl
cnZlciYgaWRiQ29ubmVjdGlvblRvU2VydmVyRm9yU2Vzc2lvbihjb25zdCBQQUw6OlNlc3Npb25J
RCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBkZWxldGVBbGxEYXRhYmFzZXMoKTsKLQotICAgIHZv
aWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwogI2VuZGlmCiAKIHByaXZhdGU6CkBA
IC01NSw2ICs1Myw1IEBAIHByaXZhdGU6CiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
ICAgICBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8V2ViQ29yZTo6SW5Qcm9jZXNzSURCU2VydmVy
Pj4gbV9pZGJTZXJ2ZXJNYXA7Ci0gICAgdWludDY0X3QgbV9pZGJQZXJPcmlnaW5RdW90YSB7IFdl
YkNvcmU6OklEQlNlcnZlcjo6ZGVmYXVsdFBlck9yaWdpblF1b3RhIH07CiAjZW5kaWYKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRhdGFiYXNlTWFu
YWdlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5h
Z2VyLm1tCmluZGV4IDZkNjJhOThiOTdmMmVjMjQxNGM3ZGIxYWQzZTcwZjJkMGRmMTNlZTQuLjcz
ZTIzMzFlYmI2Y2ZhZWRlZWE0YzFkMmYxMmFkMGJhZDUyMjY1M2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyLm1tCkBAIC0x
NTcsMTMgKzE1Nyw2IEBAIC0gKHZvaWQpZGVsZXRlQWxsSW5kZXhlZERhdGFiYXNlcwogI2VuZGlm
CiB9CiAKLS0gKHZvaWQpc2V0SURCUGVyT3JpZ2luUXVvdGE6KHVpbnQ2NF90KXF1b3RhCi17Ci0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgV2ViRGF0YWJhc2VQcm92aWRlcjo6c2lu
Z2xldG9uKCkuc2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwotI2VuZGlmCi19Ci0KICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQogCiBzdGF0aWMgYm9vbCBpc0ZpbGVIaWRkZW4oTlNTdHJpbmcg
KmZpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9TdG9yYWdlL1dlYkRh
dGFiYXNlTWFuYWdlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2Uv
V2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oCmluZGV4IDIxNzI0MTYyYjk1Mzg4YTRhMjZiYTll
YzRkNmM1MDRmNDVmNjQwNGEuLjkzOWI0Y2Y3ZTA1NzQyZDM2ZTEzMDc3YzBjYTY2MzJmZjNlNWRj
ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2ViRGF0YWJh
c2VNYW5hZ2VyUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2Uv
V2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oCkBAIC03MCw3ICs3MCw2IEBAIGV4dGVybiBDRlN0
cmluZ1JlZiBXZWJEYXRhYmFzZU9yaWdpbnNEaWRDaGFuZ2VOb3RpZmljYXRpb247CiAKIC8vIEZv
ciBEdW1wUmVuZGVyVHJlZSBzdXBwb3J0IG9ubHkKIC0gKHZvaWQpZGVsZXRlQWxsSW5kZXhlZERh
dGFiYXNlczsKLS0gKHZvaWQpc2V0SURCUGVyT3JpZ2luUXVvdGE6KHVpbnQ2NF90KXF1b3RhOwog
CiAjaWYgVEFSR0VUX09TX0lQSE9ORQogKyAodm9pZClzY2hlZHVsZUVtcHR5RGF0YWJhc2VSZW1v
dmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2Vi
RGF0YWJhc2VNYW5hZ2VyLmlkbCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMv
SVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKaW5kZXggZTgxZDQ5Mzg1OTJkNjgyMGIyMTFhMmVmYjUz
OWI2NmNlNmQxNTJjNC4uN2FlYmNhZWY3MjBhYWEyMjZjMzg0NTBhNjQ5ZDcwNzdkNmJjYmVjYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRGF0YWJh
c2VNYW5hZ2VyLmlkbAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJEYXRhYmFzZU1hbmFnZXIuaWRsCkBAIC02OSw1ICs2OSw0IEBAIGludGVyZmFjZSBJV2ViRGF0
YWJhc2VNYW5hZ2VyIDogSVVua25vd24KIGludGVyZmFjZSBJV2ViRGF0YWJhc2VNYW5hZ2VyMiA6
IElXZWJEYXRhYmFzZU1hbmFnZXIKIHsKICAgICBIUkVTVUxUIGRlbGV0ZUFsbEluZGV4ZWREYXRh
YmFzZXMoKTsKLSAgICBIUkVTVUxUIHNldElEQlBlck9yaWdpblF1b3RhKFtpbl0gdW5zaWduZWQg
bG9uZyBsb25nIHF1b3RhKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYkRhdGFiYXNlTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRh
YmFzZU1hbmFnZXIuY3BwCmluZGV4IDQ0NTQyYTFkYTEwM2FhNDQ3NjNlOTRkNGZhYmE4NjRlZDAy
ZmM3ZjUuLjE2MjdlYzVmYTI2YmY1OTAxZDA1OTNiNWExODM5Njk0NzkyMTkwYjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcApAQCAtMzQ2LDE0
ICszNDYsNiBAQCBIUkVTVUxUIFdlYkRhdGFiYXNlTWFuYWdlcjo6ZGVsZXRlQWxsSW5kZXhlZERh
dGFiYXNlcygpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViRGF0YWJhc2VNYW5h
Z2VyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpCi17Ci0j
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0gICAgV2ViRGF0YWJhc2VQcm92aWRlcjo6c2lu
Z2xldG9uKCkuc2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwotI2VuZGlmCi0gICAgcmV0dXJu
IFNfT0s7Ci19Ci0KIGNsYXNzIERpZE1vZGlmeU9yaWdpbkRhdGEgewogICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKERpZE1vZGlmeU9yaWdpbkRh
dGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAppbmRl
eCBlMGZlM2UzYjg4MWI2MTNlOGIwZjk3NmE4NWNhZDg0OWJiNzI3NDc3Li41MWI2NDVmNzI4NDc1
ZDE2NjRhOWFmYWRkZGJiOTEwZDU4YmU5YjVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJEYXRhYmFzZU1hbmFnZXIuaApAQCAtNTYsNyArNTYsNiBAQCBwdWJsaWM6CiAKICAgICAv
LyBJV2ViRGF0YWJhc2VNYW5hZ2VyMgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBkZWxldGVBbGxJbmRleGVkRGF0YWJhc2VzKCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyk7
CiAKICAgICAvLyBEYXRhYmFzZU1hbmFnZXJDbGllbnQKICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRNb2RpZnlPcmlnaW4oY29uc3QgV2ViQ29yZTo6U2VjdXJpdHlPcmlnaW5EYXRhJik7CmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjczYmJj
YzA5MTRkM2I3MDg5YTU3MzFiMjhjOGFjMWZiMDY3Mjc3Ny4uYjdkYjlkNDBkNDQ2ZjhjZGVhZTg2
NDExM2M2NzA4YzE3Yjc0MmE1YiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACisyMDE5LTA4LTE2ICBTaWh1aSBMaXUgIDxz
aWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQor
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNw
cDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgIChzZXRJ
REJQZXJPcmlnaW5RdW90YUNhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9UZXN0UnVubmVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tOgorICAgICAgICAocnVuVGVzdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL1Rlc3RSdW5uZXJNYWMubW06CisgICAgICAgIChUZXN0UnVubmVyOjpzZXRJREJQZXJPcmln
aW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5u
ZXJXaW4uY3BwOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvVGVzdFJ1bm5lci5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdFJ1bm5lcjo6c2V0SURCUGVy
T3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRv
Q29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpzZXRJREJQ
ZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZVN5bmNocm9ub3Vz
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTktMDgtMTYgIFRpbW90aHkgSGF0Y2hl
ciAgPHRpbW90aHlAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIyNDg0MzYpOiBX
S1dlYlZpZXcgZG9lc27igJl0IHJlc3BlY3QgaXNPcGFxdWUgc2V0dGluZyBpbiBOSUIuCmRpZmYg
LS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IDkwYzY0YzM2MTRjZGM0MmRiNmY0OTQyYmRl
MWFkMTMwZmQxZmQ5Y2IuLmU4MTdhNTczYTU4ZDE1OWQ0Y2YyMzQ5ODJjY2EwNGRjZDY0YjYwNGEg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCisrKyBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCkBAIC04OTMsMjAgKzg5Myw2IEBAIHN0
YXRpYyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNv
bnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRJREJQZXJPcmlnaW5RdW90YUNhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRDb3Vu
dCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKLSAg
ICAKLSAgICBhdXRvKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpTT2Jq
ZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgZG91YmxlIHF1b3RhID0gSlNW
YWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgbnVsbHB0cik7Ci0gICAgaWYgKCFz
dGQ6OmlzbmFuKHF1b3RhKSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0SURCUGVyT3JpZ2luUXVv
dGEoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHF1b3RhKSk7Ci0gICAgCi0gICAgcmV0dXJuIEpTVmFs
dWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZXREZWZl
cnNMb2FkaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0
aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3Qg
SlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIGlm
IChhcmd1bWVudENvdW50IDwgMSkKQEAgLTIyMjAsNyArMjIwNiw2IEBAIEpTU3RhdGljRnVuY3Rp
b24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgInNldFJlamVjdHNQ
cm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIsIHNl
dFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldEhhbmRsZXNBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZXMiLCBzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKICAgICAgICAgeyAic2V0SWNvbkRhdGFiYXNlRW5hYmxlZCIsIHNldEljb25EYXRh
YmFzZUVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRJREJQZXJPcmlnaW5R
dW90YSIsIHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQiLCBzZXRBdXRvbWF0aWNMaW5rRGV0ZWN0
aW9uRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1haW5GcmFtZUlzRmly
c3RSZXNwb25kZXIiLCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAic2V0TW9ja0RldmljZU9yaWVudGF0aW9uIiwgc2V0TW9ja0RldmljZU9y
aWVudGF0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaAppbmRl
eCA4MTQ1MjQ3ZjVlMTdjZTgxNjEzMmNkZTE2MmZkNTlmOTIzZWZiNTBjLi4yOWE0ZWYyZTc4Yjc2
MTFiZTFiYmI2MWNkYTExZGUzNTBhYzkyNzQyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5o
CkBAIC0xMDYsNyArMTA2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RG9tYWluUmVsYXhhdGlv
bkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2NoZW1l
KTsKICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAgdm9pZCBzZXRJY29uRGF0
YWJhc2VFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0
X3QpOwogICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZsYWcp
OwogICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCBmbGFnKTsK
ICAgICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKTsKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCAyZTkzOTdmZjU5NDky
NTAwZmIwODY4NzFjOGFmN2M2ZjE2NjlhYmY0Li42NGRiMWQxN2Y5YmM5Y2I4Y2U2ZDgyZjliNzdk
YmYzODc1YWNhMGNhIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVl
Lm1tCkBAIC0yMDM1LDcgKzIwMzUsNiBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0cmlu
ZyYgaW5wdXRMaW5lKQogICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbEFwcGxpY2F0aW9uQ2FjaGVz
KCk7CiAKICAgICBnVGVzdFJ1bm5lci0+Y2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAgICBnVGVzdFJ1
bm5lci0+c2V0SURCUGVyT3JpZ2luUXVvdGEoNTAgKiBNQik7CiAKICAgICBpZiAoZGlzYWxsb3dl
ZFVSTHMpCiAgICAgICAgIENGU2V0UmVtb3ZlQWxsVmFsdWVzKGRpc2FsbG93ZWRVUkxzKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggYzAxYmRhNTY2ZTUx
YmZhYTZmMDc5YjExMjk0NWY5NTYyZWZjMTYxNS4uMWY5NjBhYWUyZGQwM2UxNjBiMTI0Yzc5MjIz
ZTk1NmFhZGNlYTc4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RS
dW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMu
bW0KQEAgLTQzOSwxMSArNDM5LDYgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1b3Rh
KHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKICAgICBbb3JpZ2luIHJlbGVhc2VdOwogfQogCi12
b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotewot
ICAgIFtbV2ViRGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcl0gc2V0SURC
UGVyT3JpZ2luUXVvdGE6cXVvdGFdOwotfQotCiB2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygpCiB7
CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gZ29CYWNrXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBhMjg2ZjIzZjdlZDc2OWJlY2VhZmUyMDI2ZTI5
MzkyZjdlNDA5YjY4Li45NWFkMDIyZmNiNDI2Zjg2ODQ3OWJlZjI4MWNiZjM0YTk4MTdmZDZkIDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAKKysr
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCkBAIC0xNzIsMjIg
KzE3Miw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogICAgIGRhdGFi
YXNlTWFuYWdlcjItPmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKTsKIH0KIAotdm9pZCBUZXN0
UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBDT01Q
dHI8SVdlYkRhdGFiYXNlTWFuYWdlcj4gZGF0YWJhc2VNYW5hZ2VyOwotICAgIENPTVB0cjxJV2Vi
RGF0YWJhc2VNYW5hZ2VyPiB0bXBEYXRhYmFzZU1hbmFnZXI7Ci0gICAgaWYgKEZBSUxFRChXZWJL
aXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJEYXRhYmFzZU1hbmFnZXIsIDAsIElJRF9JV2ViRGF0
YWJhc2VNYW5hZ2VyLCAodm9pZCoqKSZ0bXBEYXRhYmFzZU1hbmFnZXIpKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChGQUlMRUQodG1wRGF0YWJhc2VNYW5hZ2VyLT5zaGFyZWRXZWJEYXRhYmFz
ZU1hbmFnZXIoJmRhdGFiYXNlTWFuYWdlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDT01Q
dHI8SVdlYkRhdGFiYXNlTWFuYWdlcjI+IGRhdGFiYXNlTWFuYWdlcjI7Ci0gICAgaWYgKEZBSUxF
RChkYXRhYmFzZU1hbmFnZXItPlF1ZXJ5SW50ZXJmYWNlKCZkYXRhYmFzZU1hbmFnZXIyKSkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGRhdGFiYXNlTWFuYWdlcjItPnNldElEQlBlck9yaWdpblF1
b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJZGxl
SW50ZXJ2YWwoZG91YmxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuIFJlcXVpcmVzIG5v
bi1leGlzdGFudCAob24gV2luZG93cykgV2ViU3RvcmFnZU1hbmFnZXIKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rlc3RS
dW5uZXIuaWRsCmluZGV4IDQzMjllYzE0NDMwZjkxMzBhYWQ5YjVlZGI1ZjZjZDZiMzZlODE2NzMu
LjA3NTA5NjI4OTY3ZmZmY2YyMzMyYmRlZWMzMzRmMmRmNTkxZDQ3YTIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5lci5p
ZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9U
ZXN0UnVubmVyLmlkbApAQCAtMTQ3LDkgKzE0Nyw2IEBAIGludGVyZmFjZSBUZXN0UnVubmVyIHsK
ICAgICBhdHRyaWJ1dGUgZG91YmxlIGRhdGFiYXNlRGVmYXVsdFF1b3RhOwogICAgIGF0dHJpYnV0
ZSBkb3VibGUgZGF0YWJhc2VNYXhRdW90YTsKIAotICAgIC8vIEluZGV4ZWREQiBBUEkKLSAgICB2
b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7Ci0KICAg
ICAvLyBBcHBsaWNhdGlvbiBDYWNoZSBBUEkKICAgICB2b2lkIGNsZWFyQWxsQXBwbGljYXRpb25D
YWNoZXMoKTsKICAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9uZyBs
b25nIHNpemUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggNTI3NTY2ZGMzZjg0YTdkYjQyMjMzNDdmZDYxYzNiMjUz
ODZlNGY3My4uOTAxOWJjNDcxMjZiYzNhMjBhNjhlYzc4ZjFiYThmZmY3NjI1MzVkYiAxMDA2NDQK
LS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmNw
cAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIu
Y3BwCkBAIC0zNzQsMTMgKzM3NCw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNyZWFz
ZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCiAgICAgbV9kaXNhbGxvd0luY3JlYXNlRm9yQXBw
bGljYXRpb25DYWNoZVF1b3RhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRJREJQ
ZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0cmlu
Z1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJTZXRJREJQZXJPcmlnaW5RdW90YSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJlZj4g
bWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHF1b3RhKSk7Ci0gICAgV0tCdW5k
bGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5idW5k
bGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsKLX0K
LQogc3RhdGljIGlubGluZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRSZWYg
Y29udGV4dCwgV0tBcnJheVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3VudCA9
IFdLQXJyYXlHZXRTaXplKHN0cmluZ3MpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBmNTczNmVhYWE4YTMzYmU3MTc4ZDg3
M2I5YzdiMWUyNTFhMzkxMWRjLi4xNDZlOTFmNDc4NWJmZDA3YjY2MTAzNzNiYTA3Yjc4OTJkN2Rh
ZjZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rl
c3RSdW5uZXIuaApAQCAtMTc2LDkgKzE3Niw2IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBkb21D
YWNoZVNpemUoSlNTdHJpbmdSZWYgb3JpZ2luKTsKICAgICB2b2lkIHNldEFsbG93U3RvcmFnZVF1
b3RhSW5jcmVhc2UoYm9vbCk7CiAKLSAgICAvLyBJbmRleGVkREIKLSAgICB2b2lkIHNldElEQlBl
ck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIC8vIEZhaWxlZCBsb2FkIGNvbmRpdGlvbiB0
ZXN0aW5nCiAgICAgdm9pZCBmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24oKTsKIApkaWZmIC0tZ2l0
IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBlYThhZmI1ZjRlZjg0ZTRhMmRk
ZjI4NjRhMWFlOWY3NzVmY2UzNzQ3Li43YWY0ODdiZjY5MDg2MDBhYTEwNjMwMzQwNzliN2M1ZWQ4
ZjY5MTEyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAt
OTM5LDggKzkzOSw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAgICAgYXV0byB3ZWJzaXRl
RGF0YVN0b3JlID0gV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShUZXN0Q29udHJvbGxlcjo6
c2luZ2xldG9uKCkuY29udGV4dCgpKTsKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckFsbERl
dmljZU9yaWVudGF0aW9uUGVybWlzc2lvbnMod2Vic2l0ZURhdGFTdG9yZSk7CiAKLSAgICBzZXRJ
REJQZXJPcmlnaW5RdW90YSg1MCAqIE1CKTsKLQogICAgIGNsZWFySW5kZXhlZERhdGFiYXNlcygp
OwogICAgIGNsZWFyTG9jYWxTdG9yYWdlKCk7CiAKQEAgLTMwNjYsMTEgKzMwNjQsNiBAQCB2b2lk
IFRlc3RDb250cm9sbGVyOjpjbGVhckRPTUNhY2hlcygpCiAgICAgcnVuVW50aWwoY29udGV4dC5k
b25lLCBub1RpbWVvdXQpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJREJQZXJPcmln
aW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS0NvbnRleHRTZXRJREJQZXJPcmlnaW5R
dW90YShwbGF0Zm9ybUNvbnRleHQoKSwgcXVvdGEpOwotfQotCiBzdHJ1Y3QgU3RvcmFnZVZvaWRD
YWxsYmFja0NvbnRleHQgewogICAgIGV4cGxpY2l0IFN0b3JhZ2VWb2lkQ2FsbGJhY2tDb250ZXh0
KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgICAgICA6IHRlc3RDb250cm9sbGVyKGNv
bnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXggYTVh
ZTU2ZWQ2ODk3NTc4OGRiMWQwM2Y5NWRhMDY2OTFlNDk5MTUzNi4uMzQwMGY0Y2I1MWI4ODk1MjFk
NDA5NjI5YmExMWJjMjQ2MzAxZjViNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRy
b2xsZXIuaApAQCAtMjc1LDggKzI3NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxsb3dT
dG9yYWdlUXVvdGFJbmNyZWFzZShib29sKTsKIAotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVv
dGEodWludDY0X3QpOwotCiAgICAgYm9vbCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92
aXNpb25hbE5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjsgfQogICAgIHZvaWQgY2xlYXJEaWRSZWNlaXZl
U2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSB7IG1fZGlkUmVjZWl2ZVNl
cnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uID0gZmFsc2U7IH0KIApkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCBhNWFlYTIxYzA5MDAwNTll
NzlmYTdkMTJiZmExNWZkODE5ZDE2YjZhLi4yYTkxMjNlZjE3MzcxMThkNjNhMTI1MzFiZGM4NTNh
YTJjYjcxMzdhIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApA
QCAtMTUxNCwxMyArMTUxNCw2IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiU2V0SURCUGVyT3JpZ2luUXVvdGEiKSkgewotICAgICAgICBBU1NF
UlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwotICAg
ICAgICBXS1VJbnQ2NFJlZiBxdW90YSA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNzYWdl
Qm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmln
aW5RdW90YShXS1VJbnQ2NEdldFZhbHVlKHF1b3RhKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRy
OwotICAgIH0KLQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VO
YW1lLCAiSW5qZWN0VXNlclNjcmlwdCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRCht
ZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLU3RyaW5nUmVm
IHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDAxZDkzNTExN2FmNzdkMTFiMmRiYjk5ODViN2JlMmRkODYwM2NmMmIuLmEwNjZk
YWQxNjRmZDU1OTNkZGIzOGUxNmRhNGMwZjZkYzJkZmE1NzMgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1h
bmNlVGVzdHMvQ2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTktMDgtMTYgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS81NDIwMTc4Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIEluZGV4ZWREQi9sYXJnZS1iaW5hcnkta2V5cy5odG1sOgorICAgICAgICAqIElu
ZGV4ZWREQi9sYXJnZS1zdHJpbmcta2V5cy5odG1sOgorCiAyMDE5LTA4LTE0ICBLZWl0aCBSb2xs
aW4gIDxrcm9sbGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgc3VwcG9ydCBmb3IgbWFj
T1MgPCAxMC4xMwpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Ut
YmluYXJ5LWtleXMuaHRtbCBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWJpbmFy
eS1rZXlzLmh0bWwKaW5kZXggZTRmZjRiZjVmZmYwZWM5ZThjNTJjYjEyMmRjYTlhNjM5OGQzOTJm
NS4uNzJhNzFjZmFiM2IyZDQwNWEzNmZhZTJhOWUxMTJjYjVhMDMwNjgyNCAxMDA2NDQKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtYmluYXJ5LWtleXMuaHRtbAorKysgYi9Q
ZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1iaW5hcnkta2V5cy5odG1sCkBAIC03LDEw
ICs3LDYgQEAKIHZhciBpdGVyYXRpb25Db3VudCA9IDIwOwogdmFyIG51bWJlckRlbGV0ZWQgPSAw
OwogCi12YXIgcXVvdGEgPSA1MDAgKiAxMDI0ICogMTAyNDsgLy81MDBNQgotaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIuc2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwot
CiAvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhlIHRlc3QgYWhlYWQgb2YgdGltZS4KIHZh
ciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1zdHJpbmcta2V5cy1EQi0iOwogZm9yICh2YXIgaSA9
IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkgewpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5nLWtleXMuaHRtbCBiL1BlcmZvcm1hbmNlVGVz
dHMvSW5kZXhlZERCL2xhcmdlLXN0cmluZy1rZXlzLmh0bWwKaW5kZXggMWU0MDZjYjI0Y2NjNTAy
OWIwMjYxOWRlNGEyYzc1OWRkODAzZmQ4Yy4uOTE2ZDkwYWVlZDdmYjFmNDY1NTZiNTRiYWMxNDg5
ZTA3MDhjYzQxZiAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2Ut
c3RyaW5nLWtleXMuaHRtbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1z
dHJpbmcta2V5cy5odG1sCkBAIC03LDEwICs3LDYgQEAKIHZhciBpdGVyYXRpb25Db3VudCA9IDIw
OwogdmFyIG51bWJlckRlbGV0ZWQgPSAwOwogCi12YXIgcXVvdGEgPSA1MDAgKiAxMDI0ICogMTAy
NDsgLy81MDBNQgotaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgIHRlc3RSdW5uZXIuc2V0SURC
UGVyT3JpZ2luUXVvdGEocXVvdGEpOwotCiAvLyBEZWxldGUgYWxsIGRhdGFiYXNlcyBmb3IgdGhl
IHRlc3QgYWhlYWQgb2YgdGltZS4KIHZhciBkYXRhYmFzZVByZWZpeCA9ICJsYXJnZS1zdHJpbmct
a2V5cy1EQi0iOwogZm9yICh2YXIgaSA9IDA7IGkgPCBpdGVyYXRpb25Db3VudCArIDE7ICsraSkg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376693</attachid>
            <date>2019-08-19 09:38:24 -0700</date>
            <delta_ts>2019-08-19 10:12:43 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-196545-20190819093824.patch</filename>
            <type>text/plain</type>
            <size>49081</size>
            <attacher name="Sihui Liu">sihui_liu</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDJiMmIwZTFkMGIxZDRh
MzE1YjExOTk3MzczMTU2MzljYzE1ODQwMS4uNzJhZDI3YmQyMTVjZDQyZGI3MGNkZTRkZjJkMDAx
NmIwN2IzZjRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDE5LTA4LTE5ICBTaWh1
aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lm
aWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5NjU0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKworICAgICAgICBSZS1sYW5kIHIyNDg1MjYgd2l0aCBm
aXggZm9yIHBlcmZvcm1hbmNlIHRlc3RzLgorCisgICAgICAgIE5vIGNoYW5nZSBvZiBiZWhhdmlv
ciBhcyBJREIgc3BlY2lmaWMgcXVvdGEgaXMgbm8gbG9uZ2VyIHVzZWQuCisgICAgICAgIEluc3Rl
YWQgYSBnbG9iYWwgcXVvdGEgaXMgdXNlZC4gVGhpcyBxdW90YSBjdXJyZW50bHkgaGFuZGxlcyBJ
REIgYW5kIENhY2hlIEFQSS4KKworICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9J
REJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURC
U2VydmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyOjpjcmVh
dGVCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpJREJTZXJ2ZXI6
OnNldFBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvSURCU2VydmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OklEQlNl
cnZlcjo6cGVyT3JpZ2luUXVvdGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaDoKKyAgICAgICAgKiBNb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxpdGVJREJCYWNr
aW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OmJlZ2luVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpT
UUxpdGVJREJCYWNraW5nU3RvcmU6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVPYmplY3RTdG9yZSk6
CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3Jl
YXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5n
U3RvcmU6OnVuY2hlY2tlZFB1dEluZGV4UmVjb3JkKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlNl
cnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpJREJTZXJ2ZXI6OlNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRkUmVjb3JkKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6U1FMaXRlSURCQmFja2luZ1N0b3JlOjp1bmNoZWNrZWRT
ZXRLZXlHZW5lcmF0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJTZXJ2ZXI6OlNRTGl0
ZUlEQkJhY2tpbmdTdG9yZTo6cXVvdGFGb3JPcmlnaW4gY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SURCU2VydmVyOjpTUUxpdGVJREJCYWNraW5nU3RvcmU6Om1heGltdW1TaXpl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmg6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvc2VydmVy
L1VuaXF1ZUlEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQlNlcnZlcjo6VW5p
cXVlSURCRGF0YWJhc2U6OnNldFF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBNb2R1bGVzL2lu
ZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuaDoKKwogMjAxOS0wOC0xOSAgWW91ZW5u
IEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFNlc3Npb25JRDo6
ZW1wdHlTZXNzaW9uSUQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBjNWQ5YjUzNjA1MzQ3YTdhOGRhMDUxMTg0MzFh
YzY1MzkyNDcxYTI0Li5kZjczYjA5ZWQ2Y2EyMjZmYjRiOGI5YzYxZWExZTk2MjFjYTJmYmY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDE5LTA4LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5u
IEZhYmxldC4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcik6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtQcm9jZXNzOjphZGRJbmRleGVkRGF0YWJhc2VTZXNzaW9uKToK
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya1Byb2Nlc3M6OnNldElEQlBlck9yaWdpblF1b3RhKTog
RGVsZXRlZC4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oOgorICAg
ICAgICAqIE5ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1lc3NhZ2VzLmluOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQuY3BwOgorICAgICAgICAoV0tDb250ZXh0U2V0
SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9X
S0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc1Bvb2w6OnNldElEQlBlck9yaWdpblF1b3Rh
KTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaDoKKwogMjAx
OS0wOC0xOSAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIFNlc3Npb25JRDo6ZW1wdHlTZXNzaW9uSUQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwppbmRleCA1
NGUwYWY0OGQ4MjRkMjRlZDgwZDg2ZWM2NzA0MzMwYzQyYzExNTg5Li4zZDAzMmY4Y2MyZDc3NGE5
ZjU1NTIyNGUyMGViY2UxMTAxNzIzNDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE1IEBACisyMDE5LTA4LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgorCisg
ICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorICAgICAgICA8cmRhcjovL3Byb2JsZW0v
NTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxldC4KKworICAgICAg
ICAqIFN0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5jcHA6CisgICAgICAgIChXZWJEYXRhYmFz
ZVByb3ZpZGVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSk6IERlbGV0ZWQuCisgICAgICAgICogU3Rv
cmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmg6CisKIDIwMTktMDgtMTkgIFlvdWVubiBGYWJsZXQg
IDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBTZXNzaW9uSUQ6OmVtcHR5U2Vz
c2lvbklEKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBmZjhjMTIzZDQ3MTg0MDI0
M2FiMWI0M2U2ODYwMTBkMjRmYWMyMjZmLi4wOGY0Mzc5YWI2YmYwZDQ5MTFkZTY0NmViZjhkYTAz
NzgzNDk2MjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTktMDgtMTkgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NDIwMTc4
Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgICogU3Rv
cmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIubW06CisgICAgICAgICgtW1dlYkRhdGFiYXNlTWFuYWdl
ciBzZXRJREJQZXJPcmlnaW5RdW90YTpdKTogRGVsZXRlZC4KKyAgICAgICAgKiBTdG9yYWdlL1dl
YkRhdGFiYXNlTWFuYWdlclByaXZhdGUuaDoKKwogMjAxOS0wOC0xOCAgWXVzdWtlIFN1enVraSAg
PHlzdXp1a2lAYXBwbGUuY29tPgogCiAgICAgICAgIFtXVEZdIEFkZCBtYWtlVW5pcXVlPFQ+LCB3
aGljaCBlbnN1cmVzIFQgaXMgZmFzdC1hbGxvY2F0ZWQsIG1ha2VVbmlxdWUgLyBtYWtlVW5pcXVl
V2l0aG91dEZhc3RNYWxsb2NDaGVjayBwYXJ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5k
ZXggOWYyNGFmMjBkNTEzMDJlYTEzMGM5ZGZhNzBiMjE1YjE1MzFmMjFmYi4uMjRiNmU4YjMwNWE4
NmVjN2Y0YmMzYTYzZGYzNGU1NjdhN2U5Yzg1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDE5LTA4LTE5ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBw
bGUuY29tPgorCisgICAgICAgIFJlbW92ZSBJREItc3BlY2lmaWMgcXVvdGEKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5NjU0NQorICAgICAgICA8cmRh
cjovL3Byb2JsZW0vNTQyMDE3ODM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWW91ZW5uIEZhYmxl
dC4KKworICAgICAgICAqIEludGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGw6CisgICAg
ICAgICogV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkRhdGFiYXNlTWFuYWdl
cjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkRhdGFiYXNl
TWFuYWdlci5oOgorCiAyMDE5LTA4LTE4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5j
b20+CiAKICAgICAgICAgW1dURl0gQWRkIG1ha2VVbmlxdWU8VD4sIHdoaWNoIGVuc3VyZXMgVCBp
cyBmYXN0LWFsbG9jYXRlZCwgbWFrZVVuaXF1ZSAvIG1ha2VVbmlxdWVXaXRob3V0RmFzdE1hbGxv
Y0NoZWNrIHBhcnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L3NlcnZlci9JREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL3NlcnZlci9JREJCYWNraW5nU3RvcmUuaAppbmRleCAyOTFmNzZlZDVhYzViYmI3N2M4NGRl
ZmY5YzBjNjY3OWM3OGJhMzM0Li43MmVjZjJlMGEwM2E1MWQ0ZTYyNTA1MTk2MzMyNDA1N2RkNzlm
MjZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIv
SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
c2VydmVyL0lEQkJhY2tpbmdTdG9yZS5oCkBAIC0xMDAsNyArMTAwLDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgYm9vbCBpc0VwaGVtZXJhbCgpID0gMDsKIAogICAgIHZpcnR1YWwgdWludDY0X3Qg
ZGF0YWJhc2VzU2l6ZUZvck9yaWdpbigpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0
UXVvdGEodWludDY0X3QpID0gMDsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNUcmFuc2FjdGlvbihj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImKSBjb25zdCA9IDA7CiBwcm90ZWN0ZWQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIu
Y3BwCmluZGV4IDRmZTZjNGE4N2Q1YzNkNWIwNTEwYzZlYmI3YzNmZjE1YTYyMjQwM2YuLmI4ZDBh
Njc0NTgyOWMyN2M0ZWE3YjFjYjE3MjRkOTFkOTY1ZWZhZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9JREJTZXJ2ZXIuY3BwCkBAIC0xMzUs
NyArMTM1LDcgQEAgc3RkOjp1bmlxdWVfcHRyPElEQkJhY2tpbmdTdG9yZT4gSURCU2VydmVyOjpj
cmVhdGVCYWNraW5nU3RvcmUoY29uc3QgSURCRGF0YWJhc2UKICAgICBpZiAobV9kYXRhYmFzZURp
cmVjdG9yeVBhdGguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gTWVtb3J5SURCQmFja2luZ1N0
b3JlOjpjcmVhdGUobV9zZXNzaW9uSUQsIGlkZW50aWZpZXIpOwogCi0gICAgcmV0dXJuIG1ha2VV
bmlxdWU8U1FMaXRlSURCQmFja2luZ1N0b3JlPihtX3Nlc3Npb25JRCwgaWRlbnRpZmllciwgbV9k
YXRhYmFzZURpcmVjdG9yeVBhdGgsIG1fYmFja2luZ1N0b3JlVGVtcG9yYXJ5RmlsZUhhbmRsZXIs
IG1fcGVyT3JpZ2luUXVvdGEpOworICAgIHJldHVybiBtYWtlVW5pcXVlPFNRTGl0ZUlEQkJhY2tp
bmdTdG9yZT4obV9zZXNzaW9uSUQsIGlkZW50aWZpZXIsIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRo
LCBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyKTsKIH0KIAogdm9pZCBJREJTZXJ2
ZXI6Om9wZW5EYXRhYmFzZShjb25zdCBJREJSZXF1ZXN0RGF0YSYgcmVxdWVzdERhdGEpCkBAIC02
OTEsMTQgKzY5MSw2IEBAIHZvaWQgSURCU2VydmVyOjpkaWRQZXJmb3JtQ2xvc2VBbmREZWxldGVE
YXRhYmFzZXModWludDY0X3QgY2FsbGJhY2tJRCkKICAgICBjYWxsYmFjaygpOwogfQogCi12b2lk
IElEQlNlcnZlcjo6c2V0UGVyT3JpZ2luUXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0gICAgbV9w
ZXJPcmlnaW5RdW90YSA9IHF1b3RhOwotCi0gICAgZm9yIChhdXRvJiBkYXRhYmFzZSA6IG1fdW5p
cXVlSURCRGF0YWJhc2VNYXAudmFsdWVzKCkpCi0gICAgICAgIGRhdGFiYXNlLT5zZXRRdW90YShx
dW90YSk7Ci19Ci0KIElEQlNlcnZlcjo6UXVvdGFVc2VyOjpRdW90YVVzZXIoSURCU2VydmVyJiBz
ZXJ2ZXIsIFN0b3JhZ2VRdW90YU1hbmFnZXIqIG1hbmFnZXIsIENsaWVudE9yaWdpbiYmIG9yaWdp
bikKICAgICA6IG1fc2VydmVyKHNlcnZlcikKICAgICAsIG1fbWFuYWdlcihtYWtlV2Vha1B0ciht
YW5hZ2VyKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9JREJTZXJ2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZl
ci9JREJTZXJ2ZXIuaAppbmRleCA0ZDMyOGM0ODIxNTU2NGEzMjMwNDllZDZiNTM3YmJkYmUzN2Rj
OGMxLi45ZTZhNDVkMmNjZDU4YjRlMTM5ZTI3ZDk0NzhhMWQ2ZTkxMmQ2YTliIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvSURCU2VydmVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL0lEQlNlcnZlci5oCkBA
IC01NCw4ICs1NCw2IEBAIHN0cnVjdCBJREJHZXRSZWNvcmREYXRhOwogCiBuYW1lc3BhY2UgSURC
U2VydmVyIHsKIAotY29uc3QgdWludDY0X3QgZGVmYXVsdFBlck9yaWdpblF1b3RhID0gNTAwICog
TUI7Ci0KIGNsYXNzIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyOwogCiBlbnVt
IGNsYXNzIFNob3VsZEZvcmNlU3RvcCA6IGJvb2wgeyBObywgWWVzIH07CkBAIC0xMTUsOSArMTEz
LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2xvc2VBbmREZWxldGVEYXRh
YmFzZXNNb2RpZmllZFNpbmNlKFdhbGxUaW1lLCBGdW5jdGlvbjx2b2lkICgpPiYmIGNvbXBsZXRp
b25IYW5kbGVyKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNsb3NlQW5kRGVsZXRlRGF0YWJh
c2VzRm9yT3JpZ2lucyhjb25zdCBWZWN0b3I8U2VjdXJpdHlPcmlnaW5EYXRhPiYsIEZ1bmN0aW9u
PHZvaWQgKCk+JiYgY29tcGxldGlvbkhhbmRsZXIpOwogCi0gICAgdWludDY0X3QgcGVyT3JpZ2lu
UXVvdGEoKSBjb25zdCB7IHJldHVybiBtX3Blck9yaWdpblF1b3RhOyB9Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIHJlcXVl
c3RTcGFjZShjb25zdCBDbGllbnRPcmlnaW4mLCB1aW50NjRfdCB0YXNrU2l6ZSwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChTdG9yYWdlUXVvdGFNYW5hZ2VyOjpEZWNpc2lvbik+JiYpOwogICAgIHZv
aWQgaW5jcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3QgQ2xpZW50T3JpZ2luJiwgdWludDY0
X3QgdGFza1NpemUpOwogICAgIHZvaWQgZGVjcmVhc2VQb3RlbnRpYWxTcGFjZVVzZWQoY29uc3Qg
Q2xpZW50T3JpZ2luJiwgdWludDY0X3QgdGFza1NpemUpOwpAQCAtMTk2LDggKzE5MSw2IEBAIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YWJhc2VEaXJlY3RvcnlQYXRoOwogICAgIElEQkJhY2tp
bmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBtX2JhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVI
YW5kbGVyOwogCi0gICAgdWludDY0X3QgbV9wZXJPcmlnaW5RdW90YSB7IGRlZmF1bHRQZXJPcmln
aW5RdW90YSB9OwotCiAgICAgSGFzaE1hcDxDbGllbnRPcmlnaW4sIHN0ZDo6dW5pcXVlX3B0cjxR
dW90YVVzZXI+PiBtX3F1b3RhVXNlcnM7CiAgICAgUXVvdGFNYW5hZ2VyR2V0dGVyIG1fcXVvdGFN
YW5hZ2VyR2V0dGVyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9NZW1vcnlJREJCYWNraW5nU3RvcmUuaAppbmRleCA5OGM3
NDVjYmVlZTNkN2YyYzRhNmI2YWZiYjQ2YjgzZTlkMjQ1ODI4Li5kYWI4YzMwZTI2MjgyMzU1MGIw
MzQ4NDkxODYwNjhjNGRjOGM2NTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9zZXJ2ZXIvTWVtb3J5SURCQmFja2luZ1N0b3JlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL01lbW9yeUlEQkJhY2tpbmdTdG9yZS5oCkBA
IC03OSw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIGJvb2wgaXNFcGhlbWVyYWwo
KSBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90IHF1
b3RhKSBmaW5hbCB7IFVOVVNFRF9QQVJBTShxdW90YSk7IH07CiAgICAgdWludDY0X3QgZGF0YWJh
c2VzU2l6ZUZvck9yaWdpbigpIGNvbnN0IGZpbmFsOwogCiAgICAgdm9pZCByZW1vdmVPYmplY3RT
dG9yZUZvclZlcnNpb25DaGFuZ2VBYm9ydChNZW1vcnlPYmplY3RTdG9yZSYpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tp
bmdTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FM
aXRlSURCQmFja2luZ1N0b3JlLmNwcAppbmRleCA0ZDllM2FjYzcyY2MzNThkNWEyNTBkZTI5ZDk2
ODc1MWQxYjc0YTgxLi5jMGU4MWRkYTQ2MzAxMzk5YjRkODE4ODk4MTNmYzc3N2M3MTZiMDVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRl
SURCQmFja2luZ1N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmNwcApAQCAtMjI5LDEyICsyMjksMTEgQEAg
c3RhdGljIGNvbnN0IFN0cmluZyYgYmxvYkZpbGVzVGFibGVTY2hlbWFBbHRlcm5hdGUoKQogICAg
IHJldHVybiBibG9iRmlsZXNUYWJsZVNjaGVtYVN0cmluZzsKIH0KIAotU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjpTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBj
b25zdCBJREJEYXRhYmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0
YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYg
ZmlsZUhhbmRsZXIsIHVpbnQ2NF90IHF1b3RhKQorU1FMaXRlSURCQmFja2luZ1N0b3JlOjpTUUxp
dGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNzaW9uSUQgc2Vzc2lvbklELCBjb25zdCBJREJEYXRh
YmFzZUlkZW50aWZpZXImIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VSb290RGly
ZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYgZmlsZUhhbmRsZXIp
CiAgICAgOiBtX3Nlc3Npb25JRChzZXNzaW9uSUQpCiAgICAgLCBtX2lkZW50aWZpZXIoaWRlbnRp
ZmllcikKICAgICAsIG1fZGF0YWJhc2VSb290RGlyZWN0b3J5KGRhdGFiYXNlUm9vdERpcmVjdG9y
eSkKICAgICAsIG1fdGVtcG9yYXJ5RmlsZUhhbmRsZXIoZmlsZUhhbmRsZXIpCi0gICAgLCBtX3F1
b3RhKHF1b3RhKQogICAgICwgbV9zZXJpYWxpemF0aW9uQ29udGV4dChJREJTZXJpYWxpemF0aW9u
Q29udGV4dDo6Z2V0T3JDcmVhdGVJREJTZXJpYWxpemF0aW9uQ29udGV4dChzZXNzaW9uSUQpKQog
ewogICAgIG1fZGF0YWJhc2VEaXJlY3RvcnkgPSBmdWxsRGF0YWJhc2VEaXJlY3RvcnlXaXRoVXBn
cmFkZSgpOwpAQCAtODQ1LDE0ICs4NDQsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3Rv
cmU6OmdldE9yRXN0YWJsaXNoRGF0YWJhc2VJbmZvKElEQkRhdGFiYXNlSW5mbyYgaW5mbwogICAg
IHJldHVybiBJREJFcnJvciB7IH07CiB9CiAKLXVpbnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9y
ZTo6cXVvdGFGb3JPcmlnaW4oKSBjb25zdAotewotICAgIEFTU0VSVCghaXNNYWluVGhyZWFkKCkp
OwotICAgIHVpbnQ2NF90IGRpc2tGcmVlU3BhY2VTaXplID0gMDsKLSAgICBGaWxlU3lzdGVtOjpn
ZXRWb2x1bWVGcmVlU3BhY2UobV9pZGVudGlmaWVyLmRhdGFiYXNlRGlyZWN0b3J5UmVsYXRpdmVU
b1Jvb3QobV9kYXRhYmFzZVJvb3REaXJlY3RvcnkpLCBkaXNrRnJlZVNwYWNlU2l6ZSk7Ci0gICAg
cmV0dXJuIHN0ZDo6bWluKGRpc2tGcmVlU3BhY2VTaXplIC8gMiwgbV9xdW90YSk7Ci19Ci0KIHVp
bnQ2NF90IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6ZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihjb25z
dCBTdHJpbmcmIGZvbGRlcikKIHsKICAgICB1aW50NjRfdCBkaXNrVXNhZ2UgPSAwOwpAQCAtODcw
LDI0ICs4NjEsNiBAQCB1aW50NjRfdCBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmRhdGFiYXNlc1Np
emVGb3JPcmlnaW4oKSBjb25zdAogICAgIHJldHVybiBkYXRhYmFzZXNTaXplRm9yRm9sZGVyKG9s
ZFZlcnNpb25PcmlnaW5EaXJlY3RvcnkpICsgZGF0YWJhc2VzU2l6ZUZvckZvbGRlcihuZXdWZXJz
aW9uT3JpZ2luRGlyZWN0b3J5KTsKIH0KIAotdWludDY0X3QgU1FMaXRlSURCQmFja2luZ1N0b3Jl
OjptYXhpbXVtU2l6ZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCFpc01haW5UaHJlYWQoKSk7Ci0K
LSAgICAvLyBUaGUgbWF4aW11bSBzaXplIGZvciBvbmUgZGF0YWJhc2UgZmlsZSBpcyB0aGUgcXVv
dGEgZm9yIGl0cyBvcmlnaW4sIG1pbnVzIHNpemUgb2YgYWxsIGRhdGFiYXNlcyB3aXRoaW4gdGhh
dCBvcmlnaW4sCi0gICAgLy8gYW5kIHBsdXMgY3VycmVudCBzaXplIG9mIHRoZSBkYXRhYmFzZSBm
aWxlLgotICAgIHVpbnQ2NF90IGRhdGFiYXNlRmlsZVNpemUgPSBTUUxpdGVGaWxlU3lzdGVtOjpn
ZXREYXRhYmFzZUZpbGVTaXplKGZ1bGxEYXRhYmFzZVBhdGgoKSk7Ci0gICAgdWludDY0X3QgcXVv
dGEgPSBxdW90YUZvck9yaWdpbigpOwotCi0gICAgdWludDY0X3QgZGlza1VzYWdlID0gZGF0YWJh
c2VzU2l6ZUZvck9yaWdpbigpOwotICAgIEFTU0VSVChkaXNrVXNhZ2UgPj0gZGF0YWJhc2VGaWxl
U2l6ZSk7Ci0KLSAgICBpZiAocXVvdGEgPCBkaXNrVXNhZ2UpCi0gICAgICAgIHJldHVybiBkYXRh
YmFzZUZpbGVTaXplOwotCi0gICAgcmV0dXJuIHF1b3RhIC0gZGlza1VzYWdlICsgZGF0YWJhc2VG
aWxlU2l6ZTsKLX0KLQogSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5z
YWN0aW9uKGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKIHsKICAgICBMT0coSW5kZXhl
ZERCLCAiU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9uIC0gJXMiLCBpbmZv
LmlkZW50aWZpZXIoKS5sb2dnaW5nU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CkBAIC04OTYsNyAr
ODY5LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpiZWdpblRyYW5zYWN0aW9u
KGNvbnN0IElEQlRyYW5zYWN0aW9uSW5mbyYgaW5mbykKICAgICBBU1NFUlQobV9zcWxpdGVEQi0+
aXNPcGVuKCkpOwogICAgIEFTU0VSVChtX2RhdGFiYXNlSW5mbyk7CiAKLSAgICBtX3NxbGl0ZURC
LT5zZXRNYXhpbXVtU2l6ZShtYXhpbXVtU2l6ZSgpKTsKICAgICBhdXRvIGFkZFJlc3VsdCA9IG1f
dHJhbnNhY3Rpb25zLmFkZChpbmZvLmlkZW50aWZpZXIoKSwgbnVsbHB0cik7CiAgICAgaWYgKCFh
ZGRSZXN1bHQuaXNOZXdFbnRyeSkgewogICAgICAgICBMT0dfRVJST1IoIkF0dGVtcHQgdG8gZXN0
YWJsaXNoIHRyYW5zYWN0aW9uIGlkZW50aWZpZXIgdGhhdCBhbHJlYWR5IGV4aXN0cyIpOwpAQCAt
OTEzLDEwICs4ODUsNyBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OmJlZ2luVHJh
bnNhY3Rpb24oY29uc3QgSURCVHJhbnNhY3Rpb25JbmZvJiBpbmZvKQogICAgICAgICBpZiAoc3Fs
LnByZXBhcmUoKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC5iaW5kVGV4dCgxLCBT
dHJpbmc6Om51bWJlcihpbmZvLm5ld1ZlcnNpb24oKSkpICE9IFNRTElURV9PSwogICAgICAgICAg
ICAgfHwgc3FsLnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewotICAgICAgICAgICAgaWYgKG1fc3Fs
aXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIGVycm9y
ID0gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRh
dGFiYXNlIHZlcnNpb24gaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRv
bWFpbiJfcyB9OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVycm9yID0gSURC
RXJyb3IgeyBVbmtub3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNp
b24gaW4gZGF0YWJhc2UiX3MgfTsKKyAgICAgICAgICAgIGVycm9yID0gSURCRXJyb3IgeyBVbmtu
b3duRXJyb3IsICJGYWlsZWQgdG8gc3RvcmUgbmV3IGRhdGFiYXNlIHZlcnNpb24gaW4gZGF0YWJh
c2UiX3MgfTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTk5LDggKzk2OCw2IEBAIElEQkVycm9y
IFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3Vy
Y2VJZGVudGlmaWVyJiB0CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCg1LCBpbmZvLm1h
eEluZGV4SUQoKSkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBT
UUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgYWRkIG9iamVj
dCBzdG9yZSAnJXMnIHRvIE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBpbmZvLm5h
bWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+
bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigp
ID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3Rh
RXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCBjcmVhdGUgb2JqZWN0IHN0b3JlIGJlY2F1c2Ugbm8g
ZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFVua25vd25FcnJvciwgIkNvdWxkIG5vdCBjcmVhdGUgb2JqZWN0IHN0b3JlIl9zIH07CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMDExLDggKzk3OCw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJh
Y2tpbmdTdG9yZTo6Y3JlYXRlT2JqZWN0U3RvcmUoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVy
JiB0CiAgICAgICAgICAgICB8fCBzcWwtPmJpbmRJbnQ2NCgxLCBpbmZvLmlkZW50aWZpZXIoKSkg
IT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkg
ewogICAgICAgICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3Qgc2VlZCBpbml0aWFsIGtleSBnZW5l
cmF0b3IgdmFsdWUgZm9yIE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBtX3NxbGl0
ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAg
ICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAg
ICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIkNvdWxkIG5vdCBz
ZWVkIGluaXRpYWwga2V5IGdlbmVyYXRvciB2YWx1ZSBmb3Igb2JqZWN0IHN0b3JlIGJlY2F1c2Ug
bm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgIHJldHVybiBJREJF
cnJvciB7IFVua25vd25FcnJvciwgIkNvdWxkIG5vdCBzZWVkIGluaXRpYWwga2V5IGdlbmVyYXRv
ciB2YWx1ZSBmb3Igb2JqZWN0IHN0b3JlIl9zIH07CiAgICAgICAgIH0KICAgICB9CkBAIC0xMTM2
LDggKzExMDEsNiBAQCBJREJFcnJvciBTUUxpdGVJREJCYWNraW5nU3RvcmU6OnJlbmFtZU9iamVj
dFN0b3JlKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdAogICAgICAgICAgICAgfHwgc3Fs
LT5iaW5kSW50NjQoMiwgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSAhPSBTUUxJVEVfT0sKICAgICAg
ICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0df
RVJST1IoIkNvdWxkIG5vdCB1cGRhdGUgbmFtZSBmb3Igb2JqZWN0IHN0b3JlIGlkICUiIFBSSWk2
NCAiIGluIE9iamVjdFN0b3JlSW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlkZW50
aWZpZXIsIG1fc3FsaXRlREItPmxhc3RFcnJvcigpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3JNc2co
KSk7Ci0gICAgICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZV
TEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9y
LCAiQ291bGQgbm90IHJlbmFtZSBvYmplY3Qgc3RvcmUgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2Ug
Zm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVy
cm9yLCAiQ291bGQgbm90IHJlbmFtZSBvYmplY3Qgc3RvcmUiX3MgfTsKICAgICAgICAgfQogICAg
IH0KQEAgLTEyMTksOCArMTE4Miw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6
Y3JlYXRlSW5kZXgoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjCiAgICAgICAg
IHx8IHNxbC0+YmluZEludCg2LCBpbmZvLm11bHRpRW50cnkoKSkgIT0gU1FMSVRFX09LCiAgICAg
ICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgIExPR19FUlJPUigi
Q291bGQgbm90IGFkZCBpbmRleCAnJXMnIHRvIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBp
bmZvLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9zcWxp
dGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9y
KCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4
Y2VlZGVkRXJyb3IsICJVbmFibGUgdG8gY3JlYXRlIGluZGV4IGluIGRhdGFiYXNlIGJlY2F1c2Ug
bm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgcmV0dXJuIElEQkVycm9y
IHsgVW5rbm93bkVycm9yLCAiVW5hYmxlIHRvIGNyZWF0ZSBpbmRleCBpbiBkYXRhYmFzZSJfcyB9
OwogICAgIH0KIApAQCAtMTM2OSw4ICsxMzMwLDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2lu
Z1N0b3JlOjp1bmNoZWNrZWRQdXRJbmRleFJlY29yZChpbnQ2NF90IG9iamVjdFN0b3JlSUQsIGkK
ICAgICAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDUsIHJlY29yZElEKSAhPSBTUUxJVEVfT0sK
ICAgICAgICAgICAgIHx8IHNxbC0+c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAg
ICBMT0dfRVJST1IoIkNvdWxkIG5vdCBwdXQgaW5kZXggcmVjb3JkIGZvciBpbmRleCAlIiBQUklp
NjQgIiBpbiBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgaW4gUmVjb3JkcyB0YWJsZSAoJWkpIC0g
JXMiLCBpbmRleElELCBvYmplY3RTdG9yZUlELCBtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSwgbV9z
cWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYgKG1fc3FsaXRlREItPmxh
c3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJv
ciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIkVycm9yIHB1dHRpbmcgaW5kZXggcmVjb3JkIGludG8g
ZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2ggc3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAg
ICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93bkVycm9yLCAiRXJyb3IgcHV0dGluZyBpbmRl
eCByZWNvcmQgaW50byBkYXRhYmFzZSJfcyB9OwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ1Niw4
ICsxNDE1LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjpyZW5hbWVJbmRleChj
b25zdCBJREJSZXNvdXJjZUlkZW50aWZpZXImIHRyYW5zYWMKICAgICAgICAgICAgIHx8IHNxbC0+
YmluZEludDY0KDMsIGluZGV4SWRlbnRpZmllcikgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICB8
fCBzcWwtPnN0ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgTE9HX0VSUk9SKCJD
b3VsZCBub3QgdXBkYXRlIG5hbWUgZm9yIGluZGV4IGlkICglIiBQUklpNjQgIiwgJSIgUFJJaTY0
ICIpIGluIEluZGV4SW5mbyB0YWJsZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUlkZW50aWZpZXIs
IGluZGV4SWRlbnRpZmllciwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxh
c3RFcnJvck1zZygpKTsKLSAgICAgICAgICAgIGlmIChtX3NxbGl0ZURCLT5sYXN0RXJyb3IoKSA9
PSBTUUxJVEVfRlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4
Y2VlZGVkRXJyb3IsICJDb3VsZCBub3QgcmVuYW1lIGluZGV4IGJlY2F1c2Ugbm8gZW5vdWdoIHNw
YWNlIGZvciBkb21haW4iX3MgfTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25v
d25FcnJvciwgIkNvdWxkIG5vdCByZW5hbWUgaW5kZXgiX3MgfTsKICAgICAgICAgfQogICAgIH0K
QEAgLTE3OTUsOCArMTc1Miw2IEBAIElEQkVycm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6YWRk
UmVjb3JkKGNvbnN0IElEQlJlc291cmNlSWRlbnRpZmllciYgdHJhbnNhY3RpCiAgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRCbG9iKDMsIHZhbHVlLmRhdGEoKS5kYXRhKCktPmRhdGEoKSwgdmFsdWUu
ZGF0YSgpLmRhdGEoKS0+c2l6ZSgpKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgIHx8IHNxbC0+
c3RlcCgpICE9IFNRTElURV9ET05FKSB7CiAgICAgICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5v
dCBwdXQgcmVjb3JkIGZvciBvYmplY3Qgc3RvcmUgJSIgUFJJaTY0ICIgaW4gUmVjb3JkcyB0YWJs
ZSAoJWkpIC0gJXMiLCBvYmplY3RTdG9yZUluZm8uaWRlbnRpZmllcigpLCBtX3NxbGl0ZURCLT5s
YXN0RXJyb3IoKSwgbV9zcWxpdGVEQi0+bGFzdEVycm9yTXNnKCkpOwotICAgICAgICAgICAgaWYg
KG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAgICAgICAg
IHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVuYWJsZSB0byBzdG9yZSBy
ZWNvcmQgaW4gb2JqZWN0IHN0b3JlIGJlY2F1c2Ugbm8gZW5vdWdoIHNwYWNlIGZvciBkb21haW4i
X3MgfTsKICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFVua25vd25FcnJvciwgIlVuYWJs
ZSB0byBzdG9yZSByZWNvcmQgaW4gb2JqZWN0IHN0b3JlIl9zIH07CiAgICAgICAgIH0KIApAQCAt
MTgyOSw4ICsxNzg0LDYgQEAgSURCRXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNv
cmQoY29uc3QgSURCUmVzb3VyY2VJZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAgICAg
ICB8fCBzcWwtPmJpbmRUZXh0KDIsIHVybCkgIT0gU1FMSVRFX09LCiAgICAgICAgICAgICAgICAg
fHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAgICAgICAgICAgICAgICBMT0dfRVJS
T1IoIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2UiKTsKLSAgICAgICAg
ICAgICAgICBpZiAobV9zcWxpdGVEQi0+bGFzdEVycm9yKCkgPT0gU1FMSVRFX0ZVTEwpCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7IFF1b3RhRXhjZWVkZWRFcnJvciwgIlVu
YWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2UgYmVjYXVzZSBubyBlbm91Z2gg
c3BhY2UgZm9yIGRvbWFpbiJfcyB9OwogICAgICAgICAgICAgICAgIHJldHVybiBJREJFcnJvciB7
IFVua25vd25FcnJvciwgIlVuYWJsZSB0byByZWNvcmQgQmxvYiByZWNvcmQgaW4gZGF0YWJhc2Ui
X3MgfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTg2NCw4ICsxODE3LDYgQEAgSURC
RXJyb3IgU1FMaXRlSURCQmFja2luZ1N0b3JlOjphZGRSZWNvcmQoY29uc3QgSURCUmVzb3VyY2VJ
ZGVudGlmaWVyJiB0cmFuc2FjdGkKICAgICAgICAgICAgICAgICB8fCBzcWwtPmJpbmRUZXh0KDIs
IHN0b3JlZEZpbGVuYW1lKSAhPSBTUUxJVEVfT0sKICAgICAgICAgICAgICAgICB8fCBzcWwtPnN0
ZXAoKSAhPSBTUUxJVEVfRE9ORSkgewogICAgICAgICAgICAgICAgIExPR19FUlJPUigiVW5hYmxl
IHRvIHJlY29yZCBCbG9iIGZpbGUgcmVjb3JkIGluIGRhdGFiYXNlIik7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxMKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gSURCRXJyb3IgeyBRdW90YUV4Y2VlZGVkRXJyb3IsICJVbmFibGUg
dG8gcmVjb3JkIEJsb2IgZmlsZSBpbiBkYXRhYmFzZSBiZWNhdXNlIG5vIGVub3VnaCBzcGFjZSBm
b3IgZG9tYWluIl9zIH07CiAgICAgICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgVW5rbm93
bkVycm9yLCAiVW5hYmxlIHRvIHJlY29yZCBCbG9iIGZpbGUgcmVjb3JkIGluIGRhdGFiYXNlIl9z
IH07CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI0MDEsOCArMjM1Miw2IEBAIElEQkVy
cm9yIFNRTGl0ZUlEQkJhY2tpbmdTdG9yZTo6dW5jaGVja2VkU2V0S2V5R2VuZXJhdG9yVmFsdWUo
aW50NjRfdCBvYmplY3RTdG9yCiAgICAgICAgIHx8IHNxbC0+YmluZEludDY0KDIsIHZhbHVlKSAh
PSBTUUxJVEVfT0sKICAgICAgICAgfHwgc3FsLT5zdGVwKCkgIT0gU1FMSVRFX0RPTkUpIHsKICAg
ICAgICAgTE9HX0VSUk9SKCJDb3VsZCBub3QgdXBkYXRlIGtleSBnZW5lcmF0b3IgdmFsdWUgKCVp
KSAtICVzIiwgbV9zcWxpdGVEQi0+bGFzdEVycm9yKCksIG1fc3FsaXRlREItPmxhc3RFcnJvck1z
ZygpKTsKLSAgICAgICAgaWYgKG1fc3FsaXRlREItPmxhc3RFcnJvcigpID09IFNRTElURV9GVUxM
KQotICAgICAgICAgICAgcmV0dXJuIElEQkVycm9yIHsgUXVvdGFFeGNlZWRlZEVycm9yLCAiRXJy
b3Igc3RvcmluZyBuZXcga2V5IGdlbmVyYXRvciB2YWx1ZSBpbiBkYXRhYmFzZSBiZWNhdXNlIG5v
IGVub3VnaCBzcGFjZSBmb3IgZG9tYWluIl9zIH07CiAgICAgICAgIHJldHVybiBJREJFcnJvciB7
IENvbnN0cmFpbnRFcnJvciwgIkVycm9yIHN0b3JpbmcgbmV3IGtleSBnZW5lcmF0b3IgdmFsdWUg
aW4gZGF0YWJhc2UiIH07CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvU1FMaXRlSURCQmFja2luZ1N0b3JlLmgKaW5k
ZXggYmI5MDdiZTBiYzY1NDk0YTZiZDhjNTMzMDYzNGI4YjQxMjc4Y2Y5Zi4uMThmNThlNGYyOWE2
YWUxNzk2YjNhMWQ0MTQ0ZDY3NjQxYzE5ZGRkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1NRTGl0ZUlEQkJhY2tpbmdTdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9TUUxpdGVJREJCYWNraW5nU3Rv
cmUuaApAQCAtNDksNyArNDksNyBAQCBjbGFzcyBTUUxpdGVJREJDdXJzb3I7CiBjbGFzcyBTUUxp
dGVJREJCYWNraW5nU3RvcmUgOiBwdWJsaWMgSURCQmFja2luZ1N0b3JlIHsKICAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFM
OjpTZXNzaW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYg
ZGF0YWJhc2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxl
ciYsIHVpbnQ2NF90IHF1b3RhKTsKKyAgICBTUUxpdGVJREJCYWNraW5nU3RvcmUoUEFMOjpTZXNz
aW9uSUQsIGNvbnN0IElEQkRhdGFiYXNlSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYgZGF0YWJh
c2VSb290RGlyZWN0b3J5LCBJREJCYWNraW5nU3RvcmVUZW1wb3JhcnlGaWxlSGFuZGxlciYpOwog
ICAgIAogICAgIH5TUUxpdGVJREJCYWNraW5nU3RvcmUoKSBmaW5hbDsKIApAQCAtODIsNyArODIs
NiBAQCBwdWJsaWM6CiAgICAgSURCT2JqZWN0U3RvcmVJbmZvKiBpbmZvRm9yT2JqZWN0U3RvcmUo
dWludDY0X3Qgb2JqZWN0U3RvcmVJZGVudGlmaWVyKSBmaW5hbDsKICAgICB2b2lkIGRlbGV0ZUJh
Y2tpbmdTdG9yZSgpIGZpbmFsOwogCi0gICAgdm9pZCBzZXRRdW90YSh1aW50NjRfdCBxdW90YSkg
ZmluYWwgeyBtX3F1b3RhID0gcXVvdGE7IH0KICAgICB1aW50NjRfdCBkYXRhYmFzZXNTaXplRm9y
T3JpZ2luKCkgY29uc3QgZmluYWw7CiAKICAgICBib29sIHN1cHBvcnRzU2ltdWx0YW5lb3VzVHJh
bnNhY3Rpb25zKCkgZmluYWwgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTExMCw5ICsxMDksNiBAQCBw
cml2YXRlOgogICAgIFN0cmluZyBmdWxsRGF0YWJhc2VQYXRoKCkgY29uc3Q7CiAgICAgU3RyaW5n
IGZ1bGxEYXRhYmFzZURpcmVjdG9yeVdpdGhVcGdyYWRlKCk7CiAKLSAgICB1aW50NjRfdCBxdW90
YUZvck9yaWdpbigpIGNvbnN0OwotICAgIHVpbnQ2NF90IG1heGltdW1TaXplKCkgY29uc3Q7Ci0K
ICAgICBib29sIGVuc3VyZVZhbGlkUmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxp
ZEluZGV4UmVjb3Jkc1RhYmxlKCk7CiAgICAgYm9vbCBlbnN1cmVWYWxpZEluZGV4UmVjb3Jkc0lu
ZGV4KCk7CkBAIC0yMDUsOCArMjAxLDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV9kYXRhYmFz
ZURpcmVjdG9yeTsKIAogICAgIElEQkJhY2tpbmdTdG9yZVRlbXBvcmFyeUZpbGVIYW5kbGVyJiBt
X3RlbXBvcmFyeUZpbGVIYW5kbGVyOwotICAgIAotICAgIHVpbnQ2NF90IG1fcXVvdGE7CiAKICAg
ICBSZWY8SURCU2VyaWFsaXphdGlvbkNvbnRleHQ+IG1fc2VyaWFsaXphdGlvbkNvbnRleHQ7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3Nl
cnZlci9VbmlxdWVJREJEYXRhYmFzZS5jcHAKaW5kZXggOWYzYWYxMTA5ZTlkNGRiYWY5OTk0NWNh
OWQyN2YzMzg3NmE0NTdiZC4uMzM4Nzk5OWE0NWU1OTgxODk5Yjc4NTZiYTM2NjQ5MGU1YzY3MGUw
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvc2VydmVyL1Vu
aXF1ZUlEQkRhdGFiYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJhc2UuY3BwCkBAIC0yMjk4LDEyICsyMjk4LDYgQEAgdm9p
ZCBVbmlxdWVJREJEYXRhYmFzZTo6Zm9yZ2V0RXJyb3JDYWxsYmFjayh1aW50NjRfdCBjYWxsYmFj
a0lkZW50aWZpZXIpCiAgICAgbV9lcnJvckNhbGxiYWNrcy5yZW1vdmUoY2FsbGJhY2tJZGVudGlm
aWVyKTsKIH0KIAotdm9pZCBVbmlxdWVJREJEYXRhYmFzZTo6c2V0UXVvdGEodWludDY0X3QgcXVv
dGEpCi17Ci0gICAgaWYgKG1fYmFja2luZ1N0b3JlKQotICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
c2V0UXVvdGEocXVvdGEpOwotfQotCiB2b2lkIFVuaXF1ZUlEQkRhdGFiYXNlOjphYm9ydFRyYW5z
YWN0aW9uT25NYWluVGhyZWFkKFVuaXF1ZUlEQkRhdGFiYXNlVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uKQogewogICAgIHRyYW5zYWN0aW9uLnNldFJlc3VsdChtX2JhY2tpbmdTdG9yZS0+YWJvcnRU
cmFuc2FjdGlvbih0cmFuc2FjdGlvbi5pbmZvKCkuaWRlbnRpZmllcigpKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9zZXJ2ZXIvVW5pcXVlSURCRGF0YWJh
c2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCmluZGV4IDJlODA4NjBlMDg5NWU4YzViMzhmMDczZTI5Y2EwMWNhZTE0YTM3YzMu
Ljg3MWU1OWZkMmViYTUxN2Y4ZTZkZTg5OGIzZTUwYzFhNWJiMDllYTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJEYXRhYmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL3NlcnZlci9VbmlxdWVJREJE
YXRhYmFzZS5oCkBAIC0xMTgsOCArMTE4LDYgQEAgcHVibGljOgogCiAgICAgdWludDY0X3Qgc3Bh
Y2VVc2VkKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFF1b3RhKHVpbnQ2NF90KTsKLQogICAgIHZv
aWQgZmluaXNoQWN0aXZlVHJhbnNhY3Rpb25zKCk7CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuY3BwCmluZGV4IDIxOGNiZTRhMWRi
MTdmYzFlYWU1OGNjMDZjN2RjYjJiNWJkOWExMzEuLjVmNmI5OTU4OGZmZmYyNmVmNWU4ZWY1NGEw
ZmQ2MTYzOGFlN2IzMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mv
TmV0d29ya1Byb2Nlc3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0
d29ya1Byb2Nlc3MuY3BwCkBAIC0yMjU4LDEzICsyMjU4LDExIEBAIFJlZjxJREJTZXJ2ZXI6OklE
QlNlcnZlcj4gTmV0d29ya1Byb2Nlc3M6OmNyZWF0ZUlEQlNlcnZlcihQQUw6OlNlc3Npb25JRCBz
ZXNzaW9uCiAgICAgICAgIHBhdGggPSBtX2lkYkRhdGFiYXNlUGF0aHMuZ2V0KHNlc3Npb25JRCk7
CiAgICAgfQogCi0gICAgYXV0byBzZXJ2ZXIgPSBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3JlYXRl
KHNlc3Npb25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKHRo
aXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4gU3Rv
cmFnZVF1b3RhTWFuYWdlciogeworICAgIHJldHVybiBJREJTZXJ2ZXI6OklEQlNlcnZlcjo6Y3Jl
YXRlKHNlc3Npb25JRCwgcGF0aCwgKnRoaXMsIFt0aGlzLCB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRy
KHRoaXMpXShQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIGNvbnN0IGF1dG8mIG9yaWdpbikgLT4g
U3RvcmFnZVF1b3RhTWFuYWdlciogewogICAgICAgICBpZiAoIXdlYWtUaGlzKQogICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiAmdGhpcy0+c3RvcmFnZVF1b3RhTWFu
YWdlcihzZXNzaW9uSUQsIG9yaWdpbik7CiAgICAgfSk7Ci0gICAgc2VydmVyLT5zZXRQZXJPcmln
aW5RdW90YShtX2lkYlBlck9yaWdpblF1b3RhKTsKLSAgICByZXR1cm4gc2VydmVyOwogfQogCiBJ
REJTZXJ2ZXI6OklEQlNlcnZlciYgTmV0d29ya1Byb2Nlc3M6OmlkYlNlcnZlcihQQUw6OlNlc3Np
b25JRCBzZXNzaW9uSUQpCkBAIC0yMzYwLDE0ICsyMzU4LDYgQEAgdm9pZCBOZXR3b3JrUHJvY2Vz
czo6YWRkSW5kZXhlZERhdGFiYXNlU2Vzc2lvbihQQUw6OlNlc3Npb25JRCBzZXNzaW9uSUQsIFN0
cmluZyYKICAgICAgICAgICAgIHBvc3RTdG9yYWdlVGFzayhjcmVhdGVDcm9zc1RocmVhZFRhc2so
KnRoaXMsICZOZXR3b3JrUHJvY2Vzczo6ZW5zdXJlUGF0aEV4aXN0cywgaW5kZXhlZERhdGFiYXNl
RGlyZWN0b3J5KSk7CiAgICAgfQogfQotCi12b2lkIE5ldHdvcmtQcm9jZXNzOjpzZXRJREJQZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBtX2lkYlBlck9yaWdpblF1b3RhID0g
cXVvdGE7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBtX2lkYlNlcnZlcnMudmFsdWVz
KCkpCi0gICAgICAgIHNlcnZlci0+c2V0UGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQogI2VuZGlm
IC8vIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiB2b2lkIE5ldHdvcmtQcm9jZXNzOjpzeW5j
TG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nl
c3MuaCBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MuaAppbmRl
eCA2YjkyNzVkZmJiOTRiMWIwNGEyNzQ0ZjFkNzljYWU3ODgxNzk1NjAxLi42NjdhNmU0NzhkYTEy
YWI2NjUxMDMyYWEzMTI1ZWY3ZmE0MTNjYzcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05l
dHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3Jr
UHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5oCkBAIC0yODEsNyArMjgxLDYgQEAgcHVibGljOgogICAg
IFdlYkNvcmU6OklEQlNlcnZlcjo6SURCU2VydmVyJiBpZGJTZXJ2ZXIoUEFMOjpTZXNzaW9uSUQp
OwogICAgIC8vIFdlYkNvcmU6OklEQlNlcnZlcjo6SURCQmFja2luZ1N0b3JlRmlsZUhhbmRsZXIu
CiAgICAgdm9pZCBhY2Nlc3NUb1RlbXBvcmFyeUZpbGVDb21wbGV0ZShjb25zdCBTdHJpbmcmIHBh
dGgpIGZpbmFsOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWludDY0X3QpOwogI2Vu
ZGlmCiAKICAgICB2b2lkIHN5bmNMb2NhbFN0b3JhZ2UoQ29tcGxldGlvbkhhbmRsZXI8dm9pZCgp
PiYmKTsKQEAgLTUyOCw3ICs1MjcsNiBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShJTkRFWEVEX0RB
VEFCQVNFKQogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFN0cmluZz4gbV9pZGJEYXRhYmFz
ZVBhdGhzOwogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJDb3JlOjpJREJT
ZXJ2ZXI6OklEQlNlcnZlcj4+IG1faWRiU2VydmVyczsKLSAgICB1aW50NjRfdCBtX2lkYlBlck9y
aWdpblF1b3RhIHsgV2ViQ29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsK
ICNlbmRpZgogCiAgICAgRGVxdWU8Q3Jvc3NUaHJlYWRUYXNrPiBtX3N0b3JhZ2VUYXNrczsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVz
c2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL05ldHdvcmtQcm9jZXNzLm1l
c3NhZ2VzLmluCmluZGV4IGM1NTNhODg5YTZlMjA4YzQ4ZDNkMzZmYzU5N2EyZTkxYjdlNTM0MDMu
LjRmYzE5MjBhZGFiNzVkZGJjYWU1NTUzNTEwYjljMTZmYjQ3YWZkMGIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvTmV0d29ya1Byb2Nlc3MubWVzc2FnZXMuaW4KKysr
IGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9OZXR3b3JrUHJvY2Vzcy5tZXNzYWdlcy5p
bgpAQCAtMTYwLDEwICsxNjAsNiBAQCBtZXNzYWdlcyAtPiBOZXR3b3JrUHJvY2VzcyBMZWdhY3lS
ZWNlaXZlciB7CiAgICAgRGlzYWJsZVNlcnZpY2VXb3JrZXJQcm9jZXNzVGVybWluYXRpb25EZWxh
eSgpCiAjZW5kaWYKIAotI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQotICAgIFNldElEQlBl
ck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQotI2VuZGlmCi0KICAgICBTeW5jTG9jYWxTdG9y
YWdlKCkgLT4gKCkgU3luY2hyb25vdXMKICAgICBDbGVhckxlZ2FjeVByaXZhdGVCcm93c2luZ0xv
Y2FsU3RvcmFnZSgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHQu
Y3BwCmluZGV4IDU0Zjc3ZjAwNGM5NzFmYzFjODZlOGYxY2NkYTBkM2I2ODA3OGRjNjYuLjExNzkw
NWY1ZDkzOWY5ZGZkMzM3MGRiYTA1YjkxMWEzZGM3NGMzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0MvV0tDb250ZXh0LmNwcApAQCAtNjYwLDExICs2NjAsNiBAQCB2b2lkIFdL
Q29udGV4dENsZWFyU3VwcG9ydGVkUGx1Z2lucyhXS0NvbnRleHRSZWYgY29udGV4dFJlZikKICNl
bmRpZgogfQogCi12b2lkIFdLQ29udGV4dFNldElEQlBlck9yaWdpblF1b3RhKFdLQ29udGV4dFJl
ZiBjb250ZXh0UmVmLCB1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXZWJLaXQ6OnRvSW1wbChjb250
ZXh0UmVmKS0+c2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpOwotfQotCiB2b2lkIFdLQ29udGV4
dENsZWFyQ3VycmVudE1vZGlmaWVyU3RhdGVGb3JUZXN0aW5nKFdLQ29udGV4dFJlZiBjb250ZXh0
UmVmKQogewogICAgIFdlYktpdDo6dG9JbXBsKGNvbnRleHRSZWYpLT5jbGVhckN1cnJlbnRNb2Rp
ZmllclN0YXRlRm9yVGVzdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tDb250ZXh0UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tDb250ZXh0UHJpdmF0ZS5oCmluZGV4IDU4ZjFhOTIwOTkxMzU0ZjA3MGY2NWI5ZDNkYTFi
YTA3YmY4MzVjMjMuLmU5NDJiNjI5ZjZiZDRiYmY0YWVlM2MyYWFlZGM4N2I0MWExMWZlZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLQ29udGV4dFByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS0NvbnRleHRQcml2YXRlLmgK
QEAgLTExNiw4ICsxMTYsNiBAQCBXS19FWFBPUlQgV0tQcm9jZXNzSUQgV0tDb250ZXh0R2V0TmV0
d29ya1Byb2Nlc3NJZGVudGlmaWVyKFdLQ29udGV4dFJlZiBjb250ZXh0KQogV0tfRVhQT1JUIHZv
aWQgV0tDb250ZXh0QWRkU3VwcG9ydGVkUGx1Z2luKFdLQ29udGV4dFJlZiBjb250ZXh0LCBXS1N0
cmluZ1JlZiBkb21haW4sIFdLU3RyaW5nUmVmIG5hbWUsIFdLQXJyYXlSZWYgbWltZVR5cGVzLCBX
S0FycmF5UmVmIGV4dGVuc2lvbnMpOwogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJTdXBw
b3J0ZWRQbHVnaW5zKFdLQ29udGV4dFJlZiBjb250ZXh0KTsKIAotV0tfRVhQT1JUIHZvaWQgV0tD
b250ZXh0U2V0SURCUGVyT3JpZ2luUXVvdGEoV0tDb250ZXh0UmVmIGNvbnRleHQsIHVpbnQ2NF90
IHF1b3RhKTsKLQogV0tfRVhQT1JUIHZvaWQgV0tDb250ZXh0Q2xlYXJDdXJyZW50TW9kaWZpZXJT
dGF0ZUZvclRlc3RpbmcoV0tDb250ZXh0UmVmIGNvbnRleHQpOwogCiB0eXBlZGVmIHZvaWQgKCpX
S0NvbnRleHRTeW5jTG9jYWxTdG9yYWdlQ2FsbGJhY2spKHZvaWQqIGZ1bmN0aW9uQ29udGV4dCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5jcHAKaW5kZXggOTJkOTdk
ZTEwYWU4NTViNDIzNDI2NTZhZGRlODAwMGI4NzZmNTAyYy4uNDcyNGFhZWYwZGVhMzllMjA2YWYy
MWRiZDVjNmVjYjA1MDA5ODJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUHJvY2Vzc1Bvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nl
c3NQb29sLmNwcApAQCAtMTgwMiwxMyArMTgwMiw2IEBAIHZvaWQgV2ViUHJvY2Vzc1Bvb2w6OnN5
bmNOZXR3b3JrUHJvY2Vzc0Nvb2tpZXMoKQogICAgIGVuc3VyZU5ldHdvcmtQcm9jZXNzKCkuc3lu
Y0FsbENvb2tpZXMoKTsKIH0KIAotdm9pZCBXZWJQcm9jZXNzUG9vbDo6c2V0SURCUGVyT3JpZ2lu
UXVvdGEodWludDY0X3QgcXVvdGEpCi17Ci0jaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCi0g
ICAgZW5zdXJlTmV0d29ya1Byb2Nlc3MoKS5zZW5kKE1lc3NhZ2VzOjpOZXR3b3JrUHJvY2Vzczo6
U2V0SURCUGVyT3JpZ2luUXVvdGEocXVvdGEpLCAwKTsKLSNlbmRpZgotfQotCiB2b2lkIFdlYlBy
b2Nlc3NQb29sOjpzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBzZW5kU3luY1RvTmV0d29ya2luZ1Byb2Nlc3MoTWVz
c2FnZXM6Ok5ldHdvcmtQcm9jZXNzOjpTeW5jTG9jYWxTdG9yYWdlKCksIE1lc3NhZ2VzOjpOZXR3
b3JrUHJvY2Vzczo6U3luY0xvY2FsU3RvcmFnZTo6UmVwbHkoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvV2ViUHJvY2Vzc1Bvb2wuaAppbmRleCBlZDZjMjlmZjMyODM4OTY3NjkxMGE4ZmZmZmZh
NDJkYWNmNDQxMjhmLi40MGJlYTg2MWEyZTY3MDI4NDYyMjA4N2MwMDNiM2U4OGE2YWNjMDNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQcm9jZXNzUG9vbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlByb2Nlc3NQb29sLmgKQEAgLTMyMCw4ICszMjAs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzeW5jTG9jYWxTdG9yYWdlKENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoKT4mJiBjYWxsYmFjayk7CiAgICAgdm9pZCBjbGVhckxlZ2FjeVByaXZhdGVCcm93c2lu
Z0xvY2FsU3RvcmFnZShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgY2FsbGJhY2spOwogCi0g
ICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7Ci0KICAgICB2b2lkIHNldFNo
b3VsZE1ha2VOZXh0V2ViUHJvY2Vzc0xhdW5jaEZhaWxGb3JUZXN0aW5nKGJvb2wgdmFsdWUpIHsg
bV9zaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZyA9IHZhbHVlOyB9
CiAgICAgYm9vbCBzaG91bGRNYWtlTmV4dFdlYlByb2Nlc3NMYXVuY2hGYWlsRm9yVGVzdGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkTWFrZU5leHRXZWJQcm9jZXNzTGF1bmNoRmFpbEZvclRl
c3Rpbmc7IH0KICAgICB2b2lkIHNldFNob3VsZE1ha2VOZXh0TmV0d29ya1Byb2Nlc3NMYXVuY2hG
YWlsRm9yVGVzdGluZyhib29sIHZhbHVlKSB7IG1fc2hvdWxkTWFrZU5leHROZXR3b3JrUHJvY2Vz
c0xhdW5jaEZhaWxGb3JUZXN0aW5nID0gdmFsdWU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcCBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmNwcAppbmRleCA0ODVjMmNiYzg4MDc3
NGZkOGFkZjY0YzY1MGE4OWU2ZDhhMDY0YjE1Li43ZjAzOGYzYWNjOGU5OWVkOTg1M2MyZjJmZGI0
NzM1NDFiOGQwZTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2Vi
RGF0YWJhc2VQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dl
YkRhdGFiYXNlUHJvdmlkZXIuY3BwCkBAIC01NiwxMiArNTYsNCBAQCB2b2lkIFdlYkRhdGFiYXNl
UHJvdmlkZXI6OmRlbGV0ZUFsbERhdGFiYXNlcygpCiAgICAgICAgIHNlcnZlci0+aWRiU2VydmVy
KCkuY2xvc2VBbmREZWxldGVEYXRhYmFzZXNNb2RpZmllZFNpbmNlKC1XYWxsVGltZTo6aW5maW5p
dHkoKSwgW10geyB9KTsKIH0KIAotdm9pZCBXZWJEYXRhYmFzZVByb3ZpZGVyOjpzZXRJREJQZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBtX2lkYlBlck9yaWdpblF1b3RhID0g
cXVvdGE7Ci0KLSAgICBmb3IgKGF1dG8mIHNlcnZlciA6IG1faWRiU2VydmVyTWFwLnZhbHVlcygp
KQotICAgICAgICBzZXJ2ZXItPmlkYlNlcnZlcigpLnNldFBlck9yaWdpblF1b3RhKHF1b3RhKTsK
LX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2Vi
RGF0YWJhc2VQcm92aWRlci5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9TdG9yYWdlL1dlYkRhdGFi
YXNlUHJvdmlkZXIuaAppbmRleCA5NmE3M2RjZTQzNTVjNjEzOWJjNzEyMDQ5YWFkOTdjNmYyODc3
ZWU2Li5kNjY3Yjg2MzEyMjkzOWQ5NGM4Yjk0YzNiY2ZhMTU2OTgyOTRlODZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L1N0b3JhZ2UvV2ViRGF0YWJhc2VQcm92aWRlci5oCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvU3RvcmFnZS9XZWJEYXRhYmFzZVByb3ZpZGVyLmgKQEAgLTQ0
LDggKzQ0LDYgQEAgcHVibGljOgogICAgIFdlYkNvcmU6OklEQkNsaWVudDo6SURCQ29ubmVjdGlv
blRvU2VydmVyJiBpZGJDb25uZWN0aW9uVG9TZXJ2ZXJGb3JTZXNzaW9uKGNvbnN0IFBBTDo6U2Vz
c2lvbklEJikgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRlbGV0ZUFsbERhdGFiYXNlcygpOwotCi0g
ICAgdm9pZCBzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCk7CiAjZW5kaWYKIAogcHJpdmF0
ZToKQEAgLTU1LDYgKzUzLDUgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFC
QVNFKQogICAgIEhhc2hNYXA8UEFMOjpTZXNzaW9uSUQsIFJlZlB0cjxXZWJDb3JlOjpJblByb2Nl
c3NJREJTZXJ2ZXI+PiBtX2lkYlNlcnZlck1hcDsKLSAgICB1aW50NjRfdCBtX2lkYlBlck9yaWdp
blF1b3RhIHsgV2ViQ29yZTo6SURCU2VydmVyOjpkZWZhdWx0UGVyT3JpZ2luUXVvdGEgfTsKICNl
bmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0b3JhZ2UvV2Vi
RGF0YWJhc2VNYW5hZ2VyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJE
YXRhYmFzZU1hbmFnZXIubW0KaW5kZXggNmQ2MmE5OGI5N2YyZWMyNDE0YzdkYjFhZDNlNzBmMmQw
ZGYxM2VlNC4uNzNlMjMzMWViYjZjZmFlZGVlYTRjMWQyZjEyYWQwYmFkNTIyNjUzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXIu
bW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFn
ZXIubW0KQEAgLTE1NywxMyArMTU3LDYgQEAgLSAodm9pZClkZWxldGVBbGxJbmRleGVkRGF0YWJh
c2VzCiAjZW5kaWYKIH0KIAotLSAodm9pZClzZXRJREJQZXJPcmlnaW5RdW90YToodWludDY0X3Qp
cXVvdGEKLXsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBXZWJEYXRhYmFzZVBy
b3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0jZW5kaWYK
LX0KLQogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKIHN0YXRpYyBib29sIGlzRmlsZUhpZGRl
bihOU1N0cmluZyAqZmlsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1N0
b3JhZ2UvV2ViRGF0YWJhc2VNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKaW5kZXggMjE3MjQxNjJiOTUz
ODhhNGEyNmJhOWVjNGQ2YzUwNGY0NWY2NDA0YS4uOTM5YjRjZjdlMDU3NDJkMzZlMTMwNzdjMGNh
NjYzMmZmM2U1ZGNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvU3RvcmFn
ZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvU3RvcmFnZS9XZWJEYXRhYmFzZU1hbmFnZXJQcml2YXRlLmgKQEAgLTcwLDcgKzcwLDYgQEAg
ZXh0ZXJuIENGU3RyaW5nUmVmIFdlYkRhdGFiYXNlT3JpZ2luc0RpZENoYW5nZU5vdGlmaWNhdGlv
bjsKIAogLy8gRm9yIER1bXBSZW5kZXJUcmVlIHN1cHBvcnQgb25seQogLSAodm9pZClkZWxldGVB
bGxJbmRleGVkRGF0YWJhc2VzOwotLSAodm9pZClzZXRJREJQZXJPcmlnaW5RdW90YToodWludDY0
X3QpcXVvdGE7CiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCiArICh2b2lkKXNjaGVkdWxlRW1wdHlE
YXRhYmFzZVJlbW92YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRl
cmZhY2VzL0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
SW50ZXJmYWNlcy9JV2ViRGF0YWJhc2VNYW5hZ2VyLmlkbAppbmRleCBlODFkNDkzODU5MmQ2ODIw
YjIxMWEyZWZiNTM5YjY2Y2U2ZDE1MmM0Li43YWViY2FlZjcyMGFhYTIyNmMzODQ1MGE2NDlkNzA3
N2Q2YmNiZWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2Vz
L0lXZWJEYXRhYmFzZU1hbmFnZXIuaWRsCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0lu
dGVyZmFjZXMvSVdlYkRhdGFiYXNlTWFuYWdlci5pZGwKQEAgLTY5LDUgKzY5LDQgQEAgaW50ZXJm
YWNlIElXZWJEYXRhYmFzZU1hbmFnZXIgOiBJVW5rbm93bgogaW50ZXJmYWNlIElXZWJEYXRhYmFz
ZU1hbmFnZXIyIDogSVdlYkRhdGFiYXNlTWFuYWdlcgogewogICAgIEhSRVNVTFQgZGVsZXRlQWxs
SW5kZXhlZERhdGFiYXNlcygpOwotICAgIEhSRVNVTFQgc2V0SURCUGVyT3JpZ2luUXVvdGEoW2lu
XSB1bnNpZ25lZCBsb25nIGxvbmcgcXVvdGEpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL1dlYkRhdGFiYXNlTWFuYWdlci5jcHAKaW5kZXggNDQ1NDJhMWRhMTAzYWE0NDc2M2U5NGQ0
ZmFiYTg2NGVkMDJmYzdmNS4uMTYyN2VjNWZhMjZiZjU5MDFkMDU5M2I1YTE4Mzk2OTQ3OTIxOTBi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRGF0YWJhc2VNYW5hZ2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJEYXRhYmFzZU1hbmFnZXIuY3Bw
CkBAIC0zNDYsMTQgKzM0Niw2IEBAIEhSRVNVTFQgV2ViRGF0YWJhc2VNYW5hZ2VyOjpkZWxldGVB
bGxJbmRleGVkRGF0YWJhc2VzKCkKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBXZWJE
YXRhYmFzZU1hbmFnZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBx
dW90YSkKLXsKLSNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKLSAgICBXZWJEYXRhYmFzZVBy
b3ZpZGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gU19PSzsKLX0KLQogY2xhc3MgRGlkTW9kaWZ5T3JpZ2luRGF0YSB7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRGlkTW9k
aWZ5T3JpZ2luRGF0YSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJE
YXRhYmFzZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFu
YWdlci5oCmluZGV4IGUwZmUzZTNiODgxYjYxM2U4YjBmOTc2YTg1Y2FkODQ5YmI3Mjc0NzcuLjUx
YjY0NWY3Mjg0NzVkMTY2NGE5YWZhZGRkYmI5MTBkNThiZTliNWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYkRhdGFiYXNlTWFuYWdlci5oCkBAIC01Niw3ICs1Niw2IEBAIHB1Ymxp
YzoKIAogICAgIC8vIElXZWJEYXRhYmFzZU1hbmFnZXIyCiAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIGRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKTsKLSAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0SURCUGVyT3JpZ2luUXVvdGEodW5zaWduZWQg
bG9uZyBsb25nKTsKIAogICAgIC8vIERhdGFiYXNlTWFuYWdlckNsaWVudAogICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERpZE1vZGlmeU9yaWdpbihjb25zdCBXZWJDb3JlOjpTZWN1cml0eU9yaWdp
bkRhdGEmKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwpp
bmRleCBhODQ5YzA2YmEzNzhlNTgwZjJjOTdmYzNkNzA3YTkzNjJlY2UyNjBlLi43NmMyNjNjMDk0
YmIzMTkxNTJiZTA4Mzc2Y2ZjN2M0Y2FkOWMzZmVjIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VM
b2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTktMDgtMTkgIFNp
aHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVj
aWZpYyBxdW90YQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTk2NTQ1CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS81NDIwMTc4Mz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVz
dFJ1bm5lci5jcHA6CisgICAgICAgIChUZXN0UnVubmVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAg
ICAgICAoc2V0SURCUGVyT3JpZ2luUXVvdGFDYWxsYmFjayk6IERlbGV0ZWQuCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5lci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tOgorICAgICAgICAoVGVzdFJ1bm5lcjo6c2V0
SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dp
bi9UZXN0UnVubmVyV2luLmNwcDoKKyAgICAgICAgKFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdp
blF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0JpbmRpbmdzL1Rlc3RSdW5uZXIuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvVGVzdFJ1bm5lci5jcHA6CisgICAgICAgIChXVFI6OlRlc3RSdW5uZXI6
OnNldElEQlBlck9yaWdpblF1b3RhKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJl
c2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxl
cjo6c2V0SURCUGVyT3JpZ2luUXVvdGEpOiBEZWxldGVkLgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvVGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJ
bnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVT
eW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorCiAyMDE5LTA4LTE5ICBZdXN1
a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW1dURl0gU3R5bGUgY2hl
Y2tlciBzaG91bGQgdGVsbCBlcnJvcnMgd2hlbiBpdCBmaW5kcyBzdGQ6Om1ha2VfdW5pcXVlCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCmluZGV4IGQ3Y2MyOGNiMGIyNjJhOWY4OWNjNGM5
NzlhZGU0YjkyNWNkZWQwODUuLjdjMWM1ODEzYjQwN2QxNGQwNmM4NjkxYmE5MDRkMTMxYjFlMzFl
NjUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCisrKyBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuY3BwCkBAIC04OTQsMjAgKzg5NCw2IEBA
IHN0YXRpYyBKU1ZhbHVlUmVmIHNldERhdGFiYXNlUXVvdGFDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCi1zdGF0aWMgSlNWYWx1ZVJlZiBzZXRJREJQZXJPcmlnaW5RdW90YUNh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYg
YXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKLXsKLSAgICBpZiAoYXJndW1lbnRD
b3VudCA8IDEpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
LSAgICAKLSAgICBhdXRvKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8VGVzdFJ1bm5lcio+KEpT
T2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Ci0gICAgCi0gICAgZG91YmxlIHF1b3RhID0g
SlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgbnVsbHB0cik7Ci0gICAgaWYg
KCFzdGQ6OmlzbmFuKHF1b3RhKSkKLSAgICAgICAgY29udHJvbGxlci0+c2V0SURCUGVyT3JpZ2lu
UXVvdGEoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHF1b3RhKSk7Ci0gICAgCi0gICAgcmV0dXJuIEpT
VmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwotfQotCiBzdGF0aWMgSlNWYWx1ZVJlZiBzZXRE
ZWZlcnNMb2FkaW5nQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IGlmIChhcmd1bWVudENvdW50IDwgMSkKQEAgLTIyMjEsNyArMjIwNyw2IEBAIEpTU3RhdGljRnVu
Y3Rpb24qIFRlc3RSdW5uZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgInNldFJlamVj
dHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlcyIs
IHNldFJlamVjdHNQcm90ZWN0aW9uU3BhY2VBbmRDb250aW51ZUZvckF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldEhhbmRsZXNBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZXMiLCBzZXRIYW5kbGVzQXV0aGVudGljYXRpb25DaGFsbGVuZ2VzQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKICAgICAgICAgeyAic2V0SWNvbkRhdGFiYXNlRW5hYmxlZCIsIHNldEljb25E
YXRhYmFzZUVuYWJsZWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAotICAgICAgICB7ICJzZXRJREJQZXJPcmln
aW5RdW90YSIsIHNldElEQlBlck9yaWdpblF1b3RhQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAic2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQiLCBzZXRBdXRvbWF0aWNMaW5rRGV0
ZWN0aW9uRW5hYmxlZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldE1haW5GcmFtZUlz
Rmlyc3RSZXNwb25kZXIiLCBzZXRNYWluRnJhbWVJc0ZpcnN0UmVzcG9uZGVyQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAic2V0TW9ja0RldmljZU9yaWVudGF0aW9uIiwgc2V0TW9ja0Rldmlj
ZU9yaWVudGF0aW9uQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL1Rlc3RSdW5uZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RSdW5uZXIuaApp
bmRleCA4MTQ1MjQ3ZjVlMTdjZTgxNjEzMmNkZTE2MmZkNTlmOTIzZWZiNTBjLi4yOWE0ZWYyZTc4
Yjc2MTFiZTFiYmI2MWNkYTExZGUzNTBhYzkyNzQyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9UZXN0UnVubmVyLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdFJ1bm5l
ci5oCkBAIC0xMDYsNyArMTA2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RG9tYWluUmVsYXhh
dGlvbkZvcmJpZGRlbkZvclVSTFNjaGVtZShib29sIGZvcmJpZGRlbiwgSlNTdHJpbmdSZWYgc2No
ZW1lKTsKICAgICB2b2lkIHNldERlZmVyc0xvYWRpbmcoYm9vbCk7CiAgICAgdm9pZCBzZXRJY29u
RGF0YWJhc2VFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2luUXVvdGEodWlu
dDY0X3QpOwogICAgIHZvaWQgc2V0SmF2YVNjcmlwdENhbkFjY2Vzc0NsaXBib2FyZChib29sIGZs
YWcpOwogICAgIHZvaWQgc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoYm9vbCBmbGFn
KTsKICAgICB2b2lkIHNldE1haW5GcmFtZUlzRmlyc3RSZXNwb25kZXIoYm9vbCBmbGFnKTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCAwOGRlOWJkOTJl
ZDJmYjFhYjA3ZGFmYTc5ZWNjOWY4MDk0NTk4NmIzLi5jN2E1NGNkODJjMDNiNTFlMmRmMDZlYmEy
ZjU5YzY1MGUyODE1MzJkIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlLm1tCkBAIC0yMDM2LDcgKzIwMzYsNiBAQCBzdGF0aWMgdm9pZCBydW5UZXN0KGNvbnN0IHN0
cmluZyYgaW5wdXRMaW5lKQogICAgIGdUZXN0UnVubmVyLT5jbGVhckFsbEFwcGxpY2F0aW9uQ2Fj
aGVzKCk7CiAKICAgICBnVGVzdFJ1bm5lci0+Y2xlYXJBbGxEYXRhYmFzZXMoKTsKLSAgICBnVGVz
dFJ1bm5lci0+c2V0SURCUGVyT3JpZ2luUXVvdGEoNTAgKiBNQik7CiAKICAgICBpZiAoZGlzYWxs
b3dlZFVSTHMpCiAgICAgICAgIENGU2V0UmVtb3ZlQWxsVmFsdWVzKGRpc2FsbG93ZWRVUkxzKTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9UZXN0UnVubmVyTWFjLm1tIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJNYWMubW0KaW5kZXggYzAxYmRhNTY2
ZTUxYmZhYTZmMDc5YjExMjk0NWY5NTYyZWZjMTYxNS4uMWY5NjBhYWUyZGQwM2UxNjBiMTI0Yzc5
MjIzZTk1NmFhZGNlYTc4ZSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rl
c3RSdW5uZXJNYWMubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL1Rlc3RSdW5uZXJN
YWMubW0KQEAgLTQzOSwxMSArNDM5LDYgQEAgdm9pZCBUZXN0UnVubmVyOjpzZXREYXRhYmFzZVF1
b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSkKICAgICBbb3JpZ2luIHJlbGVhc2VdOwogfQog
Ci12b2lkIFRlc3RSdW5uZXI6OnNldElEQlBlck9yaWdpblF1b3RhKHVpbnQ2NF90IHF1b3RhKQot
ewotICAgIFtbV2ViRGF0YWJhc2VNYW5hZ2VyIHNoYXJlZFdlYkRhdGFiYXNlTWFuYWdlcl0gc2V0
SURCUGVyT3JpZ2luUXVvdGE6cXVvdGFdOwotfQotCiB2b2lkIFRlc3RSdW5uZXI6OmdvQmFjaygp
CiB7CiAgICAgW1ttYWluRnJhbWUgd2ViVmlld10gZ29CYWNrXTsKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9UZXN0UnVubmVyV2luLmNwcAppbmRleCBhMjg2ZjIzZjdlZDc2OWJlY2VhZmUyMDI2
ZTI5MzkyZjdlNDA5YjY4Li45NWFkMDIyZmNiNDI2Zjg2ODQ3OWJlZjI4MWNiZjM0YTk4MTdmZDZk
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vVGVzdFJ1bm5lcldpbi5jcHAK
KysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL1Rlc3RSdW5uZXJXaW4uY3BwCkBAIC0xNzIs
MjIgKzE3Miw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6Y2xlYXJBbGxEYXRhYmFzZXMoKQogICAgIGRh
dGFiYXNlTWFuYWdlcjItPmRlbGV0ZUFsbEluZGV4ZWREYXRhYmFzZXMoKTsKIH0KIAotdm9pZCBU
ZXN0UnVubmVyOjpzZXRJREJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBD
T01QdHI8SVdlYkRhdGFiYXNlTWFuYWdlcj4gZGF0YWJhc2VNYW5hZ2VyOwotICAgIENPTVB0cjxJ
V2ViRGF0YWJhc2VNYW5hZ2VyPiB0bXBEYXRhYmFzZU1hbmFnZXI7Ci0gICAgaWYgKEZBSUxFRChX
ZWJLaXRDcmVhdGVJbnN0YW5jZShDTFNJRF9XZWJEYXRhYmFzZU1hbmFnZXIsIDAsIElJRF9JV2Vi
RGF0YWJhc2VNYW5hZ2VyLCAodm9pZCoqKSZ0bXBEYXRhYmFzZU1hbmFnZXIpKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChGQUlMRUQodG1wRGF0YWJhc2VNYW5hZ2VyLT5zaGFyZWRXZWJEYXRh
YmFzZU1hbmFnZXIoJmRhdGFiYXNlTWFuYWdlcikpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBD
T01QdHI8SVdlYkRhdGFiYXNlTWFuYWdlcjI+IGRhdGFiYXNlTWFuYWdlcjI7Ci0gICAgaWYgKEZB
SUxFRChkYXRhYmFzZU1hbmFnZXItPlF1ZXJ5SW50ZXJmYWNlKCZkYXRhYmFzZU1hbmFnZXIyKSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGRhdGFiYXNlTWFuYWdlcjItPnNldElEQlBlck9yaWdp
blF1b3RhKHF1b3RhKTsKLX0KLQogdm9pZCBUZXN0UnVubmVyOjpzZXRTdG9yYWdlRGF0YWJhc2VJ
ZGxlSW50ZXJ2YWwoZG91YmxlKQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuIFJlcXVpcmVz
IG5vbi1leGlzdGFudCAob24gV2luZG93cykgV2ViU3RvcmFnZU1hbmFnZXIKZGlmZiAtLWdpdCBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL1Rl
c3RSdW5uZXIuaWRsCmluZGV4IDQzMjllYzE0NDMwZjkxMzBhYWQ5YjVlZGI1ZjZjZDZiMzZlODE2
NzMuLjA3NTA5NjI4OTY3ZmZmY2YyMzMyYmRlZWMzMzRmMmRmNTkxZDQ3YTIgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvVGVzdFJ1bm5l
ci5pZGwKKysrIGIvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5n
cy9UZXN0UnVubmVyLmlkbApAQCAtMTQ3LDkgKzE0Nyw2IEBAIGludGVyZmFjZSBUZXN0UnVubmVy
IHsKICAgICBhdHRyaWJ1dGUgZG91YmxlIGRhdGFiYXNlRGVmYXVsdFF1b3RhOwogICAgIGF0dHJp
YnV0ZSBkb3VibGUgZGF0YWJhc2VNYXhRdW90YTsKIAotICAgIC8vIEluZGV4ZWREQiBBUEkKLSAg
ICB2b2lkIHNldElEQlBlck9yaWdpblF1b3RhKHVuc2lnbmVkIGxvbmcgbG9uZyBxdW90YSk7Ci0K
ICAgICAvLyBBcHBsaWNhdGlvbiBDYWNoZSBBUEkKICAgICB2b2lkIGNsZWFyQWxsQXBwbGljYXRp
b25DYWNoZXMoKTsKICAgICB2b2lkIHNldEFwcENhY2hlTWF4aW11bVNpemUodW5zaWduZWQgbG9u
ZyBsb25nIHNpemUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9UZXN0UnVubmVyLmNwcCBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvVGVzdFJ1bm5lci5jcHAKaW5kZXggMTNlNjUzMTA2YjQxMGI4OTY1NzFjZDEwMDBlYmU2
MjM5MWNhNDI1YS4uZmExYmMxZGRiYjcxNmY3YjM3YmQwNzc3ZGEwMDE2ZGJlMmViYjA0YyAxMDA2
NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVy
LmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5u
ZXIuY3BwCkBAIC0zNzUsMTMgKzM3NSw2IEBAIHZvaWQgVGVzdFJ1bm5lcjo6ZGlzYWxsb3dJbmNy
ZWFzZUZvckFwcGxpY2F0aW9uQ2FjaGVRdW90YSgpCiAgICAgbV9kaXNhbGxvd0luY3JlYXNlRm9y
QXBwbGljYXRpb25DYWNoZVF1b3RhID0gdHJ1ZTsKIH0KIAotdm9pZCBUZXN0UnVubmVyOjpzZXRJ
REJQZXJPcmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4gbWVzc2FnZU5hbWUgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKCJTZXRJREJQZXJPcmlnaW5RdW90YSIpKTsKLSAgICBXS1JldGFpblB0cjxXS1VJbnQ2NFJl
Zj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLVUludDY0Q3JlYXRlKHF1b3RhKSk7Ci0gICAgV0tC
dW5kbGVQb3N0U3luY2hyb25vdXNNZXNzYWdlKEluamVjdGVkQnVuZGxlOjpzaW5nbGV0b24oKS5i
dW5kbGUoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpLCBudWxscHRyKTsK
LX0KLQogc3RhdGljIGlubGluZSBKU1ZhbHVlUmVmIHN0cmluZ0FycmF5VG9KUyhKU0NvbnRleHRS
ZWYgY29udGV4dCwgV0tBcnJheVJlZiBzdHJpbmdzKQogewogICAgIGNvbnN0IHNpemVfdCBjb3Vu
dCA9IFdLQXJyYXlHZXRTaXplKHN0cmluZ3MpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9UZXN0UnVubmVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL1Rlc3RSdW5uZXIuaAppbmRleCBmNTczNmVhYWE4YTMzYmU3MTc4
ZDg3M2I5YzdiMWUyNTFhMzkxMWRjLi4xNDZlOTFmNDc4NWJmZDA3YjY2MTAzNzNiYTA3Yjc4OTJk
N2RhZjZiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L1Rlc3RSdW5uZXIuaApAQCAtMTc2LDkgKzE3Niw2IEBAIHB1YmxpYzoKICAgICB1aW50NjRfdCBk
b21DYWNoZVNpemUoSlNTdHJpbmdSZWYgb3JpZ2luKTsKICAgICB2b2lkIHNldEFsbG93U3RvcmFn
ZVF1b3RhSW5jcmVhc2UoYm9vbCk7CiAKLSAgICAvLyBJbmRleGVkREIKLSAgICB2b2lkIHNldElE
QlBlck9yaWdpblF1b3RhKHVpbnQ2NF90KTsKLQogICAgIC8vIEZhaWxlZCBsb2FkIGNvbmRpdGlv
biB0ZXN0aW5nCiAgICAgdm9pZCBmb3JjZUltbWVkaWF0ZUNvbXBsZXRpb24oKTsKIApkaWZmIC0t
Z2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAppbmRleCBkNjk0ZTE2ZDcyZjE1YzMw
ZTdhM2NiZjg1NWNlNTk5M2M3ODA4YzAzLi4zNjFkZjZjZjIwZTcxZmNjNWNiNDA2ZGExZjhjYTk4
ZDIxNWVjZjU5IDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9s
bGVyLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApA
QCAtOTQwLDggKzk0MCw2IEBAIGJvb2wgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNp
c3RlbnRWYWx1ZXMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMsIFJlCiAgICAgYXV0byB3ZWJz
aXRlRGF0YVN0b3JlID0gV0tDb250ZXh0R2V0V2Vic2l0ZURhdGFTdG9yZShUZXN0Q29udHJvbGxl
cjo6c2luZ2xldG9uKCkuY29udGV4dCgpKTsKICAgICBXS1dlYnNpdGVEYXRhU3RvcmVDbGVhckFs
bERldmljZU9yaWVudGF0aW9uUGVybWlzc2lvbnMod2Vic2l0ZURhdGFTdG9yZSk7CiAKLSAgICBz
ZXRJREJQZXJPcmlnaW5RdW90YSg1MCAqIE1CKTsKLQogICAgIGNsZWFySW5kZXhlZERhdGFiYXNl
cygpOwogICAgIGNsZWFyTG9jYWxTdG9yYWdlKCk7CiAKQEAgLTMwNjcsMTEgKzMwNjUsNiBAQCB2
b2lkIFRlc3RDb250cm9sbGVyOjpjbGVhckRPTUNhY2hlcygpCiAgICAgcnVuVW50aWwoY29udGV4
dC5kb25lLCBub1RpbWVvdXQpOwogfQogCi12b2lkIFRlc3RDb250cm9sbGVyOjpzZXRJREJQZXJP
cmlnaW5RdW90YSh1aW50NjRfdCBxdW90YSkKLXsKLSAgICBXS0NvbnRleHRTZXRJREJQZXJPcmln
aW5RdW90YShwbGF0Zm9ybUNvbnRleHQoKSwgcXVvdGEpOwotfQotCiBzdHJ1Y3QgU3RvcmFnZVZv
aWRDYWxsYmFja0NvbnRleHQgewogICAgIGV4cGxpY2l0IFN0b3JhZ2VWb2lkQ2FsbGJhY2tDb250
ZXh0KFRlc3RDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgICAgICA6IHRlc3RDb250cm9sbGVy
KGNvbnRyb2xsZXIpCmRpZmYgLS1naXQgYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250
cm9sbGVyLmggYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmgKaW5kZXgg
YTVhZTU2ZWQ2ODk3NTc4OGRiMWQwM2Y5NWRhMDY2OTFlNDk5MTUzNi4uMzQwMGY0Y2I1MWI4ODk1
MjFkNDA5NjI5YmExMWJjMjQ2MzAxZjViNyAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9UZXN0Q29udHJvbGxlci5oCisrKyBiL1Rvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuaApAQCAtMjc1LDggKzI3NSw2IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0QWxs
b3dTdG9yYWdlUXVvdGFJbmNyZWFzZShib29sKTsKIAotICAgIHZvaWQgc2V0SURCUGVyT3JpZ2lu
UXVvdGEodWludDY0X3QpOwotCiAgICAgYm9vbCBkaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQ
cm92aXNpb25hbE5hdmlnYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2RpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTmF2aWdhdGlvbjsgfQogICAgIHZvaWQgY2xlYXJEaWRSZWNl
aXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbE5hdmlnYXRpb24oKSB7IG1fZGlkUmVjZWl2
ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxOYXZpZ2F0aW9uID0gZmFsc2U7IH0KIApkaWZm
IC0tZ2l0IGEvVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9Ub29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCBmODFmMGI5NDY5NTc2
ZDM2MTAyNmQzNTZlZmM0ODFiYTlmNzk5ZjBkLi45Zjg3ZGIyZjIxYzBhYzExYTdlOTFhZDFjYzMy
MWY2YmQ4YzBkZDdiIDEwMDY0NAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAorKysgYi9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNw
cApAQCAtMTUxNCwxMyArMTUxNCw2IEBAIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gVGVzdEludm9j
YXRpb246OmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhD
U3RyaW5nKG1lc3NhZ2VOYW1lLCAiU2V0SURCUGVyT3JpZ2luUXVvdGEiKSkgewotICAgICAgICBB
U1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpID09IFdLVUludDY0R2V0VHlwZUlEKCkpOwot
ICAgICAgICBXS1VJbnQ2NFJlZiBxdW90YSA9IHN0YXRpY19jYXN0PFdLVUludDY0UmVmPihtZXNz
YWdlQm9keSk7Ci0gICAgICAgIFRlc3RDb250cm9sbGVyOjpzaW5nbGV0b24oKS5zZXRJREJQZXJP
cmlnaW5RdW90YShXS1VJbnQ2NEdldFZhbHVlKHF1b3RhKSk7Ci0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIH0KLQogICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiSW5qZWN0VXNlclNjcmlwdCIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIFdLU3RyaW5n
UmVmIHNjcmlwdCA9IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDAxZDkzNTExN2FmNzdkMTFiMmRiYjk5ODViN2JlMmRkODYwM2NmMmIuLjRh
MjVjZmU0ZDMzMzhiMjQzNWRiZmRkMGY0NTFkYjY3YzFkNGM0NGUgMTAwNjQ0Ci0tLSBhL1BlcmZv
cm1hbmNlVGVzdHMvQ2hhbmdlTG9nCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTktMDgtMTkgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBsZS5j
b20+CisKKyAgICAgICAgUmVtb3ZlIElEQi1zcGVjaWZpYyBxdW90YQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk2NTQ1CisgICAgICAgIDxyZGFyOi8v
cHJvYmxlbS81NDIwMTc4Mz4KKworICAgICAgICBSZXZpZXdlZCBieSBZb3Vlbm4gRmFibGV0Lgor
CisgICAgICAgICogSW5kZXhlZERCL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWw6CisgICAgICAgICog
SW5kZXhlZERCL2xhcmdlLXN0cmluZy1rZXlzLmh0bWw6CisKIDIwMTktMDgtMTQgIEtlaXRoIFJv
bGxpbiAgPGtyb2xsaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBzdXBwb3J0IGZvciBt
YWNPUyA8IDEwLjEzCmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJn
ZS1iaW5hcnkta2V5cy5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9JbmRleGVkREIvbGFyZ2UtYmlu
YXJ5LWtleXMuaHRtbAppbmRleCBlNGZmNGJmNWZmZjBlYzllOGM1MmNiMTIyZGNhOWE2Mzk4ZDM5
MmY1Li43MmE3MWNmYWIzYjJkNDA1YTM2ZmFlMmE5ZTExMmNiNWEwMzA2ODI0IDEwMDY0NAotLS0g
YS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1iaW5hcnkta2V5cy5odG1sCisrKyBi
L1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdlLWJpbmFyeS1rZXlzLmh0bWwKQEAgLTcs
MTAgKzcsNiBAQAogdmFyIGl0ZXJhdGlvbkNvdW50ID0gMjA7CiB2YXIgbnVtYmVyRGVsZXRlZCA9
IDA7CiAKLXZhciBxdW90YSA9IDUwMCAqIDEwMjQgKiAxMDI0OyAvLzUwME1CCi1pZiAod2luZG93
LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci5zZXRJREJQZXJPcmlnaW5RdW90YShxdW90YSk7
Ci0KIC8vIERlbGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgog
dmFyIGRhdGFiYXNlUHJlZml4ID0gImxhcmdlLXN0cmluZy1rZXlzLURCLSI7CiBmb3IgKHZhciBp
ID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50ICsgMTsgKytpKSB7CmRpZmYgLS1naXQgYS9QZXJmb3Jt
YW5jZVRlc3RzL0luZGV4ZWREQi9sYXJnZS1zdHJpbmcta2V5cy5odG1sIGIvUGVyZm9ybWFuY2VU
ZXN0cy9JbmRleGVkREIvbGFyZ2Utc3RyaW5nLWtleXMuaHRtbAppbmRleCAxZTQwNmNiMjRjY2M1
MDI5YjAyNjE5ZGU0YTJjNzU5ZGQ4MDNmZDhjLi45MTZkOTBhZWVkN2ZiMWY0NjU1NmI1NGJhYzE0
ODllMDcwOGNjNDFmIDEwMDY0NAotLS0gYS9QZXJmb3JtYW5jZVRlc3RzL0luZGV4ZWREQi9sYXJn
ZS1zdHJpbmcta2V5cy5odG1sCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvSW5kZXhlZERCL2xhcmdl
LXN0cmluZy1rZXlzLmh0bWwKQEAgLTcsMTAgKzcsNiBAQAogdmFyIGl0ZXJhdGlvbkNvdW50ID0g
MjA7CiB2YXIgbnVtYmVyRGVsZXRlZCA9IDA7CiAKLXZhciBxdW90YSA9IDUwMCAqIDEwMjQgKiAx
MDI0OyAvLzUwME1CCi1pZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAgdGVzdFJ1bm5lci5zZXRJ
REJQZXJPcmlnaW5RdW90YShxdW90YSk7Ci0KIC8vIERlbGV0ZSBhbGwgZGF0YWJhc2VzIGZvciB0
aGUgdGVzdCBhaGVhZCBvZiB0aW1lLgogdmFyIGRhdGFiYXNlUHJlZml4ID0gImxhcmdlLXN0cmlu
Zy1rZXlzLURCLSI7CiBmb3IgKHZhciBpID0gMDsgaSA8IGl0ZXJhdGlvbkNvdW50ICsgMTsgKytp
KSB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>